diff --git a/deps.edn b/deps.edn index b7057d93f..9b996eba4 100644 --- a/deps.edn +++ b/deps.edn @@ -2,7 +2,7 @@ :deps {com.google.javascript/closure-compiler {:mvn/version "v20250820"} com.cognitect/transit-java {:mvn/version "1.0.362"} - org.clojure/clojure {:mvn/version "1.10.0"} + org.clojure/clojure {:mvn/version "1.11.4"} org.clojure/core.specs.alpha {:mvn/version "0.1.24"} org.clojure/google-closure-library {:mvn/version "0.0-20250515-f04e4c0e"} org.clojure/spec.alpha {:mvn/version "0.1.143"} diff --git a/src/main/clojure/cljs/analyzer/impl/namespaces.cljc b/src/main/clojure/cljs/analyzer/impl/namespaces.cljc index a97c6646a..ad43b2f93 100644 --- a/src/main/clojure/cljs/analyzer/impl/namespaces.cljc +++ b/src/main/clojure/cljs/analyzer/impl/namespaces.cljc @@ -30,10 +30,10 @@ (defn check-as-alias-duplicates [as-aliases new-as-aliases] - (doseq [[alias _] new-as-aliases] - (assert (not (contains? as-aliases alias)) - (str "Duplicate :as-alias " alias ", already in use for lib " - (get as-aliases alias))))) + (doseq [[alias new-lib] new-as-aliases] + (let [lib-in-use (get as-aliases alias)] + (assert (or (not lib-in-use) (= lib-in-use new-lib)) + (str "Duplicate :as-alias " alias ", already in use for lib " lib-in-use))))) (defn elide-aliases-from-libspecs "Given libspecs, elide all :as-alias. Return a map of :libspecs (filtered) diff --git a/src/test/cljs_build/cljs_3475_as_alias_duplicate/a_ns.cljc b/src/test/cljs_build/cljs_3475_as_alias_duplicate/a_ns.cljc new file mode 100644 index 000000000..3bdae9ad4 --- /dev/null +++ b/src/test/cljs_build/cljs_3475_as_alias_duplicate/a_ns.cljc @@ -0,0 +1,6 @@ +(ns cljs-3475-as-alias-duplicate.a-ns + ; This line caused: + ; + ; Assert failed: Duplicate :as-alias aliased-in, already in use for lib a-ns + #?(:cljs (:require-macros [cljs-3475-as-alias-duplicate.a-ns])) + (:require [cljs-3475-as-alias-duplicate.aliases-in-another-ns])) \ No newline at end of file diff --git a/src/test/cljs_build/cljs_3475_as_alias_duplicate/aliases_in_another_ns.cljc b/src/test/cljs_build/cljs_3475_as_alias_duplicate/aliases_in_another_ns.cljc new file mode 100644 index 000000000..37b621310 --- /dev/null +++ b/src/test/cljs_build/cljs_3475_as_alias_duplicate/aliases_in_another_ns.cljc @@ -0,0 +1,2 @@ +(ns cljs-3475-as-alias-duplicate.aliases-in-another-ns + (:require [cljs-3475-as-alias-duplicate.a-ns :as-alias aliased-in])) \ No newline at end of file diff --git a/src/test/clojure/cljs/build_api_tests.clj b/src/test/clojure/cljs/build_api_tests.clj index caa8da41f..f76c61ced 100644 --- a/src/test/clojure/cljs/build_api_tests.clj +++ b/src/test/clojure/cljs/build_api_tests.clj @@ -941,6 +941,21 @@ (test/delete-node-modules) (test/delete-out-files out)))) +(deftest test-cljs-3475-as-alias-duplicate + (testing "Test that using :as-alias in a :require-macro .cljc does not cause a duplicate alias" + (let [{:keys [major minor]} *clojure-version* + out (.getPath (io/file (test/tmp-dir) "cljs-3475-as-alias-duplicate-out")) + out-file (io/file out "main.js") + {:keys [inputs opts]} {:inputs (str (io/file "src" "test" "cljs_build")) + :opts {:main 'cljs-3475-as-alias-duplicate.a-ns + :output-dir out + :output-to (.getPath out-file)}} + cenv (env/default-compiler-env)] + (test/delete-out-files out) + (is (and (<= 1 major) (<= 11 minor)) "Clojure version too old - as-alias was introduced in Clojure 1.11: https://clojure.org/news/2022/03/22/clojure-1-11-0") + (build/build (build/inputs (io/file inputs "cljs_3475_as_alias_duplicate/a_ns.cljc")) + opts cenv)))) + #_(deftest test-cljs-3452-str-optimizations (testing "Test that uses compile time optimizations from str macro" (let [out (.getPath (io/file (test/tmp-dir) "cljs-3452-str-optimizations-out"))]