Skip to content

Commit f3904d9

Browse files
author
Yannick Scherer
authored
[#49] use a separate node type for regex forms (@ChrisBlom).
2 parents 6198c45 + e80e698 commit f3904d9

File tree

5 files changed

+36
-10
lines changed

5 files changed

+36
-10
lines changed

src/rewrite_clj/node.clj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
protocols
1313
quote
1414
reader-macro
15+
regex
1516
seq
1617
string
1718
token
@@ -57,6 +58,9 @@
5758
meta-node
5859
raw-meta-node]
5960

61+
[rewrite-clj.node.regex
62+
regex-node]
63+
6064
[rewrite-clj.node.reader-macro
6165
deref-node
6266
eval-node

src/rewrite_clj/node/regex.clj

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
(ns ^:no-doc rewrite-clj.node.regex
2+
(:require [rewrite-clj.node.protocols :as node]))
3+
4+
5+
;; ## Node
6+
7+
(defrecord RegexNode [pattern]
8+
rewrite-clj.node.protocols/Node
9+
(tag [_] :regex)
10+
(printable-only? [_] false)
11+
(sexpr [_] (list 're-pattern pattern))
12+
(length [_] 1)
13+
(string [_] (str "#\"" pattern "\"")))
14+
15+
(node/make-printable! RegexNode)
16+
17+
;; ## Constructor
18+
19+
(defn regex-node
20+
"Create node representing a regex"
21+
[pattern-string]
22+
(->RegexNode pattern-string))

src/rewrite_clj/parser/core.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@
114114
nil (reader/throw-reader reader "Unexpected EOF.")
115115
\{ (node/set-node (parse-delim reader \}))
116116
\( (node/fn-node (parse-delim reader \)))
117-
\" (parse-regex reader)
117+
\" (node/regex-node (parse-regex reader))
118118
\^ (node/raw-meta-node (parse-printables reader :meta 2 true))
119119
\' (node/var-node (parse-printables reader :var 1 true))
120120
\= (node/eval-node (parse-printables reader :eval 1 true))

src/rewrite_clj/parser/string.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,4 @@
4040
(defn parse-regex
4141
[reader]
4242
(let [h (read-string-data reader)]
43-
(node/token-node (re-pattern (string/join "\n" h)))))
43+
(string/join "\n" h)))

test/rewrite_clj/parser_test.clj

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -112,15 +112,15 @@
112112
(tabular
113113
(fact "about parsing regular expressions"
114114
(let [n (p/parse-string ?s)]
115-
(node/tag n) => :token
116-
(class (node/sexpr n)) => java.util.regex.Pattern
117-
(str (node/sexpr n)) => ?p))
115+
(node/tag n) => :regex
116+
(node/sexpr n) => ?p))
118117
?s ?p
119-
"#\"regex\"" "regex"
120-
"#\"regex\\.\"" "regex\\."
121-
"#\"[reg|k].x\"" "[reg|k].x"
122-
"#\"a\\nb\"" "a\\nb"
123-
"#\"a\nb\"" "a\nb")
118+
119+
"#\"regex\"" '(re-pattern "regex")
120+
"#\"regex\\.\"" '(re-pattern "regex\\.")
121+
"#\"[reg|k].x\"" '(re-pattern "[reg|k].x")
122+
"#\"a\\nb\"" '(re-pattern "a\\nb")
123+
"#\"a\nb\"" '(re-pattern "a\nb"))
124124

125125
(tabular
126126
(fact "about parsing strings"

0 commit comments

Comments
 (0)