summaryrefslogtreecommitdiff
path: root/packages/treesit.el
diff options
context:
space:
mode:
Diffstat (limited to 'packages/treesit.el')
-rw-r--r--packages/treesit.el36
1 files changed, 36 insertions, 0 deletions
diff --git a/packages/treesit.el b/packages/treesit.el
new file mode 100644
index 0000000..0ba4a14
--- /dev/null
+++ b/packages/treesit.el
@@ -0,0 +1,36 @@
+(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))
+ (message "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))