|
20 | 20 |
|
21 | 21 | ;; map destructuring |
22 | 22 |
|
23 | | -(s/def ::keys (s/coll-of ident? :kind vector?)) |
24 | | -(s/def ::syms (s/coll-of symbol? :kind vector?)) |
25 | | -(s/def ::strs (s/coll-of simple-symbol? :kind vector?)) |
| 23 | +(s/def ::non-binding-elements (s/cat :ampersand #{'&} ::non-binding-element (s/+ ident?))) |
| 24 | +(s/def ::keys-form (s/and vector? (s/cat :bindings (s/* ident?) :nonbinding (s/? ::non-binding-elements)))) |
| 25 | +(s/def ::syms-form (s/and vector? (s/cat :bindings (s/* symbol?) :nonbinding (s/? ::non-binding-elements)))) |
| 26 | +(s/def ::strs-form (s/and vector? (s/cat :bindings (s/* simple-symbol?) :nonbinding (s/? ::non-binding-elements)))) |
| 27 | + |
| 28 | +(s/def ::keys ::keys-form) |
| 29 | +(s/def ::syms ::syms-form) |
| 30 | +(s/def ::strs ::strs-form) |
| 31 | +(s/def ::keys! ::keys-form) |
| 32 | +(s/def ::syms! ::syms-form) |
| 33 | +(s/def ::strs! ::strs-form) |
26 | 34 | (s/def ::or (s/map-of simple-symbol? any?)) |
27 | 35 | (s/def ::as ::local-name) |
28 | 36 |
|
29 | 37 | (s/def ::map-special-binding |
30 | | - (s/keys :opt-un [::as ::or ::keys ::syms ::strs])) |
| 38 | + (s/keys :opt-un [::as ::or ::keys ::syms ::strs ::keys! ::syms! ::strs!])) |
31 | 39 |
|
32 | 40 | (s/def ::map-binding (s/tuple ::binding-form any?)) |
33 | 41 |
|
34 | 42 | (s/def ::ns-keys |
35 | 43 | (s/tuple |
36 | | - (s/and qualified-keyword? #(-> % name #{"keys" "syms"})) |
37 | | - (s/coll-of simple-symbol? :kind vector?))) |
| 44 | + (s/and qualified-keyword? #(-> % name #{"keys" "syms" "keys!" "syms!"})) |
| 45 | + ::syms-form)) |
38 | 46 |
|
39 | 47 | (s/def ::map-bindings |
40 | 48 | (s/every (s/or :map-binding ::map-binding |
41 | 49 | :qualified-keys-or-syms ::ns-keys |
42 | | - :special-binding (s/tuple #{:as :or :keys :syms :strs} any?)) :kind map?)) |
| 50 | + :special-binding (s/tuple #{:as :or :keys :syms :strs :keys! :syms! :strs!} any?)) :kind map?)) |
43 | 51 |
|
44 | 52 | (s/def ::map-binding-form (s/merge ::map-bindings ::map-special-binding)) |
45 | 53 |
|
|
0 commit comments