@@ -51,9 +51,9 @@ object Completion:
51
51
val completionContext = Interactive .contextOfPath(tpdPath).withPhase(Phases .typerPhase)
52
52
inContext(completionContext):
53
53
val untpdPath = Interactive .resolveTypedOrUntypedPath(tpdPath, pos)
54
- val mode = completionMode(untpdPath, pos, forSymbolSearch = true )
55
54
val rawPrefix = completionPrefix(untpdPath, pos)
56
- val completer = new Completer (mode, pos, untpdPath, _ => true )
55
+ // Lazy mode is to avoid too many checks as it's mostly for printing types
56
+ val completer = new Completer (Mode .Lazy , pos, untpdPath, _ => true )
57
57
completer.scopeCompletions
58
58
59
59
/** Get possible completions from tree at `pos`
@@ -96,7 +96,7 @@ object Completion:
96
96
*
97
97
* Otherwise, provide no completion suggestion.
98
98
*/
99
- def completionMode (path : List [untpd.Tree ], pos : SourcePosition , forSymbolSearch : Boolean = false ): Mode = path match
99
+ def completionMode (path : List [untpd.Tree ], pos : SourcePosition ): Mode = path match
100
100
// Ignore `package foo@@` and `package foo.bar@@`
101
101
case ((_ : tpd.Select ) | (_ : tpd.Ident )):: (_ : tpd.PackageDef ) :: _ => Mode .None
102
102
case GenericImportSelector (sel) =>
@@ -109,14 +109,9 @@ object Completion:
109
109
case untpd.Literal (Constants .Constant (_ : String )) :: _ => Mode .Term | Mode .Scope // literal completions
110
110
case (ref : untpd.RefTree ) :: _ =>
111
111
val maybeSelectMembers = if ref.isInstanceOf [untpd.Select ] then Mode .Member else Mode .Scope
112
- if (forSymbolSearch) then Mode .Term | Mode .Type | maybeSelectMembers
113
- else if (ref.name.isTermName) Mode .Term | maybeSelectMembers
112
+ if (ref.name.isTermName) Mode .Term | maybeSelectMembers
114
113
else if (ref.name.isTypeName) Mode .Type | maybeSelectMembers
115
114
else Mode .None
116
-
117
- case (_ : tpd.TypeTree | _ : tpd.MemberDef ) :: _ if forSymbolSearch => Mode .Type | Mode .Term
118
- case (_ : tpd.CaseDef ) :: _ if forSymbolSearch => Mode .Type | Mode .Term
119
- case Nil if forSymbolSearch => Mode .Type | Mode .Term
120
115
case _ => Mode .None
121
116
122
117
/** When dealing with <errors> in varios palces we check to see if they are
@@ -623,7 +618,7 @@ object Completion:
623
618
private def include (denot : SingleDenotation , nameInScope : Name )(using Context ): Boolean =
624
619
matches(nameInScope) &&
625
620
completionsFilter(NoType , nameInScope) &&
626
- isValidCompletionSymbol(denot.symbol, mode, isNew)
621
+ (mode.is( Mode . Lazy ) || isValidCompletionSymbol(denot.symbol, mode, isNew) )
627
622
628
623
private def extractRefinements (site : Type )(using Context ): Seq [SingleDenotation ] =
629
624
site match
@@ -653,7 +648,7 @@ object Completion:
653
648
654
649
val members = site.memberDenots(completionsFilter, appendMemberSyms).collect {
655
650
case mbr if include(mbr, mbr.name)
656
- && mbr.symbol.isAccessibleFrom(site) => mbr
651
+ && (mode.is( Mode . Lazy ) || mbr.symbol.isAccessibleFrom(site) ) => mbr
657
652
}
658
653
val refinements = extractRefinements(site).filter(mbr => include(mbr, mbr.name))
659
654
@@ -716,3 +711,5 @@ object Completion:
716
711
717
712
val Member : Mode = new Mode (16 )
718
713
714
+ val Lazy : Mode = new Mode (32 )
715
+
0 commit comments