Fix highlighting local variable names in ForPartsWithDeclarations.

Change-Id: I60b9f054e46909f53e9a1c6cab58e109ae279f3d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/266442
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
Konstantin Shcheglov 2022-10-28 19:50:39 +00:00 committed by Commit Queue
parent 3bc3a84fd0
commit c7ebfde808
2 changed files with 51 additions and 28 deletions

View file

@ -809,15 +809,6 @@ class _DartUnitHighlightsComputerVisitor extends RecursiveAstVisitor<void> {
node.externalKeyword, HighlightRegionType.BUILT_IN);
computer._addRegion_token(node.staticKeyword, HighlightRegionType.BUILT_IN);
for (final variable in node.fields.variables) {
computer._addRegion_token(
variable.name,
node.isStatic
? HighlightRegionType.STATIC_FIELD_DECLARATION
: HighlightRegionType.INSTANCE_FIELD_DECLARATION,
);
}
super.visitFieldDeclaration(node);
}
@ -1299,13 +1290,6 @@ class _DartUnitHighlightsComputerVisitor extends RecursiveAstVisitor<void> {
computer._addRegion_token(
node.externalKeyword, HighlightRegionType.BUILT_IN);
for (final variable in node.variables.variables) {
computer._addRegion_token(
variable.name,
HighlightRegionType.TOP_LEVEL_VARIABLE_DECLARATION,
);
}
super.visitTopLevelVariableDeclaration(node);
}
@ -1325,25 +1309,37 @@ class _DartUnitHighlightsComputerVisitor extends RecursiveAstVisitor<void> {
}
@override
void visitVariableDeclarationList(VariableDeclarationList node) {
computer._addRegion_token(node.lateKeyword, HighlightRegionType.KEYWORD);
computer._addRegion_token(node.keyword, HighlightRegionType.KEYWORD);
super.visitVariableDeclarationList(node);
}
@override
void visitVariableDeclarationStatement(VariableDeclarationStatement node) {
for (final variable in node.variables.variables) {
final element = variable.declaredElement as LocalVariableElement;
void visitVariableDeclaration(VariableDeclaration node) {
var element = node.declaredElement;
if (element is FieldElement) {
computer._addRegion_token(
variable.name,
node.name,
element.isStatic
? HighlightRegionType.STATIC_FIELD_DECLARATION
: HighlightRegionType.INSTANCE_FIELD_DECLARATION,
);
} else if (element is LocalVariableElement) {
computer._addRegion_token(
node.name,
element.type is DynamicType
? HighlightRegionType.DYNAMIC_LOCAL_VARIABLE_DECLARATION
: HighlightRegionType.LOCAL_VARIABLE_DECLARATION,
);
} else if (element is TopLevelVariableElement) {
computer._addRegion_token(
node.name,
HighlightRegionType.TOP_LEVEL_VARIABLE_DECLARATION,
);
}
super.visitVariableDeclarationStatement(node);
super.visitVariableDeclaration(node);
}
@override
void visitVariableDeclarationList(VariableDeclarationList node) {
computer._addRegion_token(node.lateKeyword, HighlightRegionType.KEYWORD);
computer._addRegion_token(node.keyword, HighlightRegionType.KEYWORD);
super.visitVariableDeclarationList(node);
}
@override

View file

@ -898,6 +898,33 @@ void f() {
assertHasRegion(HighlightRegionType.EXTENSION, 'E(0)');
}
Future<void> test_forPartsWithDeclarations() async {
addTestFile('''
void f() {
for (var i = 0; i < 10; i++) {}
}
''');
await prepareHighlights();
assertHasRegion(HighlightRegionType.LOCAL_VARIABLE_DECLARATION, 'i = 0');
assertHasRegion(HighlightRegionType.LOCAL_VARIABLE_REFERENCE, 'i < 10');
assertHasRegion(HighlightRegionType.LOCAL_VARIABLE_REFERENCE, 'i++');
}
Future<void> test_forPartsWithDeclarations_dynamic() async {
addTestFile('''
void f() {
for (dynamic i = 0; i < 10; i++) {}
}
''');
await prepareHighlights();
assertHasRegion(
HighlightRegionType.DYNAMIC_LOCAL_VARIABLE_DECLARATION, 'i = 0');
assertHasRegion(
HighlightRegionType.DYNAMIC_LOCAL_VARIABLE_REFERENCE, 'i < 10');
assertHasRegion(
HighlightRegionType.DYNAMIC_LOCAL_VARIABLE_REFERENCE, 'i++');
}
Future<void> test_FUNCTION_TYPE_ALIAS() async {
addTestFile('''
typedef A();