Skip to content

Commit 0c41429

Browse files
committed
Move patterns to clj files.
1 parent 1c1ded3 commit 0c41429

File tree

4 files changed

+49
-44
lines changed

4 files changed

+49
-44
lines changed

src/active/clojure/pattern.cljc renamed to src/active/clojure/pattern.clj

Lines changed: 29 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
(ns active.clojure.pattern
2-
(:require #?(:clj [active.clojure.record :refer [define-record-type]]
3-
:cljs [active.clojure.cljs.record :refer-macros [define-record-type]])
4-
[active.clojure.condition :as c]
2+
(:require [active.clojure.condition :as c]
53
[active.clojure.functions :as f]
64
[active.clojure.lens :as lens]
5+
[active.clojure.record :refer [define-record-type]]
76

7+
[clojure.spec.alpha :as s]
88
[clojure.core.match :as match]
9-
[clojure.spec.alpha :as s]))
9+
[clojure.core.match.regex]))
1010

1111
(define-record-type Pattern
1212
(make-pattern name clauses) pattern?
@@ -264,8 +264,7 @@
264264
(defn regex?
265265
"Is a `thing` a regex."
266266
[thing]
267-
#?(:clj (instance? java.util.regex.Pattern thing)
268-
:cljs (instance? js/RegExp thing)))
267+
(instance? java.util.regex.Pattern thing))
269268

270269
(defn any-but
271270
[& exclusions]
@@ -274,7 +273,7 @@
274273

275274
(s/def ::regex regex?)
276275
(s/def ::compare-fn-token #{:compare-fn})
277-
(s/def ::compare-fn (s/cat :compare-fn ::compare-fn-token :fn ifn?))
276+
(s/def ::compare-fn (s/cat :binding symbol? :compare-fn ::compare-fn-token :fn ifn?))
278277

279278
(s/def ::or-token #{:or})
280279

@@ -521,29 +520,29 @@
521520
`(let ~(into [] (apply concat bindings))
522521
~rhs)))
523522

524-
#?(:clj
525-
(defmacro map-matcher
526-
[& args]
527-
(let [message `message#
528-
patterns+consequents (reduce
529-
(fn [code [lhs* rhs]]
530-
(let [lhs (if (symbol? lhs*) (eval lhs*) lhs*)]
531-
(if (= lhs :else)
532-
(concat code [lhs rhs])
533-
(let [pattern (parse-pattern "pattern" lhs)]
534-
(concat code
535-
[(pattern->lhs pattern)
536-
(pattern->rhs message pattern rhs)])))))
537-
nil
538-
(partition 2 args))]
539-
540-
`(fn [~message]
541-
(match/match ~message ~@patterns+consequents)))))
542-
543-
#?(:clj
544-
(defmacro defpattern
545-
[binding pattern]
546-
`(def ~binding (quote ~pattern))))
523+
(defmacro map-matcher
524+
[& args]
525+
(let [message `message#
526+
patterns+consequents (reduce
527+
(fn [code [lhs* rhs]]
528+
(let [lhs (if (symbol? lhs*) (eval lhs*) lhs*)]
529+
(if (= lhs :else)
530+
(concat code [lhs rhs])
531+
(let [pattern (if (vector? lhs)
532+
(parse-pattern (gensym) lhs)
533+
lhs)]
534+
(concat code
535+
[(pattern->lhs pattern)
536+
(pattern->rhs message pattern rhs)])))))
537+
nil
538+
(partition 2 args))]
539+
540+
`(fn [~message]
541+
(match/match ~message ~@patterns+consequents))))
542+
543+
(defmacro defpattern
544+
[binding pattern]
545+
`(def ~binding ~(parse-pattern (gensym) pattern)))
547546

548547
(define-record-type Dependency
549548
(make-dependency path matcher for-pattern) dependency?
@@ -602,7 +601,6 @@
602601

603602
(defn composition->dependencies
604603
[composition]
605-
(println "composition" composition)
606604
(cond
607605
(pattern? composition)
608606
(pattern->dependencies composition)

test/active/clojure/pattern_test.cljc renamed to test/active/clojure/pattern_test.clj

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
(ns active.clojure.pattern-test
2-
(:require #?(:clj [active.clojure.pattern :as p]
3-
:cljs [active.clojure.pattern :as p :include-macros true])
2+
(:require [active.clojure.pattern :as p]
43
[active.clojure.functions :as f]
5-
#?(:clj [clojure.core.match.regex])
6-
#?(:clj [clojure.test :as t]
7-
:cljs [cljs.test :as t :include-macros true])))
4+
[clojure.core.match.regex]
5+
[clojure.test :as t]))
86

97
(t/deftest parse-clause-test
108
(t/testing "key exists clause"
@@ -27,8 +25,7 @@
2725
(t/testing "with regex"
2826
(let [c (p/parse-clause (list :k #"foo"))]
2927
(t/is (= :k (p/key-matches-clause-key c)))
30-
(t/is (= "foo" #?(:clj (.pattern ^java.util.regex.Pattern (p/regex-matcher-regex (p/key-matches-clause-matcher c)))
31-
:cljs (.-source (p/regex-matcher-regex (p/key-matches-clause-matcher c))))))
28+
(t/is (= "foo" (.pattern ^java.util.regex.Pattern (p/regex-matcher-regex (p/key-matches-clause-matcher c)))))
3229
(t/is (= 'k (p/key-matches-clause-binding c)))))
3330
(t/testing "with any other value"
3431
(t/is (= (p/make-key-matches-clause :k (p/make-constant-matcher "foo") 'k)
@@ -52,9 +49,9 @@
5249

5350
(t/testing "with a predicate matcher"
5451
(t/is (= (p/make-key-matches-clause :k (p/make-predicate-matcher even?) 'Binding)
55-
(p/parse-clause (list :k (list :compare-fn even?) :as 'Binding))))
52+
(p/parse-clause (list :k (list 'k :compare-fn even?) :as 'Binding))))
5653
(t/is (= (p/make-key-matches-clause :k (p/make-predicate-matcher (f/partial = 42)) 'Binding)
57-
(p/parse-clause (list :k (list :compare-fn (f/partial = 42)) :as 'Binding)))))
54+
(p/parse-clause (list :k (list 'k :compare-fn (f/partial = 42)) :as 'Binding)))))
5855

5956
(t/testing "optional clauses"
6057
(t/is (= (p/make-optional-clause (p/make-key-exists-clause :k p/the-existence-matcher 'k))
@@ -205,11 +202,23 @@
205202

206203
(def predicate-matcher
207204
(p/map-matcher
208-
[(:x (:compare-fn even?))] ::even
209-
[(:x (:compare-fn odd?))] ::odd))
205+
[(:x (x :compare-fn even?))] ::even
206+
[(:x (x :compare-fn odd?))] ::odd))
210207

211208
(t/deftest map-matcher-predicate-test
212209
(t/is (= ::even (predicate-matcher {:x 42})))
213210
(t/is (= ::odd (predicate-matcher {:x 41}))))
214211

212+
(p/defpattern predicate-pattern
213+
[(:x (x :compare-fn even?))])
215214

215+
(t/deftest map-matcher-polymorphism-test
216+
(t/testing "works with a pattern record"
217+
(t/is (= ::even
218+
((p/map-matcher predicate-pattern ::even)
219+
{:x 42}))))
220+
221+
(t/testing "works with pattern syntax"
222+
(t/is (= ::even
223+
((p/map-matcher [(:x (x :compare-fn even?))] ::even)
224+
{:x 42})))))

test/active/clojure/test_deps.cljs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
[active.clojure.record-test]
99
[active.clojure.record-spec-test]
1010
[active.clojure.match-test]
11-
[active.clojure.pattern-test]
1211
[active.clojure.sum-type-test]
1312
[active.clojure.config-test]
1413
[active.clojure.macro-test]

test/active/clojure/test_runner.cljs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
'active.clojure.sum-type-test
1414
'active.clojure.record-spec-test
1515
'active.clojure.match-test
16-
'active.clojure.pattern-test
1716
'active.clojure.config-test
1817
'active.clojure.macro-test
1918
'active.clojure.functions-test

0 commit comments

Comments
 (0)