2021-08-21 21:19:27 +01:00
|
|
|
;;; tools/tree-sitter/config.el -*- lexical-binding: t; -*-
|
|
|
|
|
|
|
|
(use-package! tree-sitter
|
2021-10-19 01:32:57 +01:00
|
|
|
:defer t ;; loading is handled by individual modes
|
2021-08-21 21:19:27 +01:00
|
|
|
:hook (tree-sitter-after-on . tree-sitter-hl-mode)
|
|
|
|
:config
|
2021-10-19 01:32:57 +01:00
|
|
|
(defvar +tree-sitter-enabled-mode-maps (seq-map (lambda (mode)
|
|
|
|
(intern (concat
|
|
|
|
(symbol-name (car mode)) "-map")))
|
|
|
|
tree-sitter-major-mode-language-alist)
|
|
|
|
"List of mode hooks for tree sitter enabled modes.")
|
2021-08-20 23:10:19 +01:00
|
|
|
;; This makes every node a link to a section of code
|
2021-08-21 21:19:27 +01:00
|
|
|
(setq tree-sitter-debug-jump-buttons t
|
2021-08-20 23:10:19 +01:00
|
|
|
;; and this highlights the entire sub tree in your code
|
2021-08-22 10:46:27 +07:00
|
|
|
tree-sitter-debug-highlight-jump-region t))
|
2021-08-21 21:19:27 +01:00
|
|
|
|
2021-12-09 03:26:29 +00:00
|
|
|
(if (daemonp) ;; HACK: eager load when in daemon as its start time is easily consumed
|
2021-10-07 01:13:41 +01:00
|
|
|
(require 'tree-sitter-langs)
|
|
|
|
(add-hook! 'tree-sitter-after-on-hook
|
|
|
|
(require 'tree-sitter-langs)))
|
|
|
|
|
2021-09-24 17:24:41 +01:00
|
|
|
|
2021-08-20 14:04:08 +01:00
|
|
|
(when (featurep! :editor evil +everywhere)
|
|
|
|
(use-package! evil-textobj-tree-sitter
|
|
|
|
:after tree-sitter
|
|
|
|
:config
|
|
|
|
(map!
|
2021-10-19 01:32:57 +01:00
|
|
|
:map +tree-sitter-enabled-mode-maps
|
2021-08-19 22:03:12 +01:00
|
|
|
:textobj "f" nil nil
|
2021-10-23 02:12:32 +01:00
|
|
|
:textobj "f" (evil-textobj-tree-sitter-get-textobj "function.inner") (evil-textobj-tree-sitter-get-textobj "function.outer")
|
2021-08-19 22:03:12 +01:00
|
|
|
|
2021-09-21 19:40:00 +01:00
|
|
|
:textobj "F" (evil-textobj-tree-sitter-get-textobj "call.inner") (evil-textobj-tree-sitter-get-textobj "call.outer")
|
|
|
|
|
2021-08-20 14:04:08 +01:00
|
|
|
:textobj "C" (evil-textobj-tree-sitter-get-textobj "class.inner") (evil-textobj-tree-sitter-get-textobj "class.outer")
|
2021-08-19 22:03:12 +01:00
|
|
|
|
|
|
|
:textobj "c" nil nil
|
2021-08-20 14:04:08 +01:00
|
|
|
:textobj "c" nil (evil-textobj-tree-sitter-get-textobj "comment.outer")
|
2021-08-19 22:03:12 +01:00
|
|
|
|
|
|
|
:textobj "i" nil nil
|
2021-08-20 14:04:08 +01:00
|
|
|
:textobj "i" (evil-textobj-tree-sitter-get-textobj "conditional.inner") (evil-textobj-tree-sitter-get-textobj "conditional.outer")
|
2021-08-19 22:03:12 +01:00
|
|
|
|
|
|
|
:textobj "l" nil nil
|
2021-11-07 09:13:34 +00:00
|
|
|
:textobj "l" (evil-textobj-tree-sitter-get-textobj "loop.inner") (evil-textobj-tree-sitter-get-textobj "loop.outer"))
|
|
|
|
(after! which-key
|
|
|
|
(setq which-key-allow-multiple-replacements t)
|
|
|
|
(pushnew!
|
|
|
|
which-key-replacement-alist
|
|
|
|
'(("" . "\\`+?evil-textobj-tree-sitter-function--\\(.*\\)\\(?:.inner\\|.outer\\)") . (nil . "\\1"))))))
|