diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index caf088df..e3dd4cd2 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -26,6 +26,8 @@ A release with known breaking changes is marked with: * `rewrite-clj.zip/insert-right` and `rewrite-clj.zip/append-child` no longer insert a space when inserting/appending after a comment node. {issue}346[#346] ({lread}) +* `:end-col` metadata now correct for keywords at end of content +{issue}367[#367] ({lread}) * `rewrite.clj.paredit` ** now supports paredit ops on new/changed nodes in a zipper {issue}256[#256] ({lread}, thanks for the issue {person}mrkam2[mrkam2]!) diff --git a/deps.edn b/deps.edn index a2925612..13c8516a 100644 --- a/deps.edn +++ b/deps.edn @@ -1,7 +1,7 @@ {:paths ["src" "resources"] :deps {org.clojure/clojure {:mvn/version "1.8.0"} - org.clojure/tools.reader {:mvn/version "1.5.0"}} + org.clojure/tools.reader {:mvn/version "1.5.1"}} :aliases {;; we use babashka/neil for project attributes ;; publish workflow references these values (and automatically bumps patch component of version) diff --git a/script/test_libs.clj b/script/test_libs.clj index 56d1f06c..4321fafb 100755 --- a/script/test_libs.clj +++ b/script/test_libs.clj @@ -158,7 +158,7 @@ (patch-deps {:filename (str (fs/file home-dir "project.clj")) ;; we remove and add tools.reader because project.clj has pedantic? :abort enabled :removals #{'rewrite-clj 'org.clojure/tools.reader} - :additions [['org.clojure/tools.reader "1.5.0"] + :additions [['org.clojure/tools.reader "1.5.1"] ['rewrite-clj rewrite-clj-version]]})) ;; @@ -194,7 +194,7 @@ (string/replace #"rewrite-clj \"(\d+\.)+.*\"" (format "rewrite-clj \"%s\"" rewrite-clj-version)) (string/replace #"org.clojure/tools.reader \"(\d+\.)+.*\"" - "org.clojure/tools.reader \"1.5.0\"") + "org.clojure/tools.reader \"1.5.1\"") (->> (spit p))))) ;; @@ -228,7 +228,7 @@ (format "rewrite-clj \"%s\"" rewrite-clj-version)) ;; pedantic is enabled for CI, so adjust to match rewrite-clj so we don't fail (string/replace #"org.clojure/tools.reader \"(\d+\.)+.*\"" - "org.clojure/tools.reader \"1.5.0\"") + "org.clojure/tools.reader \"1.5.1\"") (->> (spit p))))) ;; diff --git a/test/rewrite_clj/parser_test.cljc b/test/rewrite_clj/parser_test.cljc index dcb01431..68081138 100644 --- a/test/rewrite_clj/parser_test.cljc +++ b/test/rewrite_clj/parser_test.cljc @@ -673,7 +673,7 @@ " (println x))") positions (->> (p/parse-string-all s) (nodes-with-meta))] - (doseq [[pos end t s sexpr] + (doseq [[pos end t s sexpr] [[[1 1] [3 15] :list s '(defn f [x] (println x))] [[1 2] [1 6] :token "defn" 'defn] [[1 7] [1 8] :token "f" 'f] @@ -687,17 +687,52 @@ (is (= s (node/string node))) (is (= sexpr (node/sexpr node))) (is (= end end-pos))))) - ;; root node - (let [s (str - ;1234567890 - "(def a 1)\n" - "(def b\n" - " 2)") - n (p/parse-string-all s) - start-pos ((juxt :row :col) (meta n)) - end-pos ((juxt :end-row :end-col) (meta n))] - (is (= [1 1] start-pos)) - (is (= [3 5] end-pos)))) + (testing "root node" + (let [s (str + ;1234567890 + "(def a 1)\n" + "(def b\n" + " 2)") + n (p/parse-string-all s) + start-pos ((juxt :row :col) (meta n)) + end-pos ((juxt :end-row :end-col) (meta n))] + (is (= [1 1] start-pos)) + (is (= [3 5] end-pos)))) + (testing "nodes at eof" ;; in response to https://github.com/clj-commons/rewrite-clj/issues/367 + (doseq [[all-meta last-meta s s-last-node] + [[{:row 1 :col 1 :end-row 1 :end-col 2} + {:row 1 :col 1 :end-row 1 :end-col 2} + "x" + "x"] + [{:row 1 :col 1 :end-row 1 :end-col 4} + {:row 1 :col 1 :end-row 1 :end-col 4} + "123" + "123"] + [{:row 1 :col 1 :end-row 1 :end-col 5} + {:row 1 :col 1 :end-row 1 :end-col 5} + ":foo" + ":foo"] + [{:row 1 :col 1 :end-row 1 :end-col 7} + {:row 1 :col 1 :end-row 1 :end-col 7} + "[:foo]" + "[:foo]"] + [{:row 1 :col 1 :end-row 2 :end-col 4} + {:row 2 :col 3 :end-row 2 :end-col 4} + " \n x" + "x"] + [{:row 1 :col 1 :end-row 2 :end-col 6} + {:row 2 :col 4 :end-row 2 :end-col 6} + " \n x " + " "]]] + (testing s + (let [all-nodes (p/parse-string-all s) + last-node (-> all-nodes + node/children + last)] + (is (= s (node/string all-nodes))) + (is (= s-last-node (node/string last-node))) + (is (= all-meta (meta all-nodes))) + (is (= last-meta (meta last-node)))))))) (deftest t-os-specific-line-endings (doseq [[in expected]