File tree Expand file tree Collapse file tree 2 files changed +45
-4
lines changed Expand file tree Collapse file tree 2 files changed +45
-4
lines changed Original file line number Diff line number Diff line change 980980(defn  normalize-js-tag  [x]
981981  ; ; if not 'js, assume constructor
982982  (if-not  (=  'js x)
983-     (with-meta  'js
984-       {:prefix  (conj  (->>  (string/split  (name  x) #"\. " )
985-                        (map  symbol) vec))})
983+     (let  [props  (->>  (string/split  (name  x) #"\. " ) (map  symbol))
984+           [xs y] ((juxt  butlast last) props)]
985+       (with-meta  'js
986+         {:prefix  (vec  (concat  xs [(with-meta  y {:ctor  true })]))}))
986987    x))
987988
988989(defn  ->type-set 
10821083               (recur  (next  pre) externs' top
10831084                 (update  ret :resolved  conj x))))))))))
10841085
1086+ (defn  normalize-unresolved-prefix 
1087+   [pre]
1088+   (cond->  pre
1089+     (<  1  (count  pre))
1090+     (cond-> 
1091+       (->  pre pop peek meta :ctor )
1092+       (->  pop
1093+         (conj  'prototype)
1094+         (conj  (peek  pre))))))
1095+ 
10851096(defn  has-extern?* 
10861097  [pre externs]
10871098  (boolean  (resolve-extern  pre externs)))
36003611      (let  [pre (->  tag meta :prefix )]
36013612        (when-not  (has-extern?  pre)
36023613          (swap!  env/*compiler* update-in
3603-             (into  [::namespaces  (->  env :ns  :name ) :externs ] pre) merge {}))))
3614+             (into  [::namespaces  (->  env :ns  :name ) :externs ]
3615+               (normalize-unresolved-prefix  pre)) merge {}))))
36043616    (case  dot-action
36053617      ::access  (let  [children [:target ]]
36063618                 {:op  :host-field 
Original file line number Diff line number Diff line change 2323   " goog.isArrayLike;"   " Java.type;"   " Object.out;"   " Object.out.println;" 
2424   " Object.error;"   " Object.error.println;"  ])
2525
26+ (deftest  test-normalize-js-tag 
27+   (is  (=  'js (ana/normalize-js-tag  'js)))
28+   (is  (=  '[Foo] (->  'js/Foo ana/normalize-js-tag meta :prefix )))
29+   (is  (true ? (->  'js/Foo ana/normalize-js-tag meta :prefix  last meta :ctor )))
30+   (is  (=  '[Foo Bar] (->  'js/Foo.Bar ana/normalize-js-tag meta :prefix )))
31+   (is  (true ? (->  'js/Foo.Bar ana/normalize-js-tag meta :prefix  last meta :ctor ))))
32+ 
33+ (deftest  test-normalize-unresolved-prefix 
34+   (let  [pre (->  (ana/normalize-js-tag  'js/Foo) meta :prefix  (conj  'bar))]
35+     (is  (=  '[Foo prototype bar] (ana/normalize-unresolved-prefix  pre))))
36+   (let  [pre '[Foo bar]]
37+     (is  (=  '[Foo bar] (ana/normalize-unresolved-prefix  pre)))))
38+ 
39+ (comment 
40+ 
41+   (test/test-vars  [#'test-normalize-js-tag])
42+   (test/test-vars  [#'test-normalize-unresolved-prefix])
43+ 
44+   )
45+ 
2646(deftest  test-resolve-extern 
2747  (let  [externs
2848        (externs/externs-map 
233253
234254(comment 
235255
256+   (require  '[clojure.java.io :as  io]
257+            '[cljs.closure :as  cc])
258+ 
259+   (def  externs 
260+     (->  (cc/js-source-file  nil  (io/file  " src/test/externs/test.js"  ))
261+       externs/parse-externs externs/index-externs))
262+ 
263+   (ana/resolve-extern  '[Foo gozMethod] externs)
264+ 
236265  (clojure.test/test-vars  [#'test-type-hint-infer-unknown-method])
237266
238267  )
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments