Skip to content

Commit 538606f

Browse files
committed
Update range calculation
Uses new Document methods for computing range and selectionRange.
1 parent 1c720cd commit 538606f

File tree

2 files changed

+19
-46
lines changed

2 files changed

+19
-46
lines changed

src/main/java/software/amazon/smithy/lsp/language/DocumentSymbolHandler.java

Lines changed: 18 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55

66
package software.amazon.smithy.lsp.language;
77

8-
import static software.amazon.smithy.lsp.protocol.LspAdapter.identRange;
9-
108
import java.util.ArrayList;
119
import java.util.EnumSet;
1210
import java.util.List;
@@ -112,25 +110,20 @@ private void addMemberSymbols(ListIterator<Syntax.Statement> listIterator, Docum
112110
}
113111

114112
private DocumentSymbol namespaceSymbol(Syntax.Statement.Namespace namespace) {
115-
var range = document.rangeBetween(namespace.start(), namespace.end());
116-
var selectionRange = identRange(namespace.namespace(), document);
117113
return new DocumentSymbol(
118114
namespace.namespace().stringValue(),
119115
SymbolKind.Namespace,
120-
range,
121-
selectionRange
116+
document.rangeOf(namespace),
117+
document.rangeOfValue(namespace.namespace())
122118
);
123119
}
124120

125121
private DocumentSymbol rootSymbol(Syntax.Statement.ShapeDef shapeDef) {
126-
var symbolKind = getSymbolKind(shapeDef);
127-
var range = document.rangeBetween(shapeDef.start(), shapeDef.end());
128-
var selectionRange = identRange(shapeDef.shapeName(), document);
129122
return new DocumentSymbol(
130123
shapeDef.shapeName().stringValue(),
131-
symbolKind,
132-
range,
133-
selectionRange
124+
getSymbolKind(shapeDef),
125+
document.rangeOf(shapeDef),
126+
document.rangeOfValue(shapeDef.shapeName())
134127
);
135128
}
136129

@@ -142,34 +135,30 @@ private static SymbolKind getSymbolKind(Syntax.Statement.ShapeDef shapeDef) {
142135
}
143136

144137
private DocumentSymbol memberDefSymbol(Syntax.Statement.MemberDef memberDef) {
145-
var range = document.rangeBetween(memberDef.start(), memberDef.end());
146-
var selectionRange = identRange(memberDef.name(), document);
147138
var detail = memberDef.target() == null
148139
? null
149140
: memberDef.target().stringValue();
150141

151142
return new DocumentSymbol(
152143
memberDef.name().stringValue(),
153144
SymbolKind.Field,
154-
range,
155-
selectionRange,
145+
document.rangeOf(memberDef),
146+
document.rangeOfValue(memberDef.name()),
156147
detail
157148
);
158149
}
159150

160151
private DocumentSymbol enumMemberDefSymbol(Syntax.Statement.EnumMemberDef enumMemberDef) {
161-
var range = document.rangeBetween(enumMemberDef.start(), enumMemberDef.end());
162-
var selectionRange = identRange(enumMemberDef.name(), document);
163152
return new DocumentSymbol(
164153
enumMemberDef.name().stringValue(),
165154
SymbolKind.EnumMember,
166-
range,
167-
selectionRange
155+
document.rangeOf(enumMemberDef),
156+
document.rangeOfValue(enumMemberDef.name())
168157
);
169158
}
170159

171160
private DocumentSymbol elidedMemberDefSymbol(Syntax.Statement.ElidedMemberDef elidedMemberDef) {
172-
var range = document.rangeBetween(elidedMemberDef.start(), elidedMemberDef.end());
161+
var range = document.rangeOf(elidedMemberDef);
173162
return new DocumentSymbol(
174163
"$" + elidedMemberDef.name().stringValue(),
175164
SymbolKind.Field,
@@ -179,18 +168,16 @@ private DocumentSymbol elidedMemberDefSymbol(Syntax.Statement.ElidedMemberDef el
179168
}
180169

181170
private DocumentSymbol nodeMemberDefSymbol(Syntax.Statement.NodeMemberDef nodeMemberDef) {
182-
var range = document.rangeBetween(nodeMemberDef.start(), nodeMemberDef.end());
183-
var selectionRange = identRange(nodeMemberDef.name(), document);
184-
String detail = null;
185-
if (nodeMemberDef.value() instanceof Syntax.Ident ident) {
186-
detail = ident.stringValue();
187-
}
171+
String detail = switch (nodeMemberDef.value()) {
172+
case Syntax.Ident ident -> ident.stringValue();
173+
case null, default -> null;
174+
};
188175

189176
return new DocumentSymbol(
190177
nodeMemberDef.name().stringValue(),
191178
SymbolKind.Property,
192-
range,
193-
selectionRange,
179+
document.rangeOf(nodeMemberDef),
180+
document.rangeOfValue(nodeMemberDef.name()),
194181
detail
195182
);
196183
}
@@ -199,13 +186,11 @@ private DocumentSymbol inlineMemberSymbol(
199186
ListIterator<Syntax.Statement> listIterator,
200187
Syntax.Statement.InlineMemberDef inlineMemberDef
201188
) {
202-
var range = document.rangeBetween(inlineMemberDef.start(), inlineMemberDef.end());
203-
var selectionRange = identRange(inlineMemberDef.name(), document);
204189
var inlineSymbol = new DocumentSymbol(
205190
inlineMemberDef.name().stringValue(),
206191
SymbolKind.Property,
207-
range,
208-
selectionRange
192+
document.rangeOf(inlineMemberDef),
193+
document.rangeOfValue(inlineMemberDef.name())
209194
);
210195

211196
addMemberSymbols(listIterator, inlineSymbol);

src/main/java/software/amazon/smithy/lsp/protocol/LspAdapter.java

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -120,19 +120,7 @@ public static Range of(int startLine, int startCharacter, int endLine, int endCh
120120
* @return The range of the identifier in the given document
121121
*/
122122
public static Range identRange(Syntax.Ident ident, Document document) {
123-
int line = document.lineOfIndex(ident.start());
124-
if (line < 0) {
125-
return null;
126-
}
127-
128-
int lineStart = document.indexOfLine(line);
129-
if (lineStart < 0) {
130-
return null;
131-
}
132-
133-
int startCharacter = ident.start() - lineStart;
134-
int endCharacter = ident.end() - lineStart;
135-
return LspAdapter.lineSpan(line, startCharacter, endCharacter);
123+
return document.rangeOfValue(ident);
136124
}
137125

138126
/**

0 commit comments

Comments
 (0)