@@ -51,9 +51,9 @@ object Completion:
5151 val completionContext = Interactive .contextOfPath(tpdPath).withPhase(Phases .typerPhase)
5252 inContext(completionContext):
5353 val untpdPath = Interactive .resolveTypedOrUntypedPath(tpdPath, pos)
54- val mode = completionMode(untpdPath, pos, forSymbolSearch = true )
5554 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 )
5757 completer.scopeCompletions
5858
5959 /** Get possible completions from tree at `pos`
@@ -96,7 +96,7 @@ object Completion:
9696 *
9797 * Otherwise, provide no completion suggestion.
9898 */
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
100100 // Ignore `package foo@@` and `package foo.bar@@`
101101 case ((_ : tpd.Select ) | (_ : tpd.Ident )):: (_ : tpd.PackageDef ) :: _ => Mode .None
102102 case GenericImportSelector (sel) =>
@@ -109,14 +109,9 @@ object Completion:
109109 case untpd.Literal (Constants .Constant (_ : String )) :: _ => Mode .Term | Mode .Scope // literal completions
110110 case (ref : untpd.RefTree ) :: _ =>
111111 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
114113 else if (ref.name.isTypeName) Mode .Type | maybeSelectMembers
115114 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
120115 case _ => Mode .None
121116
122117 /** When dealing with <errors> in varios palces we check to see if they are
@@ -623,7 +618,7 @@ object Completion:
623618 private def include (denot : SingleDenotation , nameInScope : Name )(using Context ): Boolean =
624619 matches(nameInScope) &&
625620 completionsFilter(NoType , nameInScope) &&
626- isValidCompletionSymbol(denot.symbol, mode, isNew)
621+ (mode.is( Mode . Lazy ) || isValidCompletionSymbol(denot.symbol, mode, isNew) )
627622
628623 private def extractRefinements (site : Type )(using Context ): Seq [SingleDenotation ] =
629624 site match
@@ -653,7 +648,7 @@ object Completion:
653648
654649 val members = site.memberDenots(completionsFilter, appendMemberSyms).collect {
655650 case mbr if include(mbr, mbr.name)
656- && mbr.symbol.isAccessibleFrom(site) => mbr
651+ && (mode.is( Mode . Lazy ) || mbr.symbol.isAccessibleFrom(site) ) => mbr
657652 }
658653 val refinements = extractRefinements(site).filter(mbr => include(mbr, mbr.name))
659654
@@ -716,3 +711,5 @@ object Completion:
716711
717712 val Member : Mode = new Mode (16 )
718713
714+ val Lazy : Mode = new Mode (32 )
715+
0 commit comments