From 418beea2fba810f5d22fe23231c62324744a5e86 Mon Sep 17 00:00:00 2001 From: Martynas M Date: Wed, 31 Aug 2022 13:57:32 +0300 Subject: [PATCH 1/7] Keyword and Symbol prefix matching --- syntax/clojure.vim | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/syntax/clojure.vim b/syntax/clojure.vim index d534200..96192ab 100644 --- a/syntax/clojure.vim +++ b/syntax/clojure.vim @@ -62,13 +62,16 @@ endif unlet! s:key delfunction s:syntax_keyword +syntax match clojureKeywordNs contained "\v[^/ :']+\ze/" +syntax match clojureKeywordNsSeparator contained "/" +syntax match clojureKeywordNsColon contained "\v<:{1,2}" " Keywords are symbols: " static Pattern symbolPat = Pattern.compile("[:]?([\\D&&[^/]].*/)?([\\D&&[^/]][^/]*)"); " But they: " * Must not end in a : or / " * Must not have two adjacent colons except at the beginning " * Must not contain any reader metacharacters except for ' and # -syntax match clojureKeyword "\v<:{1,2}([^ \n\r\t()\[\]{}";@^`~\\/]+/)*[^ \n\r\t()\[\]{}";@^`~\\/]+:@1" +syntax match clojureKeyword "\v<:{1,2}([^ \n\r\t()\[\]{}";@^`~\\/]+/)*[^ \n\r\t()\[\]{}";@^`~\\/]+:@1" contains=clojureKeywordNs,clojureKeywordNsSeparator,clojureKeywordNsColon syntax match clojureStringEscape "\v\\%([\\btnfr"]|u\x{4}|[0-3]\o{2}|\o{1,2})" contained @@ -76,7 +79,9 @@ syntax region clojureString matchgroup=clojureStringDelimiter start=/"/ skip=/\\ syntax match clojureCharacter "\v\\%(o%([0-3]\o{2}|\o{1,2})|u\x{4}|newline|tab|space|return|backspace|formfeed|.)" -syntax match clojureSymbol "\v%([a-zA-Z!$&*_+=|<.>?-]|[^\x00-\x7F])+%(:?%([a-zA-Z0-9!#$%&*_+=|'<.>/?-]|[^\x00-\x7F]))*[#:]@1?-]|[^\x00-\x7F])+%(:?%([a-zA-Z0-9!#$%&*_+=|'<.>/?-]|[^\x00-\x7F]))*[#:]@1" @@ -162,12 +167,17 @@ syntax sync fromstart highlight default link clojureConstant Constant highlight default link clojureBoolean Boolean highlight default link clojureCharacter Character -highlight default link clojureKeyword Keyword highlight default link clojureNumber Number highlight default link clojureString String highlight default link clojureStringDelimiter String highlight default link clojureStringEscape Character +highlight default link clojureKeyword Keyword +highlight default link clojureKeywordNsColon clojureKeyword +highlight default link clojureKeywordNs clojureKeyword + +highlight default link clojureSymbolNs clojureSymbol + highlight default link clojureRegexp Constant highlight default link clojureRegexpDelimiter Constant highlight default link clojureRegexpEscape Character From 680cb6920f0105c7f06bab3becb09fca38275d10 Mon Sep 17 00:00:00 2001 From: Martynas M Date: Sun, 4 Sep 2022 10:37:16 +0300 Subject: [PATCH 2/7] Fix keyword and symbol tests --- clj/test/vim/syntax_test.clj | 44 ++++++++++++++++++++++++++++-------- clj/test/vim/test.clj | 22 ++++++++++++++---- 2 files changed, 52 insertions(+), 14 deletions(-) diff --git a/clj/test/vim/syntax_test.clj b/clj/test/vim/syntax_test.clj index 13a938e..f58917d 100644 --- a/clj/test/vim/syntax_test.clj +++ b/clj/test/vim/syntax_test.clj @@ -2,13 +2,16 @@ ;; Joel Holdbrooks (ns vim.syntax-test - (:require [vim.test :refer [defpredicates defsyntaxtest]])) + (:require [vim.test :refer [defpredicates defsyntaxtest def-eq-predicates]])) ;; defpredicates also register not-equal vars, this is just for clj-kondo (declare !number !regexp-escape !regexp-posix-char-class !regexp-quantifier) (defpredicates number :clojureNumber) -(defpredicates kw :clojureKeyword) +(def-eq-predicates kw [:clojureKeywordNsColon :clojureKeyword]) +(def-eq-predicates kwWithNs [:clojureKeywordNsColon :clojureKeyword]) +(def-eq-predicates sym [:clojureSymbolNsColon :clojureSymbol]) +(def-eq-predicates symWithNs [:clojureSymbolNsColon :clojureSymbol]) (defpredicates character :clojureCharacter) (defpredicates regexp :clojureRegexp) (defpredicates regexp-delimiter :clojureRegexpDelimiter) @@ -115,16 +118,38 @@ ":a" kw ":αβγ" kw "::a" kw - ":a/b" kw + ":a/b" kwWithNs ":a:b" kw - ":a:b/:c:b" kw - ":a/b/c/d" kw - "::a/b" kw + ":a:b/:c:b" kwWithNs + ":a/b/c/d" kwWithNs + "::a/b" kwWithNs "::" !kw + "::" !kwWithNs ":a:" !kw + ":a:" !kwWithNs ":a/" !kw - ; ":/" !kw ; This is legal, but for simplicity we do not match it - ":" !kw]]) + ":a/" !kwWithNs + ":/" !kw ; This is legal, but for simplicity we do not match it + ":/" !kwWithNs ; This is legal, but for simplicity we do not match it + ":" !kw + ":" !kwWithNs]]) + +(defsyntaxtest symbols-test + ["%s" + ["1" !sym + "1" !symWithNs + "A" sym + "a" sym + "αβγ" sym + "a/b" symWithNs + "a:b" sym + "a:b/:c:b" symWithNs + "a/b/c/d" symWithNs + "a:" !sym + "a:" !symWithNs + "a/" !sym + "a/" !symWithNs + "/" sym]]) (comment (test #'keywords-test)) @@ -403,8 +428,7 @@ ;; (?>X) X, as an independent, non-capturing group "(?>X)" regexp-mod - "(?X)" !regexp-mod - ]] + "(?X)" !regexp-mod]] ["#%s" [;; Backslashes with character classes "\"[\\\\]\"" (partial = [:clojureRegexpDelimiter :clojureRegexpCharClass :clojureRegexpCharClass :clojureRegexpCharClass :clojureRegexpCharClass :clojureRegexpDelimiter]) diff --git a/clj/test/vim/test.clj b/clj/test/vim/test.clj index 7dd5bf3..fb1fe9b 100644 --- a/clj/test/vim/test.clj +++ b/clj/test/vim/test.clj @@ -90,21 +90,35 @@ ss λs))) contexts))))) -(defmacro defpredicates +(defmacro defpredicates-general "Create two complementary predicate vars, `sym` and `!sym`, which test if all members of a passed collection are equal to `kw`" - [sym kw] + [pred-eq pred-neq sym kw] `(do (defn ~sym ~(str "Returns true if all elements of coll equal " kw) {:arglists '~'[coll]} [coll#] - (every? (partial = ~kw) coll#)) + (~pred-eq ~kw coll#)) (defn ~(symbol (str \! sym)) ~(str "Returns true if any elements of coll do not equal " kw) {:arglists '~'[coll]} [coll#] - (boolean (some (partial not= ~kw) coll#))))) + (~pred-neq ~kw coll#)))) + +(defmacro defpredicates + "Create two complementary predicate vars, `sym` and `!sym`, which test if + all members of a passed collection are equal to `kw`" + [sym kw] + (let [pred-eq (fn [expected results] (every? (partial = expected) results)) + pred-neq (fn [expected results] (boolean (some (partial not= expected) results)))] + `(defpredicates-general ~pred-eq ~pred-neq ~sym ~kw))) + +(defmacro def-eq-predicates + "Create two complementary predicate vars, `sym` and `!sym`, which test if + input and result are equal" + [sym kw] + `(defpredicates-general '= 'not= ~sym ~kw)) (defn benchmark [n file buf & exprs] (vim-exec file buf (format "Benchmark(%d, %s)" From 11c54782316014fb2a312890aed52b549539ef93 Mon Sep 17 00:00:00 2001 From: Martynas M Date: Mon, 5 Sep 2022 13:57:47 +0300 Subject: [PATCH 3/7] Fix tests; Add regex hacks --- clj/test/vim/syntax_test.clj | 74 ++++++++++++++++++++++++------------ clj/test/vim/test.clj | 6 +-- syntax/clojure.vim | 6 +-- 3 files changed, 55 insertions(+), 31 deletions(-) diff --git a/clj/test/vim/syntax_test.clj b/clj/test/vim/syntax_test.clj index f58917d..56cd4bd 100644 --- a/clj/test/vim/syntax_test.clj +++ b/clj/test/vim/syntax_test.clj @@ -9,9 +9,27 @@ (defpredicates number :clojureNumber) (def-eq-predicates kw [:clojureKeywordNsColon :clojureKeyword]) -(def-eq-predicates kwWithNs [:clojureKeywordNsColon :clojureKeyword]) -(def-eq-predicates sym [:clojureSymbolNsColon :clojureSymbol]) -(def-eq-predicates symWithNs [:clojureSymbolNsColon :clojureSymbol]) +(def-eq-predicates kwCurrentNs [:clojureKeywordNsColon :clojureKeywordNsColon :clojureKeyword]) +(def-eq-predicates kwWithNs [:clojureKeywordNsColon :clojureKeywordNs :clojureKeywordNsSeparator :clojureKeyword]) +(def-eq-predicates kwWithNs3_4 [:clojureKeywordNsColon + :clojureKeywordNs + :clojureKeywordNs + :clojureKeywordNs + :clojureKeywordNsSeparator + :clojureKeyword + :clojureKeyword + :clojureKeyword + :clojureKeyword]) +(def-eq-predicates sym [:clojureSymbol]) +(def-eq-predicates symWithNs [:clojureSymbol]) +(def-eq-predicates symWithNs_tripleBody [:clojureKeywordNsColon + :clojureKeywordNs :clojureKeywordNsSeparator + :clojureKeywordNs :clojureKeywordNsSeparator + :clojureKeywordNs :clojureKeywordNsSeparator + :clojureKeyword]) +(def-eq-predicates kwWithNamedNs [:clojureKeywordNsColon :clojureKeywordNsColon + :clojureKeywordNs :clojureKeywordNsSeparator :clojureKeyword]) + (defpredicates character :clojureCharacter) (defpredicates regexp :clojureRegexp) (defpredicates regexp-delimiter :clojureRegexpDelimiter) @@ -111,28 +129,24 @@ (comment (test #'test-character-literals)) +(def emptyKeyword (keyword "")) + (defsyntaxtest keywords-test ["%s" [":1" kw ":A" kw ":a" kw - ":αβγ" kw - "::a" kw + ":αβγ" (partial = [:clojureKeywordNsColon :clojureKeyword :clojureKeyword :clojureKeyword]) + "::a" kwCurrentNs ":a/b" kwWithNs - ":a:b" kw - ":a:b/:c:b" kwWithNs - ":a/b/c/d" kwWithNs - "::a/b" kwWithNs - "::" !kw - "::" !kwWithNs - ":a:" !kw - ":a:" !kwWithNs - ":a/" !kw - ":a/" !kwWithNs - ":/" !kw ; This is legal, but for simplicity we do not match it - ":/" !kwWithNs ; This is legal, but for simplicity we do not match it - ":" !kw - ":" !kwWithNs]]) + ":a:b/:c:b" kwWithNs3_4 + ":a/b/c/d" symWithNs_tripleBody + "::a/b" kwWithNamedNs + "::" (partial = [emptyKeyword emptyKeyword]) + ":a:" (partial = [emptyKeyword :clojureSymbol emptyKeyword]) + ":a/" (partial = [:clojureKeywordNsColon :clojureKeywordNs :clojureKeywordNsSeparator]) + ":/" (partial = [:clojureKeywordNsColon :clojureKeywordNsSeparator]) + ":" (partial = [emptyKeyword])]]) (defsyntaxtest symbols-test ["%s" @@ -140,16 +154,26 @@ "1" !symWithNs "A" sym "a" sym - "αβγ" sym - "a/b" symWithNs - "a:b" sym - "a:b/:c:b" symWithNs - "a/b/c/d" symWithNs + "αβγ" (partial = [:clojureSymbol :clojureSymbol :clojureSymbol]) + "a/b" (partial = [:clojureSymbolNs :clojureSymbolNsSeparator :clojureSymbol]) + "a:b" (partial = [:clojureSymbol :clojureSymbol :clojureSymbol]) + "a:b/:c:b" (partial = [:clojureSymbolNs + :clojureSymbolNs + :clojureSymbolNs + :clojureSymbolNsSeparator + :clojureSymbol + :clojureSymbol + :clojureSymbol + :clojureSymbol]) + "a/b/c/d" (partial = [:clojureSymbolNs :clojureSymbolNsSeparator + :clojureSymbolNs :clojureSymbolNsSeparator + :clojureSymbolNs :clojureSymbolNsSeparator + :clojureSymbol]) "a:" !sym "a:" !symWithNs "a/" !sym "a/" !symWithNs - "/" sym]]) + "/" !sym]]) (comment (test #'keywords-test)) diff --git a/clj/test/vim/test.clj b/clj/test/vim/test.clj index fb1fe9b..cb8f539 100644 --- a/clj/test/vim/test.clj +++ b/clj/test/vim/test.clj @@ -97,12 +97,12 @@ `(do (defn ~sym ~(str "Returns true if all elements of coll equal " kw) - {:arglists '~'[coll]} + {:arglists (list '~'[coll])} [coll#] (~pred-eq ~kw coll#)) (defn ~(symbol (str \! sym)) ~(str "Returns true if any elements of coll do not equal " kw) - {:arglists '~'[coll]} + {:arglists (list '~'[coll])} [coll#] (~pred-neq ~kw coll#)))) @@ -118,7 +118,7 @@ "Create two complementary predicate vars, `sym` and `!sym`, which test if input and result are equal" [sym kw] - `(defpredicates-general '= 'not= ~sym ~kw)) + `(defpredicates-general = not= ~sym ~kw)) (defn benchmark [n file buf & exprs] (vim-exec file buf (format "Benchmark(%d, %s)" diff --git a/syntax/clojure.vim b/syntax/clojure.vim index 96192ab..d67dc2f 100644 --- a/syntax/clojure.vim +++ b/syntax/clojure.vim @@ -62,7 +62,7 @@ endif unlet! s:key delfunction s:syntax_keyword -syntax match clojureKeywordNs contained "\v[^/ :']+\ze/" +syntax match clojureKeywordNs contained "\v[^/: ']+[^/ ']*\ze/" syntax match clojureKeywordNsSeparator contained "/" syntax match clojureKeywordNsColon contained "\v<:{1,2}" " Keywords are symbols: @@ -71,7 +71,7 @@ syntax match clojureKeywordNsColon contained "\v<:{1,2}" " * Must not end in a : or / " * Must not have two adjacent colons except at the beginning " * Must not contain any reader metacharacters except for ' and # -syntax match clojureKeyword "\v<:{1,2}([^ \n\r\t()\[\]{}";@^`~\\/]+/)*[^ \n\r\t()\[\]{}";@^`~\\/]+:@1" contains=clojureKeywordNs,clojureKeywordNsSeparator,clojureKeywordNsColon +syntax match clojureKeyword "\v<:{1,2}([^ \n\r\t()\[\]{}";@^`~\\/]*/)*[^ \n\r\t()\[\]{}";@^`~\\/]*:@1" contains=clojureKeywordNs,clojureKeywordNsSeparator,clojureKeywordNsColon syntax match clojureStringEscape "\v\\%([\\btnfr"]|u\x{4}|[0-3]\o{2}|\o{1,2})" contained @@ -79,7 +79,7 @@ syntax region clojureString matchgroup=clojureStringDelimiter start=/"/ skip=/\\ syntax match clojureCharacter "\v\\%(o%([0-3]\o{2}|\o{1,2})|u\x{4}|newline|tab|space|return|backspace|formfeed|.)" -syntax match clojureSymbolNs contained "\v[^/ :']+\ze/" +syntax match clojureSymbolNs contained "\v[^/ ]+\ze/" syntax match clojureSymbolNsSeparator contained "/" syntax match clojureSymbol "\v%([a-zA-Z!$&*_+=|<.>?-]|[^\x00-\x7F])+%(:?%([a-zA-Z0-9!#$%&*_+=|'<.>/?-]|[^\x00-\x7F]))*[#:]@1 Date: Wed, 7 Sep 2022 09:04:13 +0300 Subject: [PATCH 4/7] Dispatch with symbol won't break parens --- clj/test/vim/syntax_test.clj | 25 +++++++++++++++++++++++-- syntax/clojure.vim | 2 +- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/clj/test/vim/syntax_test.clj b/clj/test/vim/syntax_test.clj index 56cd4bd..ff01f13 100644 --- a/clj/test/vim/syntax_test.clj +++ b/clj/test/vim/syntax_test.clj @@ -29,7 +29,27 @@ :clojureKeyword]) (def-eq-predicates kwWithNamedNs [:clojureKeywordNsColon :clojureKeywordNsColon :clojureKeywordNs :clojureKeywordNsSeparator :clojureKeyword]) - +(def-eq-predicates dispatchWithSymbolInside [:clojureDispatch + :clojureSymbol + :clojureSymbol + :clojureSymbol + :clojureSymbol + :clojureSymbol + :clojureSymbol + :clojureSymbol + :clojureSymbol + :clojureParen + :clojureSymbolNs + :clojureSymbolNs + :clojureSymbolNs + :clojureSymbolNs + :clojureSymbolNsSeparator + :clojureSymbol + :clojureSymbol + :clojureSymbol + :clojureSymbol + :clojureSymbol + :clojureParen]) (defpredicates character :clojureCharacter) (defpredicates regexp :clojureRegexp) (defpredicates regexp-delimiter :clojureRegexpDelimiter) @@ -173,7 +193,8 @@ "a:" !symWithNs "a/" !sym "a/" !symWithNs - "/" !sym]]) + "/" !sym + "#function[test/hello]" dispatchWithSymbolInside]]) (comment (test #'keywords-test)) diff --git a/syntax/clojure.vim b/syntax/clojure.vim index d67dc2f..e2d9b92 100644 --- a/syntax/clojure.vim +++ b/syntax/clojure.vim @@ -79,7 +79,7 @@ syntax region clojureString matchgroup=clojureStringDelimiter start=/"/ skip=/\\ syntax match clojureCharacter "\v\\%(o%([0-3]\o{2}|\o{1,2})|u\x{4}|newline|tab|space|return|backspace|formfeed|.)" -syntax match clojureSymbolNs contained "\v[^/ ]+\ze/" +syntax match clojureSymbolNs contained "\v[^/\[ ]+\ze/" syntax match clojureSymbolNsSeparator contained "/" syntax match clojureSymbol "\v%([a-zA-Z!$&*_+=|<.>?-]|[^\x00-\x7F])+%(:?%([a-zA-Z0-9!#$%&*_+=|'<.>/?-]|[^\x00-\x7F]))*[#:]@1 Date: Tue, 13 Sep 2022 08:53:16 +0300 Subject: [PATCH 5/7] Parens placed immediately after symbols won't break syntax --- clj/test/vim/syntax_test.clj | 17 +++++++++++++++-- syntax/clojure.vim | 2 +- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/clj/test/vim/syntax_test.clj b/clj/test/vim/syntax_test.clj index ff01f13..e2baffd 100644 --- a/clj/test/vim/syntax_test.clj +++ b/clj/test/vim/syntax_test.clj @@ -166,7 +166,14 @@ ":a:" (partial = [emptyKeyword :clojureSymbol emptyKeyword]) ":a/" (partial = [:clojureKeywordNsColon :clojureKeywordNs :clojureKeywordNsSeparator]) ":/" (partial = [:clojureKeywordNsColon :clojureKeywordNsSeparator]) - ":" (partial = [emptyKeyword])]]) + ":" (partial = [emptyKeyword]) + "a[:b/c]" (partial = [:clojureSymbol + :clojureParen + :clojureKeywordNsColon + :clojureKeywordNs + :clojureKeywordNsSeparator + :clojureKeyword + :clojureParen])]]) (defsyntaxtest symbols-test ["%s" @@ -194,7 +201,13 @@ "a/" !sym "a/" !symWithNs "/" !sym - "#function[test/hello]" dispatchWithSymbolInside]]) + "#function[test/hello]" dispatchWithSymbolInside + "a[b/c]" (partial = [:clojureSymbol + :clojureParen + :clojureSymbolNs + :clojureSymbolNsSeparator + :clojureSymbol + :clojureParen])]]) (comment (test #'keywords-test)) diff --git a/syntax/clojure.vim b/syntax/clojure.vim index e2d9b92..25abc09 100644 --- a/syntax/clojure.vim +++ b/syntax/clojure.vim @@ -79,7 +79,7 @@ syntax region clojureString matchgroup=clojureStringDelimiter start=/"/ skip=/\\ syntax match clojureCharacter "\v\\%(o%([0-3]\o{2}|\o{1,2})|u\x{4}|newline|tab|space|return|backspace|formfeed|.)" -syntax match clojureSymbolNs contained "\v[^/\[ ]+\ze/" +syntax match clojureSymbolNs contained "\v[^/\[\(\{ ]+\ze/" syntax match clojureSymbolNsSeparator contained "/" syntax match clojureSymbol "\v%([a-zA-Z!$&*_+=|<.>?-]|[^\x00-\x7F])+%(:?%([a-zA-Z0-9!#$%&*_+=|'<.>/?-]|[^\x00-\x7F]))*[#:]@1 Date: Tue, 13 Sep 2022 15:07:49 +0300 Subject: [PATCH 6/7] Fix keyword ns regex to correctly match :a[:b/c] --- clj/test/vim/syntax_test.clj | 18 ++++++++++++++++-- syntax/clojure.vim | 2 +- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/clj/test/vim/syntax_test.clj b/clj/test/vim/syntax_test.clj index e2baffd..67f3d7c 100644 --- a/clj/test/vim/syntax_test.clj +++ b/clj/test/vim/syntax_test.clj @@ -173,7 +173,15 @@ :clojureKeywordNs :clojureKeywordNsSeparator :clojureKeyword - :clojureParen])]]) + :clojureParen]) + ":a[:b/c]" (partial = [:clojureKeywordNsColon + :clojureKeyword + :clojureParen + :clojureKeywordNsColon + :clojureKeywordNs + :clojureKeywordNsSeparator + :clojureKeyword + :clojureParen])]]) (defsyntaxtest symbols-test ["%s" @@ -207,7 +215,13 @@ :clojureSymbolNs :clojureSymbolNsSeparator :clojureSymbol - :clojureParen])]]) + :clojureParen]) + "#'a/b" (partial = [:clojureDispatch + :clojureDispatch + :clojureSymbolNs + :clojureSymbolNsSeparator + :clojureSymbol + :clojureParen])]]) (comment (test #'keywords-test)) diff --git a/syntax/clojure.vim b/syntax/clojure.vim index 25abc09..12c119c 100644 --- a/syntax/clojure.vim +++ b/syntax/clojure.vim @@ -62,7 +62,7 @@ endif unlet! s:key delfunction s:syntax_keyword -syntax match clojureKeywordNs contained "\v[^/: ']+[^/ ']*\ze/" +syntax match clojureKeywordNs contained "\v[^ \n\r\t()\[\]{}";@^`~\\\/'#]+\ze\/" syntax match clojureKeywordNsSeparator contained "/" syntax match clojureKeywordNsColon contained "\v<:{1,2}" " Keywords are symbols: From 7d46e29099b2484a9b650f7c65af142a43bf407b Mon Sep 17 00:00:00 2001 From: Martynas M Date: Tue, 13 Sep 2022 15:25:49 +0300 Subject: [PATCH 7/7] Fix symbol namespace matching to be the same as kw ns --- clj/test/vim/syntax_test.clj | 3 +-- syntax/clojure.vim | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/clj/test/vim/syntax_test.clj b/clj/test/vim/syntax_test.clj index 67f3d7c..abf9cf6 100644 --- a/clj/test/vim/syntax_test.clj +++ b/clj/test/vim/syntax_test.clj @@ -220,8 +220,7 @@ :clojureDispatch :clojureSymbolNs :clojureSymbolNsSeparator - :clojureSymbol - :clojureParen])]]) + :clojureSymbol])]]) (comment (test #'keywords-test)) diff --git a/syntax/clojure.vim b/syntax/clojure.vim index 12c119c..5db618b 100644 --- a/syntax/clojure.vim +++ b/syntax/clojure.vim @@ -79,7 +79,7 @@ syntax region clojureString matchgroup=clojureStringDelimiter start=/"/ skip=/\\ syntax match clojureCharacter "\v\\%(o%([0-3]\o{2}|\o{1,2})|u\x{4}|newline|tab|space|return|backspace|formfeed|.)" -syntax match clojureSymbolNs contained "\v[^/\[\(\{ ]+\ze/" +syntax match clojureSymbolNs contained "\v[^ \n\r\t()\[\]{}";@^`~\\\/'#]+\ze\/" syntax match clojureSymbolNsSeparator contained "/" syntax match clojureSymbol "\v%([a-zA-Z!$&*_+=|<.>?-]|[^\x00-\x7F])+%(:?%([a-zA-Z0-9!#$%&*_+=|'<.>/?-]|[^\x00-\x7F]))*[#:]@1