From bf10df350e0e5a9cd9d4386c4b3f4cba61e62118 Mon Sep 17 00:00:00 2001 From: vemv Date: Tue, 19 Jul 2022 19:04:13 +0200 Subject: [PATCH] x --- CHANGELOG.md | 4 ++++ test.clj | 4 ++++ test/clojure-mode-syntax-test.el | 31 +++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ebcf9bdc..2d559620 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ * [#622](https://github.com/clojure-emacs/clojure-mode/issues/622): Add font locking for missing clojure.core macros * [#615](https://github.com/clojure-emacs/clojure-mode/issues/615): Support clojure-dart files. +### Bugs fixed + +* [#595](https://github.com/clojure-emacs/clojure-mode/issues/595), [#612](https://github.com/clojure-emacs/clojure-mode/issues/612): Fix buffer freezing when typing metadata for a definition + ## 5.14.0 (2022-03-07) ### New features diff --git a/test.clj b/test.clj index 147171a1..a1d67dfa 100644 --- a/test.clj +++ b/test.clj @@ -223,6 +223,10 @@ ([x y & more] (reduce1 max (max x y) more))) + +;; definitions with metadata only don't cause freezing +(def ^String) + (defn ^String reverse "Returns s with its characters reversed." {:added "1.2"} diff --git a/test/clojure-mode-syntax-test.el b/test/clojure-mode-syntax-test.el index bc71eaab..8ac8938f 100644 --- a/test/clojure-mode-syntax-test.el +++ b/test/clojure-mode-syntax-test.el @@ -60,6 +60,37 @@ (expect (non-func "^hint " form) :to-be nil) (expect (non-func "#macro " form) :to-be nil)))) +(describe "clojure-match-next-def" + (let ((some-sexp "\n(list [1 2 3])")) + (it "handles vars with metadata" + (dolist (form '("(def ^Integer a 1)" + "(def ^:a a 1)" + "(def ^::a a 1)" + "(def ^::a/b a 1)" + "(def ^{:macro true} a 1)")) + (with-clojure-buffer (concat form some-sexp) + (end-of-buffer) + (clojure-match-next-def) + (expect (looking-at "(def"))))) + + (it "handles vars without metadata" + (with-clojure-buffer (concat "(def a 1)" some-sexp) + (end-of-buffer) + (clojure-match-next-def) + (expect (looking-at "(def")))) + + (it "handles invalid def forms" + (dolist (form '("(def ^Integer)" + "(def)" + "(def ^{:macro})" + "(def ^{:macro true})" + "(def ^{:macro true} foo)" + "(def ^{:macro} foo)")) + (with-clojure-buffer (concat form some-sexp) + (end-of-buffer) + (clojure-match-next-def) + (expect (looking-at "(def"))))))) + (describe "clojure syntax" (it "handles prefixed symbols" (dolist (form '(("#?@aaa" . "aaa")