              ns (if (= "clojure.core" ns) "cljs.core" ns)
              full-ns (resolve-ns-alias env ns)]
          (confirm-var-exists env full-ns (symbol (name sym)))
-         {:name (symbol (str full-ns "." (munge (name sym))))
-          :ns full-ns})
+         (merge
+          (get-in @namespaces [full-ns :defs sym])
+          {:name (symbol (str full-ns "." (munge (name sym))))
+           :ns full-ns}))
 
        (.contains s ".")
        (let [idx (.indexOf s ".")


(defmethod parse 'def
  [op env form name]
  (let [pfn (fn ([_ sym] {:sym sym})
              ([_ sym init] {:sym sym :init init})
              ([_ sym doc init] {:sym sym :doc doc :init init}))
        args (apply pfn form)
        sym (:sym args)]
    (assert (not (namespace sym)) "Can't def ns-qualified name")
    (let [env (let [ns-name (-> env :ns :name)]
                (if (or (and (not= ns-name 'cljs.core)

   (let [enve (assoc env :context :expr)
         fexpr (analyze enve f)
         argexprs (vec (map #(analyze enve %) args))]
     {:env env :op :invoke :f fexpr :args argexprs
      :children (conj argexprs fexpr) :tag (-> fexpr :info :tag)})))

(defn analyze-symbol
  "Finds the var associated with sym"
