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

    Fix clojure-find-def failing on symbols with special characters
    
    Use end-of-symbol (\_>) instead of end-of-word (\>) in
    clojure-def-type-and-name-regex so that def forms like defn+ are
    recognized correctly.
    
    Closes #637
---
 CHANGELOG.md                   | 1 +
 clojure-mode.el                | 2 +-
 test/clojure-mode-util-test.el | 6 +++++-
 3 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1115b8dcfc..d113e5795f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,7 @@
 
 * [#658](https://github.com/clojure-emacs/clojure-mode/issues/658): Fix 
`clojure-mode-version` returning `nil`.
 * [#686](https://github.com/clojure-emacs/clojure-mode/issues/686): Fix 
`clojure-find-def` failing when comments appear between the `def` form and the 
symbol name.
+* [#637](https://github.com/clojure-emacs/clojure-mode/issues/637): Fix 
`clojure-find-def` failing on symbols containing special characters (e.g. 
`defn+`).
 
 ### Changes
 
diff --git a/clojure-mode.el b/clojure-mode.el
index b55bdf3d17..8584c77cfd 100644
--- a/clojure-mode.el
+++ b/clojure-mode.el
@@ -2251,7 +2251,7 @@ renaming a namespace."
   (let ((ws-or-comment "\\(?:[ \r\n\t]\\|;[^\n]*\n\\)*"))
     (concat "(\\(?:\\(?:\\sw\\|\\s_\\)+/\\)?"
             ;; Declaration
-            "\\(def\\(?:\\sw\\|\\s_\\)*\\(?:-\\|\\>\\)\\)"
+            "\\(def\\(?:\\sw\\|\\s_\\)*\\(?:-\\|\\_>\\)\\)"
             ;; Any whitespace or comments
             ws-or-comment
             ;; Possibly type or metadata
diff --git a/test/clojure-mode-util-test.el b/test/clojure-mode-util-test.el
index 3c57e332c8..2b30cf3665 100644
--- a/test/clojure-mode-util-test.el
+++ b/test/clojure-mode-util-test.el
@@ -359,7 +359,11 @@
     (with-clojure-buffer-point
         "(defn |^{:doc \"A function\"} foo [] 1)
          (defn ^:private bar 2)"
-        (expect (clojure-find-def) :to-equal '("defn" "foo"))))
+        (expect (clojure-find-def) :to-equal '("defn" "foo")))
+    (with-clojure-buffer-point
+        "(defn+ |my-special-fn []
+   (body))"
+        (expect (clojure-find-def) :to-equal '("defn+" "my-special-fn"))))
   (it "should recognize deftest, with or without metadata added to the var"
     (with-clojure-buffer-point
         "|(deftest ^{:a 1} simple-metadata)

Reply via email to