@@ -322,7 +322,8 @@ class ExtractSemanticDB extends Phase {
322322 if ! isWildcard(sym.name) then
323323 val symbol = symbolName(sym)
324324 registerOccurrence(symbol, span, SymbolOccurrence .Role .DEFINITION )
325- registerSymbol(sym, symbol, symkinds)
325+ if ! sym.is(Package )
326+ registerSymbol(sym, symbol, symkinds)
326327
327328 private def spanOfSymbol (sym : Symbol , span : Span )(given Context ): Span = {
328329 val contents = if source.exists then source.content() else Array .empty[Char ]
@@ -347,6 +348,16 @@ class ExtractSemanticDB extends Phase {
347348 }).toMap
348349 end findGetters
349350
351+ def adjustSpanToName (span : Span , qualSpan : Span , name : Name )(given Context ) =
352+ val end = span.end
353+ val limit = qualSpan.end
354+ val start =
355+ if limit < end then
356+ val len = name.toString.length
357+ if source.content()(end - 1 ) == '`' then end - len - 2 else end - len
358+ else limit
359+ Span (start max end, end)
360+
350361 override def traverse (tree : Tree )(given Context ): Unit =
351362 for annot <- tree.symbol.annotations do
352363 if annot.tree.span.exists
@@ -355,6 +366,15 @@ class ExtractSemanticDB extends Phase {
355366 traverse(annot.tree)
356367
357368 tree match
369+ case tree : PackageDef =>
370+ if ! excludeDef(tree.pid.symbol) && tree.pid.span.start != tree.pid.span.end
371+ tree.pid match
372+ case tree @ Select (qual, _) =>
373+ traverse(qual)
374+ registerDefinition(tree.symbol, adjustSpanToName(tree.span, qual.span, tree.symbol.name), Set .empty)
375+ case tree @ Ident (name) =>
376+ registerDefinition(tree.symbol, tree.span, Set .empty)
377+ tree.stats.foreach(traverse)
358378 case tree : ValDef if tree.symbol.is(Module ) => // skip module val
359379 case tree : NamedDefTree
360380 if ! excludeDef(tree.symbol) && tree.span.start != tree.span.end =>
@@ -415,22 +435,16 @@ class ExtractSemanticDB extends Phase {
415435 if ! excludeUseStrict(tree.lhs.symbol, tree.lhs.span)
416436 val name = tree.lhs.symbol.name
417437 val setter = tree.lhs.symbol.owner.info.decls.find(s => s.name.startsWith(name.show) && s.name.isSetterName)
418- registerUse(setter.orElse(tree.lhs.symbol), tree.lhs.span)
438+ val span = tree.lhs.span
439+ registerUse(setter.orElse(tree.lhs.symbol), adjustSpanToName(span, span, name))
419440 traverse(tree.rhs)
420441 case tree : Ident =>
421442 if tree.name != nme.WILDCARD && ! excludeUseStrict(tree.symbol, tree.span) then
422443 registerUse(tree.symbol, tree.span)
423444 case tree : Select =>
424445 val qualSpan = tree.qualifier.span
425446 if ! excludeUseStrict(tree.symbol, tree.span) then
426- val end = tree.span.end
427- val limit = qualSpan.end
428- val start =
429- if limit < end then
430- val len = tree.name.toString.length
431- if source.content()(end - 1 ) == '`' then end - len - 1 else end - len
432- else limit
433- registerUse(tree.symbol, Span (start max limit, end))
447+ registerUse(tree.symbol, adjustSpanToName(tree.span, qualSpan, tree.name))
434448 if qualSpan.exists && qualSpan.start != qualSpan.end then
435449 traverseChildren(tree)
436450 case tree : Import =>
0 commit comments