diff --git a/modules/tools/tree-sitter/autoload.el b/modules/tools/tree-sitter/autoload.el index d1682b6a6..608ed77bf 100644 --- a/modules/tools/tree-sitter/autoload.el +++ b/modules/tools/tree-sitter/autoload.el @@ -5,6 +5,13 @@ (interactive) (turn-on-tree-sitter-mode)) +;; HACK: Remove and refactor when `use-package' eager macro expansion is solved or `use-package!' is removed +;;;###autoload +(defun +tree-sitter-get-textobj (group &optional query) + "A wrapper around `evil-textobj-tree-sitter-get-textobj' to +prevent eager expansion." + (eval `(evil-textobj-tree-sitter-get-textobj ,group ,query))) + ;;;###autoload (defun +tree-sitter-goto-textobj (group &optional previous end query) "Thin wrapper that returns the symbol of a named function, used in keybindings." diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index 6b588fee7..aab52e2cb 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -3,6 +3,7 @@ (use-package! tree-sitter :hook (tree-sitter-after-on . tree-sitter-hl-mode) :config + (require 'tree-sitter-langs) ;; This makes every node a link to a section of code (setq tree-sitter-debug-jump-buttons t ;; and this highlights the entire sub tree in your code @@ -12,7 +13,6 @@ :when (featurep! :editor evil +everywhere) :after tree-sitter :config - (defvar +tree-sitter-inner-text-objects-map (make-sparse-keymap)) (defvar +tree-sitter-outer-text-objects-map (make-sparse-keymap)) (defvar +tree-sitter-goto-previous-map (make-sparse-keymap)) @@ -26,20 +26,20 @@ "]g" +tree-sitter-goto-next-map) (map! (:map +tree-sitter-inner-text-objects-map - "A" (evil-textobj-tree-sitter-get-textobj ("parameter.inner" "call.inner")) - "f" (evil-textobj-tree-sitter-get-textobj "function.inner") - "F" (evil-textobj-tree-sitter-get-textobj "call.inner") - "C" (evil-textobj-tree-sitter-get-textobj "class.inner") - "v" (evil-textobj-tree-sitter-get-textobj "conditional.inner") - "l" (evil-textobj-tree-sitter-get-textobj "loop.inner")) + "A" (+tree-sitter-get-textobj '("parameter.inner" "call.inner")) + "f" (+tree-sitter-get-textobj "function.inner") + "F" (+tree-sitter-get-textobj "call.inner") + "C" (+tree-sitter-get-textobj "class.inner") + "v" (+tree-sitter-get-textobj "conditional.inner") + "l" (+tree-sitter-get-textobj "loop.inner")) (:map +tree-sitter-outer-text-objects-map - "A" (evil-textobj-tree-sitter-get-textobj ("parameter.outer" "call.outer")) - "f" (evil-textobj-tree-sitter-get-textobj "function.outer") - "F" (evil-textobj-tree-sitter-get-textobj "call.outer") - "C" (evil-textobj-tree-sitter-get-textobj "class.outer") - "c" (evil-textobj-tree-sitter-get-textobj "comment.outer") - "v" (evil-textobj-tree-sitter-get-textobj "conditional.outer") - "l" (evil-textobj-tree-sitter-get-textobj "loop.outer")) + "A" (+tree-sitter-get-textobj '("parameter.outer" "call.outer")) + "f" (+tree-sitter-get-textobj "function.outer") + "F" (+tree-sitter-get-textobj "call.outer") + "C" (+tree-sitter-get-textobj "class.outer") + "c" (+tree-sitter-get-textobj "comment.outer") + "v" (+tree-sitter-get-textobj "conditional.outer") + "l" (+tree-sitter-get-textobj "loop.outer")) (:map +tree-sitter-goto-previous-map "a" (+tree-sitter-goto-textobj "parameter.outer" t)