@@ -79,14 +79,17 @@ class SemanticdbConsumer extends TastyConsumer {
79
79
} else {
80
80
val previous_symbol = iterateParent(symbol.owner)
81
81
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
+ }
90
93
}
91
94
}
92
95
previous_symbol + next_atom
@@ -96,40 +99,95 @@ class SemanticdbConsumer extends TastyConsumer {
96
99
}
97
100
}
98
101
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
+ }
101
138
139
+ override def traverseTree (tree : Tree )(implicit ctx : Context ): Unit = {
140
+ // println(tree.pos.startColumn, tree.symbol.name, tree.pos.endColumn)
102
141
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))
118
155
}
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
+
126
167
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
+ }
127
184
case tree =>
128
185
super .traverseTree(tree)
129
186
}
130
187
}
131
188
132
189
}
190
+
133
191
Traverser .traverseTree(root)(reflect.rootContext)
134
192
}
135
193
0 commit comments