@@ -53,9 +53,9 @@ object Completion:
5353 val completionContext = Interactive .contextOfPath(tpdPath).withPhase(Phases .typerPhase)
5454 inContext(completionContext):
5555 val untpdPath = Interactive .resolveTypedOrUntypedPath(tpdPath, pos)
56- val mode = completionMode(untpdPath, pos, forSymbolSearch = true )
5756 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 )
5959 completer.scopeCompletions
6060
6161 /** Get possible completions from tree at `pos`
@@ -98,7 +98,7 @@ object Completion:
9898 *
9999 * Otherwise, provide no completion suggestion.
100100 */
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
102102 // Ignore `package foo@@` and `package foo.bar@@`
103103 case ((_ : tpd.Select ) | (_ : tpd.Ident )):: (_ : tpd.PackageDef ) :: _ => Mode .None
104104 case GenericImportSelector (sel) =>
@@ -111,14 +111,9 @@ object Completion:
111111 case untpd.Literal (Constants .Constant (_ : String )) :: _ => Mode .Term | Mode .Scope // literal completions
112112 case (ref : untpd.RefTree ) :: _ =>
113113 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
116115 else if (ref.name.isTypeName) Mode .Type | maybeSelectMembers
117116 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
122117 case _ => Mode .None
123118
124119 /** When dealing with <errors> in varios palces we check to see if they are
@@ -651,7 +646,7 @@ object Completion:
651646 private def include (denot : SingleDenotation , nameInScope : Name )(using Context ): Boolean =
652647 matches(nameInScope) &&
653648 completionsFilter(NoType , nameInScope) &&
654- isValidCompletionSymbol(denot.symbol, mode, isNew)
649+ (mode.is( Mode . Lazy ) || isValidCompletionSymbol(denot.symbol, mode, isNew) )
655650
656651 private def extractRefinements (site : Type )(using Context ): Seq [SingleDenotation ] =
657652 site match
@@ -681,7 +676,7 @@ object Completion:
681676
682677 val members = site.memberDenots(completionsFilter, appendMemberSyms).collect {
683678 case mbr if include(mbr, mbr.name)
684- && mbr.symbol.isAccessibleFrom(site) => mbr
679+ && (mode.is( Mode . Lazy ) || mbr.symbol.isAccessibleFrom(site) ) => mbr
685680 }
686681 val refinements = extractRefinements(site).filter(mbr => include(mbr, mbr.name))
687682
@@ -744,3 +739,5 @@ object Completion:
744739
745740 val Member : Mode = new Mode (16 )
746741
742+ val Lazy : Mode = new Mode (32 )
743+
0 commit comments