File tree 2 files changed +52
-14
lines changed
2 files changed +52
-14
lines changed Original file line number Diff line number Diff line change 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 kwWithNs [:clojureKeywordNsColon :clojureKeyword ])
13
+ (def-eq-predicates sym [:clojureSymbolNsColon :clojureSymbol ])
14
+ (def-eq-predicates symWithNs [:clojureSymbolNsColon :clojureSymbol ])
12
15
(defpredicates character :clojureCharacter )
13
16
(defpredicates regexp :clojureRegexp )
14
17
(defpredicates regexp-delimiter :clojureRegexpDelimiter )
115
118
" :a" kw
116
119
" :αβγ" kw
117
120
" ::a" kw
118
- " :a/b" kw
121
+ " :a/b" kwWithNs
119
122
" :a:b" kw
120
- " :a:b/:c:b" kw
121
- " :a/b/c/d" kw
122
- " ::a/b" kw
123
+ " :a:b/:c:b" kwWithNs
124
+ " :a/b/c/d" kwWithNs
125
+ " ::a/b" kwWithNs
123
126
" ::" !kw
127
+ " ::" !kwWithNs
124
128
" :a:" !kw
129
+ " :a:" !kwWithNs
125
130
" :a/" !kw
126
- ; ":/" !kw ; This is legal, but for simplicity we do not match it
127
- " :" !kw]])
131
+ " :a/" !kwWithNs
132
+ " :/" !kw
133
+ " :/" !kwWithNs
134
+ " :" !kw
135
+ " :" !kwWithNs]])
136
+
137
+ (defsyntaxtest symbols-test
138
+ [" %s"
139
+ [" 1" !sym
140
+ " 1" !symWithNs
141
+ " A" sym
142
+ " a" sym
143
+ " αβγ" sym
144
+ " a/b" symWithNs
145
+ " a:b" sym
146
+ " a:b/:c:b" symWithNs
147
+ " a/b/c/d" symWithNs
148
+ " a:" !sym
149
+ " a:" !symWithNs
150
+ " a/" !sym
151
+ " a/" !symWithNs
152
+ " /" sym]])
128
153
129
154
(comment (test #'keywords-test))
130
155
403
428
; ; (?>X) X, as an independent, non-capturing group
404
429
" (?>X)" regexp-mod
405
430
406
- " (?X)" !regexp-mod
407
- ]]
431
+ " (?X)" !regexp-mod]]
408
432
[" #%s"
409
433
[; ; Backslashes with character classes
410
434
" \" [\\\\ ]\" " (partial = [:clojureRegexpDelimiter :clojureRegexpCharClass :clojureRegexpCharClass :clojureRegexpCharClass :clojureRegexpCharClass :clojureRegexpDelimiter ])
Original file line number Diff line number Diff line change 90
90
ss λs)))
91
91
contexts)))))
92
92
93
- (defmacro defpredicates
93
+ (defmacro defpredicates-general
94
94
" Create two complementary predicate vars, `sym` and `!sym`, which test if
95
95
all members of a passed collection are equal to `kw`"
96
- [sym kw]
96
+ [pred-eq pred-neq sym kw]
97
97
`(do
98
98
(defn ~sym
99
99
~(str " Returns true if all elements of coll equal " kw)
100
100
{:arglists '~'[coll]}
101
101
[coll#]
102
- (every? ( partial = ~kw) coll#))
102
+ (~pred-eq ~kw coll#))
103
103
(defn ~(symbol (str \! sym))
104
104
~(str " Returns true if any elements of coll do not equal " kw)
105
105
{:arglists '~'[coll]}
106
106
[coll#]
107
- (boolean (some (partial not= ~kw) coll#)))))
107
+ (~pred-neq ~kw coll#))))
108
+
109
+ (defmacro defpredicates
110
+ " Create two complementary predicate vars, `sym` and `!sym`, which test if
111
+ all members of a passed collection are equal to `kw`"
112
+ [sym kw]
113
+ (let [pred-eq (fn [expected results] (every? (partial = expected) results))
114
+ pred-neq (fn [expected results] (boolean (some (partial not= expected) results)))]
115
+ `(defpredicates-general ~pred-eq ~pred-neq ~sym ~kw)))
116
+
117
+ (defmacro def-eq-predicates
118
+ " Create two complementary predicate vars, `sym` and `!sym`, which test if
119
+ input and result are equal"
120
+ [sym kw]
121
+ `(defpredicates-general '= 'not= ~sym ~kw))
108
122
109
123
(defn benchmark [n file buf & exprs]
110
124
(vim-exec file buf (format " Benchmark(%d, %s)"
You can’t perform that action at this time.
0 commit comments