diff --git a/core/siren-core-modules.el b/core/siren-core-modules.el index 537460f..317c5bb 100644 --- a/core/siren-core-modules.el +++ b/core/siren-core-modules.el @@ -136,6 +136,7 @@ (require 'siren-string-inflection) (require 'siren-toggle-comments) (require 'siren-tree-sitter) +(require 'siren-treesit) (require 'siren-yasnippet) ;; Version control diff --git a/modules/languages/siren-dockerfile.el b/modules/languages/siren-dockerfile.el index 0275f13..1f58bca 100644 --- a/modules/languages/siren-dockerfile.el +++ b/modules/languages/siren-dockerfile.el @@ -7,7 +7,6 @@ ;;; Code: (require 'siren-lsp) -(require 'siren-treesit) (if (fboundp 'dockerfile-ts-mode) ;; Use built-in treesit support if available. @@ -21,17 +20,24 @@ :init (require 'siren-treesit) - (siren-treesit-prepare - 'dockerfile-ts-mode - '(dockerfile "https://github.com/camdencheek/tree-sitter-dockerfile")) :config - (siren-flycheck-setup-hadolint)) + (siren-flycheck-setup-hadolint) + + ;; Remove auto-mode-alist entry added by dockerfile-ts-mode, as it's too + ;; greedy and matches on files such as "siren-dockerfile.el" which is a + ;; problem when trying to edit this file for example. + (setq auto-mode-alist + (delete '("\\(?:Dockerfile\\(?:\\..*\\)?\\|\\.[Dd]ockerfile\\)\\'" + . dockerfile-ts-mode) + auto-mode-alist))) ;; Otherwise, fallback to regular dockerfile-mode. (use-package dockerfile-mode - :hook (dockerfile-mode . siren-dockerfile-mode-setup) - :config (siren-flycheck-setup-hadolint))) + :hook + (dockerfile-mode . siren-dockerfile-mode-setup) + :config + (siren-flycheck-setup-hadolint))) (defun siren-dockerfile-mode-setup () "Shared setup for both `dockerfile-mode' and `dockerfile-ts-mode'." diff --git a/modules/languages/siren-toml.el b/modules/languages/siren-toml.el index a758a72..cbd5e31 100644 --- a/modules/languages/siren-toml.el +++ b/modules/languages/siren-toml.el @@ -22,10 +22,7 @@ (toml-ts-mode . siren-toml-mode-setup) :init - (require 'siren-treesit) - (siren-treesit-prepare - 'toml-ts-mode - '(toml "https://github.com/tree-sitter/tree-sitter-toml")))) + (require 'siren-treesit))) (defun siren-toml-mode-setup () (run-hooks 'prog-mode-hook) diff --git a/modules/languages/siren-typescript.el b/modules/languages/siren-typescript.el index d53f10c..1fc1d64 100644 --- a/modules/languages/siren-typescript.el +++ b/modules/languages/siren-typescript.el @@ -6,38 +6,38 @@ ;;; Code: -(require 'siren-flycheck) -(require 'siren-lsp) -(require 'siren-treesit) +;; Requires Emacs 29.x or later for built-in treesit support. +(when (fboundp 'treesit-ready-p) + (require 'siren-flycheck) + (require 'siren-lsp) + (require 'siren-treesit) -(let ((repo "https://github.com/tree-sitter/tree-sitter-typescript") - (ref "v0.20.2")) - (siren-treesit-prepare - 'typescript-ts-mode - `(typescript . (,repo ,ref "typescript/src"))) - (siren-treesit-prepare - 'tsx-ts-mode - `(tsx . (,repo ,ref "tsx/src")))) + (use-package typescript-ts-mode + :straight (:type built-in) + :mode "\\.ts\\'" + :hook + (typescript-ts-mode . siren-typescript-mode-setup) -(use-package typescript-ts-mode - :straight (:type built-in) - :mode "\\.ts\\'" - :hook - (typescript-ts-mode . siren-typescript-mode-setup)) + :config + (when (not (treesit-ready-p 'typescript)) + (treesit-install-language-grammar 'typescript))) -(use-package tsx-ts-mode - :straight (:type built-in) - :mode "\\.tsx\\'") + (use-package tsx-ts-mode + :straight (:type built-in) + :mode "\\.tsx\\'" + :config + (when (not (treesit-ready-p 'tsx)) + (treesit-install-language-grammar 'tsx))) -(defun siren-typescript-mode-setup () - "Default setup function for `typescript-mode' and `typescript-ts-mode'." - (let ((width 2)) - (setq-local typescript-indent-level width - indent-level width - tab-width width)) + (defun siren-typescript-mode-setup () + "Default setup function for `typescript-ts-mode' and `tsx-ts-mode'." + (let ((width 2)) + (setq-local typescript-indent-level width + indent-level width + tab-width width)) - (lsp-deferred) - (flycheck-mode t)) + (lsp-deferred) + (flycheck-mode t))) (provide 'siren-typescript) ;;; siren-typescript.el ends here diff --git a/modules/text-editing/siren-treesit.el b/modules/text-editing/siren-treesit.el index 05f8b44..cd4d5eb 100644 --- a/modules/text-editing/siren-treesit.el +++ b/modules/text-editing/siren-treesit.el @@ -16,5 +16,13 @@ (when (not (treesit-ready-p ',lang)) (treesit-install-language-grammar ',lang)))))) +(use-package treesit-auto + :demand t + :if (fboundp 'treesit-ready-p) + :custom + (treesit-auto-install nil) + :config + (global-treesit-auto-mode)) + (provide 'siren-treesit) ;;; siren-treesit.el ends here diff --git a/straight/versions/default.el b/straight/versions/default.el index 8c1e127..ff7b63c 100644 --- a/straight/versions/default.el +++ b/straight/versions/default.el @@ -228,6 +228,7 @@ ("treemacs" . "127485317a19254ca20ba1910d10edf7dbaa2d97") ("treemacs-nerd-icons" . "c6f4a74ea4f414528fc43a6fe95f7f17687faeb4") ("treepy.el" . "7c4a0d21322506a4d4b2301b4274ec955b429b47") + ("treesit-auto" . "bac3b9d1d61a4d759f87c80de7be3b808d19cbf6") ("use-package" . "77945e002f11440eae72d8730d3de218163d551e") ("uuidgen-el" . "7b728c1d92e196c3acf87a004949335cfc18eab3") ("vertico" . "7e2375b6f09579b5845dbf35ad168a8c6fc70e66")