branch: elpa/clojure-ts-mode
commit 4dc853df16ba09d10dc3a648865e681679c17606
Author: dannyfreeman <danny@dfreeman.email>
Commit: dannyfreeman <danny@dfreeman.email>

    Create derived major modes for clojure(c|script|dart)
    
    Addresses ticket #12
---
 clojure-ts-mode.el | 54 +++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 49 insertions(+), 5 deletions(-)

diff --git a/clojure-ts-mode.el b/clojure-ts-mode.el
index 336eeaf9d3..b3c5a0685c 100644
--- a/clojure-ts-mode.el
+++ b/clojure-ts-mode.el
@@ -546,6 +546,21 @@ See `clojure-ts--standard-definition-node-name' for the 
implementation used.")
     ;(set-keymap-parent map clojure-mode-map)
     map))
 
+(defvar clojurescript-ts-mode-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map clojure-ts-mode-map)
+    map))
+
+(defvar clojurec-ts-mode-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map clojure-ts-mode-map)
+    map))
+
+(defvar clojure-dart-ts-mode-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map clojure-ts-mode-map)
+    map))
+
 ;;;###autolaod
 (add-to-list
  'treesit-language-source-alist
@@ -585,21 +600,50 @@ Requires Emacs 29 and libtree-sitter-clojure.so available 
somewhere in
       (treesit-inspect-mode))
     (treesit-major-mode-setup)))
 
+
+;;;###autoload
+(define-derived-mode clojurescript-ts-mode clojure-ts-mode "ClojureScript[TS]"
+  "Major mode for editing ClojureScript code.
+
+\\{clojurescript-ts-mode-map}")
+
+;;;###autoload
+(define-derived-mode clojurec-ts-mode clojure-ts-mode "ClojureC[TS]"
+  "Major mode for editing ClojureC code.
+
+\\{clojurec-ts-mode-map}")
+
+;;;###autoload
+(define-derived-mode clojure-dart-ts-mode clojure-ts-mode "ClojureDart[TS]"
+  "Major mode for editing Clojure Dart code.
+
+\\{clojure-dart-ts-mode-map}")
+
+(defun clojure-ts--register-novel-modes ()
+  "Set up Clojure modes not present in progenitor clojure-mode.el."
+  (add-to-list 'auto-mode-alist '("\\.cljd\\'" . clojure-dart-ts-mode)))
+
 ;; Redirect clojure-mode to clojure-ts-mode if clojure-mode is present
 (if (require 'clojure-mode nil 'noerror)
     (progn
       (add-to-list 'major-mode-remap-alist '(clojure-mode . clojure-ts-mode))
-      (add-to-list 'major-mode-remap-alist '(clojurescript-mode . 
clojure-ts-mode))
-      (add-to-list 'major-mode-remap-alist '(clojurec-mode . clojure-ts-mode)))
-  ;; clojure-mode is not present
+      (add-to-list 'major-mode-remap-alist '(clojurescript-mode . 
clojurescript-ts-mode))
+      (add-to-list 'major-mode-remap-alist '(clojurec-mode . clojurec-ts-mode))
+      (clojure-ts--register-novel-modes))
+  ;; Clojure-mode is not present, setup auto-modes ourselves
+  ;; Regular clojure/edn files
+  ;; I believe dtm is for datomic queries and datoms, which are just edn.
   (add-to-list 'auto-mode-alist
-               '("\\.\\(clj\\|cljd\\|cljc\\|cljs\\|dtm\\|edn\\)\\'" . 
clojure-ts-mode))
+               '("\\.\\(clj\\|dtm\\|edn\\)\\'" . clojure-ts-mode))
+  (add-to-list 'auto-mode-alist '("\\.cljs\\'" . clojurescript-ts-mode))
+  (add-to-list 'auto-mode-alist '("\\.cljc\\'" . clojurec-ts-mode))
   ;; boot build scripts are Clojure source files
   (add-to-list 'auto-mode-alist '("\\(?:build\\|profile\\)\\.boot\\'" . 
clojure-ts-mode))
   ;; babashka scripts are Clojure source files
   (add-to-list 'interpreter-mode-alist '("bb" . clojure-ts-mode))
   ;; nbb scripts are ClojureScript source files
-  (add-to-list 'interpreter-mode-alist '("nbb" . clojure-ts-mode)))
+  (add-to-list 'interpreter-mode-alist '("nbb" . clojurescript-ts-mode))
+  (clojure-ts--register-novel-modes))
 
 (provide 'clojure-ts-mode)
 

Reply via email to