|
2 | 2 | ;; Joel Holdbrooks <[email protected]>
|
3 | 3 |
|
4 | 4 | (ns vim.syntax-test
|
5 |
| - (:require [vim.test :refer [defpredicates defsyntaxtest]])) |
| 5 | + (:require [vim.test :refer [defpredicates defsyntaxtest def-eq-predicates]])) |
6 | 6 |
|
7 | 7 | ;; defpredicates also register not-equal vars, this is just for clj-kondo
|
8 | 8 | (declare !number !regexp-escape !regexp-posix-char-class !regexp-quantifier)
|
9 | 9 |
|
10 | 10 | (defpredicates number :clojureNumber)
|
11 |
| -(defpredicates kw :clojureKeyword) |
| 11 | +(def-eq-predicates kw [:clojureKeywordNsColon :clojureKeyword]) |
| 12 | +(def-eq-predicates kwCurrentNs [:clojureKeywordNsColon :clojureKeywordNsColon :clojureKeyword]) |
| 13 | +(def-eq-predicates kwWithNs [:clojureKeywordNsColon :clojureKeywordNs :clojureKeywordNsSeparator :clojureKeyword]) |
| 14 | +(def-eq-predicates kwWithNs3_4 [:clojureKeywordNsColon |
| 15 | + :clojureKeywordNs |
| 16 | + :clojureKeywordNs |
| 17 | + :clojureKeywordNs |
| 18 | + :clojureKeywordNsSeparator |
| 19 | + :clojureKeyword |
| 20 | + :clojureKeyword |
| 21 | + :clojureKeyword |
| 22 | + :clojureKeyword]) |
| 23 | +(def-eq-predicates sym [:clojureSymbol]) |
| 24 | +(def-eq-predicates symWithNs [:clojureSymbol]) |
| 25 | +(def-eq-predicates symWithNs_tripleBody [:clojureKeywordNsColon |
| 26 | + :clojureKeywordNs :clojureKeywordNsSeparator |
| 27 | + :clojureKeywordNs :clojureKeywordNsSeparator |
| 28 | + :clojureKeywordNs :clojureKeywordNsSeparator |
| 29 | + :clojureKeyword]) |
| 30 | +(def-eq-predicates kwWithNamedNs [:clojureKeywordNsColon :clojureKeywordNsColon |
| 31 | + :clojureKeywordNs :clojureKeywordNsSeparator :clojureKeyword]) |
| 32 | +(def-eq-predicates dispatchWithSymbolInside [:clojureDispatch |
| 33 | + :clojureSymbol |
| 34 | + :clojureSymbol |
| 35 | + :clojureSymbol |
| 36 | + :clojureSymbol |
| 37 | + :clojureSymbol |
| 38 | + :clojureSymbol |
| 39 | + :clojureSymbol |
| 40 | + :clojureSymbol |
| 41 | + :clojureParen |
| 42 | + :clojureSymbolNs |
| 43 | + :clojureSymbolNs |
| 44 | + :clojureSymbolNs |
| 45 | + :clojureSymbolNs |
| 46 | + :clojureSymbolNsSeparator |
| 47 | + :clojureSymbol |
| 48 | + :clojureSymbol |
| 49 | + :clojureSymbol |
| 50 | + :clojureSymbol |
| 51 | + :clojureSymbol |
| 52 | + :clojureParen]) |
12 | 53 | (defpredicates character :clojureCharacter)
|
13 | 54 | (defpredicates regexp :clojureRegexp)
|
14 | 55 | (defpredicates regexp-delimiter :clojureRegexpDelimiter)
|
|
108 | 149 |
|
109 | 150 | (comment (test #'test-character-literals))
|
110 | 151 |
|
| 152 | +(def emptyKeyword (keyword "")) |
| 153 | + |
111 | 154 | (defsyntaxtest keywords-test
|
112 | 155 | ["%s"
|
113 | 156 | [":1" kw
|
114 | 157 | ":A" kw
|
115 | 158 | ":a" kw
|
116 |
| - ":αβγ" kw |
117 |
| - "::a" kw |
118 |
| - ":a/b" kw |
119 |
| - ":a:b" kw |
120 |
| - ":a:b/:c:b" kw |
121 |
| - ":a/b/c/d" kw |
122 |
| - "::a/b" kw |
123 |
| - "::" !kw |
124 |
| - ":a:" !kw |
125 |
| - ":a/" !kw |
126 |
| - ; ":/" !kw ; This is legal, but for simplicity we do not match it |
127 |
| - ":" !kw]]) |
| 159 | + ":αβγ" (partial = [:clojureKeywordNsColon :clojureKeyword :clojureKeyword :clojureKeyword]) |
| 160 | + "::a" kwCurrentNs |
| 161 | + ":a/b" kwWithNs |
| 162 | + ":a:b/:c:b" kwWithNs3_4 |
| 163 | + ":a/b/c/d" symWithNs_tripleBody |
| 164 | + "::a/b" kwWithNamedNs |
| 165 | + "::" (partial = [emptyKeyword emptyKeyword]) |
| 166 | + ":a:" (partial = [emptyKeyword :clojureSymbol emptyKeyword]) |
| 167 | + ":a/" (partial = [:clojureKeywordNsColon :clojureKeywordNs :clojureKeywordNsSeparator]) |
| 168 | + ":/" (partial = [:clojureKeywordNsColon :clojureKeywordNsSeparator]) |
| 169 | + ":" (partial = [emptyKeyword]) |
| 170 | + "a[:b/c]" (partial = [:clojureSymbol |
| 171 | + :clojureParen |
| 172 | + :clojureKeywordNsColon |
| 173 | + :clojureKeywordNs |
| 174 | + :clojureKeywordNsSeparator |
| 175 | + :clojureKeyword |
| 176 | + :clojureParen]) |
| 177 | + ":a[:b/c]" (partial = [:clojureKeywordNsColon |
| 178 | + :clojureKeyword |
| 179 | + :clojureParen |
| 180 | + :clojureKeywordNsColon |
| 181 | + :clojureKeywordNs |
| 182 | + :clojureKeywordNsSeparator |
| 183 | + :clojureKeyword |
| 184 | + :clojureParen])]]) |
| 185 | + |
| 186 | +(defsyntaxtest symbols-test |
| 187 | + ["%s" |
| 188 | + ["1" !sym |
| 189 | + "1" !symWithNs |
| 190 | + "A" sym |
| 191 | + "a" sym |
| 192 | + "αβγ" (partial = [:clojureSymbol :clojureSymbol :clojureSymbol]) |
| 193 | + "a/b" (partial = [:clojureSymbolNs :clojureSymbolNsSeparator :clojureSymbol]) |
| 194 | + "a:b" (partial = [:clojureSymbol :clojureSymbol :clojureSymbol]) |
| 195 | + "a:b/:c:b" (partial = [:clojureSymbolNs |
| 196 | + :clojureSymbolNs |
| 197 | + :clojureSymbolNs |
| 198 | + :clojureSymbolNsSeparator |
| 199 | + :clojureSymbol |
| 200 | + :clojureSymbol |
| 201 | + :clojureSymbol |
| 202 | + :clojureSymbol]) |
| 203 | + "a/b/c/d" (partial = [:clojureSymbolNs :clojureSymbolNsSeparator |
| 204 | + :clojureSymbolNs :clojureSymbolNsSeparator |
| 205 | + :clojureSymbolNs :clojureSymbolNsSeparator |
| 206 | + :clojureSymbol]) |
| 207 | + "a:" !sym |
| 208 | + "a:" !symWithNs |
| 209 | + "a/" !sym |
| 210 | + "a/" !symWithNs |
| 211 | + "/" !sym |
| 212 | + "#function[test/hello]" dispatchWithSymbolInside |
| 213 | + "a[b/c]" (partial = [:clojureSymbol |
| 214 | + :clojureParen |
| 215 | + :clojureSymbolNs |
| 216 | + :clojureSymbolNsSeparator |
| 217 | + :clojureSymbol |
| 218 | + :clojureParen]) |
| 219 | + "#'a/b" (partial = [:clojureDispatch |
| 220 | + :clojureDispatch |
| 221 | + :clojureSymbolNs |
| 222 | + :clojureSymbolNsSeparator |
| 223 | + :clojureSymbol])]]) |
128 | 224 |
|
129 | 225 | (comment (test #'keywords-test))
|
130 | 226 |
|
|
403 | 499 | ;; (?>X) X, as an independent, non-capturing group
|
404 | 500 | "(?>X)" regexp-mod
|
405 | 501 |
|
406 |
| - "(?X)" !regexp-mod |
407 |
| - ]] |
| 502 | + "(?X)" !regexp-mod]] |
408 | 503 | ["#%s"
|
409 | 504 | [;; Backslashes with character classes
|
410 | 505 | "\"[\\\\]\"" (partial = [:clojureRegexpDelimiter :clojureRegexpCharClass :clojureRegexpCharClass :clojureRegexpCharClass :clojureRegexpCharClass :clojureRegexpDelimiter])
|
|
0 commit comments