branch: elpa/clojure-mode
commit c815d35352ca859954313fcaba52ed1f119e720b
Author: Bozhidar Batsov <[email protected]>
Commit: Bozhidar Batsov <[email protected]>

    Extend clojure--check-wrong-major-mode to cover all derived modes
    
    The wrong-mode check only knew about .clj, .cljs, and .cljc. Replace
    the hardcoded cond with a data-driven alist covering all extensions:
    .cljd, .jank, .joke, and .edn.
---
 clojure-mode.el | 26 +++++++++++++++++---------
 1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/clojure-mode.el b/clojure-mode.el
index 2cf7ae5613..8373157480 100644
--- a/clojure-mode.el
+++ b/clojure-mode.el
@@ -699,6 +699,18 @@ replacement for `cljr-expand-let`."
   :safe #'booleanp
   :package-version '(clojure-mode "5.3.0"))
 
+(defconst clojure--extension-mode-alist
+  '(("\\.cljs\\'"  . clojurescript-mode)
+    ("\\.cljc\\'"  . clojurec-mode)
+    ("\\.cljd\\'"  . clojuredart-mode)
+    ("\\.jank\\'"  . jank-mode)
+    ("\\.joke\\'"  . joker-mode)
+    ("\\.edn\\'"   . edn-mode)
+    ;; .clj must be last since its regex also matches .cljs, .cljc, .cljd
+    ("\\.clj\\'"   . clojure-mode))
+  "Alist mapping file-name regexes to their expected Clojure major mode.
+More specific extensions must appear before less specific ones.")
+
 (defun clojure--check-wrong-major-mode ()
   "Check if the current `major-mode' matches the file extension.
 
@@ -707,15 +719,11 @@ non-nil."
   (when (and clojure-verify-major-mode
              (stringp (buffer-file-name)))
     (let* ((case-fold-search t)
-           (problem (cond ((and (string-match "\\.clj\\'" (buffer-file-name))
-                                (not (eq major-mode 'clojure-mode)))
-                           'clojure-mode)
-                          ((and (string-match "\\.cljs\\'" (buffer-file-name))
-                                (not (eq major-mode 'clojurescript-mode)))
-                           'clojurescript-mode)
-                          ((and (string-match "\\.cljc\\'" (buffer-file-name))
-                                (not (eq major-mode 'clojurec-mode)))
-                           'clojurec-mode))))
+           (file (buffer-file-name))
+           (expected (assoc-default file clojure--extension-mode-alist
+                                    #'string-match-p))
+           (problem (when (and expected (not (eq major-mode expected)))
+                      expected)))
       (when problem
         (message "[WARNING] %s activated `%s' instead of `%s' in this buffer.
 This could cause problems.

Reply via email to