[analysis_server] Add syntax highlights for error/stackTrace in catch clauses

Fixes https://github.com/Dart-Code/Dart-Code/issues/4320.

Change-Id: Iad269d0f5389d548a01717fbd0facd74d31acf50
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/278346
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
Danny Tuppeny 2023-01-04 17:59:01 +00:00 committed by Commit Queue
parent 79be4f965a
commit 792aedec74
2 changed files with 40 additions and 0 deletions

View file

@ -657,6 +657,18 @@ class _DartUnitHighlightsComputerVisitor extends RecursiveAstVisitor<void> {
semanticTokenModifiers: {CustomSemanticTokenModifiers.control});
computer._addRegion_token(node.onKeyword, HighlightRegionType.BUILT_IN,
semanticTokenModifiers: {CustomSemanticTokenModifiers.control});
var exceptionParameter = node.exceptionParameter;
if (exceptionParameter != null) {
computer._addRegion_token(exceptionParameter.name,
HighlightRegionType.LOCAL_VARIABLE_DECLARATION);
}
var stackTraceParameter = node.stackTraceParameter;
if (stackTraceParameter != null) {
computer._addRegion_token(stackTraceParameter.name,
HighlightRegionType.LOCAL_VARIABLE_DECLARATION);
}
super.visitCatchClause(node);
}

View file

@ -177,4 +177,32 @@ class B {}
check(HighlightRegionType.BUILT_IN, ['implements', 'mixin', 'on']);
check(HighlightRegionType.KEYWORD, ['class']);
}
Future<void> test_highlights_tryCatch() async {
var pathname = sourcePath('test.dart');
var text = r'''
void f() {
try {
} on ArgumentError catch (error1, stackTrace1) {
} on UnimplementedError catch (error2, stackTrace2) {
} on IndexError catch (error2) {
} catch (error3, stackTrace3) {
}
}
''';
await computeHighlights(pathname, text);
check(HighlightRegionType.BUILT_IN, ['on']);
check(HighlightRegionType.KEYWORD, ['void', 'try', 'catch']);
check(HighlightRegionType.CLASS,
['ArgumentError', 'UnimplementedError', 'IndexError']);
check(HighlightRegionType.LOCAL_VARIABLE_DECLARATION, [
'error1',
'stackTrace1',
'error2',
'stackTrace2',
'error3',
'stackTrace3'
]);
}
}