diff --git a/CHANGELOG.md b/CHANGELOG.md index b5198123..f4cbb8e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## master (unreleased) +### Bugs fixed + +* [cider#3758](https://github.com/clojure-emacs/cider/issues/3758): Improve regexp for clojure-find-def to recognize more complex metadata on vars + ## 5.19.0 (2024-05-26) ### Bugs fixed diff --git a/clojure-mode.el b/clojure-mode.el index 1ff2e882..2281065f 100644 --- a/clojure-mode.el +++ b/clojure-mode.el @@ -2270,7 +2270,7 @@ renaming a namespace." ;; Any whitespace "[ \r\n\t]*" ;; Possibly type or metadata - "\\(?:#?^\\(?:{[^}]*}\\|\\(?:\\sw\\|\\s_\\)+\\)[ \r\n\t]*\\)*" + "\\(?:#?^\\(?:{[^}]*}+\\|\\(?:\\sw\\|\\s_\\)+\\)[ \r\n\t]*\\)*" ;; Symbol name "\\(\\(?:\\sw\\|\\s_\\)+\\)")) diff --git a/test/clojure-mode-util-test.el b/test/clojure-mode-util-test.el index 78a2ac17..f1895b67 100644 --- a/test/clojure-mode-util-test.el +++ b/test/clojure-mode-util-test.el @@ -331,6 +331,51 @@ {:nested (in|c x)})" (clojure-toggle-ignore-defun))) +(describe "clojure-find-def" + (it "should recognize def and defn" + (with-clojure-buffer-point + "(def foo 1)| + (defn bar [x y z] z)" + (expect (clojure-find-def) :to-equal '("def" "foo"))) + (with-clojure-buffer-point + "(def foo 1) + (defn bar |[x y z] z)" + (expect (clojure-find-def) :to-equal '("defn" "bar"))) + (with-clojure-buffer-point + "(def foo 1) + (defn ^:private bar |[x y z] z)" + (expect (clojure-find-def) :to-equal '("defn" "bar"))) + (with-clojure-buffer-point + "(defn |^{:doc \"A function\"} foo [] 1) + (defn ^:private bar 2)" + (expect (clojure-find-def) :to-equal '("defn" "foo")))) + (it "should recognize deftest, with or without metadata added to the var" + (with-clojure-buffer-point + "|(deftest ^{:a 1} simple-metadata) + (deftest ^{:a {}} complex-metadata) + (deftest no-metadata)" + (expect (clojure-find-def) :to-equal '("deftest" "simple-metadata"))) + (with-clojure-buffer-point + "(deftest ^{:a 1} |simple-metadata) + (deftest ^{:a {}} complex-metadata) + (deftest no-metadata)" + (expect (clojure-find-def) :to-equal '("deftest" "simple-metadata"))) + (with-clojure-buffer-point + "(deftest ^{:a 1} simple-metadata) + (deftest ^{:a {}} |complex-metadata) + (deftest no-metadata)" + (expect (clojure-find-def) :to-equal '("deftest" "complex-metadata"))) + (with-clojure-buffer-point + "(deftest ^{:a 1} simple-metadata) + (deftest ^{:|a {}} complex-metadata) + (deftest no-metadata)" + (expect (clojure-find-def) :to-equal '("deftest" "complex-metadata"))) + (with-clojure-buffer-point + "(deftest ^{:a 1} simple-metadata) + (deftest ^{:a {}} complex-metadata) + (deftest |no-metadata)" + (expect (clojure-find-def) :to-equal '("deftest" "no-metadata"))))) + (provide 'clojure-mode-util-test) ;;; clojure-mode-util-test.el ends here