]> jturnerusa.dev Git - emacs.d/commitdiff
added some treesitter setup stuff
authorJohn Turner <jturner.usa@gmail.com>
Tue, 24 Jan 2023 05:37:25 +0000 (00:37 -0500)
committerJohn Turner <jturner.usa@gmail.com>
Tue, 24 Jan 2023 05:37:25 +0000 (00:37 -0500)
init.el
init/treesit/init-treesit-setup-available-languages.el [new file with mode: 0644]
init/treesit/init-treesit.el [new file with mode: 0644]

diff --git a/init.el b/init.el
index 2140fdd1afc43e968158c5e7864e0f34e61f765c..e8fb9d24c88203a7c967531f7ff2d4216b8e3f91 100644 (file)
--- a/init.el
+++ b/init.el
@@ -80,6 +80,8 @@
 (when (require? 'pixel-scroll)
   (require 'init-pixel-scroll))
 
+(when (and (require? 'treesit) (treesit-available-p))
+  (require 'init-treesit))
 (require 'man-completion)
 
 (require 'license-boilerplate)
diff --git a/init/treesit/init-treesit-setup-available-languages.el b/init/treesit/init-treesit-setup-available-languages.el
new file mode 100644 (file)
index 0000000..5817e15
--- /dev/null
@@ -0,0 +1,55 @@
+;; -*- lexical-binding: t; -*-
+
+(defvar -languages `((python-ts-mode 
+                      ((:langs . python)
+                       (:file-ext . ,(rx ".py"))
+                       (:interpreter . "python")))
+                     (rust-ts-mode 
+                      ((:langs . rust)
+                       (:file-ext . ,(rx ".rs"))))
+                     (bash-ts-mode
+                      ((:langs . bash)
+                       (:file-ext . ,(rx ".sh"))
+                       (:interpreter . "bash")))
+                     (c-ts-mode 
+                      ((:langs . c)
+                       (:file-ext . ,(rx ".c"))))
+                     (c++-ts-mode 
+                      ((:langs . c++)
+                       (:file-ext . ,(rx (or ".c++" ".cpp" ".cxx"
+                                             ".h++" ".hpp" ".hxx")))))
+                     (c-or-c++-ts-mode 
+                      ((:langs . (c c++))
+                       (:file-ext . ,(rx ".h"))))
+                     (toml-ts-mode 
+                      ((:langs . toml)
+                       (:file-ext . ,(rx ".toml"))))))
+
+(defun -ready-quiet-p (language)
+  (treesit-ready-p language t))
+
+(cl-defun -load-language? (&key ts-mode
+                                required-languages
+                                file-extension
+                                interpreter?)
+  (let ((ready? (if (listp required-languages)
+                    (seq-every-p '-ready-quiet-p required-languages)
+                  (-ready-quiet-p required-languages))))
+    (when ready?
+      (add-to-list 'auto-mode-alist (cons file-extension ts-mode))
+      (when interpreter?
+        (add-to-list 'interpreter-mode-alist (cons interpreter? ts-mode))))))
+
+(seq-map (lambda (item)
+           (-load-language?
+            :ts-mode (car item)
+            :required-languages (alist-get :langs (cadr item))
+            :file-extension (alist-get :file-ext (cadr item))
+            :interpreter? (alist-get :interpreter (cadr item))))
+         -languages)
+
+(provide 'init-treesit-setup-available-languages)
+
+;; Local Variables:
+;; read-symbol-shorthands: (("-" . "init-treesit-setup-available-languages-"))
+;; End:
diff --git a/init/treesit/init-treesit.el b/init/treesit/init-treesit.el
new file mode 100644 (file)
index 0000000..29ea075
--- /dev/null
@@ -0,0 +1,3 @@
+(require 'init-treesit-setup-available-languages)
+
+(provide 'init-treesit)