@@ -245,9 +245,7 @@ object Completion:
245
245
case tpd.Select (qual @ tpd.This (_), _) :: _ if qual.span.isSynthetic => completer.scopeCompletions.names
246
246
case StringContextApplication (qual) =>
247
247
completer.scopeCompletions.names ++ completer.selectionCompletions(qual)
248
- case tpd.Select (qual, _) :: _ if qual.typeOpt.hasSimpleKind =>
249
- completer.selectionCompletions(qual)
250
- case tpd.Select (qual, _) :: _ => Map .empty
248
+ case tpd.Select (qual, _) :: _ => completer.selectionCompletions(qual)
251
249
case (tree : tpd.ImportOrExport ) :: _ => completer.directMemberCompletions(tree.expr)
252
250
case _ => completer.scopeCompletions.names
253
251
@@ -370,7 +368,7 @@ object Completion:
370
368
* For the results of all `xyzCompletions` methods term names and type names are always treated as different keys in the same map
371
369
* and they never conflict with each other.
372
370
*/
373
- class Completer (val mode : Mode , pos : SourcePosition , untpdPath : List [untpd.Tree ], matches : Name => Boolean ):
371
+ class Completer (val mode : Mode , pos : SourcePosition , untpdPath : List [untpd.Tree ], matches : Name => Boolean )( using Context ) :
374
372
/** Completions for terms and types that are currently in scope:
375
373
* the members of the current class, local definitions and the symbols that have been imported,
376
374
* recursively adding completions from outer scopes.
@@ -384,7 +382,7 @@ object Completion:
384
382
* (even if the import follows it syntactically)
385
383
* - a more deeply nested import shadowing a member or a local definition causes an ambiguity
386
384
*/
387
- def scopeCompletions ( using context : Context ) : CompletionResult =
385
+ lazy val scopeCompletions : CompletionResult =
388
386
389
387
/** Temporary data structure representing denotations with the same name introduced in a given scope
390
388
* as a member of a type, by a local definition or by an import clause
@@ -478,17 +476,16 @@ object Completion:
478
476
def selectionCompletions (qual : tpd.Tree )(using Context ): CompletionMap =
479
477
val adjustedQual = widenQualifier(qual)
480
478
481
- val implicitConversionMembers = implicitConversionMemberCompletions(adjustedQual)
482
- val extensionMembers = extensionCompletions(adjustedQual)
483
- val directMembers = directMemberCompletions(adjustedQual)
484
- val namedTupleMembers = namedTupleCompletions(adjustedQual)
479
+ if qual.symbol.is(Package ) then
480
+ directMemberCompletions(adjustedQual)
481
+ else if qual.typeOpt.hasSimpleKind then
482
+ implicitConversionMemberCompletions(adjustedQual) ++
483
+ extensionCompletions(adjustedQual) ++
484
+ directMemberCompletions(adjustedQual) ++
485
+ namedTupleCompletions(adjustedQual)
486
+ else
487
+ Map .empty
485
488
486
- List (
487
- implicitConversionMembers,
488
- extensionMembers,
489
- directMembers,
490
- namedTupleMembers
491
- ).reduce(_ ++ _)
492
489
493
490
/** Completions for members of `qual`'s type.
494
491
* These include inherited definitions but not members added by extensions or implicit conversions
@@ -619,8 +616,7 @@ object Completion:
619
616
// There are four possible ways for an extension method to be applicable
620
617
621
618
// 1. The extension method is visible under a simple name, by being defined or inherited or imported in a scope enclosing the reference.
622
- val termCompleter = new Completer (Mode .Term , pos, untpdPath, matches)
623
- val extMethodsInScope = termCompleter.scopeCompletions.names.toList.flatMap:
619
+ val extMethodsInScope = scopeCompletions.names.toList.flatMap:
624
620
case (name, denots) => denots.collect:
625
621
case d : SymDenotation if d.isTerm && d.termRef.symbol.is(Extension ) => (d.termRef, name.asTermName)
626
622
0 commit comments