Skip to content

Commit 263eb47

Browse files
authored
Merge pull request scala#10148 from tgodzik/correct-by-name
2 parents a901a60 + a521eac commit 263eb47

File tree

4 files changed

+14
-30
lines changed

4 files changed

+14
-30
lines changed

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

Lines changed: 6 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -992,7 +992,7 @@ class Global(settings: Settings, _reporter: Reporter, projectName: String = "")
992992

993993
private[interactive] def getScopeCompletion(pos: Position, response: Response[List[Member]]): Unit = {
994994
informIDE("getScopeCompletion" + pos)
995-
respond(response) { scopeMemberFlatten(scopeMembers(pos)) }
995+
respond(response) { scopeMembers(pos) }
996996
}
997997

998998
@nowarn("msg=inheritance from class LinkedHashMap")
@@ -1045,14 +1045,7 @@ class Global(settings: Settings, _reporter: Reporter, projectName: String = "")
10451045
// imported val and var are always marked as inaccessible, but they could be accessed through their getters. scala/bug#7995
10461046
val member = if (s.hasGetter)
10471047
ScopeMember(s, st, context.isAccessible(s.getter, pre, superAccess = false), viaImport)
1048-
else {
1049-
if (s.isAliasType) {
1050-
val aliasInfo = ScopeMember(s, st, context.isAccessible(s, pre, superAccess = false), viaImport)
1051-
ScopeMember(s.info.typeSymbol, s.info.typeSymbol.tpe,
1052-
context.isAccessible(s.info.typeSymbol, pre, superAccess = false), viaImport,
1053-
aliasInfo = Some(aliasInfo))
1054-
} else ScopeMember(s, st, context.isAccessible(s, pre, superAccess = false), viaImport)
1055-
}
1048+
else ScopeMember(s, st, context.isAccessible(s, pre, superAccess = false), viaImport)
10561049
member.prefix = pre
10571050
member
10581051
}
@@ -1197,13 +1190,7 @@ class Global(settings: Settings, _reporter: Reporter, projectName: String = "")
11971190
symbol.name.isTermName == name.isTermName || // Keep names of the same type
11981191
name.isTypeName && isStable // Completing a type: keep stable terms (paths)
11991192
}
1200-
// scala/bug#11846 aliasInfo should be match
1201-
def aliasTypeOk: Boolean = {
1202-
matcher(member.aliasInfo.map(_.sym.name).getOrElse(NoSymbol.name)) && !forImport && symbol.name.isTermName == name.isTermName
1203-
}
1204-
1205-
!isJunk && member.accessible && !symbol.isConstructor && (name.isEmpty || (matcher(member.sym.name) || aliasTypeOk)
1206-
&& nameTypeOk)
1193+
!isJunk && member.accessible && !symbol.isConstructor && (name.isEmpty || matcher(member.sym.name)) && nameTypeOk
12071194

12081195
}
12091196
}
@@ -1224,11 +1211,6 @@ class Global(settings: Settings, _reporter: Reporter, projectName: String = "")
12241211
}
12251212
}
12261213

1227-
private def scopeMemberFlatten(members: List[ScopeMember]): List[ScopeMember] = {
1228-
val (infoWithoutAlias, infoWithAlias) = members.partition(_.aliasInfo.isEmpty)
1229-
infoWithoutAlias ++ infoWithAlias ++ infoWithAlias.flatten(_.aliasInfo)
1230-
}
1231-
12321214
final def completionsAt(pos: Position): CompletionResult = {
12331215
val focus1: Tree = typedTreeAt(pos)
12341216
def typeCompletions(tree: Tree, qual: Tree, nameStart: Int, name: Name): CompletionResult = {
@@ -1256,13 +1238,13 @@ class Global(settings: Settings, _reporter: Reporter, projectName: String = "")
12561238
val allMembers = scopeMembers(pos)
12571239
val positionDelta: Int = pos.start - focus1.pos.start
12581240
val subName = name.subName(0, positionDelta)
1259-
CompletionResult.ScopeMembers(positionDelta, scopeMemberFlatten(allMembers), subName, forImport = false)
1241+
CompletionResult.ScopeMembers(positionDelta, allMembers, subName, forImport = false)
12601242
case imp@Import(i @ Ident(name), head :: Nil) if head.name == nme.ERROR =>
12611243
val allMembers = scopeMembers(pos)
12621244
val nameStart = i.pos.start
12631245
val positionDelta: Int = pos.start - nameStart
12641246
val subName = name.subName(0, pos.start - i.pos.start)
1265-
CompletionResult.ScopeMembers(positionDelta, scopeMemberFlatten(allMembers), subName, forImport = true)
1247+
CompletionResult.ScopeMembers(positionDelta, allMembers, subName, forImport = true)
12661248
case imp@Import(qual, selectors) =>
12671249
selectors.reverseIterator.find(_.namePos <= pos.start) match {
12681250
case None => CompletionResult.NoResults
@@ -1285,7 +1267,7 @@ class Global(settings: Settings, _reporter: Reporter, projectName: String = "")
12851267
val allMembers = scopeMembers(pos)
12861268
val positionDelta: Int = pos.start - focus1.pos.start
12871269
val subName = name.subName(0, positionDelta)
1288-
CompletionResult.ScopeMembers(positionDelta, scopeMemberFlatten(allMembers), subName, forImport = false)
1270+
CompletionResult.ScopeMembers(positionDelta, allMembers, subName, forImport = false)
12891271
case _ =>
12901272
CompletionResult.NoResults
12911273
}

src/repl-frontend/scala/tools/nsc/interpreter/jline/Reader.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ class Completion(delegate: shell.Completion) extends shell.Completion with Compl
350350
}
351351

352352
val parsedLineWord = parsedLine.word()
353-
result.candidates.filter(c => c.name == parsedLineWord || c.alias.fold(false)(a => a == parsedLineWord)) match {
353+
result.candidates.filter(_.name == parsedLineWord) match {
354354
case Nil =>
355355
case exacts =>
356356
val declStrings = exacts.map(_.declString()).filterNot(_ == "")

src/repl/scala/tools/nsc/interpreter/Interface.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,6 @@ case class CompletionCandidate(
336336
isDeprecated: Boolean = false,
337337
isUniversal: Boolean = false,
338338
declString: () => String = () => "",
339-
alias: Option[String] = None
340339
)
341340
object CompletionCandidate {
342341
sealed trait Arity

src/repl/scala/tools/nsc/interpreter/PresentationCompilation.scala

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,12 @@ trait PresentationCompilation { self: IMain =>
216216
val ccs = for {
217217
member <- matching
218218
if seen.add(member.sym)
219-
sym <- if (member.sym.isClass && isNew) member.sym.info.decl(nme.CONSTRUCTOR).alternatives else member.sym.alternatives
219+
candidate <- if (member.sym.isAliasType) {
220+
val dealiased = member.sym.info.dealias.typeSymbol
221+
seen.add(dealiased)
222+
List(member.sym, dealiased)
223+
} else List(member.sym)
224+
sym <- if (candidate.isClass && isNew) candidate.info.decl(nme.CONSTRUCTOR).alternatives else candidate.alternatives
220225
sugared = sym.sugaredSymbolOrSelf
221226
} yield {
222227
CompletionCandidate(
@@ -232,9 +237,7 @@ trait PresentationCompilation { self: IMain =>
232237
val methodOtherDesc = if (!desc.exists(_ != "")) "" else " " + desc.filter(_ != "").mkString(" ")
233238
sugared.defStringSeenAs(tp) + methodOtherDesc
234239
}
235-
},
236-
alias = member.aliasInfo.fold[Option[String]](None)(s => Some(s.sym.nameString))
237-
)
240+
})
238241
}
239242
ccs
240243
}

0 commit comments

Comments
 (0)