@@ -17,6 +17,7 @@ use deno_ast::swc::ast::Prop;
1717use deno_ast:: swc:: ast:: PropOrSpread ;
1818use deno_ast:: swc:: ast:: Str ;
1919use deno_ast:: swc:: ast:: Tpl ;
20+ use deno_ast:: swc:: ast:: TsEntityName ;
2021use deno_ast:: swc:: ast:: TsFnOrConstructorType ;
2122use deno_ast:: swc:: ast:: TsFnParam ;
2223use deno_ast:: swc:: ast:: TsFnType ;
@@ -45,8 +46,14 @@ use deno_ast::SourceRangedForSpanned;
4546
4647use crate :: swc_helpers:: analyze_return_stmts_in_function_body;
4748use crate :: swc_helpers:: FunctionKind ;
49+ use crate :: swc_helpers:: ts_entity_name_to_parts;
4850use crate :: swc_helpers:: ReturnStatementAnalysis ;
51+ use crate :: symbols:: DefinitionPathNode ;
4952use crate :: symbols:: EsModuleInfo ;
53+ use crate :: symbols:: ModuleInfoRef ;
54+ use crate :: symbols:: ResolvedSymbolDepEntry ;
55+ use crate :: symbols:: RootSymbol ;
56+ use crate :: symbols:: SymbolNodeDep ;
5057use crate :: FastCheckDiagnosticRange ;
5158
5259use super :: swc_helpers:: is_call_expr_symbol_create;
@@ -494,18 +501,21 @@ pub struct TypeInferrer<'a> {
494501 specifier : & ' a ModuleSpecifier ,
495502 parsed_source : & ' a ParsedSource ,
496503 module_info : & ' a EsModuleInfo ,
504+ root_symbol : & ' a RootSymbol < ' a > ,
497505}
498506
499507impl < ' a > TypeInferrer < ' a > {
500508 pub fn new (
501509 specifier : & ' a ModuleSpecifier ,
502510 parsed_source : & ' a ParsedSource ,
503511 module_info : & ' a EsModuleInfo ,
512+ root_symbol : & ' a RootSymbol < ' a > ,
504513 ) -> Self {
505514 Self {
506515 specifier,
507516 parsed_source,
508517 module_info,
518+ root_symbol,
509519 }
510520 }
511521
@@ -1125,20 +1135,38 @@ impl<'a> TypeInferrer<'a> {
11251135 ty : & TsType ,
11261136 ) -> Result < ( ) , ExprInferFailCause > {
11271137 struct Visitor < ' a > {
1138+ root_symbol : & ' a RootSymbol < ' a > ,
11281139 es_module_info : & ' a EsModuleInfo ,
11291140 invalid_range : Option < SourceRange > ,
11301141 }
11311142
11321143 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+ }
11361163 }
11371164 }
11381165 }
11391166
11401167 let mut visitor = Visitor {
11411168 es_module_info : self . module_info ,
1169+ root_symbol : self . root_symbol ,
11421170 invalid_range : None ,
11431171 } ;
11441172 ty. visit_with ( & mut visitor) ;
0 commit comments