Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e3a326d

Browse files
authored
Merge pull request #11084 from lrytz/pr11024fu
Completions: exclude top-level class symbols with a `$`
2 parents 7c0198a + 54a8bdd commit e3a326d

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

src/interactive/scala/tools/nsc/interactive/Global.scala

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1007,9 +1007,16 @@ class Global(settings: Settings, _reporter: Reporter, projectName: String = "")
10071007
(!implicitlyAdded || m.implicitlyAdded)
10081008

10091009
def add(sym: Symbol, pre: Type, implicitlyAdded: Boolean)(toMember: (Symbol, Type) => M): Unit = {
1010+
// cannot exclude `isSynthetic` because, eg, synthetic case class members
1011+
def exclude =
1012+
sym.isError || !sym.hasRawInfo ||
1013+
sym.isArtifact || sym.isDefaultGetter || sym.isMixinConstructor ||
1014+
// Exclude top-level class symbols with a `$`. The compiler creates a symbol for every `.class` file, but there
1015+
// are many that we don't want in completions (inner / module / specialized classes). See scala/scala-dev#905.
1016+
sym.isTopLevel && !sym.rawInfo.isComplete && sym.name.decodedName.containsChar('$')
10101017
if ((sym.isGetter || sym.isSetter) && sym.accessed != NoSymbol) {
10111018
add(sym.accessed, pre, implicitlyAdded)(toMember)
1012-
} else if (!sym.isError && !sym.isArtifact && sym.hasRawInfo && !sym.isDefaultGetter && !sym.isMixinConstructor) {
1019+
} else if (!exclude) {
10131020
val symtpe = pre.memberType(sym) onTypeError ErrorType
10141021
matching(sym, symtpe, this(sym.name)) match {
10151022
case Some(m) =>
@@ -1199,7 +1206,7 @@ class Global(settings: Settings, _reporter: Reporter, projectName: String = "")
11991206
def aliasTypeOk: Boolean = {
12001207
matcher(member.aliasInfo.map(_.sym.name).getOrElse(NoSymbol.name)) && !forImport && symbol.name.isTermName == name.isTermName
12011208
}
1202-
1209+
12031210
!isJunk && member.accessible && (name.isEmpty || (matcher(member.sym.name) || aliasTypeOk)
12041211
&& nameTypeOk)
12051212

0 commit comments

Comments
 (0)