Skip to content

Commit c177b4c

Browse files
DanTupcommit-bot@chromium.org
authored andcommitted
Make the ranges of constructors in hovers match those of methods/functions
Fixes #35386. Change-Id: I66c0b1b9f47b8f037da9585453330d6eb1de3c4e Bug: #35386 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/105740 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Danny Tuppeny <[email protected]>
1 parent cbb1816 commit c177b4c

3 files changed

Lines changed: 32 additions & 10 deletions

File tree

pkg/analysis_server/lib/src/computer/computer_hover.dart

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,15 @@ class DartUnitHoverComputer {
4343
}
4444
if (node is Expression) {
4545
Expression expression = node;
46-
HoverInformation hover =
47-
new HoverInformation(expression.offset, expression.length);
46+
// For constructor calls the whole expression is selected (above) but this
47+
// results in the range covering the whole call so narrow it to just the
48+
// ConstructorName.
49+
HoverInformation hover = expression is InstanceCreationExpression
50+
? new HoverInformation(
51+
expression.constructorName.offset,
52+
expression.constructorName.length,
53+
)
54+
: new HoverInformation(expression.offset, expression.length);
4855
// element
4956
Element element = ElementLocator.locate(expression);
5057
if (element != null) {

pkg/analysis_server/test/analysis/get_hover_test.dart

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@ main() {
8383
''');
8484
void onConstructor(HoverInformation hover) {
8585
// range
86-
expect(hover.offset, findOffset('new A'));
87-
expect(hover.length, 'new A.named()'.length);
86+
expect(hover.offset, findOffset('new A') + 'new '.length);
87+
expect(hover.length, 'A.named'.length);
8888
// element
8989
expect(hover.dartdoc, 'my doc');
9090
expect(hover.elementDescription, 'A A.named()');
@@ -114,7 +114,7 @@ main() {
114114
HoverInformation hover = await prepareHover('A(0)');
115115
// range
116116
expect(hover.offset, findOffset('A(0)'));
117-
expect(hover.length, 'A(0)'.length);
117+
expect(hover.length, 'A'.length);
118118
// element
119119
expect(hover.containingLibraryName, 'bin/test.dart');
120120
expect(hover.containingLibraryPath, testFile);
@@ -139,7 +139,7 @@ main() {
139139
HoverInformation hover = await prepareHover('A()');
140140
// range
141141
expect(hover.offset, findOffset('A()'));
142-
expect(hover.length, 'A()'.length);
142+
expect(hover.length, 'A'.length);
143143
// element
144144
expect(hover.containingLibraryName, 'bin/test.dart');
145145
expect(hover.containingLibraryPath, testFile);
@@ -164,8 +164,8 @@ main() {
164164
''');
165165
HoverInformation hover = await prepareHover('new A');
166166
// range
167-
expect(hover.offset, findOffset('new A'));
168-
expect(hover.length, 'new A()'.length);
167+
expect(hover.offset, findOffset('new A') + 'new '.length);
168+
expect(hover.length, 'A'.length);
169169
// element
170170
expect(hover.containingLibraryName, 'bin/test.dart');
171171
expect(hover.containingLibraryPath, testFile);
@@ -189,8 +189,8 @@ main() {
189189
''');
190190
void onConstructor(HoverInformation hover) {
191191
// range
192-
expect(hover.offset, findOffset('new A<String>'));
193-
expect(hover.length, 'new A<String>()'.length);
192+
expect(hover.offset, findOffset('A<String>'));
193+
expect(hover.length, 'A<String>'.length);
194194
// element
195195
expect(hover.containingLibraryName, 'bin/test.dart');
196196
expect(hover.containingLibraryPath, testFile);

pkg/analysis_server/test/lsp/hover_test.dart

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,21 @@ print();
113113
expect(markup.value, contains('This is a string.'));
114114
}
115115

116+
test_range_multiLineConstructorCall() async {
117+
final content = '''
118+
final a = new [[Str^ing.fromCharCodes]]([
119+
1,
120+
2,
121+
]);
122+
''';
123+
124+
await initialize();
125+
await openFile(mainFileUri, withoutMarkers(content));
126+
final hover = await getHover(mainFileUri, positionFromMarker(content));
127+
expect(hover, isNotNull);
128+
expect(hover.range, equals(rangeFromMarkers(content)));
129+
}
130+
116131
test_noElement() async {
117132
final content = '''
118133
String abc;

0 commit comments

Comments
 (0)