@@ -79,14 +79,17 @@ class SemanticdbConsumer extends TastyConsumer {
7979 } else {
8080 val previous_symbol = iterateParent(symbol.owner)
8181 val next_atom =
82- symbol match {
83- case IsPackageSymbol (symbol) => symbol.name + " /"
84- case IsClassSymbol (symbol) => symbol.name + " #"
85- case IsDefSymbol (symbol) =>
86- symbol.name + disimbiguate(previous_symbol + symbol.name) + " ."
87- case IsValSymbol (symbol) => symbol.name + " ."
88- case owner => {
89- " "
82+ if (symbol.flags.isParam) " (" + symbol.name + " )"
83+ else {
84+ symbol match {
85+ case IsPackageSymbol (symbol) => symbol.name + " /"
86+ case IsClassSymbol (symbol) => symbol.name + " #"
87+ case IsDefSymbol (symbol) =>
88+ symbol.name + disimbiguate(previous_symbol + symbol.name) + " ."
89+ case IsValSymbol (symbol) => symbol.name + " ."
90+ case owner => {
91+ " "
92+ }
9093 }
9194 }
9295 previous_symbol + next_atom
@@ -96,40 +99,95 @@ class SemanticdbConsumer extends TastyConsumer {
9699 }
97100 }
98101
99- override def traverseTree (tree : Tree )(implicit ctx : Context ): Unit = {
100- val previous_path = stack.head
102+ def addOccurence (symbol : Symbol ,
103+ type_symbol : s.SymbolOccurrence .Role ,
104+ range : s.Range ): Unit = {
105+ // if (symbolsCache.contains(symbol)) return
106+
107+ val symbol_path = iterateParent(symbol)
108+ if (symbol_path == " " || symbol.name == " <init>" ) return
109+
110+ // println(symbol_path, symbol, range)
111+ occurrences =
112+ occurrences :+
113+ s.SymbolOccurrence (
114+ Some (range),
115+ symbol_path,
116+ type_symbol
117+ )
118+ }
119+
120+ def range (pos : Position , name : String ): s.Range = {
121+ val range_end_column =
122+ if (name == " <init>" ) {
123+ pos.endColumn
124+ } else {
125+ pos.startColumn + name.length
126+ }
127+
128+ s.Range (pos.startLine, pos.startColumn, pos.startLine, range_end_column)
129+ }
130+
131+ def rangeExclude (range : Position , exclude : Position ): s.Range = {
132+ def max (a : Int , b : Int ): Int = { if (a > b) a else b }
133+ return s.Range (max(range.startLine, exclude.startLine),
134+ max(range.startColumn, exclude.startColumn) + 1 ,
135+ range.endLine,
136+ range.endColumn)
137+ }
101138
139+ override def traverseTree (tree : Tree )(implicit ctx : Context ): Unit = {
140+ // println(tree.pos.startColumn, tree.symbol.name, tree.pos.endColumn)
102141 tree match {
103- case IsDefinition (body) =>
104- // println("[definition] ", body)
105- val symbol_path = iterateParent(tree.symbol)
106-
107- val range =
108- if (tree.symbol.name == " <init>" ) {
109- s.Range (tree.symbol.pos.startLine,
110- tree.symbol.pos.startColumn,
111- tree.symbol.pos.startLine,
112- tree.symbol.pos.endColumn)
113- } else {
114- s.Range (tree.symbol.pos.startLine,
115- tree.symbol.pos.startColumn,
116- tree.symbol.pos.startLine,
117- tree.symbol.pos.startColumn + tree.symbol.name.length)
142+ case IsDefinition (body) => {
143+
144+ def typetreeSymbol (typetree : TypeTree ): Unit =
145+ typetree match {
146+ case TypeTree .Synthetic => ()
147+ case _ =>
148+ println(tree.symbol,
149+ typetree,
150+ iterateParent(TypeTree .symbol(typetree)))
151+ addOccurence(
152+ TypeTree .symbol(typetree),
153+ s.SymbolOccurrence .Role .REFERENCE ,
154+ range(typetree.pos, TypeTree .symbol(typetree).name))
118155 }
119- occurrences =
120- occurrences :+
121- s.SymbolOccurrence (
122- Some (range),
123- symbol_path,
124- s.SymbolOccurrence .Role .DEFINITION
125- )
156+
157+ val _ = tree match {
158+ case DefDef (_, _, _, typetree, _) => typetreeSymbol(typetree)
159+ case ValDef (_, typetree, _) => typetreeSymbol(typetree)
160+ case _ => ()
161+ }
162+
163+ addOccurence(tree.symbol,
164+ s.SymbolOccurrence .Role .DEFINITION ,
165+ range(tree.symbol.pos, tree.symbol.name))
166+
126167 super .traverseTree(body)
168+ }
169+
170+ case Term .Select (qualifier, _, _) => {
171+ val range = rangeExclude(tree.pos, qualifier.pos)
172+ addOccurence(tree.symbol, s.SymbolOccurrence .Role .REFERENCE , range)
173+ super .traverseTree(tree)
174+ }
175+
176+ case Term .Ident (body) => {
177+ // println(tree.pos.startColumn, tree.pos.endColumn)
178+ // println(tree.namePos.startColumn, tree.namePos.endColumn)
179+ addOccurence(tree.symbol,
180+ s.SymbolOccurrence .Role .REFERENCE ,
181+ range(tree.pos, tree.symbol.name))
182+ super .traverseTree(tree)
183+ }
127184 case tree =>
128185 super .traverseTree(tree)
129186 }
130187 }
131188
132189 }
190+
133191 Traverser .traverseTree(root)(reflect.rootContext)
134192 }
135193
0 commit comments