summaryrefslogtreecommitdiff
path: root/packages/treesit.el
blob: af73861c78b08aa072b3d80fe1cba5008805e658 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
(use-package treesit
  :if (ignore-errors (treesit-available-p))
  :config
  (let ((setup-treesit-mode (lambda (parser treesit-mode modes &optional interpreters)
                              (if (not (treesit-language-available-p parser))
                                  (error "treesit language parser not available for %s" (symbol-name language))
                                (seq-each (lambda (mode)
                                            (add-to-list 'auto-mode-alist
                                                         (cons (rx (literal ".")
                                                                   (literal mode) eos)
                                                               treesit-mode)))
                                          modes)
                                (seq-each (lambda (interpreter)
                                            (add-to-list 'interpreter-mode-alist
                                                         (cons interpreter treesit-mode)))
                                          interpreters)))))
    (funcall setup-treesit-mode 'python 'python-ts-mode  '("py")  '("python" "python3"))
    (funcall setup-treesit-mode 'bash 'bash-ts-mode '("sh")  '("bash" "sh" "openrc-run"))
    (funcall setup-treesit-mode 'rust 'rust-ts-mode '("rs"))
    (funcall setup-treesit-mode 'cpp 'c++-ts-mode '("cpp" "cxx" "c++" "hpp" "hxx" "h++"))))
  
(use-package rust-ts-mode
  :requires treesit
  :hook
  (rust-ts-mode . (lambda ()
                    (when (require 'rust-mode nil t)
                      (add-hook 'before-save-hook 'rust-before-save-method nil t)
                      (add-hook 'after-save-hook 'rust-after-save-method nil t)
                      (use-local-map (make-composed-keymap (list rust-ts-mode-map rust-mode-map)))))))

(use-package c-ts-mode
  :requires treesit
  :custom
  (c-ts-mode-indent-style 'linux)
  (c-ts-mode-indent-offset 2))