@@ -92,8 +92,10 @@ pub fn (r &SubResolver) process_qualifier_expression(qualifier PsiElement, mut p
9292 if qualifier is ReferenceExpressionBase {
9393 resolved := qualifier.resolve () or { return true }
9494 if resolved is ImportSpec {
95- elements := stubs_index.get_all_declarations_from_module (resolved.qualified_name (),
96- r.for_types)
95+ import_name := resolved.qualified_name ()
96+ real_fqn := stubs_index.find_real_module_fqn (import_name)
97+
98+ elements := stubs_index.get_all_declarations_from_module (real_fqn, r.for_types)
9799 for element in elements {
98100 if ! processor.execute (element) {
99101 return false
@@ -351,7 +353,7 @@ pub fn (r &SubResolver) process_unqualified_resolve(mut processor PsiScopeProces
351353 if ! r.process_imported_modules (mut processor) {
352354 return false
353355 }
354- if ! r.process_module_clause (mut processor) {
356+ if ! r.process_selective_imports (mut processor) {
355357 return false
356358 }
357359 if ! r.process_owner_generic_ts (mut processor) {
@@ -441,6 +443,9 @@ pub fn (r &SubResolver) process_unqualified_resolve(mut processor PsiScopeProces
441443 if ! r.process_elements (mod_decls, mut processor) {
442444 return false
443445 }
446+ if ! r.process_module_clause (mut processor) {
447+ return false
448+ }
444449
445450 return true
446451}
@@ -570,6 +575,30 @@ pub fn (r &SubResolver) process_imported_modules(mut processor PsiScopeProcessor
570575 return true
571576}
572577
578+ pub fn (r &SubResolver) process_selective_imports (mut processor PsiScopeProcessor) bool {
579+ element := r.element as PsiElement
580+ name := r.element.name ()
581+ file := r.containing_file or { return true }
582+
583+ if parent_list := element.parent_of_type (.selective_import_list) {
584+ if spec := parent_list.parent_of_type (.import_spec) {
585+ if spec is ImportSpec {
586+ if found := file.resolve_symbol_in_import_spec (spec, name) {
587+ return processor.execute (found)
588+ }
589+ return true
590+ }
591+ }
592+ }
593+
594+ if resolved := file.resolve_selective_import_symbol (name) {
595+ if ! processor.execute (resolved) {
596+ return false
597+ }
598+ }
599+ return true
600+ }
601+
573602pub fn (r &SubResolver) process_enum_fetch (parent PsiElement, mut processor PsiScopeProcessor) bool {
574603 context_type := TypeInferer{}.infer_context_type (parent)
575604 return r.process_type (context_type, mut processor)
0 commit comments