Skip to content

Commit 2cf0589

Browse files
authored
:end-col metadata corrected for keywords at eof (#368)
* `:end-col` metadata corrected for keywords at eof Bump clojure/tools.reader to v1.5.1 to pick up the fix. Fixes #367 * test libs: compensate for pedantic projects bump of tools.reader made pedantic lein projects fail
1 parent 31e04aa commit 2cf0589

File tree

4 files changed

+53
-16
lines changed

4 files changed

+53
-16
lines changed

CHANGELOG.adoc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ A release with known breaking changes is marked with:
2626

2727
* `rewrite-clj.zip/insert-right` and `rewrite-clj.zip/append-child` no longer insert a space when inserting/appending after a comment node.
2828
{issue}346[#346] ({lread})
29+
* `:end-col` metadata now correct for keywords at end of content
30+
{issue}367[#367] ({lread})
2931
* `rewrite.clj.paredit`
3032
** now supports paredit ops on new/changed nodes in a zipper
3133
{issue}256[#256] ({lread}, thanks for the issue {person}mrkam2[mrkam2]!)

deps.edn

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{:paths ["src" "resources"]
22

33
:deps {org.clojure/clojure {:mvn/version "1.8.0"}
4-
org.clojure/tools.reader {:mvn/version "1.5.0"}}
4+
org.clojure/tools.reader {:mvn/version "1.5.1"}}
55

66
:aliases {;; we use babashka/neil for project attributes
77
;; publish workflow references these values (and automatically bumps patch component of version)

script/test_libs.clj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@
158158
(patch-deps {:filename (str (fs/file home-dir "project.clj"))
159159
;; we remove and add tools.reader because project.clj has pedantic? :abort enabled
160160
:removals #{'rewrite-clj 'org.clojure/tools.reader}
161-
:additions [['org.clojure/tools.reader "1.5.0"]
161+
:additions [['org.clojure/tools.reader "1.5.1"]
162162
['rewrite-clj rewrite-clj-version]]}))
163163

164164
;;
@@ -194,7 +194,7 @@
194194
(string/replace #"rewrite-clj \"(\d+\.)+.*\""
195195
(format "rewrite-clj \"%s\"" rewrite-clj-version))
196196
(string/replace #"org.clojure/tools.reader \"(\d+\.)+.*\""
197-
"org.clojure/tools.reader \"1.5.0\"")
197+
"org.clojure/tools.reader \"1.5.1\"")
198198
(->> (spit p)))))
199199

200200
;;
@@ -228,7 +228,7 @@
228228
(format "rewrite-clj \"%s\"" rewrite-clj-version))
229229
;; pedantic is enabled for CI, so adjust to match rewrite-clj so we don't fail
230230
(string/replace #"org.clojure/tools.reader \"(\d+\.)+.*\""
231-
"org.clojure/tools.reader \"1.5.0\"")
231+
"org.clojure/tools.reader \"1.5.1\"")
232232
(->> (spit p)))))
233233

234234
;;

test/rewrite_clj/parser_test.cljc

Lines changed: 47 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -673,7 +673,7 @@
673673
" (println x))")
674674
positions (->> (p/parse-string-all s)
675675
(nodes-with-meta))]
676-
(doseq [[pos end t s sexpr]
676+
(doseq [[pos end t s sexpr]
677677
[[[1 1] [3 15] :list s '(defn f [x] (println x))]
678678
[[1 2] [1 6] :token "defn" 'defn]
679679
[[1 7] [1 8] :token "f" 'f]
@@ -687,17 +687,52 @@
687687
(is (= s (node/string node)))
688688
(is (= sexpr (node/sexpr node)))
689689
(is (= end end-pos)))))
690-
;; root node
691-
(let [s (str
692-
;1234567890
693-
"(def a 1)\n"
694-
"(def b\n"
695-
" 2)")
696-
n (p/parse-string-all s)
697-
start-pos ((juxt :row :col) (meta n))
698-
end-pos ((juxt :end-row :end-col) (meta n))]
699-
(is (= [1 1] start-pos))
700-
(is (= [3 5] end-pos))))
690+
(testing "root node"
691+
(let [s (str
692+
;1234567890
693+
"(def a 1)\n"
694+
"(def b\n"
695+
" 2)")
696+
n (p/parse-string-all s)
697+
start-pos ((juxt :row :col) (meta n))
698+
end-pos ((juxt :end-row :end-col) (meta n))]
699+
(is (= [1 1] start-pos))
700+
(is (= [3 5] end-pos))))
701+
(testing "nodes at eof" ;; in response to https://github.com/clj-commons/rewrite-clj/issues/367
702+
(doseq [[all-meta last-meta s s-last-node]
703+
[[{:row 1 :col 1 :end-row 1 :end-col 2}
704+
{:row 1 :col 1 :end-row 1 :end-col 2}
705+
"x"
706+
"x"]
707+
[{:row 1 :col 1 :end-row 1 :end-col 4}
708+
{:row 1 :col 1 :end-row 1 :end-col 4}
709+
"123"
710+
"123"]
711+
[{:row 1 :col 1 :end-row 1 :end-col 5}
712+
{:row 1 :col 1 :end-row 1 :end-col 5}
713+
":foo"
714+
":foo"]
715+
[{:row 1 :col 1 :end-row 1 :end-col 7}
716+
{:row 1 :col 1 :end-row 1 :end-col 7}
717+
"[:foo]"
718+
"[:foo]"]
719+
[{:row 1 :col 1 :end-row 2 :end-col 4}
720+
{:row 2 :col 3 :end-row 2 :end-col 4}
721+
" \n x"
722+
"x"]
723+
[{:row 1 :col 1 :end-row 2 :end-col 6}
724+
{:row 2 :col 4 :end-row 2 :end-col 6}
725+
" \n x "
726+
" "]]]
727+
(testing s
728+
(let [all-nodes (p/parse-string-all s)
729+
last-node (-> all-nodes
730+
node/children
731+
last)]
732+
(is (= s (node/string all-nodes)))
733+
(is (= s-last-node (node/string last-node)))
734+
(is (= all-meta (meta all-nodes)))
735+
(is (= last-meta (meta last-node))))))))
701736

702737
(deftest t-os-specific-line-endings
703738
(doseq [[in expected]

0 commit comments

Comments
 (0)