Skip to content

Commit

Permalink
- add type simplifier
Browse files Browse the repository at this point in the history
  • Loading branch information
swannodette committed Mar 3, 2025
1 parent ef98670 commit 0f54664
Showing 1 changed file with 31 additions and 17 deletions.
48 changes: 31 additions & 17 deletions src/main/clojure/cljs/externs.clj
Original file line number Diff line number Diff line change
@@ -42,25 +42,39 @@
{Token/BANG :bang
Token/BLOCK :block
Token/PIPE :pipe
Token/STRINGLIT :string-lit})
Token/STRINGLIT :string-lit
Token/QMARK :qmark
Token/STAR :star})

(defn parse-texpr [^Node root]
(let [token (get token->kw (.getToken root))
children (.children root)]
(merge
{:type token}
(when-not (empty? children)
{:children (vec (map parse-texpr (.children root)))})
(when (= :string-lit token)
{:value (.getString root)}))))
(when-let [token (get token->kw (.getToken root))]
(let [children (.children root)]
(merge
{:type token}
(when-not (empty? children)
{:children (vec (map parse-texpr (.children root)))})
(when (= :string-lit token)
{:value (.getString root)})))))

(defn undefined?
[{:keys [type value] :as texpr}]
(and (= type :string-lit)
(= "undefined" value)))

(defn simplify-texpr
[texpr]
(case (:type texpr)
:string-lit (some-> (:value texpr) symbol)
(:star :qmark) 'any
:bang (simplify-texpr (-> texpr :children first))
:pipe (let [[x y] (:children texpr)]
(if (undefined? y)
(simplify-texpr x)
'any))
'any))

(defn get-tag [^JSTypeExpression texpr]
(when-let [root (.getRoot texpr)]
(if (.isString root)
(symbol (.getString root))
(if-let [child (.. root getFirstChild)]
(if (.isString child)
(symbol (.. child getString)))))))
(some-> (.getRoot texpr) parse-texpr simplify-texpr))

(defn params->method-params [xs]
(letfn [(not-opt? [x]
@@ -172,7 +186,7 @@
[lhs])
[]))))

(defmethod parse-extern-node Token/GETPROP [node]
(defmethod parse-extern-node Token/GETPROP [^Node node]
(when-not *ignore-var*
(let [props (map symbol (string/split (.getQualifiedName node) #"\."))]
[(if-let [ty (get-var-info node)]
@@ -181,7 +195,7 @@

;; JavaScript Object literal
;; { ... }
(defmethod parse-extern-node Token/OBJECTLIT [node]
(defmethod parse-extern-node Token/OBJECTLIT [^Node node]
(when (> (.getChildCount node) 0)
(loop [nodes (.children node)
externs []]

0 comments on commit 0f54664

Please sign in to comment.