]> jturnerusa.dev Git - emacs.d/commitdiff
conditionally configure treesitter modes if their parsers are avail
authorJohn Turner <jturner.usa@gmail.com>
Mon, 25 Sep 2023 09:48:09 +0000 (05:48 -0400)
committerJohn Turner <jturner.usa@gmail.com>
Mon, 25 Sep 2023 09:48:09 +0000 (05:48 -0400)
packages/treesit.el

index d9326f86a5d2081aab70a1b9824b13d64c32f8d7..d5af6b98ac0e4fd2bf84ce4559c7e9910735d7fa 100644 (file)
@@ -1,16 +1,24 @@
 (use-package treesit
   :if (ignore-errors (treesit-available-p))
-  :mode
-  ((rx (literal ".") "rs" eos) . rust-ts-mode)
-  ((rx (literal ".") "py" eos) . python-ts-mode)
-  ((rx (literal ".") "sh" eos) . bash-ts-mode)
-  :interpreter
-  ("python" . python-ts-mode)
-  ("python3" . python-ts-mode)
-  ("bash" . bash-ts-mode)
-  ("sh" . bash-ts-mode)
-  ("openrc-run" . bash-ts-mode))
-
+  :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