even more fixes

pull/315/head
Benjamin Sobel 2022-05-21 14:15:24 +07:00
parent 5e5d9533b5
commit cf0b6d92bf
6 changed files with 89778 additions and 75596 deletions

@ -118,6 +118,7 @@ module.exports = grammar({
// [$._real_expression, $._below_relational_expression],
[$._postfix_expression],
[$._top_level_definition, $.lambda_expression],
[$.lambda_expression, $.local_variable_declaration],
[$._top_level_definition, $._final_const_var_or_type],
[$._top_level_definition, $.const_object_expression, $._final_const_var_or_type],
[$._final_const_var_or_type, $.const_object_expression],
@ -1091,7 +1092,7 @@ module.exports = grammar({
cascade_section: $ => prec.left(
DART_PREC.Cascade,
seq(
'..',
choice('..', '?..'),
$.cascade_selector,
repeat($.argument_part),
repeat(
@ -1173,7 +1174,8 @@ module.exports = grammar({
// Statements
_statement: $ => choice(
$.block,
$.local_variable_declaration,
prec.dynamic(1, $.local_function_declaration),
prec.dynamic(2, $.local_variable_declaration),
$.for_statement,
$.while_statement,
$.do_statement,
@ -1191,6 +1193,10 @@ module.exports = grammar({
$.expression_statement,
$.assert_statement,
// $.labeled_statement,
),
local_function_declaration: $ => seq(
optional($._metadata),
$.lambda_expression
),
@ -1773,11 +1779,74 @@ module.exports = grammar({
$._static,
$.function_signature,
),
// | static const 〈type〉? 〈staticFinalDeclarationList〉
// | static final 〈type〉? 〈staticFinalDeclarationList〉
// | static late final 〈type〉? 〈initializedIdentifierList〉
// | static late? 〈varOrType〉 〈initializedIdentifierList
seq(
$._static,
$._final_or_const,
optional($._type),
$.static_final_declaration_list
choice(
seq(
$._final_or_const,
optional($._type),
$.static_final_declaration_list
),
seq(
$._late_builtin,
choice(
seq(
$.final_builtin,
optional($._type),
$.initialized_identifier_list
),
seq(
choice(
$._type,
$.inferred_type,
),
$.initialized_identifier_list
)
)
),
seq(
choice(
$._type,
$.inferred_type,
),
$.initialized_identifier_list
)
)
),
// | covariant late final 〈type〉? 〈identifierList〉
// | covariant late? 〈varOrType〉 〈initializedIdentifierList〉
seq(
$._covariant,
choice(
seq(
$._late_builtin,
choice(
seq(
$.final_builtin,
optional($._type),
$.identifier_list
),
seq(
choice(
$._type,
$.inferred_type,
),
$.initialized_identifier_list
)
)
),
seq(
choice(
$._type,
$.inferred_type,
),
$.initialized_identifier_list
)
)
),
seq(
optional($._late_builtin), $.final_builtin,
@ -1785,12 +1854,8 @@ module.exports = grammar({
$.initialized_identifier_list
),
seq(
optional($._static_or_covariant),
optional($._late_builtin),
choice(
$._type,
$.inferred_type
),
_var_or_type,
$.initialized_identifier_list
)
// TODO: add in the 'late' keyword from the informal draft spec:
@ -1800,6 +1865,10 @@ module.exports = grammar({
// |late?final〈type〉?〈initializedIdentifierList〉
// |late?〈varOrType〉 〈initializedIdentifierList〉
),
identifier_list: $ => commaSep1(
$.identifier
),
initialized_identifier_list: $ => commaSep1(
$.initialized_identifier
),
@ -2170,6 +2239,14 @@ module.exports = grammar({
void_type: $ => token('void'),
_var_or_type: $ => choice(
$._type,
seq(
$.inferred_type,
optional($._type)
)
),
inferred_type: $ => prec(
DART_PREC.BUILTIN,
'var',

@ -3461,8 +3461,17 @@
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ".."
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ".."
},
{
"type": "STRING",
"value": "?.."
}
]
},
{
"type": "SYMBOL",
@ -3813,8 +3822,20 @@
"name": "block"
},
{
"type": "SYMBOL",
"name": "local_variable_declaration"
"type": "PREC_DYNAMIC",
"value": 1,
"content": {
"type": "SYMBOL",
"name": "local_function_declaration"
}
},
{
"type": "PREC_DYNAMIC",
"value": 2,
"content": {
"type": "SYMBOL",
"name": "local_variable_declaration"
}
},
{
"type": "SYMBOL",
@ -3867,6 +3888,23 @@
{
"type": "SYMBOL",
"name": "assert_statement"
}
]
},
"local_function_declaration": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_metadata"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
@ -6637,25 +6675,215 @@
"type": "SYMBOL",
"name": "_static"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_final_or_const"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_type"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "static_final_declaration_list"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_late_builtin"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "final_builtin"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_type"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "initialized_identifier_list"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_type"
},
{
"type": "SYMBOL",
"name": "inferred_type"
}
]
},
{
"type": "SYMBOL",
"name": "initialized_identifier_list"
}
]
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_type"
},
{
"type": "SYMBOL",
"name": "inferred_type"
}
]
},
{
"type": "SYMBOL",
"name": "initialized_identifier_list"
}
]
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_final_or_const"
"name": "_covariant"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_type"
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_late_builtin"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "final_builtin"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_type"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "identifier_list"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_type"
},
{
"type": "SYMBOL",
"name": "inferred_type"
}
]
},
{
"type": "SYMBOL",
"name": "initialized_identifier_list"
}
]
}
]
}
]
},
{
"type": "BLANK"
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_type"
},
{
"type": "SYMBOL",
"name": "inferred_type"
}
]
},
{
"type": "SYMBOL",
"name": "initialized_identifier_list"
}
]
}
]
},
{
"type": "SYMBOL",
"name": "static_final_declaration_list"
}
]
},
@ -6699,18 +6927,6 @@
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_static_or_covariant"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
@ -6744,6 +6960,31 @@
}
]
},
"identifier_list": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
}
}
]
},
"initialized_identifier_list": {
"type": "SEQ",
"members": [
@ -9963,6 +10204,10 @@
"_top_level_definition",
"lambda_expression"
],
[
"lambda_expression",
"local_variable_declaration"
],
[
"_top_level_definition",
"_final_const_var_or_type"

@ -100,7 +100,7 @@
"named": true
},
{
"type": "lambda_expression",
"type": "local_function_declaration",
"named": true
},
{
@ -2764,6 +2764,10 @@
"type": "getter_signature",
"named": true
},
{
"type": "identifier_list",
"named": true
},
{
"type": "inferred_type",
"named": true
@ -5440,6 +5444,21 @@
"named": true,
"fields": {}
},
{
"type": "identifier_list",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "identifier",
"named": true
}
]
}
},
{
"type": "if_element",
"named": true,
@ -6742,6 +6761,29 @@
]
}
},
{
"type": "local_function_declaration",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "annotation",
"named": true
},
{
"type": "lambda_expression",
"named": true
},
{
"type": "marker_annotation",
"named": true
}
]
}
},
{
"type": "local_variable_declaration",
"named": true,
@ -11317,6 +11359,10 @@
"type": "?.",
"named": false
},
{
"type": "?..",
"named": false
},
{
"type": "??",
"named": false

File diff suppressed because it is too large Load Diff

@ -138,7 +138,31 @@ class BuildableIOSApp extends IOSApp {
(selector (unconditional_assignable_selector (identifier)))
(selector (unconditional_assignable_selector (identifier)))
(selector (argument_part (arguments (argument (identifier)
(selector (argument_part (arguments)))) (argument (string_literal)) (argument (conditional_expression (equality_expression (identifier) (equality_operator) (null_literal)) (string_literal) (identifier) (selector (unconditional_assignable_selector (identifier))) (selector (unconditional_assignable_selector (identifier))) (selector (unconditional_assignable_selector (identifier))) (selector (argument_part (arguments (argument (identifier) (selector))))))))))) (comment) (method_signature (getter_signature (type_identifier) (identifier))) (function_body (identifier) (selector (unconditional_assignable_selector (identifier))) (selector (unconditional_assignable_selector (identifier))) (selector (unconditional_assignable_selector (identifier))) (selector (argument_part (arguments (argument (identifier)) (argument (string_literal)))))) (method_signature (getter_signature (type_identifier) (identifier))) (function_body (identifier) (selector (unconditional_assignable_selector (identifier))) (selector (unconditional_assignable_selector (identifier))) (selector (unconditional_assignable_selector (identifier))) (selector (argument_part (arguments (argument (identifier) (selector (argument_part (arguments)))) (argument (string_literal)))))) (method_signature (function_signature (type_identifier) (identifier) (formal_parameter_list (formal_parameter (type_identifier) (identifier))))) (function_body (block (return_statement (identifier)
(selector (argument_part (arguments)))) (argument (string_literal))
(argument
(conditional_expression (equality_expression (identifier)
(equality_operator) (null_literal)) (string_literal) (identifier)
(selector (unconditional_assignable_selector (identifier)))
(selector (unconditional_assignable_selector (identifier)))
(selector (unconditional_assignable_selector (identifier)))
(selector (argument_part (arguments (argument (identifier)
(selector)))))))))))
(comment)
(method_signature (getter_signature (type_identifier) (identifier)))
(function_body (identifier) (selector (unconditional_assignable_selector (identifier)))
(selector (unconditional_assignable_selector (identifier)))
(selector (unconditional_assignable_selector (identifier)))
(selector (argument_part (arguments (argument (identifier)) (argument (string_literal))))))
(method_signature (getter_signature (type_identifier) (identifier)))
(function_body (identifier) (selector (unconditional_assignable_selector (identifier)))
(selector (unconditional_assignable_selector (identifier)))
(selector (unconditional_assignable_selector (identifier)))
(selector (argument_part (arguments (argument (identifier)
(selector (argument_part (arguments)))) (argument (string_literal))))))
(method_signature
(function_signature (type_identifier) (identifier)
(formal_parameter_list (formal_parameter (type_identifier) (identifier)))))
(function_body (block (return_statement (identifier)
(selector (unconditional_assignable_selector (identifier)))
(selector (unconditional_assignable_selector (identifier)))
(selector (unconditional_assignable_selector (identifier)))
@ -423,6 +447,95 @@ more tests 6
---
(program (function_signature (void_type) (identifier)
(formal_parameter_list (formal_parameter (type_identifier) (identifier))))
(function_body
(block
(local_function_declaration (annotation (identifier)
(arguments (argument (string_literal))))
(lambda_expression
(function_signature (void_type) (identifier) (formal_parameter_list))
(function_body (block (local_variable_declaration
(initialized_variable_definition (type_identifier) (identifier)))
(try_statement
(block
(expression_statement
(assignment_expression (assignable_expression (identifier))
(type_cast_expression (identifier)
(type_cast (as_operator) (type_identifier) (type_arguments (type_identifier))))
(selector (unconditional_assignable_selector (identifier)))
(selector (argument_part (arguments (argument (this)) (argument (identifier)))))))
(expression_statement
(identifier) (selector
(argument_part (arguments (argument (identifier)) (argument (identifier)))))))
(catch_clause (identifier) (identifier))
(block
(expression_statement (assignment_expression (assignable_expression (identifier)) (identifier)
(selector (unconditional_assignable_selector (identifier)))
(selector (argument_part (arguments (argument (identifier)
(selector (argument_part (arguments (named_argument (label (identifier))
(function_expression (formal_parameter_list) (function_expression_body
(list_literal (type_arguments (type_identifier))
(if_element (parenthesized_expression (identifier)) (identifier)
(selector (argument_part (arguments (argument (identifier)
(selector (argument_part (arguments (argument (this)))))))))))))))))))))))))))))
(expression_statement (identifier) (selector)
(selector (unconditional_assignable_selector (identifier)))
(selector (argument_part (arguments (argument (this)) (argument (identifier)))))))))
===================================
more tests 7
===================================
void _layout(ConstraintType constraints) {
@pragma('vm:notify-debugger-on-exception')
void layoutCallback() {
Widget built;
}
}
---
(program (function_signature (void_type) (identifier)
(formal_parameter_list (formal_parameter (type_identifier) (identifier))))
(function_body (block (local_function_declaration (annotation (identifier)
(arguments (argument (string_literal))))
(lambda_expression
(function_signature (void_type) (identifier) (formal_parameter_list))
(function_body
(block (local_variable_declaration
(initialized_variable_definition (type_identifier) (identifier))))))))))
===================================
more tests 8
===================================
void _layout(ConstraintType constraints) {
@pragma('vm:notify-debugger-on-exception')
void layoutCallback() {
Widget built;
}
owner!.buildScope(this, layoutCallback);
}
---
(program (function_signature (void_type) (identifier)
(formal_parameter_list (formal_parameter (type_identifier) (identifier))))
(function_body (block (local_function_declaration (annotation (identifier)
(arguments (argument (string_literal))))
(lambda_expression (function_signature (void_type) (identifier) (formal_parameter_list))
(function_body
(block
(local_variable_declaration
(initialized_variable_definition (type_identifier) (identifier)))))))
(expression_statement (identifier) (selector) (selector
(unconditional_assignable_selector (identifier)))
(selector (argument_part (arguments (argument (this)) (argument (identifier)))))))))
====================================
cascade selector
====================================
@ -436,6 +549,38 @@ cascade selector
---
(program
(expression_statement
(identifier)
(cascade_section (cascade_selector (identifier)) (identifier))
(cascade_section (cascade_selector (identifier)) (identifier))
(cascade_section (cascade_selector (identifier)) (identifier))
(cascade_section (cascade_selector (identifier)) (identifier))
)
)
====================================
cascade selector 2
====================================
layer
..link = link
..showWhenUnlinked = showWhenUnlinked
..linkedOffset = effectiveLinkedOffset
..unlinkedOffset = offset;
---
(program
(expression_statement
(identifier)
(cascade_section (cascade_selector (identifier)) (identifier))
(cascade_section (cascade_selector (identifier)) (identifier))
(cascade_section (cascade_selector (identifier)) (identifier))
(cascade_section (cascade_selector (identifier)) (identifier))
)
)
====================================
@ -494,7 +639,8 @@ class Placeholder {
---
(program (comment) (comment) (class_definition (identifier) (class_body (declaration (constructor_signature (identifier) (formal_parameter_list
(program (comment) (comment) (class_definition (identifier)
(class_body (declaration (constructor_signature (identifier) (formal_parameter_list
(formal_parameter (constructor_param (this) (identifier))) (formal_parameter (constructor_param (this) (identifier)))
(formal_parameter (type_identifier) (type_arguments (type_identifier) (type_identifier)) (identifier)))) (initializers
(initializer_list_entry (assertion (equality_expression (identifier) (equality_operator) (null_literal))))
@ -502,6 +648,57 @@ class Placeholder {
(initializer_list_entry (field_initializer (identifier) (identifier) (selector (argument_part (arguments (argument (identifier))
(argument (identifier)) (argument (identifier)) (argument (string_literal)))))))
(initializer_list_entry (field_initializer (identifier)
(if_null_expression (identifier) (selector (argument_part (arguments (argument (identifier)) (argument (identifier)) (argument (identifier)) (argument (string_literal))))) (string_literal))))))
(if_null_expression (identifier) (selector
(argument_part
(arguments
(argument (identifier))
(argument (identifier))
(argument (identifier))
(argument (string_literal)))))
(string_literal))))))
(declaration (final_builtin) (type_identifier)
(initialized_identifier_list (initialized_identifier (identifier)))))))
(initialized_identifier_list (initialized_identifier (identifier)))))))
================================================
static late final 1
================================================
class TestRoot extends StatefulWidget {
const TestRoot({ super.key });
static late final TestRootState state;
@override
State<TestRoot> createState() => TestRootState();
}
---
(program
(class_definition (identifier) (superclass (type_identifier))
(class_body
(declaration
(constant_constructor_signature (const_builtin) (qualified (identifier))
(formal_parameter_list (optional_formal_parameters
(formal_parameter (super_formal_parameter (super) (identifier)))))))
(declaration (final_builtin) (type_identifier)
(initialized_identifier_list (initialized_identifier (identifier))))
(marker_annotation (identifier))
(method_signature
(function_signature (type_identifier)
(type_arguments (type_identifier)) (identifier) (formal_parameter_list)))
(function_body (identifier) (selector (argument_part (arguments)))))))
================================================
static late final 2
================================================
class TestRoot extends StatefulWidget {
static late final TestRootState state;
}
---
(program (class_definition (identifier) (superclass (type_identifier))
(class_body (declaration (final_builtin) (type_identifier)
(initialized_identifier_list (initialized_identifier (identifier)))))))

Binary file not shown.