@@ -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