Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Dart] Update the Dart parser and tests to cover Dart Super-Initializer Parameters #853

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions Dart/gen/com/jetbrains/lang/dart/DartParser.java

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Dart/src/com/jetbrains/lang/dart/Dart.bnf
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,7 @@ formalParameterList ::= '(' ')' |
'(' optionalFormalParameters ')'
private normalFormalParameters ::= normalFormalParameter (',' normalFormalParameter)*

fieldFormalParameter ::= metadata* finalConstVarVoidOrType? 'this' '.' referenceExpression typeParameters? formalParameterList?
fieldFormalParameter ::= metadata* finalConstVarVoidOrType? ('this' | 'super') '.' referenceExpression typeParameters? formalParameterList?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You might want to rename the production to fieldOrSuperFormalParameter, but it doesn't change the semantics, so up to you.


optionalFormalParameters ::= optionalPositionalFormalParameters (',' namedFormalParameters)? | namedFormalParameters
private optionalPositionalFormalParameters ::= '[' defaultFormalNamedParameter (',' defaultFormalNamedParameter)* ','? ']'
Expand Down
8 changes: 8 additions & 0 deletions Dart/testData/parsing/Constructors.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,14 @@ class ConstructorSyntax {
ConstructorSyntax.b(x, y) : assert(false), this.x = y, assert(1<2, ""), this.y = x, super() {}
}

// Dart Super-Initializer Parameters
// https://github.com/dart-lang/language/blob/master/working/1855%20-%20super%20parameters/proposal.md
class ConstructorSyntax2 extends SuperClass {
ConstructorSyntax2(this.x, super.y, [super.z]) : super(a, b);
ConstructorSyntax2.c(this.x, super.y, [super.z]) : super(a, b);
ConstructorSyntax2.d(this.x, super.y, {super.z}) : super(a, b);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You might want at least one example with more complete syntax.

}

class CompileTimeConstructorSyntax {
const CompileTimeConstructorSyntax();
const CompileTimeConstructorSyntax() : super(1, 2, 3);
Expand Down
179 changes: 179 additions & 0 deletions Dart/testData/parsing/Constructors.txt
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,185 @@ Dart File
<empty list>
PsiElement(})('}')
PsiElement(})('}')
PsiComment(SINGLE_LINE_COMMENT)('// Dart Super-Initializer Parameters')
PsiComment(SINGLE_LINE_COMMENT)('// https://github.com/dart-lang/language/blob/master/working/1855%20-%20super%20parameters/proposal.md')
CLASS_DEFINITION
PsiElement(class)('class')
COMPONENT_NAME
ID
PsiElement(IDENTIFIER)('ConstructorSyntax2')
SUPERCLASS
PsiElement(extends)('extends')
TYPE
SIMPLE_TYPE
REFERENCE_EXPRESSION
ID
PsiElement(IDENTIFIER)('SuperClass')
CLASS_BODY
PsiElement({)('{')
CLASS_MEMBERS
METHOD_DECLARATION
COMPONENT_NAME
ID
PsiElement(IDENTIFIER)('ConstructorSyntax2')
FORMAL_PARAMETER_LIST
PsiElement(()('(')
NORMAL_FORMAL_PARAMETER
FIELD_FORMAL_PARAMETER
PsiElement(this)('this')
PsiElement(.)('.')
REFERENCE_EXPRESSION
ID
PsiElement(IDENTIFIER)('x')
PsiElement(,)(',')
NORMAL_FORMAL_PARAMETER
FIELD_FORMAL_PARAMETER
PsiElement(super)('super')
PsiElement(.)('.')
REFERENCE_EXPRESSION
ID
PsiElement(IDENTIFIER)('y')
PsiElement(,)(',')
OPTIONAL_FORMAL_PARAMETERS
PsiElement([)('[')
DEFAULT_FORMAL_NAMED_PARAMETER
NORMAL_FORMAL_PARAMETER
FIELD_FORMAL_PARAMETER
PsiElement(super)('super')
PsiElement(.)('.')
REFERENCE_EXPRESSION
ID
PsiElement(IDENTIFIER)('z')
PsiElement(])(']')
PsiElement())(')')
INITIALIZERS
PsiElement(:)(':')
SUPER_CALL_OR_FIELD_INITIALIZER
SUPER_EXPRESSION
PsiElement(super)('super')
ARGUMENTS
PsiElement(()('(')
ARGUMENT_LIST
REFERENCE_EXPRESSION
ID
PsiElement(IDENTIFIER)('a')
PsiElement(,)(',')
REFERENCE_EXPRESSION
ID
PsiElement(IDENTIFIER)('b')
PsiElement())(')')
PsiElement(;)(';')
NAMED_CONSTRUCTOR_DECLARATION
COMPONENT_NAME
ID
PsiElement(IDENTIFIER)('ConstructorSyntax2')
PsiElement(.)('.')
COMPONENT_NAME
ID
PsiElement(IDENTIFIER)('c')
FORMAL_PARAMETER_LIST
PsiElement(()('(')
NORMAL_FORMAL_PARAMETER
FIELD_FORMAL_PARAMETER
PsiElement(this)('this')
PsiElement(.)('.')
REFERENCE_EXPRESSION
ID
PsiElement(IDENTIFIER)('x')
PsiElement(,)(',')
NORMAL_FORMAL_PARAMETER
FIELD_FORMAL_PARAMETER
PsiElement(super)('super')
PsiElement(.)('.')
REFERENCE_EXPRESSION
ID
PsiElement(IDENTIFIER)('y')
PsiElement(,)(',')
OPTIONAL_FORMAL_PARAMETERS
PsiElement([)('[')
DEFAULT_FORMAL_NAMED_PARAMETER
NORMAL_FORMAL_PARAMETER
FIELD_FORMAL_PARAMETER
PsiElement(super)('super')
PsiElement(.)('.')
REFERENCE_EXPRESSION
ID
PsiElement(IDENTIFIER)('z')
PsiElement(])(']')
PsiElement())(')')
INITIALIZERS
PsiElement(:)(':')
SUPER_CALL_OR_FIELD_INITIALIZER
SUPER_EXPRESSION
PsiElement(super)('super')
ARGUMENTS
PsiElement(()('(')
ARGUMENT_LIST
REFERENCE_EXPRESSION
ID
PsiElement(IDENTIFIER)('a')
PsiElement(,)(',')
REFERENCE_EXPRESSION
ID
PsiElement(IDENTIFIER)('b')
PsiElement())(')')
PsiElement(;)(';')
NAMED_CONSTRUCTOR_DECLARATION
COMPONENT_NAME
ID
PsiElement(IDENTIFIER)('ConstructorSyntax2')
PsiElement(.)('.')
COMPONENT_NAME
ID
PsiElement(IDENTIFIER)('d')
FORMAL_PARAMETER_LIST
PsiElement(()('(')
NORMAL_FORMAL_PARAMETER
FIELD_FORMAL_PARAMETER
PsiElement(this)('this')
PsiElement(.)('.')
REFERENCE_EXPRESSION
ID
PsiElement(IDENTIFIER)('x')
PsiElement(,)(',')
NORMAL_FORMAL_PARAMETER
FIELD_FORMAL_PARAMETER
PsiElement(super)('super')
PsiElement(.)('.')
REFERENCE_EXPRESSION
ID
PsiElement(IDENTIFIER)('y')
PsiElement(,)(',')
OPTIONAL_FORMAL_PARAMETERS
PsiElement({)('{')
DEFAULT_FORMAL_NAMED_PARAMETER
NORMAL_FORMAL_PARAMETER
FIELD_FORMAL_PARAMETER
PsiElement(super)('super')
PsiElement(.)('.')
REFERENCE_EXPRESSION
ID
PsiElement(IDENTIFIER)('z')
PsiElement(})('}')
PsiElement())(')')
INITIALIZERS
PsiElement(:)(':')
SUPER_CALL_OR_FIELD_INITIALIZER
SUPER_EXPRESSION
PsiElement(super)('super')
ARGUMENTS
PsiElement(()('(')
ARGUMENT_LIST
REFERENCE_EXPRESSION
ID
PsiElement(IDENTIFIER)('a')
PsiElement(,)(',')
REFERENCE_EXPRESSION
ID
PsiElement(IDENTIFIER)('b')
PsiElement())(')')
PsiElement(;)(';')
PsiElement(})('}')
CLASS_DEFINITION
PsiElement(class)('class')
COMPONENT_NAME
Expand Down