diff --git a/src/refactor_nrepl/config.clj b/src/refactor_nrepl/config.clj index 49e93da9..6fb6cc2a 100644 --- a/src/refactor_nrepl/config.clj +++ b/src/refactor_nrepl/config.clj @@ -13,7 +13,7 @@ :prune-ns-form true ;; Should `clean-ns` favor prefix forms in the ns macro? - :prefix-rewriting true + :prefix-rewriting false ;; Should `pprint-ns` place a newline after the `:require` and `:import` tokens? :insert-newline-after-require true diff --git a/test/refactor_nrepl/ns/clean_ns_test.clj b/test/refactor_nrepl/ns/clean_ns_test.clj index 1c30e936..c6a367d7 100644 --- a/test/refactor_nrepl/ns/clean_ns_test.clj +++ b/test/refactor_nrepl/ns/clean_ns_test.clj @@ -57,9 +57,10 @@ (def ns-with-npm-strs-clean (clean-msg "test/resources/ns_with_npm_strs_clean.cljs")) (deftest combines-requires - (let [requires (core/get-ns-component (clean-ns ns2) :require) + (let [prefix-requires (config/with-config {:prefix-rewriting true} + (core/get-ns-component (clean-ns ns2) :require)) combined-requires (core/get-ns-component ns2-cleaned :require)] - (is (= combined-requires requires)))) + (is (= combined-requires prefix-requires)))) (deftest meta-preserved (let [cleaned (pprint-ns (clean-ns ns2-meta))] @@ -67,8 +68,7 @@ :doc \"test ns with meta\"}")))) (deftest rewrites-use-to-require - (let [requires (core/get-ns-component (clean-ns ns2) :use) - combined-requires (core/get-ns-component ns2-cleaned :require)] + (let [combined-requires (core/get-ns-component ns2-cleaned :require)] (is (reduce #(or %1 (= %2 '[clojure [edn :refer :all :rename {read-string rs}] @@ -80,15 +80,16 @@ (tree-seq sequential? identity combined-requires))))) (deftest keeps-clause-with-rename - (let [requires (core/get-ns-component (clean-ns ns2) :use) - combined-requires (core/get-ns-component ns2-cleaned :require)] + (let [combined-requires (core/get-ns-component ns2-cleaned :require)] (is (reduce #(or %1 (= %2 '[edn :refer :all :rename {read-string rs}])) false (tree-seq sequential? identity combined-requires))))) (deftest test-sort-and-prefix-favoring - (let [requires (core/get-ns-component (clean-ns ns1) :require) + (let [requires (core/get-ns-component + (config/with-config {:prefix-rewriting true} + (clean-ns ns1)) :require) imports (core/get-ns-component (clean-ns ns1) :import) sorted-requires (core/get-ns-component ns1-cleaned :require) sorted-imports (core/get-ns-component ns1-cleaned :import)] @@ -127,13 +128,18 @@ false (tree-seq sequential? identity requires))))) -(deftest combines-multiple-refers-to-all - (let [requires (clean-ns ns2) - instant '[instant :refer :all]] - (is (reduce - #(or %1 (= %2 instant)) - false - (tree-seq sequential? identity requires))))) +(deftest combines-multiple-refer-alls + (let [[_ & libspecs] (core/get-ns-component (clean-ns ns2) :require) + instant '[clojure.instant :refer :all]] + (is (= (:count (reduce + (fn [acc libspec] + (if (= libspec instant) + (update acc :count inc) + acc)) + {:count 0} + libspecs)) + 1) + "Exactly one libspec present for duplicated :refer :all clause"))) (deftest removes-unused-dependencies (let [new-ns (clean-ns ns-with-unused-deps) @@ -196,7 +202,8 @@ cljc-ns-same-clj-cljs-cleaned))) (deftest respects-no-prune-option - (config/with-config {:prune-ns-form false} + (config/with-config {:prune-ns-form false + :prefix-rewriting true} (let [new-require (core/get-ns-component (clean-ns ns3) :require) expected-require (core/get-ns-component ns3-rebuilt :require)] (is (= expected-require new-require))))) @@ -206,8 +213,12 @@ (deftest test-pprint (let [ns-str (pprint-ns (clean-ns ns1)) - ns1-str (slurp (.getAbsolutePath (File. "test/resources/ns1_cleaned_and_pprinted")))] - (is (= ns1-str ns-str)))) + ns1-str (slurp "test/resources/ns1_cleaned_and_pprinted") + ns1-prefix-notation (slurp "test/resources/ns1_cleaned_and_pprinted_prefix_notation")] + (is (= ns1-str ns-str)) + (is (= ns1-prefix-notation (config/with-config + {:prefix-rewriting true} + (pprint-ns (clean-ns ns1))))))) (deftest preserves-shorthand-meta (let [cleaned (pprint-ns (clean-ns ns-with-shorthand-meta))] diff --git a/test/resources/ns1_cleaned_and_pprinted b/test/resources/ns1_cleaned_and_pprinted index b4fd77ec..6ad68336 100644 --- a/test/resources/ns1_cleaned_and_pprinted +++ b/test/resources/ns1_cleaned_and_pprinted @@ -9,13 +9,15 @@ :extends java.lang.Exception :methods [[binomial [int int] double]]) (:require - [clojure data edn xml - [instant :as inst :reload true] - [pprint :refer [cl-format formatter get-pretty-writer]] - [string :refer :all :reload-all true] - [test :refer :all] - [walk :refer [postwalk prewalk]]] - clojure.test.junit) + clojure.data + clojure.edn + [clojure.instant :as inst :reload true] + [clojure.pprint :refer [cl-format formatter get-pretty-writer]] + [clojure.string :refer :all :reload-all true] + [clojure.test :refer :all] + clojure.test.junit + [clojure.walk :refer [postwalk prewalk]] + clojure.xml) (:import [java.io Closeable FilenameFilter PushbackReader] [java.util Calendar Date Random] diff --git a/test/resources/ns1_cleaned_and_pprinted_prefix_notation b/test/resources/ns1_cleaned_and_pprinted_prefix_notation new file mode 100644 index 00000000..b4fd77ec --- /dev/null +++ b/test/resources/ns1_cleaned_and_pprinted_prefix_notation @@ -0,0 +1,22 @@ +(ns resources.ns1 + "This is a docstring for the ns + + It contains an \"escaped string\"." + {:author "Winnie the pooh"} + (:refer-clojure :exclude [macroexpand-1 read read-string]) + (:gen-class + :name com.domain.tiny + :extends java.lang.Exception + :methods [[binomial [int int] double]]) + (:require + [clojure data edn xml + [instant :as inst :reload true] + [pprint :refer [cl-format formatter get-pretty-writer]] + [string :refer :all :reload-all true] + [test :refer :all] + [walk :refer [postwalk prewalk]]] + clojure.test.junit) + (:import + [java.io Closeable FilenameFilter PushbackReader] + [java.util Calendar Date Random] + [refactor.nrepl SomeClass$InnerClass$InnerInnerClassOne SomeClass$InnerClass$InnerInnerClassTwo]))