Skip to content

Commit 32a72f2

Browse files
author
Yannick Scherer
committed
Fix keywords starting with number.
1 parent 3e60313 commit 32a72f2

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

src/rewrite_clj/parser/core.clj

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -137,13 +137,17 @@
137137
(throw-reader reader "Unexpected EOF while reading regular expression.")))))
138138

139139
(defn- parse-keyword
140+
"Parse keyword. Produces `:token` result with an optional map containing a
141+
`:namespaced?`field for keywords like `::xyz`."
140142
[reader]
141143
(ignore reader)
142-
(let [nxt (edn/read reader)]
143-
(cond (keyword? nxt) [:token nxt {:namespaced? true}]
144-
(symbol? nxt) [:token (keyword nxt)]
145-
(not (seq? nxt)) [:token (keyword (str nxt))]
146-
:else (throw-reader reader "Invalid token(s) following ':' prefix: " nxt))))
144+
(if-let [c (r/peek-char reader)]
145+
(if (= c \:)
146+
[:token (edn/read reader) {:namespaced? true}]
147+
(do
148+
(r/unread reader \:)
149+
[:token (edn/read reader)]))
150+
(throw-reader reader "Unexpected EOF while reading keyword.")))
147151

148152
;; ## Register Parsers
149153

test/rewrite_clj/parser_test.clj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
"0.1" 0.1
2121
"1N" 1N
2222
":key" :key
23+
":1.5" :1.5
24+
":1.5.0" :1.5.0
2325
":ns/key" :ns/key
2426
"sym" 'sym
2527
"sym#" 'sym#

0 commit comments

Comments
 (0)