Skip to content

Commit 01a1427

Browse files
mfikesswannodette
authored andcommitted
CLJS-2054: Private core names still result in "already declared" warnings
1 parent 940b6c8 commit 01a1427

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

src/main/clojure/cljs/analyzer.cljc

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -767,6 +767,17 @@
767767
false))
768768
(not (contains? (-> env :ns :excludes) sym))))
769769

770+
(defn public-name?
771+
"Is sym public?"
772+
#?(:cljs {:tag boolean})
773+
[ns sym]
774+
(let [var-ast (or (gets @env/*compiler* ::namespaces ns :defs sym)
775+
#?(:clj (gets @env/*compiler* ::namespaces ns :macros sym)
776+
:cljs (gets @env/*compiler* ::namespaces (symbol (str (name ns) "$macros")) :defs sym)))]
777+
(and (some? var-ast)
778+
(not (or (:private var-ast)
779+
(:anonymous var-ast))))))
780+
770781
(defn js-tag? [x]
771782
(and (symbol? x)
772783
(or (= 'js x)
@@ -1354,9 +1365,10 @@
13541365
(let [env (if (or (and (not= ns-name 'cljs.core)
13551366
(core-name? env sym))
13561367
(some? (get-in @env/*compiler* [::namespaces ns-name :uses sym])))
1357-
(let [ev (resolve-existing-var (dissoc env :locals) sym)
1368+
(let [ev (resolve-existing-var (dissoc env :locals) (with-meta sym {::no-resolve true}))
13581369
conj-to-set (fnil conj #{})]
1359-
(warning :redef env {:sym sym :ns (:ns ev) :ns-name ns-name})
1370+
(when (public-name? (:ns ev) sym)
1371+
(warning :redef env {:sym sym :ns (:ns ev) :ns-name ns-name}))
13601372
(swap! env/*compiler* update-in [::namespaces ns-name :excludes]
13611373
conj-to-set sym)
13621374
(update-in env [:ns :excludes] conj-to-set sym))

0 commit comments

Comments
 (0)