           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]

(defmulti parse-ns-api (fn [ns-] ns-))

(defn parse-extra-macros-from-clj
  []
  (let [clj-api (concat (parse-api "cljs.core" "clojure" "core.clj")
                        (parse-api "cljs.core" "clojure" "core_deftype.clj")

(def cljs-ns-paths
  ; NS                        REPO             FILE               PATH IN REPO
  {"cljs.core"              {"clojurescript" {"core.cljs"        "src/cljs/cljs"
                                              "core.clj"         "src/clj/cljs"
                                              "analyzer.clj"     "src/clj/cljs"}
                             "clojure"       {"core.clj"         "src/clj/clojure"
                                              "core_deftype.clj" "src/clj/clojure"
                                              "core_print.clj"   "src/clj/clojure"
