@@ -53,9 +53,9 @@ object Completion:
53
53
val completionContext = Interactive .contextOfPath(tpdPath).withPhase(Phases .typerPhase)
54
54
inContext(completionContext):
55
55
val untpdPath = Interactive .resolveTypedOrUntypedPath(tpdPath, pos)
56
- val mode = completionMode(untpdPath, pos, forSymbolSearch = true )
57
56
val rawPrefix = completionPrefix(untpdPath, pos)
58
- val completer = new Completer (mode, pos, untpdPath, _ => true )
57
+ // Lazy mode is to avoid too many checks as it's mostly for printing types
58
+ val completer = new Completer (Mode .Lazy , pos, untpdPath, _ => true )
59
59
completer.scopeCompletions
60
60
61
61
/** Get possible completions from tree at `pos`
@@ -98,7 +98,7 @@ object Completion:
98
98
*
99
99
* Otherwise, provide no completion suggestion.
100
100
*/
101
- def completionMode (path : List [untpd.Tree ], pos : SourcePosition , forSymbolSearch : Boolean = false ): Mode = path match
101
+ def completionMode (path : List [untpd.Tree ], pos : SourcePosition ): Mode = path match
102
102
// Ignore `package foo@@` and `package foo.bar@@`
103
103
case ((_ : tpd.Select ) | (_ : tpd.Ident )):: (_ : tpd.PackageDef ) :: _ => Mode .None
104
104
case GenericImportSelector (sel) =>
@@ -111,14 +111,9 @@ object Completion:
111
111
case untpd.Literal (Constants .Constant (_ : String )) :: _ => Mode .Term | Mode .Scope // literal completions
112
112
case (ref : untpd.RefTree ) :: _ =>
113
113
val maybeSelectMembers = if ref.isInstanceOf [untpd.Select ] then Mode .Member else Mode .Scope
114
- if (forSymbolSearch) then Mode .Term | Mode .Type | maybeSelectMembers
115
- else if (ref.name.isTermName) Mode .Term | maybeSelectMembers
114
+ if (ref.name.isTermName) Mode .Term | maybeSelectMembers
116
115
else if (ref.name.isTypeName) Mode .Type | maybeSelectMembers
117
116
else Mode .None
118
-
119
- case (_ : tpd.TypeTree | _ : tpd.MemberDef ) :: _ if forSymbolSearch => Mode .Type | Mode .Term
120
- case (_ : tpd.CaseDef ) :: _ if forSymbolSearch => Mode .Type | Mode .Term
121
- case Nil if forSymbolSearch => Mode .Type | Mode .Term
122
117
case _ => Mode .None
123
118
124
119
/** When dealing with <errors> in varios palces we check to see if they are
@@ -651,7 +646,7 @@ object Completion:
651
646
private def include (denot : SingleDenotation , nameInScope : Name )(using Context ): Boolean =
652
647
matches(nameInScope) &&
653
648
completionsFilter(NoType , nameInScope) &&
654
- isValidCompletionSymbol(denot.symbol, mode, isNew)
649
+ (mode.is( Mode . Lazy ) || isValidCompletionSymbol(denot.symbol, mode, isNew) )
655
650
656
651
private def extractRefinements (site : Type )(using Context ): Seq [SingleDenotation ] =
657
652
site match
@@ -681,7 +676,7 @@ object Completion:
681
676
682
677
val members = site.memberDenots(completionsFilter, appendMemberSyms).collect {
683
678
case mbr if include(mbr, mbr.name)
684
- && mbr.symbol.isAccessibleFrom(site) => mbr
679
+ && (mode.is( Mode . Lazy ) || mbr.symbol.isAccessibleFrom(site) ) => mbr
685
680
}
686
681
val refinements = extractRefinements(site).filter(mbr => include(mbr, mbr.name))
687
682
@@ -744,3 +739,5 @@ object Completion:
744
739
745
740
val Member : Mode = new Mode (16 )
746
741
742
+ val Lazy : Mode = new Mode (32 )
743
+
0 commit comments