tree-sitter-dart
Version:
Dart grammar attempt for tree-sitter
361 lines (281 loc) • 10.6 kB
Plain Text
========================================
dart if statements
========================================
if (z) return n;
(program
(if_statement
(parenthesized_expression (identifier))
(return_statement (identifier))))
=========================================
dart string literals
=========================================
get a => "";
get a => "\"";
get a => "This' is a string $mystring";
get a => '''This" is a
string ${mystring}''';
get a => 'Also a string';
(program
(getter_signature (identifier)) (function_body (string_literal))
(getter_signature (identifier)) (function_body (string_literal (escape_sequence)))
(getter_signature (identifier)) (function_body (string_literal (template_substitution (identifier_dollar_escaped))))
(getter_signature (identifier)) (function_body (string_literal (template_substitution (identifier))))
(getter_signature (identifier)) (function_body (string_literal)))
=========================================
dart string literals 2
=========================================
get a => "";
get a => "\"";
get a => """This' is a string $mystring""";
get a => '''This" is a $
string mystring''';
get a => '''Also a string''';
(program
(getter_signature (identifier)) (function_body (string_literal))
(getter_signature (identifier)) (function_body (string_literal (escape_sequence)))
(getter_signature (identifier)) (function_body (string_literal (template_substitution (identifier_dollar_escaped))))
(getter_signature (identifier)) (function_body (string_literal))
(getter_signature (identifier)) (function_body (string_literal)))
=========================================
dart string literals raw
=========================================
get a => "";
get a => r"\";
get a => """This' is a string $mystring""";
get a => '''This" is a $
string mystring''';
get a => r'''Also a string''';
(program
(getter_signature (identifier)) (function_body (string_literal))
(getter_signature (identifier)) (function_body (string_literal))
(getter_signature (identifier)) (function_body (string_literal (template_substitution (identifier_dollar_escaped))))
(getter_signature (identifier)) (function_body (string_literal))
(getter_signature (identifier)) (function_body (string_literal)))
==================================================
dart identifier name r (used to conflict/error with raw string literal)
==================================================
String hello(r) => 'hello';
(program
(function_signature (type_identifier) (identifier)
(formal_parameter_list (formal_parameter (identifier)))) (function_body (string_literal)))
==================================================
dart set literals
==================================================
class A {
int b() {
var c = {vala};
var c = {vala: 'g'};
}
}
(program
(class_definition
name: (identifier)
body: (class_body
(method_signature (function_signature
(type_identifier)
name: (identifier)
(formal_parameter_list)))
(function_body (block
(local_variable_declaration
(initialized_variable_definition
(inferred_type)
name: (identifier)
value: (set_or_map_literal (identifier))
))
(local_variable_declaration
(initialized_variable_definition
(inferred_type)
name: (identifier)
value: (set_or_map_literal (pair key: (identifier) value: (string_literal)))
)
))
))))
==================================================
embedded control flow for collections
==================================================
class A {
int b() {
var c = {if (z) vala};
var c = {vala: 'g'};
}
}
(program
(class_definition
name: (identifier)
body: (class_body
(method_signature (function_signature
(type_identifier)
name: (identifier)
(formal_parameter_list)))
(function_body (block
(local_variable_declaration
(initialized_variable_definition
(inferred_type)
name: (identifier)
value: (set_or_map_literal (if_element
condition: (parenthesized_expression (identifier))
consequence: (identifier)
))
)
)
(local_variable_declaration
(initialized_variable_definition
(inferred_type)
name: (identifier)
value: (set_or_map_literal (pair key: (identifier) value: (string_literal)))
)
))
)
)))
===================
Positional Parameters
===================
class Beyonce {
void calculateAnswer(double wingSpan, int numberOfEngines,
[double length, double grossTons]) {
//do the calculation here
}
}
(program
(class_definition
(identifier)
(class_body
(method_signature (function_signature
(void_type)
(identifier)
(formal_parameter_list
(formal_parameter (type_identifier) (identifier))
(formal_parameter (type_identifier) (identifier))
(optional_formal_parameters
(formal_parameter (type_identifier) (identifier))
(formal_parameter (type_identifier) (identifier))))))
(function_body (block (comment))))))
==================================================
collection trailing commas
==================================================
final map = {"hello": "world",};
final set = {"hello", "world"};
(program
(final_builtin)
(static_final_declaration_list (static_final_declaration (identifier)
(set_or_map_literal (pair (string_literal) (string_literal)))))
(final_builtin)
(static_final_declaration_list (static_final_declaration (identifier)
(set_or_map_literal (string_literal) (string_literal)))))
==================================================
collection literal type parameters
==================================================
final dynamic opts = <dynamic, dynamic>{
'transports': ['websocket'],
'forceNew': true,
};
(program (final_builtin) (type_identifier) (static_final_declaration_list (static_final_declaration (identifier)
(set_or_map_literal (type_arguments (type_identifier) (type_identifier)) (pair (string_literal)
(list_literal (string_literal))) (pair (string_literal) (true))))))
==================================================
extensions on integer literals
==================================================
void main() {
await Future.delayed(10.milliseconds, () {});
}
(program
(function_signature (void_type) (identifier) (formal_parameter_list))
(function_body (block (expression_statement (unary_expression
(await_expression (identifier) (selector (unconditional_assignable_selector (identifier))) (selector (argument_part
(arguments (argument (decimal_integer_literal) (selector (unconditional_assignable_selector (identifier))))
(argument (function_expression (formal_parameter_list) (function_expression_body (block)))))))))))))
==================================================
part directive
==================================================
part 'hello.dart';
(program (part_directive (uri (string_literal))))
==================================================
part of directive
==================================================
part of 'hello.dart';
(program (part_of_directive (uri (string_literal))))
==================================================
extension methods
==================================================
extension Hello on String {
String get hello => 'hello';
}
(program
(extension_declaration (identifier) (type_identifier) (extension_body
(method_signature (getter_signature (type_identifier) (identifier))) (function_body (string_literal)))))
==================================================
library directive
==================================================
library myLibrary;
(program (library_name (dotted_identifier_list (identifier))))
==================================================
scoped library directive
==================================================
library myLibrary.a.cool.library;
(program (library_name (dotted_identifier_list (identifier) (identifier) (identifier) (identifier))))
==================================================
redirecting factories
==================================================
@freezed
abstract class MyDataClass implements _$MyDataClass {
const factory MyDataClass.initialize({@Default(false) bool debug}) = _MyDataClassInitialize;
factory MyDataClass.debug() => MyDataClass.initialize(debug: true);
}
(program
(marker_annotation (identifier))
(class_definition (identifier) (interfaces (type_identifier))
(class_body
(declaration (redirecting_factory_constructor_signature (const_builtin) (identifier) (identifier) (formal_parameter_list
(optional_formal_parameters (formal_parameter
(annotation (identifier) (arguments (argument (false)))) (type_identifier) (identifier)))) (type_identifier)))
(method_signature (factory_constructor_signature (identifier) (identifier) (formal_parameter_list)))
(function_body (identifier) (selector (unconditional_assignable_selector (identifier)))
(selector (argument_part (arguments (named_argument (label (identifier)) (true)))))))))
======================================
setter expressions
======================================
class MyClass {
set editing(bool value) {
_editing = value;
}
}
(program (class_definition (identifier)
(class_body (method_signature
(setter_signature (identifier)
(formal_parameter_list (formal_parameter (type_identifier) (identifier)))))
(function_body (block (expression_statement (assignment_expression (assignable_expression (identifier)) (identifier))))))))
======================================
Basic selector
======================================
void main() {
f(a.b);
}
(program
(function_signature (void_type) (identifier) (formal_parameter_list))
(function_body (block
(expression_statement
(identifier)
(selector (argument_part
(arguments
(argument
(identifier)
(selector (unconditional_assignable_selector (identifier)))))))))))