doomemacs/modules/tools/tree-sitter/config.el

42 lines
1.7 KiB
EmacsLisp
Raw Normal View History

;;; tools/tree-sitter/config.el -*- lexical-binding: t; -*-
(use-package! tree-sitter
:when (bound-and-true-p module-file-suffix)
:hook (prog-mode . tree-sitter-mode)
:hook (tree-sitter-after-on . tree-sitter-hl-mode)
:config
(require 'tree-sitter-langs)
(setq tree-sitter-debug-jump-buttons t
tree-sitter-debug-highlight-jump-region t)
(defadvice! doom-tree-sitter-fail-gracefully-a (orig-fn &rest args)
"Don't break with errors when current major mode lacks tree-sitter support."
:around #'tree-sitter-mode
(condition-case e
(apply orig-fn args)
(error
(unless (string-match-p (concat "^Cannot find shared library\\|"
"^No language registered\\|"
"cannot open shared object file")
(error-message-string e))
(signal (car e) (cadr e)))))))
(when (featurep! :editor evil +everywhere)
(use-package! evil-textobj-tree-sitter
:after tree-sitter
:config
(map!
:textobj "f" nil nil
:textobj "f" (evil-textobj-tree-sitter-get-textobj "function.inner") (evil-textobj-tree-sitter-get-textobj "function.outer") ;; redef
:textobj "C" (evil-textobj-tree-sitter-get-textobj "class.inner") (evil-textobj-tree-sitter-get-textobj "class.outer")
:textobj "c" nil nil
:textobj "c" nil (evil-textobj-tree-sitter-get-textobj "comment.outer")
:textobj "i" nil nil
:textobj "i" (evil-textobj-tree-sitter-get-textobj "conditional.inner") (evil-textobj-tree-sitter-get-textobj "conditional.outer")
:textobj "l" nil nil
:textobj "l" (evil-textobj-tree-sitter-get-textobj "loop.inner") (evil-textobj-tree-sitter-get-textobj "loop.outer"))))