Skip to content

compile dotty with Ysemanticdb #8983

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
May 19, 2020
18 changes: 10 additions & 8 deletions compiler/src/dotty/tools/dotc/semanticdb/ExtractSemanticDB.scala
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,10 @@ class ExtractSemanticDB extends Phase:

override def traverse(tree: Tree)(using Context): Unit =

inline def traverseCtorParamTpt(ctorSym: Symbol, tpt: Tree): Unit =
val tptSym = tpt.symbol
def traverseCtorParamTpt(ctorSym: Symbol, tpt: Tree)(using Context): Unit =
val tptSym = tpt match
case ByNameTypeTree(tpt) => tpt.symbol
case tpt => tpt.symbol
if tptSym.owner == ctorSym
val found = matchingMemberType(tptSym, ctorSym.owner)
if tpt.span.hasLength
Expand All @@ -131,7 +133,7 @@ class ExtractSemanticDB extends Phase:
&& tree.pid.span.hasLength
tree.pid match
case tree @ Select(qual, name) =>
registerDefinition(tree.symbol, adjustSpanToName(tree.span, qual.span, name), Set.empty)
registerDefinition(tree.symbol, adjustSpanToName(tree.span, qual.span, name, tree.source), Set.empty)
traverse(qual)
case tree => registerDefinition(tree.symbol, tree.span, Set.empty)
tree.stats.foreach(traverse)
Expand Down Expand Up @@ -206,7 +208,7 @@ class ExtractSemanticDB extends Phase:
val lhs = tree.lhs.symbol
val setter = lhs.matchingSetter.orElse(lhs)
tree.lhs match
case tree @ Select(qual, name) => registerUse(setter, adjustSpanToName(tree.span, qual.span, name))
case tree @ Select(qual, name) => registerUse(setter, adjustSpanToName(tree.span, qual.span, name, tree.source))
case tree => registerUse(setter, tree.span)
traverseChildren(tree.lhs)
traverse(tree.rhs)
Expand All @@ -217,7 +219,7 @@ class ExtractSemanticDB extends Phase:
case tree: Select =>
val qualSpan = tree.qualifier.span
val sym = tree.symbol.adjustIfCtorTyparam
registerUseGuarded(tree.qualifier.symbol.ifExists, sym, adjustSpanToName(tree.span, qualSpan, tree.name))
registerUseGuarded(tree.qualifier.symbol.ifExists, sym, adjustSpanToName(tree.span, qualSpan, tree.name, tree.source))
if qualSpan.exists && qualSpan.hasLength then
traverse(tree.qualifier)
case tree: Import =>
Expand Down Expand Up @@ -502,7 +504,7 @@ class ExtractSemanticDB extends Phase:
}).toMap
end findGetters

private def adjustSpanToName(span: Span, qualSpan: Span, name: Name)(using Context) =
private def adjustSpanToName(span: Span, qualSpan: Span, name: Name, source: SourceFile) =
val end = span.end
val limit = qualSpan.end
val start =
Expand Down Expand Up @@ -559,8 +561,8 @@ class ExtractSemanticDB extends Phase:
case _ =>
symkinds.toSet

private inline def ctorParams(
vparamss: List[List[ValDef]], body: List[Tree])(traverseTpt: => Tree => Unit)(using Context): Unit =
private def ctorParams(
vparamss: List[List[ValDef]], body: List[Tree])(traverseTpt: Tree => Unit)(using Context): Unit =
@tu lazy val getters = findGetters(vparamss.flatMap(_.map(_.name)).toSet, body)
for
vparams <- vparamss
Expand Down