Skip to content

Commit 21a76be

Browse files
committed
Apply padding indents on all lines
1 parent f9727f1 commit 21a76be

File tree

2 files changed

+51
-18
lines changed

2 files changed

+51
-18
lines changed

src/cljs-lib/src/calva/fmt/formatter.cljs

Lines changed: 46 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,16 @@
107107
(second (re-find #"^(.*)\n?" tail))))))
108108

109109

110-
(defn- normalize-indents
110+
(defn normalize-indents
111111
"Normalizes indents based on where the text starts on the first line"
112-
[{:keys [range-text eol] :as m}]
113-
(let [indent-before (apply str (repeat (indent-before-range m) " "))
114-
lines (clojure.string/split range-text #"\r?\n(?!\s*;)" -1)]
115-
(assoc m :range-text (clojure.string/join (str eol indent-before) lines))))
112+
[{:keys [range-text indent eol] :as m}]
113+
(let [lines (clojure.string/split range-text #"\r?\n(?!\s*;)" -1)
114+
padded-lines (map (fn [line]
115+
(if (re-matches #"^ *$" line)
116+
eol
117+
(str eol indent (clojure.string/replace line #" *$" ""))))
118+
(rest lines))]
119+
(assoc m :range-text (clojure.string/join (conj padded-lines (first lines))))))
116120

117121

118122
(defn index-for-tail-in-range
@@ -135,23 +139,32 @@
135139
(defn format-text-at-range
136140
"Formats text from all-text at the range"
137141
[{:keys [range idx] :as m}]
138-
(let [indent-before (indent-before-range m)
139-
padding (apply str (repeat indent-before " "))
142+
(let [indents (indent-before-range m)
143+
padding (apply str (repeat indents " "))
140144
range-text (extract-range-text m)
141-
padded-text (str padding range-text)
142145
range-index (- idx (first range))
143146
tail (subs range-text range-index)
144-
formatted-m (format-text (assoc m :range-text padded-text))
145-
formatted-text (subs (:range-text formatted-m) indent-before)]
147+
formatted-m (format-text (assoc m :range-text range-text))
148+
formatted-text (:range-text formatted-m)]
146149
(-> (assoc formatted-m
147150
:range-text formatted-text
148-
:range-tail tail))))
149-
150-
(defn format-text-at-range-bridge
151-
[m]
152-
(format-text-at-range m))
151+
:range-tail tail
152+
:indent padding)
153+
(normalize-indents))))
153154

154155
(comment
156+
(-> {:eol "\n"
157+
:all-text " (foo)\n(defn bar\n[x]\nbaz)"
158+
:range [2 26]}
159+
format-text-at-range)
160+
(-> {:eol "\n"
161+
:all-text " (foo)
162+
(defn bar
163+
[x]
164+
165+
baz)"
166+
:range [10 38]}
167+
format-text-at-range)
155168
(format-text-at-range {:all-text " '([]\n[])"
156169
:idx 7
157170
:on-type true
@@ -162,7 +175,24 @@
162175
(format-text-at-range {:eol "\n"
163176
:all-text "[:foo\n\n(foo)(bar)]"
164177
:idx 6
165-
:range [0 18]}))
178+
:range [0 18]})
179+
(-> {:eol "\n"
180+
:all-text " (defn foo [a b]
181+
(let [x + a b]
182+
(println \"sum is\" x)))
183+
184+
(defn bar [a b]
185+
(let [x + a b]
186+
(println \"sum is\" x)))"
187+
:idx 6
188+
:range [6 129]}
189+
(format-text-at-range)))
190+
191+
192+
(defn format-text-at-range-bridge
193+
[m]
194+
(format-text-at-range m))
195+
166196

167197

168198
(defn add-indent-token-if-empty-current-line

src/cljs-lib/test/calva/fmt/formatter_test.cljs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
[calva.fmt.formatter :as sut]))
55

66
(deftest format-text-at-range
7-
(is (= "(foo)\n(defn bar\n [x]\n baz)"
7+
(is (= "(foo)\n (defn bar\n [x]\n baz)"
88
(:range-text (sut/format-text-at-range {:eol "\n" :all-text " (foo)\n(defn bar\n[x]\nbaz)" :range [2 26]}))))
99
(is (not (contains? (sut/format-text-at-range {:eol "\n" :all-text " (foo)\n(defn bar\n[x]\nbaz)" :range [2 26]}) :new-index))))
1010

@@ -115,6 +115,7 @@ bar))")
115115
(is (= "(foo)\n (defn bar\n [x]\n baz)"
116116
(:range-text (sut/normalize-indents {:eol "\n"
117117
:all-text " (foo)\n(defn bar\n[x]\nbaz)"
118+
:indent " "
118119
:range [2 26]
119120
:range-text "(foo)\n(defn bar\n [x]\n baz)"})))))
120121

@@ -140,8 +141,10 @@ bar))")
140141
(deftest format-text-at-idx-on-type
141142
(is (= "(bar \n\n )"
142143
(:range-text (sut/format-text-at-idx-on-type {:eol "\n" :all-text "(bar \n\n)" :range [0 8] :idx 7}))))
143-
(is (= "(bar \n \n )"
144+
(is (= "(bar \n\n )"
144145
(:range-text (sut/format-text-at-idx-on-type {:eol "\n" :all-text "(bar \n \n)" :range [0 9] :idx 8}))))
146+
(is (= "(bar \n \n )"
147+
(:range-text (sut/format-text-at-idx-on-type {:eol "\n" :all-text "(bar \n \n)" :range [0 9] :idx 6}))))
145148
(is (= "(bar \n \n )"
146149
(:range-text (sut/format-text-at-idx-on-type {:eol "\n" :all-text "(bar \n\n)" :range [0 8] :idx 6}))))
147150
(is (= "\"bar \n \n \""

0 commit comments

Comments
 (0)