@@ -17,6 +17,7 @@ use deno_ast::swc::ast::Prop;
17
17
use deno_ast:: swc:: ast:: PropOrSpread ;
18
18
use deno_ast:: swc:: ast:: Str ;
19
19
use deno_ast:: swc:: ast:: Tpl ;
20
+ use deno_ast:: swc:: ast:: TsEntityName ;
20
21
use deno_ast:: swc:: ast:: TsFnOrConstructorType ;
21
22
use deno_ast:: swc:: ast:: TsFnParam ;
22
23
use deno_ast:: swc:: ast:: TsFnType ;
@@ -45,8 +46,14 @@ use deno_ast::SourceRangedForSpanned;
45
46
46
47
use crate :: swc_helpers:: analyze_return_stmts_in_function_body;
47
48
use crate :: swc_helpers:: FunctionKind ;
49
+ use crate :: swc_helpers:: ts_entity_name_to_parts;
48
50
use crate :: swc_helpers:: ReturnStatementAnalysis ;
51
+ use crate :: symbols:: DefinitionPathNode ;
49
52
use crate :: symbols:: EsModuleInfo ;
53
+ use crate :: symbols:: ModuleInfoRef ;
54
+ use crate :: symbols:: ResolvedSymbolDepEntry ;
55
+ use crate :: symbols:: RootSymbol ;
56
+ use crate :: symbols:: SymbolNodeDep ;
50
57
use crate :: FastCheckDiagnosticRange ;
51
58
52
59
use super :: swc_helpers:: is_call_expr_symbol_create;
@@ -494,18 +501,21 @@ pub struct TypeInferrer<'a> {
494
501
specifier : & ' a ModuleSpecifier ,
495
502
parsed_source : & ' a ParsedSource ,
496
503
module_info : & ' a EsModuleInfo ,
504
+ root_symbol : & ' a RootSymbol < ' a > ,
497
505
}
498
506
499
507
impl < ' a > TypeInferrer < ' a > {
500
508
pub fn new (
501
509
specifier : & ' a ModuleSpecifier ,
502
510
parsed_source : & ' a ParsedSource ,
503
511
module_info : & ' a EsModuleInfo ,
512
+ root_symbol : & ' a RootSymbol < ' a > ,
504
513
) -> Self {
505
514
Self {
506
515
specifier,
507
516
parsed_source,
508
517
module_info,
518
+ root_symbol,
509
519
}
510
520
}
511
521
@@ -1125,20 +1135,38 @@ impl<'a> TypeInferrer<'a> {
1125
1135
ty : & TsType ,
1126
1136
) -> Result < ( ) , ExprInferFailCause > {
1127
1137
struct Visitor < ' a > {
1138
+ root_symbol : & ' a RootSymbol < ' a > ,
1128
1139
es_module_info : & ' a EsModuleInfo ,
1129
1140
invalid_range : Option < SourceRange > ,
1130
1141
}
1131
1142
1132
1143
impl Visit for Visitor < ' _ > {
1133
- fn visit_ident ( & mut self , n : & Ident ) {
1134
- if self . es_module_info . symbol_from_swc ( & n. to_id ( ) ) . is_none ( ) {
1135
- self . invalid_range = Some ( n. range ( ) ) ;
1144
+ fn visit_ts_entity_name ( & mut self , n : & TsEntityName ) {
1145
+ let ( id, parts) = ts_entity_name_to_parts ( n) ;
1146
+
1147
+ let dep = SymbolNodeDep :: QualifiedId ( id, parts) ;
1148
+
1149
+ let entries = self
1150
+ . root_symbol
1151
+ . resolve_symbol_dep ( ModuleInfoRef :: Esm ( self . es_module_info ) , & dep) ;
1152
+
1153
+ for entry in entries {
1154
+ match entry {
1155
+ ResolvedSymbolDepEntry :: Path ( DefinitionPathNode :: Resolved ( _) )
1156
+ | ResolvedSymbolDepEntry :: ImportType ( _) => {
1157
+ // valid
1158
+ }
1159
+ ResolvedSymbolDepEntry :: Path ( DefinitionPathNode :: Unresolved ( _) ) => {
1160
+ self . invalid_range = Some ( n. range ( ) ) ;
1161
+ }
1162
+ }
1136
1163
}
1137
1164
}
1138
1165
}
1139
1166
1140
1167
let mut visitor = Visitor {
1141
1168
es_module_info : self . module_info ,
1169
+ root_symbol : self . root_symbol ,
1142
1170
invalid_range : None ,
1143
1171
} ;
1144
1172
ty. visit_with ( & mut visitor) ;
0 commit comments