mirror of
https://github.com/jimeh/.emacs.d.git
synced 2026-02-19 13:46:41 +00:00
fix(text-editing/treesit): resolve issues with treesit-auto package
When the global-treesit-auto-mode is enabled, was getting lots of errors related to an infinite loop whenever opening a buffer supported by one of `*-ts-mode` modes. Instead, I now take a more manual and intentional approach to using the built-in treesit modes for specific languages.
This commit is contained in:
@@ -79,6 +79,9 @@ See URL `http://github.com/hadolint/hadolint/'."
|
||||
;; :hook
|
||||
;; (dockerfile-ts-mode . siren-dockerfile-mode-setup)
|
||||
;;
|
||||
;; :init
|
||||
;; (siren-treesit-auto-ensure-grammar 'dockerfile)
|
||||
;;
|
||||
;; :config
|
||||
;; (siren-flycheck-setup-hadolint)
|
||||
;;
|
||||
|
||||
@@ -13,18 +13,19 @@
|
||||
:mode "\\.toml\\'" "Cargo\\.lock\\'"
|
||||
:hook (conf-toml-mode . siren-toml-mode-setup))
|
||||
|
||||
;; Use built-in treesit support if available.
|
||||
(if (fboundp 'toml-ts-mode)
|
||||
(use-package toml-ts-mode
|
||||
:straight (:type built-in)
|
||||
:mode "\\.toml\\'" "Cargo\\.lock\\'"
|
||||
:hook
|
||||
(toml-ts-mode . siren-toml-mode-setup)
|
||||
|
||||
:init
|
||||
(require 'siren-treesit)))
|
||||
;; Requires Emacs 29.x or later for built-in treesit support.
|
||||
(when (fboundp 'toml-ts-mode)
|
||||
(require 'siren-treesit)
|
||||
(use-package toml-ts-mode
|
||||
:straight (:type built-in)
|
||||
:mode "\\.toml\\'" "Cargo\\.lock\\'"
|
||||
:hook
|
||||
(toml-ts-mode . siren-toml-mode-setup)
|
||||
:config
|
||||
(siren-treesit-auto-ensure-grammar 'toml)))
|
||||
|
||||
(defun siren-toml-mode-setup ()
|
||||
"Default tweaks for `toml-mode'."
|
||||
(run-hooks 'prog-mode-hook)
|
||||
(setq-local tab-width 2))
|
||||
|
||||
|
||||
@@ -19,15 +19,13 @@
|
||||
(typescript-ts-mode . siren-typescript-mode-setup)
|
||||
|
||||
:config
|
||||
(when (not (treesit-ready-p 'typescript))
|
||||
(treesit-install-language-grammar 'typescript)))
|
||||
(siren-treesit-auto-ensure-grammar 'typescript))
|
||||
|
||||
(use-package tsx-ts-mode
|
||||
:straight (:type built-in)
|
||||
:mode "\\.tsx\\'"
|
||||
:config
|
||||
(when (not (treesit-ready-p 'tsx))
|
||||
(treesit-install-language-grammar 'tsx)))
|
||||
(siren-treesit-auto-ensure-grammar 'tsx))
|
||||
|
||||
(defun siren-typescript-mode-setup ()
|
||||
"Default setup function for `typescript-ts-mode' and `tsx-ts-mode'."
|
||||
|
||||
@@ -13,21 +13,43 @@
|
||||
(when (fboundp 'treesit-ready-p)
|
||||
(setopt treesit-font-lock-level 4)
|
||||
|
||||
(defun siren-treesit-prepare (mode source)
|
||||
(defun siren-treesit-manual-prepare (mode source)
|
||||
"Setup treesit for MODE with SOURCE."
|
||||
(add-to-list 'treesit-language-source-alist source)
|
||||
(let ((lang (car source)))
|
||||
(advice-add mode :before `(lambda (&rest _)
|
||||
(when (not (treesit-ready-p ',lang))
|
||||
(treesit-install-language-grammar ',lang))))))
|
||||
(advice-add mode :before
|
||||
`(lambda (&rest _)
|
||||
(when (not (treesit-ready-p ',lang t))
|
||||
(treesit-install-language-grammar ',lang))))))
|
||||
|
||||
(use-package treesit-auto
|
||||
:demand t
|
||||
:if (fboundp 'treesit-ready-p)
|
||||
:custom
|
||||
(treesit-auto-install nil)
|
||||
|
||||
:preface
|
||||
(defun siren-treesit-auto-ensure-grammar (grammar)
|
||||
"Ensure that treesit GRAMMAR is installed and ready for use."
|
||||
(when (and (fboundp 'treesit-ready-p)
|
||||
(not (treesit-ready-p grammar t)))
|
||||
(let ((treesit-language-source-alist
|
||||
(treesit-auto--build-treesit-source-alist)))
|
||||
(treesit-install-language-grammar grammar))))
|
||||
|
||||
(defvar siren-treesit-auto--source-alist-populated-p 'nil
|
||||
"Internal flag to track if `treesit-auto--build-treesit-source-alist'
|
||||
has been used to populate `treesit-language-source-alist'.")
|
||||
|
||||
(defun siren-treesit-auto--populate-treesit-language-source-alist ()
|
||||
(if (not siren-treesit-auto--source-alist-populated-p)
|
||||
(setq treesit-language-source-alist
|
||||
(append treesit-language-source-alist
|
||||
(treesit-auto--build-treesit-source-alist))
|
||||
siren-treesit-auto--source-alist-populated-p t)))
|
||||
|
||||
:config
|
||||
(global-treesit-auto-mode)))
|
||||
(siren-treesit-auto--populate-treesit-language-source-alist)))
|
||||
|
||||
(provide 'siren-treesit)
|
||||
;;; siren-treesit.el ends here
|
||||
|
||||
Reference in New Issue
Block a user