Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 3 additions & 8 deletions md-ts-mode.el
Original file line number Diff line number Diff line change
Expand Up @@ -1242,20 +1242,15 @@ VALUE non-nil hides markup, nil shows it."

;;;###autoload
(defun md-ts-mode-maybe ()
"Enable `md-ts-mode' when its grammar is available."
"Enable `md-ts-mode' when its grammar is available.
This helper is for explicit user configuration; loading the bundled
mode does not register global Markdown file associations or remaps."
(declare-function treesit-language-available-p "treesit.c")
(if (or (treesit-language-available-p 'markdown)
(eq treesit-enabled-modes t)
(memq 'md-ts-mode treesit-enabled-modes))
(md-ts-mode)
(fundamental-mode)))

;;;###autoload
(add-to-list 'auto-mode-alist '("\\.md\\'" . md-ts-mode-maybe))
;;;###autoload
(when (boundp 'treesit-major-mode-remap-alist)
(add-to-list 'treesit-major-mode-remap-alist
'(markdown-mode . md-ts-mode)))

(provide 'md-ts-mode)
;;; md-ts-mode.el ends here
27 changes: 27 additions & 0 deletions test/pi-coding-agent-test-common.el
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,33 @@ previous 90s timeout gave only 38%% margin; 180s gives ~177%%.")
"Format SECONDS as a human-readable duration with millisecond precision."
(format "%.3fs" (float seconds)))

;;;; Batch Emacs Helpers

(defun pi-coding-agent-test--read-batch-emacs-result (expression)
"Evaluate EXPRESSION in a fresh batch Emacs and read its printed result.
Initializes packages, then re-prepends the current project root to
`load-path' so the checkout under test wins over any installed copy."
(let* ((emacs (expand-file-name invocation-name invocation-directory))
(repo-root (file-name-directory (locate-library "pi-coding-agent")))
(output-buffer (generate-new-buffer " *pi-coding-agent-batch-emacs*"))
(exit-code (call-process emacs nil output-buffer nil
"--batch" "-Q" "-L" repo-root
"--eval" "(require 'package)"
"--eval" "(package-initialize)"
"--eval" "(setq load-prefer-newer t)"
"--eval"
(format "(setq load-path (cons %S load-path))"
repo-root)
"--eval" expression)))
(unwind-protect
(progn
(unless (eq 0 exit-code)
(error "Batch Emacs exited with %s" exit-code))
(with-current-buffer output-buffer
(goto-char (point-min))
(read (current-buffer))))
(kill-buffer output-buffer))))

;;;; Waiting Helpers

(defun pi-coding-agent-test-wait-until (predicate &optional timeout poll-interval process)
Expand Down
56 changes: 56 additions & 0 deletions test/pi-coding-agent-test.el
Original file line number Diff line number Diff line change
Expand Up @@ -523,5 +523,61 @@ must decide whether this is a no-op."
(ignore-errors (kill-buffer "*pi-coding-agent-test-non-pi*"))
(delete-other-windows)))))

(ert-deftest pi-coding-agent-test-vendored-md-ts-mode-leaves-global-markdown-settings-alone ()
"Loading vendored `md-ts-mode' keeps Markdown associations opt-in."
(let* ((expression
(mapconcat
#'identity
'("(progn"
" (defvar treesit-major-mode-remap-alist nil)"
" (let ((before-auto (copy-tree auto-mode-alist))"
" (before-remap (copy-tree treesit-major-mode-remap-alist)))"
" (require 'md-ts-mode)"
" (prin1 (list"
" :auto-unchanged (equal before-auto auto-mode-alist)"
" :remap-unchanged (equal before-remap treesit-major-mode-remap-alist)"
" :md-mode-defined (fboundp 'md-ts-mode)"
" :md-mode-maybe-defined (fboundp 'md-ts-mode-maybe)"
" :before-md-association (assoc \"\\.md\\'\" before-auto)"
" :after-md-association (assoc \"\\.md\\'\" auto-mode-alist)"
" :before-markdown-remap (alist-get 'markdown-mode before-remap)"
" :after-markdown-remap (alist-get 'markdown-mode treesit-major-mode-remap-alist)))))")
" "))
(result (pi-coding-agent-test--read-batch-emacs-result expression)))
(should (eq t (plist-get result :auto-unchanged)))
(should (eq t (plist-get result :remap-unchanged)))
(should (eq t (plist-get result :md-mode-defined)))
(should (eq t (plist-get result :md-mode-maybe-defined)))
(should (equal (plist-get result :before-md-association)
(plist-get result :after-md-association)))
(should (equal (plist-get result :before-markdown-remap)
(plist-get result :after-markdown-remap)))))

(ert-deftest pi-coding-agent-test-package-load-leaves-global-markdown-settings-alone ()
"Loading `pi-coding-agent' does not change global Markdown mode settings."
(let* ((expression
(mapconcat
#'identity
'("(progn"
" (defvar treesit-major-mode-remap-alist nil)"
" (let ((before-auto (copy-tree auto-mode-alist))"
" (before-remap (copy-tree treesit-major-mode-remap-alist)))"
" (require 'pi-coding-agent)"
" (prin1 (list"
" :auto-unchanged (equal before-auto auto-mode-alist)"
" :remap-unchanged (equal before-remap treesit-major-mode-remap-alist)"
" :before-md-association (assoc \"\\.md\\'\" before-auto)"
" :after-md-association (assoc \"\\.md\\'\" auto-mode-alist)"
" :before-markdown-remap (alist-get 'markdown-mode before-remap)"
" :after-markdown-remap (alist-get 'markdown-mode treesit-major-mode-remap-alist)))))")
" "))
(result (pi-coding-agent-test--read-batch-emacs-result expression)))
(should (eq t (plist-get result :auto-unchanged)))
(should (eq t (plist-get result :remap-unchanged)))
(should (equal (plist-get result :before-md-association)
(plist-get result :after-md-association)))
(should (equal (plist-get result :before-markdown-remap)
(plist-get result :after-markdown-remap)))))

(provide 'pi-coding-agent-test)
;;; pi-coding-agent-test.el ends here