diff --git a/cljfmt/src/cljfmt/core.cljc b/cljfmt/src/cljfmt/core.cljc index 561a1a4..9b3be99 100644 --- a/cljfmt/src/cljfmt/core.cljc +++ b/cljfmt/src/cljfmt/core.cljc @@ -568,10 +568,16 @@ #?(:clj (defn- as-zloc->alias-mapping [as-zloc] (let [alias (some-> as-zloc z/right z/sexpr) - current-namespace (some-> as-zloc z/leftmost z/sexpr) + current-namespace (some-> as-zloc + z/leftmost + (z/find #(token? (skip-meta %))) + skip-meta + z/sexpr) grandparent-node (some-> as-zloc z/up z/up) parent-namespace (when-not (ns-require-form? grandparent-node) - (first (z/child-sexprs grandparent-node)))] + (when (or (z/vector? grandparent-node) + (z/list? grandparent-node)) + (first (z/child-sexprs grandparent-node))))] (when (and (symbol? alias) (symbol? current-namespace)) {(str alias) (if parent-namespace (format "%s.%s" parent-namespace current-namespace) diff --git a/cljfmt/test/cljfmt/core_test.cljc b/cljfmt/test/cljfmt/core_test.cljc index a4c98f7..6827bbe 100644 --- a/cljfmt/test/cljfmt/core_test.cljc +++ b/cljfmt/test/cljfmt/core_test.cljc @@ -257,6 +257,33 @@ {:indents {'thing.core/defn [[:inner 0]]} #?@(:cljs [:alias-map {"t" "thing.core"}])}) "applies custom indentation to namespaced defn") + (testing "handles metadata on or comments before forms inside ns :require list" + (doseq [ignore-str ["" + "^{:clj-kondo/ignore [:discouraged-namespace]} " + "^:clj-kondo/ignore " + "^{some-symbol another-symbol} " + "#_{:clj-kondo/ignore [:discouraged-namespace]} " + "#_:clj-kondo/ignore " + "^tag " + "#_old-thing "] + ns-vec-str [(str ignore-str "[thing.core :as t]") + (str ignore-str "[thing [core :as t]]") + (str ignore-str "(thing [core :as t])") + (str "[" ignore-str "thing.core :as t]") + (str ignore-str " [" ignore-str "thing.core :as t]")] + :let [ns-str (str "(ns example (:require " ns-vec-str "))")]] + (testing ns-str + (is (reformats-to? + [ns-str + "" + "(t/defn foo [x]" + "(+ x 1))"] + [ns-str + "" + "(t/defn foo [x]" + " (+ x 1))"] + {:indents {'ns [[:block 1]], 'thing.core/defn [[:inner 0]]} + #?@(:cljs [:alias-map {"t" "thing.core"}])}))))) (is (reformats-to? ["(comment)" "(ns thing.core)"