2021-08-21 21:19:27 +01:00
|
|
|
;;; tools/tree-sitter/config.el -*- lexical-binding: t; -*-
|
|
|
|
|
2022-07-25 00:31:57 +01:00
|
|
|
(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
|
|
|
|
|
2021-08-21 21:19:27 +01:00
|
|
|
(use-package! tree-sitter
|
2022-07-25 00:31:57 +01:00
|
|
|
:defer t
|
2021-08-21 21:19:27 +01:00
|
|
|
:config
|
2022-05-22 21:25:28 +01:00
|
|
|
(require 'tree-sitter-langs)
|
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
|
|
|
|
2022-06-18 14:35:13 +02:00
|
|
|
|
2022-04-03 18:21:34 +01:00
|
|
|
(use-package! evil-textobj-tree-sitter
|
2022-08-12 20:29:19 +02:00
|
|
|
:when (modulep! :editor evil +everywhere)
|
2022-06-18 14:35:13 +02:00
|
|
|
:defer t
|
|
|
|
:init (after! tree-sitter (require 'evil-textobj-tree-sitter))
|
2022-04-03 18:21:34 +01:00
|
|
|
:config
|
2022-04-02 02:23:28 +01:00
|
|
|
(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))
|
|
|
|
(defvar +tree-sitter-goto-next-map (make-sparse-keymap))
|
|
|
|
|
2022-04-03 18:21:34 +01:00
|
|
|
(evil-define-key '(visual operator) 'tree-sitter-mode
|
|
|
|
"i" +tree-sitter-inner-text-objects-map
|
|
|
|
"a" +tree-sitter-outer-text-objects-map)
|
|
|
|
(evil-define-key 'normal 'tree-sitter-mode
|
|
|
|
"[g" +tree-sitter-goto-previous-map
|
|
|
|
"]g" +tree-sitter-goto-next-map)
|
2021-08-19 22:03:12 +01:00
|
|
|
|
2021-12-19 22:22:32 +00:00
|
|
|
(map! (:map +tree-sitter-inner-text-objects-map
|
2022-05-22 21:25:28 +01:00
|
|
|
"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"))
|
2021-12-19 22:22:32 +00:00
|
|
|
(:map +tree-sitter-outer-text-objects-map
|
2022-05-22 21:25:28 +01:00
|
|
|
"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"))
|
2022-01-24 18:32:38 +00:00
|
|
|
|
|
|
|
(:map +tree-sitter-goto-previous-map
|
|
|
|
"a" (+tree-sitter-goto-textobj "parameter.outer" t)
|
|
|
|
"f" (+tree-sitter-goto-textobj "function.outer" t)
|
|
|
|
"F" (+tree-sitter-goto-textobj "call.outer" t)
|
|
|
|
"C" (+tree-sitter-goto-textobj "class.outer" t)
|
|
|
|
"c" (+tree-sitter-goto-textobj "comment.outer" t)
|
2022-05-26 23:44:39 +01:00
|
|
|
"v" (+tree-sitter-goto-textobj "conditional.outer" t)
|
2022-01-24 18:32:38 +00:00
|
|
|
"l" (+tree-sitter-goto-textobj "loop.outer" t))
|
|
|
|
(:map +tree-sitter-goto-next-map
|
|
|
|
"a" (+tree-sitter-goto-textobj "parameter.outer")
|
|
|
|
"f" (+tree-sitter-goto-textobj "function.outer")
|
|
|
|
"F" (+tree-sitter-goto-textobj "call.outer")
|
|
|
|
"C" (+tree-sitter-goto-textobj "class.outer")
|
|
|
|
"c" (+tree-sitter-goto-textobj "comment.outer")
|
2022-05-26 23:44:39 +01:00
|
|
|
"v" (+tree-sitter-goto-textobj "conditional.outer")
|
2022-01-24 18:32:38 +00:00
|
|
|
"l" (+tree-sitter-goto-textobj "loop.outer")))
|
|
|
|
|
2021-12-19 22:22:32 +00:00
|
|
|
(after! which-key
|
|
|
|
(setq which-key-allow-multiple-replacements t)
|
|
|
|
(pushnew!
|
|
|
|
which-key-replacement-alist
|
|
|
|
'(("" . "\\`+?evil-textobj-tree-sitter-function--\\(.*\\)\\(?:.inner\\|.outer\\)") . (nil . "\\1")))))
|