Skip to content

Commit 5f6daed

Browse files
committed
Augment. Parse 'augmentKeyword' for top-level variables.
Change-Id: If8f0cb6fc1af77fb91774952931db5da214142e9 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/354520 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com>
1 parent 897c89e commit 5f6daed

File tree

95 files changed

+674
-559
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

95 files changed

+674
-559
lines changed

pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1256,6 +1256,7 @@ class ForwardingListener implements Listener {
12561256

12571257
@override
12581258
void endTopLevelFields(
1259+
Token? augmentToken,
12591260
Token? externalToken,
12601261
Token? staticToken,
12611262
Token? covariantToken,
@@ -1264,8 +1265,16 @@ class ForwardingListener implements Listener {
12641265
int count,
12651266
Token beginToken,
12661267
Token endToken) {
1267-
listener?.endTopLevelFields(externalToken, staticToken, covariantToken,
1268-
lateToken, varFinalOrConst, count, beginToken, endToken);
1268+
listener?.endTopLevelFields(
1269+
augmentToken,
1270+
externalToken,
1271+
staticToken,
1272+
covariantToken,
1273+
lateToken,
1274+
varFinalOrConst,
1275+
count,
1276+
beginToken,
1277+
endToken);
12691278
}
12701279

12711280
@override

pkg/_fe_analyzer_shared/lib/src/parser/listener.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1482,6 +1482,7 @@ class Listener implements UnescapeErrorListener {
14821482
///
14831483
/// Started by [beginFields].
14841484
void endTopLevelFields(
1485+
Token? augmentToken,
14851486
Token? externalToken,
14861487
Token? staticToken,
14871488
Token? covariantToken,

pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3726,8 +3726,16 @@ class Parser {
37263726
switch (kind) {
37273727
case DeclarationKind.TopLevel:
37283728
assert(abstractToken == null);
3729-
listener.endTopLevelFields(externalToken, staticToken, covariantToken,
3730-
lateToken, varFinalOrConst, fieldCount, beforeStart.next!, token);
3729+
listener.endTopLevelFields(
3730+
augmentToken,
3731+
externalToken,
3732+
staticToken,
3733+
covariantToken,
3734+
lateToken,
3735+
varFinalOrConst,
3736+
fieldCount,
3737+
beforeStart.next!,
3738+
token);
37313739
break;
37323740
case DeclarationKind.Class:
37333741
listener.endClassFields(

pkg/analyzer/lib/src/dart/ast/ast.dart

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17926,6 +17926,10 @@ final class ThrowExpressionImpl extends ExpressionImpl
1792617926
/// directives).
1792717927
abstract final class TopLevelVariableDeclaration
1792817928
implements CompilationUnitMember {
17929+
/// The 'augment' keyword.
17930+
@experimental
17931+
Token? get augmentKeyword;
17932+
1792917933
/// The `external` keyword, or `null` if the keyword was not used.
1793017934
Token? get externalKeyword;
1793117935

@@ -17946,6 +17950,9 @@ final class TopLevelVariableDeclarationImpl extends CompilationUnitMemberImpl
1794617950
/// The top-level variables being declared.
1794717951
VariableDeclarationListImpl _variableList;
1794817952

17953+
@override
17954+
final Token? augmentKeyword;
17955+
1794917956
@override
1795017957
final Token? externalKeyword;
1795117958

@@ -17959,6 +17966,7 @@ final class TopLevelVariableDeclarationImpl extends CompilationUnitMemberImpl
1795917966
TopLevelVariableDeclarationImpl({
1796017967
required super.comment,
1796117968
required super.metadata,
17969+
required this.augmentKeyword,
1796217970
required this.externalKeyword,
1796317971
required VariableDeclarationListImpl variableList,
1796417972
required this.semicolon,
@@ -17974,7 +17982,7 @@ final class TopLevelVariableDeclarationImpl extends CompilationUnitMemberImpl
1797417982

1797517983
@override
1797617984
Token get firstTokenAfterCommentAndMetadata =>
17977-
externalKeyword ?? _variableList.beginToken;
17985+
augmentKeyword ?? externalKeyword ?? _variableList.beginToken;
1797817986

1797917987
@override
1798017988
VariableDeclarationListImpl get variables => _variableList;
@@ -17985,6 +17993,8 @@ final class TopLevelVariableDeclarationImpl extends CompilationUnitMemberImpl
1798517993

1798617994
@override
1798717995
ChildEntities get _childEntities => super._childEntities
17996+
..addToken('augmentKeyword', augmentKeyword)
17997+
..addToken('externalKeyword', externalKeyword)
1798817998
..addNode('variables', variables)
1798917999
..addToken('semicolon', semicolon);
1799018000

pkg/analyzer/lib/src/fasta/ast_builder.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3294,6 +3294,7 @@ class AstBuilder extends StackListener {
32943294

32953295
@override
32963296
void endTopLevelFields(
3297+
Token? augmentToken,
32973298
Token? externalToken,
32983299
Token? staticToken,
32993300
Token? covariantToken,
@@ -3331,6 +3332,7 @@ class AstBuilder extends StackListener {
33313332
TopLevelVariableDeclarationImpl(
33323333
comment: comment,
33333334
metadata: metadata,
3335+
augmentKeyword: augmentToken,
33343336
externalKeyword: externalToken,
33353337
variableList: variableList,
33363338
semicolon: semicolon,

pkg/analyzer/test/generated/parser_fasta_listener.dart

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1266,6 +1266,7 @@ class ForwardingTestListener extends ForwardingListener {
12661266

12671267
@override
12681268
void endTopLevelFields(
1269+
Token? augmentToken,
12691270
Token? externalToken,
12701271
Token? staticToken,
12711272
Token? covariantToken,
@@ -1275,8 +1276,16 @@ class ForwardingTestListener extends ForwardingListener {
12751276
Token beginToken,
12761277
Token endToken) {
12771278
end('TopLevelMember');
1278-
super.endTopLevelFields(externalToken, staticToken, covariantToken,
1279-
lateToken, varFinalOrConst, count, beginToken, endToken);
1279+
super.endTopLevelFields(
1280+
augmentToken,
1281+
externalToken,
1282+
staticToken,
1283+
covariantToken,
1284+
lateToken,
1285+
varFinalOrConst,
1286+
count,
1287+
beginToken,
1288+
endToken);
12801289
}
12811290

12821291
@override

pkg/analyzer/test/src/dart/parser/test_all.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'class_test.dart' as class_;
88
import 'doc_comment_test.dart' as doc_comment;
99
import 'extension_type_test.dart' as extension_type;
1010
import 'mixin_test.dart' as mixin_;
11+
import 'top_level_variable_test.dart' as top_level_variable;
1112

1213
/// Utility for manually running all tests.
1314
main() {
@@ -16,5 +17,6 @@ main() {
1617
doc_comment.main();
1718
extension_type.main();
1819
mixin_.main();
20+
top_level_variable.main();
1921
}, name: 'parser');
2022
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
import 'package:test_reflective_loader/test_reflective_loader.dart';
6+
7+
import '../../diagnostics/parser_diagnostics.dart';
8+
9+
main() {
10+
defineReflectiveSuite(() {
11+
defineReflectiveTests(TopLevelVariableParserTest);
12+
});
13+
}
14+
15+
@reflectiveTest
16+
class TopLevelVariableParserTest extends ParserDiagnosticsTest {
17+
test_augment() {
18+
final parseResult = parseStringWithErrors(r'''
19+
library augment 'a.dart';
20+
augment final foo = 0;
21+
''');
22+
parseResult.assertNoErrors();
23+
24+
final node = parseResult.findNode.singleTopLevelVariableDeclaration;
25+
assertParsedNodeText(node, r'''
26+
TopLevelVariableDeclaration
27+
augmentKeyword: augment
28+
variables: VariableDeclarationList
29+
keyword: final
30+
variables
31+
VariableDeclaration
32+
name: foo
33+
equals: =
34+
initializer: IntegerLiteral
35+
literal: 0
36+
semicolon: ;
37+
''');
38+
}
39+
40+
test_external() {
41+
final parseResult = parseStringWithErrors(r'''
42+
external int foo;
43+
''');
44+
parseResult.assertNoErrors();
45+
46+
final node = parseResult.findNode.singleTopLevelVariableDeclaration;
47+
assertParsedNodeText(node, r'''
48+
TopLevelVariableDeclaration
49+
externalKeyword: external
50+
variables: VariableDeclarationList
51+
type: NamedType
52+
name: int
53+
variables
54+
VariableDeclaration
55+
name: foo
56+
semicolon: ;
57+
''');
58+
}
59+
}

pkg/analyzer/tool/summary/mini_ast.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,7 @@ class MiniAstBuilder extends StackListener {
377377

378378
@override
379379
void endTopLevelFields(
380+
Token? augmentToken,
380381
Token? externalToken,
381382
Token? staticToken,
382383
Token? covariantToken,

pkg/front_end/lib/src/fasta/kernel/body_builder.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -898,6 +898,7 @@ class BodyBuilder extends StackListenerImpl
898898

899899
@override
900900
void endTopLevelFields(
901+
Token? augmentToken,
901902
Token? externalToken,
902903
Token? staticToken,
903904
Token? covariantToken,

pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1566,6 +1566,7 @@ class _MacroListener implements Listener {
15661566

15671567
@override
15681568
void endTopLevelFields(
1569+
Token? augmentToken,
15691570
Token? externalToken,
15701571
Token? staticToken,
15711572
Token? covariantToken,

pkg/front_end/lib/src/fasta/source/diet_listener.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,7 @@ class DietListener extends StackListenerImpl {
367367

368368
@override
369369
void endTopLevelFields(
370+
Token? augmentToken,
370371
Token? externalToken,
371372
Token? staticToken,
372373
Token? covariantToken,

pkg/front_end/lib/src/fasta/source/outline_builder.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3437,6 +3437,7 @@ class OutlineBuilder extends StackListenerImpl {
34373437

34383438
@override
34393439
void endTopLevelFields(
3440+
Token? augmentToken,
34403441
Token? externalToken,
34413442
Token? staticToken,
34423443
Token? covariantToken,

pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1915,6 +1915,7 @@ abstract class AbstractParserAstListener implements Listener {
19151915

19161916
@override
19171917
void endTopLevelFields(
1918+
Token? augmentToken,
19181919
Token? externalToken,
19191920
Token? staticToken,
19201921
Token? covariantToken,
@@ -1924,6 +1925,7 @@ abstract class AbstractParserAstListener implements Listener {
19241925
Token beginToken,
19251926
Token endToken) {
19261927
TopLevelFieldsEnd data = new TopLevelFieldsEnd(ParserAstType.END,
1928+
augmentToken: augmentToken,
19271929
externalToken: externalToken,
19281930
staticToken: staticToken,
19291931
covariantToken: covariantToken,
@@ -6491,6 +6493,7 @@ class FieldsBegin extends ParserAstNode {
64916493
}
64926494

64936495
class TopLevelFieldsEnd extends ParserAstNode {
6496+
final Token? augmentToken;
64946497
final Token? externalToken;
64956498
final Token? staticToken;
64966499
final Token? covariantToken;
@@ -6501,7 +6504,8 @@ class TopLevelFieldsEnd extends ParserAstNode {
65016504
final Token endToken;
65026505

65036506
TopLevelFieldsEnd(ParserAstType type,
6504-
{this.externalToken,
6507+
{this.augmentToken,
6508+
this.externalToken,
65056509
this.staticToken,
65066510
this.covariantToken,
65076511
this.lateToken,
@@ -6513,6 +6517,7 @@ class TopLevelFieldsEnd extends ParserAstNode {
65136517

65146518
@override
65156519
Map<String, Object?> get deprecatedArguments => {
6520+
"augmentToken": augmentToken,
65166521
"externalToken": externalToken,
65176522
"staticToken": staticToken,
65186523
"covariantToken": covariantToken,

pkg/front_end/lib/src/fasta/util/textual_outline.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -745,6 +745,7 @@ class TextualOutlineListener extends Listener {
745745

746746
@override
747747
void endTopLevelFields(
748+
Token? augmentToken,
748749
Token? externalToken,
749750
Token? staticToken,
750751
Token? covariantToken,

pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart.expect

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ beginCompilationUnit(augment)
104104
handleNoType(var)
105105
handleIdentifier(field, topLevelVariableDeclaration)
106106
handleNoFieldInitializer(;)
107-
endTopLevelFields(null, null, null, null, var, 1, augment, ;)
107+
endTopLevelFields(augment, null, null, null, null, var, 1, augment, ;)
108108
endTopLevelDeclaration(augment)
109109
beginMetadataStar(augment)
110110
endMetadataStar(0)
@@ -115,7 +115,7 @@ beginCompilationUnit(augment)
115115
beginFieldInitializer(=)
116116
handleLiteralInt(0)
117117
endFieldInitializer(=, ;)
118-
endTopLevelFields(null, null, null, null, final, 1, augment, ;)
118+
endTopLevelFields(augment, null, null, null, null, final, 1, augment, ;)
119119
endTopLevelDeclaration(augment)
120120
beginMetadataStar(augment)
121121
endMetadataStar(0)
@@ -126,7 +126,7 @@ beginCompilationUnit(augment)
126126
beginFieldInitializer(=)
127127
handleLiteralInt(0)
128128
endFieldInitializer(=, ;)
129-
endTopLevelFields(null, null, null, null, const, 1, augment, ;)
129+
endTopLevelFields(augment, null, null, null, null, const, 1, augment, ;)
130130
endTopLevelDeclaration(augment)
131131
beginMetadataStar(augment)
132132
endMetadataStar(0)
@@ -137,7 +137,7 @@ beginCompilationUnit(augment)
137137
handleType(int, null)
138138
handleIdentifier(field, topLevelVariableDeclaration)
139139
handleNoFieldInitializer(;)
140-
endTopLevelFields(null, null, null, null, null, 1, augment, ;)
140+
endTopLevelFields(augment, null, null, null, null, null, 1, augment, ;)
141141
endTopLevelDeclaration(augment)
142142
beginMetadataStar(augment)
143143
endMetadataStar(0)
@@ -146,7 +146,7 @@ beginCompilationUnit(augment)
146146
handleNoType(var)
147147
handleIdentifier(field, topLevelVariableDeclaration)
148148
handleNoFieldInitializer(;)
149-
endTopLevelFields(null, null, null, late, var, 1, augment, ;)
149+
endTopLevelFields(augment, null, null, null, late, var, 1, augment, ;)
150150
endTopLevelDeclaration(augment)
151151
beginMetadataStar(augment)
152152
endMetadataStar(0)
@@ -155,7 +155,7 @@ beginCompilationUnit(augment)
155155
handleNoType(final)
156156
handleIdentifier(field, topLevelVariableDeclaration)
157157
handleNoFieldInitializer(;)
158-
endTopLevelFields(null, null, null, late, final, 1, augment, ;)
158+
endTopLevelFields(augment, null, null, null, late, final, 1, augment, ;)
159159
endTopLevelDeclaration(augment)
160160
beginMetadataStar(augment)
161161
endMetadataStar(0)
@@ -166,7 +166,7 @@ beginCompilationUnit(augment)
166166
handleType(int, null)
167167
handleIdentifier(field, topLevelVariableDeclaration)
168168
handleNoFieldInitializer(;)
169-
endTopLevelFields(null, null, null, late, null, 1, augment, ;)
169+
endTopLevelFields(augment, null, null, null, late, null, 1, augment, ;)
170170
endTopLevelDeclaration(augment)
171171
beginMetadataStar(augment)
172172
endMetadataStar(0)

0 commit comments

Comments
 (0)