 (defmulti parse-ns-api (fn [ns-] ns-))
 
 (defn parse-extra-macros-from-clj
+  "cljs.core uses some macros from clojure.core, so find those here"
   []
   (let [clj-api (concat (parse-api "cljs.core" "clojure" "core.clj")
                         (parse-api "cljs.core" "clojure" "core_deftype.clj")

        cljs-forms   (get-forms "cljs.core" "clojurescript" "core.clj")
        imports      (get-imported-macro-api     cljs-forms clj-api)
        non-excludes (get-non-excluded-macro-api cljs-forms clj-api)]
    (println "   " (count imports) "imported clojure.core macros")
    (println "   " (count non-excludes) "non-excluded clojure.core macros")
    (concat imports non-excludes)))

(defmethod parse-ns-api "cljs.core" [ns-]
  (let [clj-api  (parse-api ns- "clojurescript" "core.clj")
        cljs-api (parse-api ns- "clojurescript" "core.cljs")
        extra-macro-api (parse-extra-macros-from-clj)]
    (concat extra-macro-api clj-api cljs-api)))

(defmethod parse-ns-api "cljs.reader" [ns-]
  (parse-api ns- "clojurescript" "reader.cljs"))

          final (update-in merged [:source] try-remove-docs (:expected-docs specific))]
      final)))

(defn parse-special*
  "Parse cljs special forms of the form:
  (defmethod parse 'symbol ...)"
  [form]
  (when (and (list? form)
             (= 'defmethod (first form))
             (= 'parse (second form)))
    (let [quoted-name (nth form 2)
          name- (second quoted-name)]
      {:name name-})))

(defn parse-special
  [form ns- repo]
  (when-let [special (parse-special* form)]
    (let [location (parse-location form ns- repo)
          extras {:full-name (str ns- "/" (:name special))
                  :type "special form"}
          final (merge special location extras)]
      final)))

(defn parse-api
  "Parse the functions and macros from the given repo file"
  [ns- repo file]
