diff --git a/modules/tools/tree-sitter/autoload.el b/modules/tools/tree-sitter/autoload.el index a4be17ac2..b8f570163 100644 --- a/modules/tools/tree-sitter/autoload.el +++ b/modules/tools/tree-sitter/autoload.el @@ -2,8 +2,21 @@ ;;;###autodef (fset 'tree-sitter! #'ignore) (defun tree-sitter! () - (interactive) - (turn-on-tree-sitter-mode)) + "Dispatch to turn on tree sitter. + +Used as a hook function which turns on `tree-sitter-mode' +and selectively turn on `tree-sitter-hl-mode'. +according to `+tree-sitter-hl-enabled-modes'" + (turn-on-tree-sitter-mode) + ;; conditionally enable `tree-sitter-hl-mode' + (let ((mode (bound-and-true-p tree-sitter-hl-mode))) + (when-let (mode (if (pcase +tree-sitter-hl-enabled-modes + (`(not . ,modes) (not (memq major-mode modes))) + ((and `(,_ . ,_) modes) (memq major-mode modes)) + (bool bool)) + (unless mode +1) + (if mode -1))) + (tree-sitter-hl-mode mode)))) ;; HACK: Remove and refactor when `use-package' eager macro expansion is solved or `use-package!' is removed ;;;###autoload diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index 78103fa5b..e331d8059 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -1,7 +1,17 @@ ;;; tools/tree-sitter/config.el -*- lexical-binding: t; -*- +(defvar +tree-sitter-hl-enabled-modes '(not web-mode typescript-tsx-mode) + "A list of major modes which should be highlighted by tree-sitter. + +If this list begins with `not', then it negates the list. +If it is t, it is enabled in all modes. +If nil, it is disabled in all modes") + +;; +;;; Packages + (use-package! tree-sitter - :hook (tree-sitter-after-on . tree-sitter-hl-mode) + :defer t :config (require 'tree-sitter-langs) ;; This makes every node a link to a section of code