From 5c1482425e2ad0575e61c2b2e405bcf459887d81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Vaeng=20R=C3=B8tnes?= Date: Wed, 20 Nov 2024 09:18:32 +0100 Subject: [PATCH 1/4] Relax regexp for clojure-find-def --- clojure-mode.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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_\\)+\\)")) From 1e83052097db35ded17c97680b5a5b7ce9fb3cbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Vaeng=20R=C3=B8tnes?= Date: Thu, 21 Nov 2024 09:35:44 +0100 Subject: [PATCH 2/4] Add tests for clojure-find-def --- test/clojure-mode-util-test.el | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/test/clojure-mode-util-test.el b/test/clojure-mode-util-test.el index 78a2ac17..4f79f2ff 100644 --- a/test/clojure-mode-util-test.el +++ b/test/clojure-mode-util-test.el @@ -331,6 +331,38 @@ {:nested (in|c x)})" (clojure-toggle-ignore-defun))) +(describe "clojure-find-def" + (it "should recognize def" + (with-clojure-buffer-point "(def foo 1)| +(def bar 2)" + (expect (clojure-find-def) :to-equal '("def" "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 From 76e987d7e5e9d12a1464c87c2f4bb5a9b76c31bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Vaeng=20R=C3=B8tnes?= Date: Thu, 21 Nov 2024 09:54:38 +0100 Subject: [PATCH 3/4] Update CHANGELOG --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) 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 From 33ae69f87da20031e55550b19a4269e92a95f1a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Vaeng=20R=C3=B8tnes?= Date: Thu, 21 Nov 2024 10:54:54 +0100 Subject: [PATCH 4/4] Add more tests --- test/clojure-mode-util-test.el | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/test/clojure-mode-util-test.el b/test/clojure-mode-util-test.el index 4f79f2ff..f1895b67 100644 --- a/test/clojure-mode-util-test.el +++ b/test/clojure-mode-util-test.el @@ -332,10 +332,23 @@ (clojure-toggle-ignore-defun))) (describe "clojure-find-def" - (it "should recognize def" - (with-clojure-buffer-point "(def foo 1)| -(def bar 2)" - (expect (clojure-find-def) :to-equal '("def" "foo")))) + (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)