|
8 | 8 | if one interface is derived from the other, the more derived is used,
|
9 | 9 | else which one is used is unspecified"
|
10 | 10 | (:require
|
11 |
| - [clojure.string :as string] |
12 | 11 | #?@(:clj
|
13 | 12 | [[rewrite-clj.node.comment]
|
14 | 13 | [rewrite-clj.node.fn]
|
|
22 | 21 | [rewrite-clj.node.reader-macro :refer [reader-macro-node var-node]]
|
23 | 22 | [rewrite-clj.node.regex :refer [regex-node pattern-string-for-regex]]
|
24 | 23 | [rewrite-clj.node.seq :refer [vector-node list-node set-node map-node]]
|
25 |
| - [rewrite-clj.node.stringz :refer [string-node]] |
| 24 | + [rewrite-clj.node.stringz] |
26 | 25 | [rewrite-clj.node.token :refer [token-node]]
|
27 | 26 | [rewrite-clj.node.uneval]
|
28 | 27 | [rewrite-clj.node.whitespace :as ws]]
|
29 | 28 | :cljs
|
30 |
| - [[rewrite-clj.node.comment :refer [CommentNode]] |
| 29 | + [[clojure.string :as string] |
| 30 | + [rewrite-clj.node.comment :refer [CommentNode]] |
31 | 31 | [rewrite-clj.node.fn :refer [FnNode]]
|
32 | 32 | [rewrite-clj.node.forms :refer [FormsNode]]
|
33 | 33 | [rewrite-clj.node.integer :refer [IntNode]]
|
|
39 | 39 | [rewrite-clj.node.reader-macro :refer [ReaderNode ReaderMacroNode DerefNode reader-macro-node var-node]]
|
40 | 40 | [rewrite-clj.node.regex :refer [RegexNode regex-node pattern-string-for-regex]]
|
41 | 41 | [rewrite-clj.node.seq :refer [SeqNode vector-node list-node set-node map-node]]
|
42 |
| - [rewrite-clj.node.stringz :refer [StringNode string-node]] |
| 42 | + [rewrite-clj.node.stringz :refer [StringNode]] |
43 | 43 | [rewrite-clj.node.token :refer [TokenNode SymbolNode token-node]]
|
44 | 44 | [rewrite-clj.node.uneval :refer [UnevalNode]]
|
45 | 45 | [rewrite-clj.node.whitespace :refer [WhitespaceNode CommaNode NewlineNode] :as ws]]))
|
|
90 | 90 |
|
91 | 91 | ;; ## Helpers
|
92 | 92 |
|
93 |
| -(defn- split-to-lines |
94 |
| - "Slightly different than string/split-lines in that: |
95 |
| - - escape inline double quotes (to emulate the clojure reader) |
96 |
| - - includes all lines even if empty |
97 |
| - - behaves the same on clj and cljs" |
98 |
| - [s] |
99 |
| - (loop [s (string/escape s {\" "\\\""}) |
100 |
| - lines []] |
101 |
| - (if-let [m (first (re-find #"(\r\n|\r|\n)" s))] |
102 |
| - (let [eol-ndx (string/index-of s m)] |
103 |
| - (recur (subs s (+ eol-ndx (count m))) |
104 |
| - (conj lines (subs s 0 eol-ndx)))) |
105 |
| - (conj lines s)))) |
106 |
| - |
107 | 93 | (defn node-with-meta
|
108 | 94 | [n value]
|
109 | 95 | (if #?(:clj (instance? clojure.lang.IMeta value)
|
|
149 | 135 |
|
150 | 136 | (extend-protocol NodeCoerceable
|
151 | 137 | #?(:clj java.lang.String :cljs string)
|
| 138 | + ;; You might we should be coercing to a string-node here. |
| 139 | + ;; We did this initially for rewrite-clj v1 but found it made more sense to revert to v0 behaviour. |
| 140 | + ;; The string-node was created to serve the parser and expects the strings to be escaped in a particular way. |
| 141 | + ;; The token-node has no such expectations and is therefore, currently, what we use for coercing strings. |
| 142 | + ;; If this makes future internal changes awkward we'll revisit. |
152 | 143 | (coerce [v]
|
153 |
| - (string-node (split-to-lines v)))) |
| 144 | + (token-node v))) |
154 | 145 |
|
155 | 146 | #?(:clj
|
156 | 147 | (extend-protocol NodeCoerceable
|
|
0 commit comments