diff --git a/pkg/analysis_server/doc/api.html b/pkg/analysis_server/doc/api.html
index 6b9305a17ef..b792411dbfe 100644
--- a/pkg/analysis_server/doc/api.html
+++ b/pkg/analysis_server/doc/api.html
@@ -4763,7 +4763,7 @@ a:focus, a:hover {
- ANNOTATION
- BUILT_IN
- CLASS
- COMMENT_BLOCK
- COMMENT_DOCUMENTATION
- COMMENT_END_OF_LINE
- CONSTRUCTOR
- CONSTRUCTOR_TEAR_OFF
- DIRECTIVE
- DYNAMIC_TYPE
-
Deprecated - no longer sent.
- - DYNAMIC_LOCAL_VARIABLE_DECLARATION
- DYNAMIC_LOCAL_VARIABLE_REFERENCE
- DYNAMIC_PARAMETER_DECLARATION
- DYNAMIC_PARAMETER_REFERENCE
- ENUM
- ENUM_CONSTANT
- EXTENSION
- FIELD
-
+
- DYNAMIC_LOCAL_VARIABLE_DECLARATION
- DYNAMIC_LOCAL_VARIABLE_REFERENCE
- DYNAMIC_PARAMETER_DECLARATION
- DYNAMIC_PARAMETER_REFERENCE
- ENUM
- ENUM_CONSTANT
- EXTENSION
- EXTENSION_TYPE
- FIELD
-
Deprecated - no longer sent.
- FIELD_STATIC
-
diff --git a/pkg/analysis_server/lib/src/computer/computer_highlights.dart b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
index 853da0da638..8130e193606 100644
--- a/pkg/analysis_server/lib/src/computer/computer_highlights.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
@@ -184,6 +184,8 @@ class DartUnitHighlightsComputer {
semanticModifiers = {CustomSemanticTokenModifiers.constructor};
} else if (element is EnumElement) {
type = HighlightRegionType.ENUM;
+ } else if (element is ExtensionTypeElement) {
+ type = HighlightRegionType.EXTENSION_TYPE;
} else {
type = HighlightRegionType.CLASS;
if (parent is ConstructorDeclaration) {
@@ -862,6 +864,27 @@ class _DartUnitHighlightsComputerVisitor extends RecursiveAstVisitor {
super.visitExtensionOverride(node);
}
+ @override
+ void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
+ computer._addRegion_token(
+ node.extensionKeyword,
+ HighlightRegionType.BUILT_IN,
+ );
+
+ computer._addRegion_token(
+ node.typeKeyword,
+ HighlightRegionType.BUILT_IN,
+ );
+
+ computer._addRegion_token(
+ node.name,
+ HighlightRegionType.EXTENSION_TYPE,
+ semanticTokenModifiers: {SemanticTokenModifiers.declaration},
+ );
+
+ super.visitExtensionTypeDeclaration(node);
+ }
+
@override
void visitFieldDeclaration(FieldDeclaration node) {
computer._addRegion_token(
@@ -1269,6 +1292,32 @@ class _DartUnitHighlightsComputerVisitor extends RecursiveAstVisitor {
super.visitRecordTypeAnnotation(node);
}
+ @override
+ void visitRepresentationConstructorName(RepresentationConstructorName node) {
+ computer._addRegion_token(
+ node.name,
+ HighlightRegionType.CONSTRUCTOR,
+ semanticTokenType: SemanticTokenTypes.method,
+ semanticTokenModifiers: {
+ CustomSemanticTokenModifiers.constructor,
+ SemanticTokenModifiers.declaration,
+ },
+ );
+
+ super.visitRepresentationConstructorName(node);
+ }
+
+ @override
+ void visitRepresentationDeclaration(RepresentationDeclaration node) {
+ computer._addRegion_token(
+ node.fieldName,
+ HighlightRegionType.INSTANCE_FIELD_DECLARATION,
+ semanticTokenModifiers: {SemanticTokenModifiers.declaration},
+ );
+
+ super.visitRepresentationDeclaration(node);
+ }
+
@override
void visitRethrowExpression(RethrowExpression node) {
computer._addRegion_token(node.rethrowKeyword, HighlightRegionType.KEYWORD,
diff --git a/pkg/analysis_server/test/analysis/notification_highlights2_test.dart b/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
index 21bf24c967a..16fad28a651 100644
--- a/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
@@ -1099,6 +1099,25 @@ void f() {
assertHasRegion(HighlightRegionType.EXTENSION, 'E.bar()');
}
+ Future test_extensionType() async {
+ final testCode = TestCode.parse(r'''
+extension type A.named(int it) implements num {}
+''');
+ addTestFile(testCode.code);
+ await prepareHighlights();
+ assertHighlightText(testCode, -1, r'''
+0 + 9 |extension| BUILT_IN
+10 + 4 |type| BUILT_IN
+15 + 1 |A| EXTENSION_TYPE
+17 + 1 |T| TYPE_PARAMETER
+20 + 5 |named| CONSTRUCTOR
+26 + 3 |int| CLASS
+30 + 2 |it| INSTANCE_FIELD_DECLARATION
+34 + 10 |implements| BUILT_IN
+45 + 3 |num| CLASS
+''');
+ }
+
Future test_forEachPartsWithPattern_final() async {
addTestFile('''
void f(List