CLJS
basic-lein-cljs.core
cljs.analyzer
cljs.compiler
CLJS
cljs.core
CLJS
cljs.core.async
CLJS
cljs.core.async.impl.buffers
CLJS
cljs.core.async.impl.channels
CLJS
cljs.core.async.impl.dispatch
CLJS
cljs.core.async.impl.ioc-helpers
CLJS
cljs.core.async.impl.protocols
CLJS
cljs.core.async.impl.timers
cljs.env
cljs.externs
CLJS
cljs.js
cljs.js-deps
CLJS
cljs.pprint
CLJS
cljs.reader
CLJS
cljs.repl
cljs.source-map
CLJS
cljs.source-map
cljs.source-map.base64
CLJS
cljs.source-map.base64
cljs.source-map.base64-vlq
CLJS
cljs.source-map.base64-vlq
CLJS
cljs.spec.alpha
CLJS
cljs.spec.gen.alpha
cljs.tagged-literals
CLJS
cljs.tools.reader
CLJS
cljs.tools.reader.edn
CLJS
cljs.tools.reader.impl.commons
CLJS
cljs.tools.reader.impl.errors
CLJS
cljs.tools.reader.impl.inspect
CLJS
cljs.tools.reader.impl.utils
CLJS
cljs.tools.reader.reader-types
cljs.util
clojure.core
clojure.core.async
clojure.core.async.impl.buffers
clojure.core.async.impl.channels
clojure.core.async.impl.concurrent
clojure.core.async.impl.dispatch
clojure.core.async.impl.exec.threadpool
clojure.core.async.impl.ioc-macros
clojure.core.async.impl.mutex
clojure.core.async.impl.protocols
clojure.core.async.impl.timers
clojure.core.cache
clojure.core.memoize
clojure.core.protocols
clojure.core.server
clojure.data.json
clojure.data.priority-map
clojure.edn
clojure.instant
clojure.java.io
clojure.main
clojure.pprint
clojure.reflect
clojure.repl
clojure.set
CLJS
clojure.set
clojure.spec.alpha
clojure.spec.gen.alpha
clojure.string
CLJS
clojure.string
clojure.tools.analyzer
clojure.tools.analyzer.ast
clojure.tools.analyzer.env
clojure.tools.analyzer.jvm
clojure.tools.analyzer.jvm.utils
clojure.tools.analyzer.passes
clojure.tools.analyzer.passes.add-binding-atom
clojure.tools.analyzer.passes.cleanup
clojure.tools.analyzer.passes.constant-lifter
clojure.tools.analyzer.passes.elide-meta
clojure.tools.analyzer.passes.emit-form
clojure.tools.analyzer.passes.jvm.analyze-host-expr
clojure.tools.analyzer.passes.jvm.annotate-host-info
clojure.tools.analyzer.passes.jvm.annotate-loops
clojure.tools.analyzer.passes.jvm.annotate-tag
clojure.tools.analyzer.passes.jvm.box
clojure.tools.analyzer.passes.jvm.classify-invoke
clojure.tools.analyzer.passes.jvm.constant-lifter
clojure.tools.analyzer.passes.jvm.emit-form
clojure.tools.analyzer.passes.jvm.fix-case-test
clojure.tools.analyzer.passes.jvm.infer-tag
clojure.tools.analyzer.passes.jvm.validate
clojure.tools.analyzer.passes.jvm.validate-loop-locals
clojure.tools.analyzer.passes.jvm.validate-recur
clojure.tools.analyzer.passes.jvm.warn-on-reflection
clojure.tools.analyzer.passes.source-info
clojure.tools.analyzer.passes.trim
clojure.tools.analyzer.passes.uniquify
clojure.tools.analyzer.passes.warn-earmuff
clojure.tools.analyzer.utils
clojure.tools.cli
clojure.tools.namespace.dependency
clojure.tools.namespace.file
clojure.tools.namespace.find
clojure.tools.namespace.parse
clojure.tools.namespace.track
clojure.tools.reader
clojure.tools.reader.default-data-readers
clojure.tools.reader.impl.commons
clojure.tools.reader.impl.errors
clojure.tools.reader.impl.inspect
clojure.tools.reader.impl.utils
clojure.tools.reader.reader-types
clojure.walk
CLJS
clojure.walk
dynadoc.aliases
dynadoc.common
dynadoc.core
CLJS
dynadoc.core
dynadoc.example
CLJS
dynadoc.state
dynadoc.static
dynadoc.utils
dynadoc.watch
eval-soup.clojail
eval-soup.core
CLJS
eval-soup.core
CLJS
figwheel.client
CLJS
figwheel.client.file-reloading
CLJS
figwheel.client.heads-up
CLJS
figwheel.client.socket
CLJS
figwheel.client.utils
hawk.core
hawk.watcher
html-soup.core
ns-tracker.core
ns-tracker.dependency
ns-tracker.nsdeps
ns-tracker.parse
CLJS
oakcljs.tools.reader
CLJS
oakcljs.tools.reader.impl.commons
CLJS
oakcljs.tools.reader.impl.errors
CLJS
oakcljs.tools.reader.impl.inspect
CLJS
oakcljs.tools.reader.impl.utils
CLJS
oakcljs.tools.reader.reader-types
oakclojure.tools.reader
oakclojure.tools.reader.default-data-readers
oakclojure.tools.reader.impl.commons
oakclojure.tools.reader.impl.errors
oakclojure.tools.reader.impl.inspect
oakclojure.tools.reader.impl.utils
oakclojure.tools.reader.reader-types
org.httpkit.server
CLJS
paren-soup.console
CLJS
paren-soup.core
CLJS
paren-soup.dom
CLJS
paren-soup.instarepl
CLJS
reagent.core
CLJS
reagent.debug
CLJS
reagent.dom
CLJS
reagent.impl.batching
CLJS
reagent.impl.component
CLJS
reagent.impl.template
CLJS
reagent.impl.util
CLJS
reagent.ratom
ring.middleware.content-type
ring.middleware.file
ring.middleware.head
ring.middleware.keyword-params
ring.middleware.params
ring.middleware.reload
ring.middleware.resource
ring.util.codec
ring.util.io
ring.util.mime-type
ring.util.parsing
ring.util.request
ring.util.response
ring.util.time
rum.core
CLJS
rum.core
rum.cursor
rum.derived-atom
rum.server-render
rum.util
sablono.compiler
CLJS
sablono.core
sablono.normalize
sablono.util
tag-soup.core

(resolve-var env sym)

(resolve-var env sym confirm)

Resolve a var. Accepts a side-effecting confirm fn for producing warnings about unresolved vars.

Source

(defn resolve-var "Resolve a var. Accepts a side-effecting confirm fn for producing warnings about unresolved vars." ([env sym] (resolve-var env sym nil)) ([env sym confirm] (let [locals (:locals env)] (if #?(:clj (= "js" (namespace sym)) :cljs (identical? "js" (namespace sym))) (do (when (contains? locals (-> sym name symbol)) (warning :js-shadowed-by-local env {:name sym})) (let [pre (->> (string/split (name sym) #"\.") (map symbol) vec)] (when-not (has-extern? pre) (swap! env/*compiler* update-in (into [::namespaces (-> env :ns :name) :externs] pre) merge {})) (merge {:name sym :ns 'js :tag (with-meta (or (js-tag pre) (:tag (meta sym)) 'js) {:prefix pre})} (when-let [ret-tag (js-tag pre :ret-tag)] {:js-fn-var true :ret-tag ret-tag})))) (let [s (str sym) lb (get locals sym) current-ns (-> env :ns :name)] (cond (some? lb) lb (some? (namespace sym)) (let [ns (namespace sym) ns (if #?(:clj (= "clojure.core" ns) :cljs (identical? "clojure.core" ns)) "cljs.core" ns) full-ns (resolve-ns-alias env ns (or (and (js-module-exists? ns) (gets @env/*compiler* :js-module-index ns :name)) (symbol ns)))] (when (some? confirm) (when (not= current-ns full-ns) (confirm-ns env full-ns)) (confirm env full-ns (symbol (name sym)))) (resolve* sym full-ns current-ns)) (dotted-symbol? sym) (let [idx (.indexOf s ".") prefix (symbol (subs s 0 idx)) suffix (subs s (inc idx))] (if-some [lb (get locals prefix)] {:name (symbol (str (:name lb)) suffix)} (if-some [full-ns (gets @env/*compiler* ::namespaces current-ns :imports prefix)] {:name (symbol (str full-ns) suffix)} (if-some [info (gets @env/*compiler* ::namespaces current-ns :defs prefix)] (merge info {:name (symbol (str current-ns) (str sym)) :ns current-ns}) (merge (gets @env/*compiler* ::namespaces prefix :defs (symbol suffix)) {:name (if (= "" prefix) (symbol suffix) (symbol (str prefix) suffix)) :ns prefix}))))) (some? (gets @env/*compiler* ::namespaces current-ns :uses sym)) (let [full-ns (gets @env/*compiler* ::namespaces current-ns :uses sym)] (resolve* sym full-ns current-ns)) (some? (gets @env/*compiler* ::namespaces current-ns :renames sym)) (let [qualified-symbol (gets @env/*compiler* ::namespaces current-ns :renames sym) full-ns (symbol (namespace qualified-symbol)) sym (symbol (name qualified-symbol))] (resolve* sym full-ns current-ns)) (some? (gets @env/*compiler* ::namespaces current-ns :imports sym)) (recur env (gets @env/*compiler* ::namespaces current-ns :imports sym) confirm) (some? (gets @env/*compiler* ::namespaces current-ns :defs sym)) (do (when (some? confirm) (confirm env current-ns sym)) (merge (gets @env/*compiler* ::namespaces current-ns :defs sym) {:name (symbol (str current-ns) (str sym)) :ns current-ns})) (core-name? env sym) (do (when (some? confirm) (confirm env 'cljs.core sym)) (merge (gets @env/*compiler* ::namespaces 'cljs.core :defs sym) {:name (symbol "cljs.core" (str sym)) :ns 'cljs.core})) (invokeable-ns? s env) (resolve-invokeable-ns s current-ns env) :else (do (when (some? confirm) (confirm env current-ns sym)) (merge (gets @env/*compiler* ::namespaces current-ns :defs sym) {:name (symbol (str current-ns) (str sym)) :ns current-ns}))))))))