From 08f59372ea033f26ce6cc127ca93076c4e79318c Mon Sep 17 00:00:00 2001 From: Pedro Castro Date: Sat, 6 May 2023 20:13:10 -0300 Subject: [PATCH 1/8] first tests --- grammar.js | 450 ++--- test/full.txt | 4955 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 5136 insertions(+), 269 deletions(-) create mode 100644 test/full.txt diff --git a/grammar.js b/grammar.js index 97ccc9b..f9095ce 100644 --- a/grammar.js +++ b/grammar.js @@ -31,6 +31,8 @@ module.exports = grammar({ $.module_primary_expression, ], + word: $ => $._identifier, + inline: $ => [ $._module_definition, ], @@ -60,34 +62,28 @@ module.exports = grammar({ $.function, $.let_declaration, ], - // Nested.Module.Path precendence - [ - $.module_primary_expression, - $.value_identifier_path, - $.nested_variant_identifier, - $.module_identifier_path, - ], - [$._jsx_attribute_value, $.pipe_expression], - [$.function_type_parameters, $.function_type], - [$._reserved_identifier, $.module_unpack] + [$.lazy_pattern, $.exception_pattern, $.or_pattern], + [$.exception_pattern, $.alias_pattern], + [$.lazy_pattern, $.alias_pattern], + [$.primary_expression, $.constructor_pattern], + [$.module_name, $.constructor_name], + [$.module_binding, $._module_type] ], conflicts: $ => [ [$.unit, $.formal_parameters], [$.primary_expression, $._pattern], [$.primary_expression, $.record_pattern], - [$.primary_expression, $.spread_pattern], + [$.primary_expression, $.spread_pattern, $.value_path], [$.primary_expression, $._literal_pattern], - [$.primary_expression, $.lazy_pattern], + [$.primary_expression, $.value_path], + [$.primary_expression, $._pattern, $.value_path], [$.primary_expression, $._jsx_child], [$.tuple_type, $.function_type_parameter], [$.list, $.list_pattern], [$.array, $.array_pattern], [$.type_declaration], [$.let_declaration], - [$.variant_identifier, $.module_identifier], - [$.variant, $.variant_pattern], - [$.variant_arguments, $._variant_pattern_parameters], [$.polyvar, $.polyvar_pattern], [$._pattern], [$._record_element, $._record_single_field], @@ -100,11 +96,10 @@ module.exports = grammar({ [$.parameter, $.parenthesized_pattern], [$.parameter, $.tuple_item_pattern], [$.unit, $._function_type_parameter_list], - [$.functor_parameter, $.module_primary_expression, $.module_identifier_path], + [$.functor_parameter, $.module_primary_expression], [$._reserved_identifier, $.function], - [$.exception_pattern, $.or_pattern], [$.type_binding, $._inline_type], - [$._module_structure, $.parenthesized_module_expression] + [$.call_arguments, $.unit], ], rules: { @@ -151,10 +146,7 @@ module.exports = grammar({ include_statement: $ => seq( 'include', - choice( - $._module_definition, - parenthesize($._module_structure) - ) + choice($.module_expression, $._module_type, $.block) ), declaration: $ => choice( @@ -166,14 +158,14 @@ module.exports = grammar({ ), module_binding: $ => prec.left(seq( - field('name', choice($.module_identifier, $.type_identifier)), + field('name', choice($.module_name, $.type_constructor)), optional(seq( ':', - field('signature', choice($.block, $.module_expression, $.functor)), + field('signature', choice($.block, $._module_type)), )), optional(seq( '=', - field('definition', $._module_definition), + field('definition', choice($._module_definition, $._module_type)), )), )), @@ -198,16 +190,9 @@ module.exports = grammar({ module_unpack: $ => seq( 'unpack', - '(', - choice( - seq( - choice($.value_identifier, $.value_identifier_path, $.member_expression), - optional($.module_type_annotation) - ), - $.call_expression, - $.extension_expression - ), - ')' + parenthesize( + seq($.expression, optional($.module_type_annotation)) + ) ), functor: $ => seq( @@ -217,28 +202,26 @@ module.exports = grammar({ field('body', $._module_definition), ), - functor_parameters: $ => seq( - '(', + functor_parameters: $ => parenthesize( optional(commaSep1t($.functor_parameter)), - ')', ), functor_parameter: $ => seq( - $.module_identifier, + $.module_path, $.module_type_annotation, ), module_type_annotation: $ => seq( ':', choice( - $.module_expression, + $._module_type, $.block, ) ), external_declaration: $ => seq( 'external', - $.value_identifier, + $.value_name, $.type_annotation, '=', $.string, @@ -246,9 +229,9 @@ module.exports = grammar({ exception_declaration: $ => seq( 'exception', - $.variant_identifier, + $.constructor_name, optional($.variant_parameters), - optional(seq('=', choice($.variant_identifier, $.nested_variant_identifier))) + optional(seq('=', $.constructor_path)) ), type_declaration: $ => seq( @@ -262,7 +245,7 @@ module.exports = grammar({ ), type_binding: $ => seq( - field('name', choice($.type_identifier, $.type_identifier_path)), + field('name', $.type_constructor_path), optional($.type_parameters), optional(seq( optional(seq('=', $._non_function_inline_type)), @@ -280,7 +263,7 @@ module.exports = grammar({ commaSep1t( seq( optional(choice('+', '-')), - $.type_identifier + $.type_constructor ) ), '>', @@ -295,7 +278,7 @@ module.exports = grammar({ $._inline_type, $.variant_type, $.record_type, - $.as_aliasing_type, + $.aliased_type ), _inline_type: $ => choice( @@ -304,19 +287,21 @@ module.exports = grammar({ ), _non_function_inline_type: $ => choice( - $._type_identifier, + $._type_constructor, $.tuple_type, $.polyvar_type, $.object_type, $.generic_type, $.unit_type, - $.module_pack, + $.package_type, $.unit, $.polymorphic_type, ), + package_type: $ => seq('module', parenthesize($._module_type)), + polymorphic_type: $ => seq( - choice(repeat1($.type_identifier), $.abstract_type), + choice(repeat1($.type_constructor), $.abstract_type), '.', $._inline_type ), @@ -328,11 +313,7 @@ module.exports = grammar({ $._type ), - tuple_type: $ => prec.dynamic(-1, seq( - '(', - commaSep1t($._type), - ')', - )), + tuple_type: $ => prec.dynamic(-1, parenthesize(commaSep1t($._type))), variant_type: $ => prec.left(seq( optional('|'), @@ -340,16 +321,12 @@ module.exports = grammar({ )), variant_declaration: $ => prec.right(seq( - $.variant_identifier, + $.constructor_name, optional($.variant_parameters), optional($.type_annotation), )), - variant_parameters: $ => seq( - '(', - commaSep1t($._type), - ')', - ), + variant_parameters: $ => parenthesize(commaSep1t($._type)), polyvar_type: $ => prec.left(seq( choice('[', '[>', '[<',), @@ -368,11 +345,7 @@ module.exports = grammar({ ) ), - polyvar_parameters: $ => seq( - '(', - commaSep1t($._type), - ')', - ), + polyvar_parameters: $ => parenthesize(commaSep1t($._type)), record_type: $ => seq( '{', @@ -382,7 +355,7 @@ module.exports = grammar({ record_type_field: $ => seq( optional('mutable'), - alias($.value_identifier, $.property_identifier), + alias($.value_name, $.property_identifier), optional('?'), $.type_annotation, ), @@ -400,17 +373,16 @@ module.exports = grammar({ _object_type_field: $ => alias($.object_type_field, $.field), object_type_field: $ => choice( - seq('...', choice($.type_identifier, $.type_identifier_path)), + seq('...', $.type_constructor_path), seq( alias($.string, $.property_identifier), ':', $._type, ), - ), generic_type: $ => prec.left(seq( - $._type_identifier, + $._type_constructor, $.type_arguments, )), @@ -431,10 +403,8 @@ module.exports = grammar({ $._function_type_parameter_list, ), - _function_type_parameter_list: $ => seq( - '(', + _function_type_parameter_list: $ => parenthesize( commaSept(alias($.function_type_parameter, $.parameter)), - ')', ), function_type_parameter: $ => seq( @@ -493,8 +463,8 @@ module.exports = grammar({ primary_expression: $ => choice( $.parenthesized_expression, - $.value_identifier_path, - $.value_identifier, + $.value_name, + $.value_path, $.number, $.string, $.template_string, @@ -508,7 +478,7 @@ module.exports = grammar({ $.tuple, $.array, $.list, - $.variant, + $.constructor_path, $.polyvar, $.if_expression, $.switch_expression, @@ -517,28 +487,20 @@ module.exports = grammar({ $.pipe_expression, $.subscript_expression, $.member_expression, - $.module_pack, + $.package_expression, $.extension_expression, $.lazy_expression, ), - parenthesized_expression: $ => seq( - '(', + parenthesized_expression: $ => parenthesize(seq( $.expression, optional($.type_annotation), - ')' - ), - - value_identifier_path: $ => seq( - $.module_primary_expression, - '.', - $.value_identifier, - ), + )), function: $ => prec.left(seq( optional('async'), choice( - field('parameter', $.value_identifier), + field('parameter', $.value_name), $._definition_signature ), '=>', @@ -584,10 +546,7 @@ module.exports = grammar({ optional(','), ), - _record_field_name: $ => choice( - alias($.value_identifier, $.property_identifier), - alias($.value_identifier_path, $.property_identifier), - ), + _record_field_name: $ => alias($.value_path, $.property_identifier), object: $ => seq( '{', @@ -607,12 +566,10 @@ module.exports = grammar({ $.expression, ), - tuple: $ => seq( - '(', + tuple: $ => parenthesize( commaSep2t( $.expression ), - ')', ), array: $ => seq( @@ -635,8 +592,8 @@ module.exports = grammar({ if_expression: $ => seq( 'if', - $.expression, - $.block, + field('condition', $.expression), + field('consequence', $.block), repeat($.else_if_clause), optional($.else_clause), ), @@ -644,8 +601,8 @@ module.exports = grammar({ else_if_clause: $ => seq( 'else', 'if', - $.expression, - $.block, + field('condition', $.expression), + field('consequence', $.block), ), else_clause: $ => seq( @@ -677,7 +634,7 @@ module.exports = grammar({ polyvar_type_pattern: $ => seq( '#', '...', - $._type_identifier, + $._type_constructor, ), try_expression: $ => seq( @@ -689,13 +646,7 @@ module.exports = grammar({ '}', ), - as_aliasing: $ => prec.left(seq( - 'as', - $._pattern, - optional($.type_annotation) - )), - - as_aliasing_type: $ => seq($._type, 'as', $.type_identifier), + aliased_type: $ => seq($._type, 'as', $.type_constructor), assert_expression: $ => prec.left(seq('assert', $.expression)), @@ -716,17 +667,20 @@ module.exports = grammar({ ), )), - module_pack: $ => seq( + package_expression: $ => seq( 'module', - parenthesize(choice($._module_structure, $.type_identifier_path)) + parenthesize( + seq( + choice($.module_expression, $.block), + optional($.module_type_annotation) + ) + ) ), - call_arguments: $ => seq( - '(', + call_arguments: $ => parenthesize(seq( optional($.uncurry), optional(commaSep1t($._call_argument)), - ')' - ), + )), _call_argument: $ => choice( seq( @@ -738,7 +692,7 @@ module.exports = grammar({ labeled_argument: $ => seq( '~', - field('label', $.value_identifier), + field('label', $.value_path), optional(choice( '?', seq( @@ -760,10 +714,8 @@ module.exports = grammar({ $._non_function_inline_type, ), - formal_parameters: $ => seq( - '(', + formal_parameters: $ => parenthesize( optional(commaSep1t($.parameter)), - ')' ), parameter: $ => seq( @@ -776,17 +728,20 @@ module.exports = grammar({ ), ), + _alias_labeled_parameter: $ => seq('~', $.value_name, 'as', $._pattern), + labeled_parameter: $ => seq( - '~', - $.value_identifier, - optional($.as_aliasing), + choice( + seq('~', $.value_name), + alias($._alias_labeled_parameter, $.alias_pattern) + ), optional($.type_annotation), optional(field('default_value', $._labeled_parameter_default_value)), ), abstract_type: $ => seq( 'type', - repeat1($.type_identifier), + repeat1($.type_constructor), ), _labeled_parameter_default_value: $ => seq( @@ -800,24 +755,28 @@ module.exports = grammar({ // This negative dynamic precedence ensures that during error recovery, // unfinished constructs are generally treated as literal expressions, // not patterns. - _pattern: $ => prec.dynamic(-1, seq( - choice( - $.value_identifier, - $._literal_pattern, - $._destructuring_pattern, - $.polyvar_type_pattern, - $.unit, - $.module_pack, - $.lazy_pattern, - $.parenthesized_pattern, - $.or_pattern, - $.range_pattern, - $.exception_pattern - ), - optional($.as_aliasing), + _pattern: $ => prec.dynamic(-1, choice( + $.value_name, + $._literal_pattern, + $._destructuring_pattern, + $.polyvar_type_pattern, + $.unit, + $.package_pattern, + $.lazy_pattern, + $.parenthesized_pattern, + $.or_pattern, + $.range_pattern, + $.exception_pattern, + $.alias_pattern )), - parenthesized_pattern: $ => seq('(', $._pattern, optional($.type_annotation), ')'), + alias_pattern: $ => seq( + $._pattern, + 'as', + $.value_name + ), + + parenthesized_pattern: $ => parenthesize(seq($._pattern, optional($.type_annotation))), range_pattern: $ => seq( $._literal_pattern, @@ -829,8 +788,13 @@ module.exports = grammar({ exception_pattern: $ => seq('exception', $._pattern), + package_pattern: $ => seq( + 'module', + parenthesize(seq($.module_name, optional($.module_type_annotation))) + ), + _destructuring_pattern: $ => choice( - $.variant_pattern, + $.constructor_pattern, $.polyvar_pattern, $.record_pattern, $.tuple_pattern, @@ -847,38 +811,21 @@ module.exports = grammar({ $.false, ), - variant_pattern: $ => seq( + constructor_pattern: $ => prec.right(seq( optional('?'), - choice( - $.variant_identifier, - $.nested_variant_identifier, - ), - optional(alias($._variant_pattern_parameters, $.formal_parameters)) - ), - - _variant_pattern_parameters: $ => seq( - '(', - commaSept($._variant_pattern_parameter), - ')', - ), - - _variant_pattern_parameter: $ => seq( - $._pattern, - optional($.type_annotation), - ), + $.constructor_path, + optional($._pattern) + )), - polyvar_pattern: $ => seq( + polyvar_pattern: $ => prec.right(seq( $.polyvar_identifier, - optional(alias($._variant_pattern_parameters, $.formal_parameters)) - ), + optional($._pattern) + )), record_pattern: $ => seq( '{', commaSep1t(seq( - choice( - $.value_identifier, - $.value_identifier_path, - ), + $.value_path, optional(seq( ':', $._pattern, @@ -892,11 +839,7 @@ module.exports = grammar({ optional($.type_annotation), ), - tuple_pattern: $ => seq( - '(', - commaSep2t($.tuple_item_pattern), - ')', - ), + tuple_pattern: $ => parenthesize(commaSep2t($.tuple_item_pattern)), array_pattern: $ => seq( '[', @@ -913,26 +856,20 @@ module.exports = grammar({ '}', ), - _collection_element_pattern: $ => seq( - choice($._pattern, $.spread_pattern), - optional($.as_aliasing) + _collection_element_pattern: $ => choice( + $._pattern, + $.spread_pattern, + alias($._spread_pattern_alias, $.alias_pattern) ), + _spread_pattern_alias: $ => seq($.spread_pattern, 'as', $.value_name), + spread_pattern: $ => seq( '...', - choice($.value_identifier, $.list_pattern, $.array_pattern), + choice($.value_name, $.list_pattern, $.array_pattern), ), - lazy_pattern: $ => seq( - 'lazy', - choice( - $.value_identifier, - $._literal_pattern, - $._destructuring_pattern, - $.polyvar_type_pattern, - $.parenthesized_pattern, - ) - ), + lazy_pattern: $ => seq('lazy', $._pattern), _jsx_element: $ => choice($.jsx_element, $.jsx_self_closing_element), @@ -954,8 +891,7 @@ module.exports = grammar({ ), _jsx_child: $ => choice( - $.value_identifier, - $.value_identifier_path, + $.value_path, $.number, $.string, $.template_string, @@ -975,7 +911,7 @@ module.exports = grammar({ )), _jsx_identifier: $ => alias( - choice($.value_identifier, $.module_identifier), + choice($.value_name, $.constructor_path), $.jsx_identifier ), @@ -1005,7 +941,7 @@ module.exports = grammar({ '>' ), - _jsx_attribute_name: $ => alias($.value_identifier, $.property_identifier), + _jsx_attribute_name: $ => alias($.value_name, $.property_identifier), _jsx_attribute: $ => choice($.jsx_attribute, $.jsx_expression), @@ -1031,7 +967,7 @@ module.exports = grammar({ ), _mutation_lvalue: $ => choice( - $.value_identifier, + $.value_path, $.member_expression, $.subscript_expression, ), @@ -1046,13 +982,11 @@ module.exports = grammar({ seq(alias($._decorator, $.decorator_identifier), $.decorator_arguments) ), - decorator_arguments: $ => seq( - '(', + decorator_arguments: $ => parenthesize( choice( commaSept($.expression), $.type_annotation ), - ')', ), subscript_expression: $ => prec.right('member', seq( @@ -1063,11 +997,7 @@ module.exports = grammar({ member_expression: $ => prec('member', seq( field('record', $.primary_expression), '.', - optional(seq( - field('module', $.module_identifier), - '.' - )), - field('property', alias($.value_identifier, $.property_identifier)), + field('property', $.value_path) )), spread_element: $ => seq('...', $.expression), @@ -1082,17 +1012,17 @@ module.exports = grammar({ for_expression: $ => seq( 'for', - $.value_identifier, + field('name', $.value_path), 'in', - $.expression, + field('from', $.expression), choice('to', 'downto'), - $.expression, + field('to', $.expression), $.block, ), while_expression: $ => seq( 'while', - $.expression, + field('condition', $.expression), $.block, ), @@ -1137,7 +1067,7 @@ module.exports = grammar({ seq( field('left', $.expression), field('operator', ':>'), - field('right', $._type_identifier), + field('right', $._type_constructor), ) ), @@ -1162,76 +1092,56 @@ module.exports = grammar({ ) )), - _extension_expression_payload: $ => seq( - '(', + _extension_expression_payload: $ => parenthesize(seq( $._one_or_more_statements, // explicit newline here because it won’t be reported otherwise by the scanner // because we’re in parens optional($._newline), - ')', - ), - - variant: $ => prec.right(seq( - choice($.variant_identifier, $.nested_variant_identifier), - optional(alias($.variant_arguments, $.arguments)), )), - nested_variant_identifier: $ => seq( - $.module_primary_expression, - '.', - $.variant_identifier - ), - - variant_arguments: $ => seq( - '(', - commaSept(seq( - $.expression, - optional($.type_annotation), - )), - ')', - ), polyvar: $ => prec.right(seq( $.polyvar_identifier, - optional(alias($.variant_arguments, $.arguments)), + optional($.call_arguments) + // optional(alias($.variant_arguments, $.arguments)), )), - _type_identifier: $ => choice( - $.type_identifier, - $.type_identifier_path, + _type_constructor: $ => choice( + $.type_constructor_path, ".." ), - type_identifier_path: $ => seq( - $.module_primary_expression, - '.', - $.type_identifier + parenthesized_module_type: $ => parenthesize($._module_type), + + typed_module_expression: $ => parenthesize( + seq( + choice($.module_expression, $.block), + $.module_type_annotation, + ) ), - module_expression: $ => choice( - $.module_primary_expression, + _module_type: $ => choice( $.module_type_of, $.module_type_constraint, + $.functor, + $.module_type_path, + $.parenthesized_module_type + ), + + module_expression: $ => choice( + $.module_primary_expression, + $.typed_module_expression, + $.parenthesized_module_expression ), module_primary_expression: $ => choice( - $.parenthesized_module_expression, - $.module_identifier, - $.module_identifier_path, + $.module_path, $.functor_use, $.module_unpack, ), - parenthesized_module_expression: $ => seq( - '(', - $.module_expression, - optional($.module_type_annotation), - ')', - ), - - module_identifier_path: $ => path( - $.module_primary_expression, - $.module_identifier, + parenthesized_module_expression: $ => parenthesize( + choice($.module_expression, $.block) ), module_type_of: $ => prec.left(seq( @@ -1248,21 +1158,17 @@ module.exports = grammar({ ), )), - module_type_constraint: $ => prec.left(choice( - seq($.module_expression, $._module_type_constraint_with), - seq( - '(', - $.module_expression, $._module_type_constraint_with, - ')', - $._module_type_constraint_with - ) + module_type_constraint: $ => prec.right(seq( + $._module_type, + 'with', + sep1('and', choice($.constrain_type, $.constrain_module, /* $.constrain_module_type */)) )), constrain_module: $ => seq( 'module', - $.module_primary_expression, + $.module_path, choice('=', ':='), - $.module_primary_expression, + $.module_path, ), constrain_type: $ => seq( @@ -1277,10 +1183,8 @@ module.exports = grammar({ alias($.functor_arguments, $.arguments), ), - functor_arguments: $ => seq( - '(', + functor_arguments: $ => parenthesize( optional(commaSep1t($._functor_argument)), - ')', ), _functor_argument: $ => choice( @@ -1288,8 +1192,6 @@ module.exports = grammar({ $.block, ), - variant_identifier: $ => /[A-Z][a-zA-Z0-9_']*/, - polyvar_identifier: $ => seq( '#', choice( @@ -1301,23 +1203,37 @@ module.exports = grammar({ ), ), - type_identifier: $ => choice( + type_constructor: $ => choice( /[a-z_'][a-zA-Z0-9_']*/, $._escape_identifier, ), - value_identifier: $ => choice( - /[a-z_][a-zA-Z0-9_']*/, + value_name: $ => choice( + $._identifier, $._reserved_identifier, $._escape_identifier, ), _escape_identifier: $ => token(seq('\\"', /[^"]+/, '"')), - module_identifier: $ => /[A-Z][a-zA-Z0-9_']*/, - extension_identifier: $ => /[a-zA-Z0-9_\.]+/, + module_name: $ => $._capitalized_identifier, + module_path: $ => prec(1, path($.module_path, $.module_name)), + + constructor_name: $ => $._capitalized_identifier, + constructor_path: $ => path($.module_path, $.constructor_name), + + type_constructor_path: $ => prec(1, path($.module_path, $.type_constructor)), + + value_path: $ => path($.module_path, $.value_name), + + module_type_path: $ => path($.module_path, $.module_type_name), + module_type_name: $ => choice($.module_name, $._identifier), + + _identifier: $ => /[a-z_][a-zA-Z0-9_']*/, + _capitalized_identifier: $ => /[A-Z][a-zA-Z0-9_']*/, + number: $ => { // OCaml: https://github.com/tree-sitter/tree-sitter-ocaml/blob/f1106bf834703f1f2f795da1a3b5f8f40174ffcc/ocaml/grammar.js#L26 const hex_literal = seq( @@ -1428,7 +1344,7 @@ module.exports = grammar({ ), template_substitution: $ => choice( - seq('$', $.value_identifier), + seq('$', $.value_name), seq('${', $.expression, '}'), ), @@ -1472,10 +1388,6 @@ function commaSep2t(rule) { return seq(commaSep2(rule), optional(',')); } -function commaSep(rule) { - return optional(commaSep1(rule)); -} - function commaSept(rule) { return optional(commaSep1t(rule)); } diff --git a/test/full.txt b/test/full.txt new file mode 100644 index 0000000..16a316b --- /dev/null +++ b/test/full.txt @@ -0,0 +1,4955 @@ +yarn run v1.22.19 +$ /home/pedro/Desktop/projects/tree-sitter-rescript/node_modules/.bin/tree-sitter test + comments: + βœ— Comments + expressions: + βœ“ Unit + βœ— Parenthesized expressions + βœ— Nested identifiers + βœ— Escape identifiers + βœ“ Tuple + βœ— Call expression + βœ— Pipe + βœ— Record + βœ“ Object + βœ— If/else + βœ— Switch of literals + βœ— Switch of variants + βœ— Switch of polyvars + βœ— Switch of vars + βœ— Switch of tuples + βœ— Switch of mixed tuples + βœ— Switch of record patterns + βœ— Switch of lists + βœ— Switch of arrays + βœ— Switch of statements + βœ— Switch exceptions + βœ— Switch block + βœ— Switch parenthesized + βœ— Switch ranges + βœ“ Math operators + βœ— Boolean operators + βœ— String operators + βœ— Coercion operator + βœ— Ternaries + βœ“ Arrays + βœ— Lists + βœ— Member expressions + βœ— Subscript expressions + βœ— Variants + βœ— Extensions + βœ— Raise expression + βœ— Assert expression + βœ— Try-catch + βœ— Mutation expressions + βœ— For loop + βœ— While loop + βœ— Await expression + βœ— As aliasing + βœ— Lazy Expression + modules: + βœ— Open + βœ— Include + βœ— Simple definition + βœ— Signature and definition + βœ— Module types + βœ— First Class module + βœ— Functor definition + βœ— Functor signature + βœ— Functor use + βœ— Alias + βœ— Recursive + βœ— Definition through extension + βœ— Externals + βœ— Exception declaration + βœ— Module Constraints + literals: + βœ“ Boolean + βœ“ Numbers + βœ“ Strings containing comment-like content + βœ“ Quote escaping + βœ— Template strings + βœ“ Tricky template strings + βœ“ Characters + βœ— Polyvars + error_scopes: + jsx: + βœ— Simple JSX elements + βœ“ Custom type children + βœ— Attribute values + βœ— Anonymous JSX element + βœ— Block children + βœ— Children spread + βœ— Attribute Block + βœ— Spread props + decorators: + βœ“ Decorator inline + βœ“ Decorator with arguments + βœ— Decorator with type + let_bindings: + βœ— Plain + βœ— Tuple destructuring + βœ— Record destructuring + βœ— Array destructuring + βœ— List destructuring + βœ— Block + βœ— Annotated + βœ— Recursive + βœ— Unit + βœ— And (Primitives) + βœ— And (Functions) + βœ— And (decorated) + βœ— Labled function with uncurried + βœ— Destructuring module + βœ— Packing module + βœ— Unpacking module + βœ— Lazy Values + type_declarations: + βœ— Opaque + βœ— Export + βœ— Alias + βœ— Private + βœ— Tuple type + βœ— Record type + βœ— Extensible Variant + βœ— Variant + βœ— Annotated variant + βœ— Polyvar + βœ— Function + βœ— Object + βœ— Generic + βœ— Recursive + βœ— Decorated + βœ— Mutually Recursive + βœ— Labled function with uncurried + βœ— Polymorphic type + βœ— Variance annotations + βœ— Type constraint + functions: + βœ— Simple parameters + βœ— Type annotations + βœ— Abstract type + βœ— Parameter defaults + βœ— Parameter aliasing + βœ— Record pattern + βœ— Ref assignment as body + βœ— Operator precendence + βœ— Async + +111 failures: + +expected / actual + + 1. Comments: + + (source_file + (comment) + (expression_statement + (number)) + (comment) + (expression_statement + (number)) + (comment) + (expression_statement + (number)) + (expression_statement + (number)) + (comment) + (expression_statement + (number)) + (comment) + (comment) + (expression_statement + (number)) + (comment) + (expression_statement + (number)) + (comment) + (expression_statement + (number)) + (comment) + (expression_statement + (number)) + (expression_statement + (pipe_expression + (value_name) + (value_identifier) + (comment) + (value_name))) + (value_identifier))) + (expression_statement + (switch_expression + (value_name) + (value_identifier) + (switch_match + (number) + (sequence_expression + (expression_statement + (number)))) + (comment)))) + + + 2. Parenthesized expressions: + + (source_file + (expression_statement + (parenthesized_expression + (number))) + (expression_statement + (parenthesized_expression + (number) + (type_annotation + (type_constructor_path + (type_constructor))))) + (type_identifier)))) + (expression_statement + (parenthesized_expression + (unit)))) + + + 3. Nested identifiers: + + (source_file + (expression_statement + (value_path + (module_path + (module_path + (module_name)) + (module_name)) + (value_name))) + (value_identifier_path + (module_identifier_path + (module_identifier) + (module_identifier)) + (value_identifier))) + (expression_statement + (member_expression + (value_path + (module_path + (module_path + (module_name)) + (module_name)) + (value_name)) + (value_path + (value_name))))) + (value_identifier_path + (module_identifier_path + (module_identifier) + (module_identifier)) + (value_identifier)) + (property_identifier)))) + + + 4. Escape identifiers: + + (source_file + (expression_statement + (value_name))) + (value_identifier))) + + + 5. Call expression: + + (source_file + (expression_statement + (call_expression + function: (value_name) + function: (value_identifier) + arguments: (arguments + (number) + (number)))) + (expression_statement + (call_expression + function: (value_name) + function: (value_identifier) + arguments: (arguments + (number) + (type_annotation + (type_constructor_path + (type_constructor))) + (type_identifier)) + (labeled_argument + label: (value_path + (value_name)) + label: (value_identifier) + value: (number) + type: (type_annotation + (type_constructor_path + (type_constructor))))))) + (type_identifier)))))) + (expression_statement + (call_expression + function: (value_name) + function: (value_identifier) + arguments: (arguments + (number) + (labeled_argument + label: (value_path + (value_name)) + label: (value_identifier) + value: (number)) + (labeled_argument + label: (value_path + (value_name))) + label: (value_identifier)) + (unit)))) + (expression_statement + (call_expression + function: (value_name) + function: (value_identifier) + arguments: (arguments + (labeled_argument + label: (value_path + (value_name))) + label: (value_identifier)) + (labeled_argument + label: (value_path + (value_name)) + value: (value_name))))) + label: (value_identifier) + value: (value_identifier))))) + (expression_statement + (call_expression + function: (value_name) + function: (value_identifier) + arguments: (arguments + (uncurry) + (number)))) + (expression_statement + (call_expression + function: (value_name) + function: (value_identifier) + arguments: (arguments + (function + parameter: (value_name) + parameter: (value_identifier) + body: (binary_expression + left: (pipe_expression + (value_name) + (value_path + (module_path + (module_name)) + (value_name))) + (value_identifier) + (value_identifier_path + (module_identifier) + (value_identifier))) + right: (number)))))) + (expression_statement + (call_expression + function: (value_name) + function: (value_identifier) + arguments: (arguments + (number) + (block + (open_statement + (module_path + (module_name))) + (module_identifier)) + (expression_statement + (value_name))) + (value_identifier))) + (labeled_argument + label: (value_path + (value_name)) + label: (value_identifier) + value: (block + (expression_statement + (number))))))) + (expression_statement + (call_expression + function: (value_name) + function: (value_identifier) + arguments: (arguments + (value_name)))) + (value_identifier)))) + (expression_statement + (call_expression + function: (value_name) + function: (value_identifier) + arguments: (arguments + (labeled_argument + label: (value_path + (value_name)) + label: (value_identifier) + (decorator + (decorator_identifier)) + value: (number)))))) + + + 6. Pipe: + + (source_file + (expression_statement + (pipe_expression + (pipe_expression + (value_name) + (value_name)) + (value_name))) + (value_identifier) + (value_identifier)) + (value_identifier))) + (expression_statement + (pipe_expression + (pipe_expression + (value_name) + (value_name)) + (value_name))) + (value_identifier) + (value_identifier)) + (value_identifier))) + (expression_statement + (pipe_expression + (pipe_expression + (value_name) + (value_identifier) + (call_expression + (value_path + (module_path + (module_name)) + (value_name)) + (value_identifier_path + (module_identifier) + (value_identifier)) + (arguments + (value_name)))) + (value_path + (module_path + (module_name)) + (value_name)))) + (value_identifier)))) + (value_identifier_path + (module_identifier) + (value_identifier)))) + (expression_statement + (pipe_expression + (number) + (constructor_path + (constructor_name)))) + (variant + (variant_identifier)))) + (expression_statement + (pipe_expression + (value_name) + (value_identifier) + (polyvar + (polyvar_identifier)))) + (expression_statement + (pipe_expression + (value_name) + (value_name))) + (value_identifier) + (value_identifier))) + (expression_statement + (pipe_expression + (value_name) + (value_identifier) + (parenthesized_expression + (function + (value_name) + (value_identifier) + (binary_expression + (value_name) + (value_identifier) + (number)))))) + (expression_statement + (pipe_expression + (value_name) + (value_identifier) + (block + (open_statement + (module_path + (module_name))) + (module_identifier)) + (expression_statement + (value_name))))) + (value_identifier))))) + (expression_statement + (pipe_expression + (block + (expression_statement + (value_name))) + (value_identifier))) + (call_expression + (value_name) + (value_identifier) + (arguments))))) + + + 7. Record: + + (source_file + (expression_statement + (record + (spread_element + (value_name)) + (value_identifier)) + (record_field + (property_identifier + (value_name)) + (property_identifier) + (number)) + (record_field + (property_identifier + (value_name)) + (property_identifier) + (string + (string_fragment))) + (record_field + (property_identifier + (value_name))))) + (property_identifier)))) + (expression_statement + (record + (record_field + (property_identifier + (value_name))) + (property_identifier)) + (record_field + (property_identifier + (value_name))) + (property_identifier)) + (record_field + (property_identifier + (value_name))))) + (property_identifier)))) + (expression_statement + (record + (record_field + (property_identifier + (module_path + (module_name)) + (value_name)) + (module_identifier) + (value_identifier)) + (number)))) + (expression_statement + (record + (record_field + (property_identifier + (module_path + (module_name)) + (value_name)) + (module_identifier) + (value_identifier)) + (number)) + (record_field + (property_identifier + (value_name)) + (property_identifier) + (string + (string_fragment))))) + (expression_statement + (record + (record_field + (property_identifier + (value_name)) + (constructor_path + (constructor_name))) + (property_identifier) + (variant + (variant_identifier))) + (record_field + (property_identifier + (value_name))) + (property_identifier)) + (record_field + (property_identifier + (value_name)) + (property_identifier) + (parenthesized_expression + (constructor_path + (constructor_name)) + (variant + (variant_identifier)) + (type_annotation + (type_constructor_path + (type_constructor))))))) + (type_identifier)))))) + (expression_statement + (record + (property_identifier + (value_name))))) + (property_identifier)))) + + + 8. If/else: + + (source_file + (expression_statement + (if_expression + (value_name) + (value_identifier) + (block + (expression_statement + (value_name))))) + (value_identifier))))) + (expression_statement + (if_expression + (value_name) + (value_identifier) + (block + (expression_statement + (value_name))) + (value_identifier))) + (else_clause + (block + (expression_statement + (value_name)))))) + (value_identifier)))))) + (expression_statement + (if_expression + (value_name) + (value_identifier) + (block + (expression_statement + (value_name))) + (value_identifier))) + (else_if_clause + (value_name) + (value_identifier) + (block + (expression_statement + (value_name)))) + (value_identifier)))) + (else_if_clause + (value_name) + (value_identifier) + (block + (expression_statement + (value_name)))) + (value_identifier)))) + (else_clause + (block + (expression_statement + (value_name))))))) + (value_identifier))))))) + + + 9. Switch of literals: + + (source_file + (expression_statement + (switch_expression + (value_name) + (value_identifier) + (switch_match + (or_pattern + (number) + (number)) + (sequence_expression + (expression_statement + (string + (string_fragment))))) + (switch_match + (value_name) + (value_identifier) + (sequence_expression + (let_declaration + (let_binding + (value_name) + (value_identifier) + (string + (string_fragment)))) + (expression_statement + (binary_expression + (value_name) + (value_identifier) + (string + (string_fragment))))))))) + + + 10. Switch of variants: + + (source_file + (expression_statement + (switch_expression + (value_name) + (value_identifier) + (switch_match + (constructor_pattern + (constructor_path + (constructor_name)) + (tuple_pattern + (tuple_item_pattern + (alias_pattern + (value_name) + (value_name)) + (type_annotation + (type_constructor_path + (type_constructor)))) + (tuple_item_pattern + (record_pattern + (value_path + (value_name)) + (value_path + (value_name)))))) + (variant_pattern + (variant_identifier) + (formal_parameters + (value_identifier) + (as_aliasing + (value_identifier)) + (type_annotation + (type_identifier)) + (record_pattern + (value_identifier) + (value_identifier)))) + (sequence_expression + (expression_statement + (value_name)))) + (value_identifier)))) + (switch_match + (constructor_pattern + (constructor_path + (module_path + (module_name)) + (constructor_name))) + (variant_pattern + (nested_variant_identifier + (module_identifier) + (variant_identifier))) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (constructor_pattern + (constructor_path + (constructor_name)) + (unit)) + (variant_pattern + (variant_identifier) + (formal_parameters)) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (constructor_pattern + (constructor_path + (constructor_name)) + (parenthesized_pattern + (value_name))) + (variant_pattern + (variant_identifier) + (formal_parameters + (value_identifier))) + (sequence_expression + (expression_statement + (number))))))) + + + 11. Switch of polyvars: + + (source_file + (expression_statement + (switch_expression + (value_name) + (value_identifier) + (switch_match + (polyvar_pattern + (polyvar_identifier)) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (polyvar_pattern + (polyvar_identifier) + (alias_pattern + (tuple_pattern + (tuple_item_pattern + (alias_pattern + (value_name) + (value_name)) + (type_annotation + (type_constructor_path + (type_constructor)))) + (tuple_item_pattern + (number))) + (value_name))) + (formal_parameters + (value_identifier) + (as_aliasing + (value_identifier)) + (type_annotation + (type_identifier)) + (number))) + (as_aliasing + (value_identifier)) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (alias_pattern + (polyvar_type_pattern + (type_constructor_path + (module_path + (module_name)) + (type_constructor))) + (value_name)) + (polyvar_type_pattern + (type_identifier_path + (module_identifier) + (type_identifier))) + (as_aliasing + (value_identifier)) + (sequence_expression + (expression_statement + (number))))))) + + + 12. Switch of vars: + + (source_file + (expression_statement + (switch_expression + (value_name) + (value_identifier) + (switch_match + (value_name) + (value_identifier) + (guard + (binary_expression + (binary_expression + (value_name) + (value_identifier) + (number)) + (binary_expression + (value_name) + (value_identifier) + (number)))) + (sequence_expression + (expression_statement + (value_name)))) + (value_identifier)))) + (switch_match + (value_name) + (value_identifier) + (guard + (binary_expression + (value_name) + (value_identifier) + (number))) + (sequence_expression + (expression_statement + (value_name)))) + (value_identifier)))) + (switch_match + (value_name) + (value_identifier) + (sequence_expression + (expression_statement + (number))))))) + + + 13. Switch of tuples: + + (source_file + (expression_statement + (switch_expression + (tuple + (value_name) + (value_name)) + (value_identifier) + (value_identifier)) + (switch_match + (tuple_pattern + (tuple_item_pattern + (number)) + (tuple_item_pattern + (alias_pattern + (number) + (value_name)))) + (number) + (as_aliasing + (value_identifier)))) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (tuple_pattern + (tuple_item_pattern + (constructor_pattern + (constructor_path + (constructor_name)))) + (variant_pattern + (variant_identifier))) + (tuple_item_pattern + (polyvar_type_pattern + (type_constructor_path + (type_constructor))))) + (type_identifier)))) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (tuple_pattern + (tuple_item_pattern + (value_name)) + (value_identifier)) + (tuple_item_pattern + (value_name))) + (value_identifier))) + (sequence_expression + (expression_statement + (number))))))) + + + 14. Switch of mixed tuples: + + (source_file + (expression_statement + (switch_expression + (value_name) + (value_identifier) + (switch_match + (tuple_pattern + (tuple_item_pattern + (or_pattern + (constructor_pattern + (constructor_path + (constructor_name))) + (constructor_pattern + (constructor_path + (constructor_name))))) + (variant_pattern + (variant_identifier)) + (variant_pattern + (variant_identifier)))) + (tuple_item_pattern + (number))) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (value_name) + (value_identifier) + (sequence_expression + (expression_statement + (number))))))) + + + 15. Switch of record patterns: + + (source_file + (expression_statement + (switch_expression + (value_name) + (value_identifier) + (switch_match + (constructor_pattern + (constructor_path + (constructor_name)) + (parenthesized_pattern + (variant_pattern + (variant_identifier) + (formal_parameters + (record_pattern + (value_path + (value_name)) + (value_identifier) + (or_pattern + (string + (string_fragment)) + (string + (string_fragment)))))) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (constructor_pattern + (constructor_path + (constructor_name)) + (parenthesized_pattern + (variant_pattern + (variant_identifier) + (formal_parameters + (record_pattern + (value_path + (value_name)) + (value_identifier) + (record_pattern + (value_path + (value_name)) + (value_identifier) + (number)) + (value_path + (value_name)) + (constructor_pattern + (constructor_path + (constructor_name)) + (or_pattern + (parenthesized_pattern + (value_name)) + (constructor_pattern + (constructor_path + (constructor_name)) + (parenthesized_pattern + (value_name)))))))) + (value_identifier) + (or_pattern + (variant_pattern + (variant_identifier) + (formal_parameters + (value_identifier))) + (variant_pattern + (variant_identifier) + (formal_parameters + (value_identifier))))))) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (constructor_pattern + (constructor_path + (constructor_name)) + (parenthesized_pattern + (variant_pattern + (variant_identifier) + (formal_parameters + (record_pattern + (value_path + (value_name)) + (constructor_pattern + (constructor_path + (constructor_name)))))) + (value_identifier) + (variant_pattern + (variant_identifier))))) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (constructor_pattern + (constructor_path + (constructor_name)) + (parenthesized_pattern + (variant_pattern + (variant_identifier) + (formal_parameters + (record_pattern + (value_path + (value_name))))) + (value_identifier)))) + (sequence_expression + (expression_statement + (number))))))) + + + 16. Switch of lists: + + (source_file + (expression_statement + (switch_expression + (value_name) + (value_identifier) + (switch_match + (list_pattern + (alias_pattern + (value_name) + (value_name)) + (value_identifier) + (as_aliasing + (value_identifier)) + (spread_pattern + (value_name))) + (value_identifier))) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (list_pattern + (number) + (number) + (value_name)) + (value_identifier)) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (list_pattern + (number)) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (list_pattern + (spread_pattern + (value_name))) + (value_identifier))) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (list_pattern + (number) + (number) + (alias_pattern + (spread_pattern + (list_pattern + (value_name) + (spread_pattern + (value_name)))) + (value_name))) + (spread_pattern + (list_pattern + (value_identifier) + (spread_pattern + (value_identifier)))) + (as_aliasing + (value_identifier))) + (sequence_expression + (expression_statement + (value_name))))))) + (value_identifier))))))) + + + 17. Switch of arrays: + + (source_file + (expression_statement + (switch_expression + (value_name) + (value_identifier) + (switch_match + (array_pattern + (value_name) + (value_identifier) + (spread_pattern + (value_name))) + (value_identifier))) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (array_pattern + (number) + (alias_pattern + (number) + (value_name)) + (value_name)) + (number) + (as_aliasing + (value_identifier)) + (value_identifier)) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (array_pattern + (number)) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (array_pattern + (spread_pattern + (value_name))) + (value_identifier))) + (sequence_expression + (expression_statement + (number))))))) + + + 18. Switch of statements: + + (source_file + (expression_statement + (switch_expression + (parenthesized_expression + (pipe_expression + (value_name) + (value_path + (module_path + (module_name)) + (value_name)))) + (value_identifier) + (value_identifier_path + (module_identifier) + (value_identifier)))) + (switch_match + pattern: (constructor_pattern + (constructor_path + (constructor_name)) + (parenthesized_pattern + (value_name))) + pattern: (variant_pattern + (variant_identifier) + (formal_parameters + (value_identifier))) + body: (sequence_expression + (expression_statement + (call_expression + function: (value_path + (module_path + (module_name)) + (value_name)) + function: (value_identifier_path + (module_identifier) + (value_identifier)) + arguments: (arguments + (value_name)))) + (value_identifier)))) + (expression_statement + (call_expression + function: (value_path + (module_path + (module_name)) + (value_name)) + function: (value_identifier_path + (module_identifier) + (value_identifier)) + arguments: (arguments + (value_name)))))) + (value_identifier)))))) + (switch_match + pattern: (constructor_pattern + (constructor_path + (constructor_name))) + pattern: (variant_pattern + (variant_identifier)) + body: (sequence_expression + (expression_statement + (unit))))))) + + + 19. Switch exceptions: + + (source_file + (expression_statement + (switch_expression + (call_expression + (value_name) + (value_identifier) + (arguments + (value_name))) + (value_identifier))) + (switch_match + (value_name) + (value_identifier) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (exception_pattern + (constructor_pattern + (constructor_path + (module_path + (module_path + (module_name)) + (module_name)) + (constructor_name)) + (parenthesized_pattern + (value_name)))) + (variant_pattern + (nested_variant_identifier + (module_identifier_path + (module_identifier) + (module_identifier)) + (variant_identifier)) + (formal_parameters + (value_identifier)))) + (sequence_expression + (expression_statement + (number))))))) + + + 20. Switch block: + + (source_file + (expression_statement + (switch_expression + (block + (open_statement + (module_path + (module_name))) + (module_identifier)) + (expression_statement + (call_expression + (value_name) + (value_identifier) + (arguments)))) + (switch_match + (value_name) + (value_identifier) + (sequence_expression + (expression_statement + (number))))))) + + + 21. Switch parenthesized: + + (source_file + (expression_statement + (switch_expression + (value_name) + (value_identifier) + (switch_match + (parenthesized_pattern + (or_pattern + (number) + (number))) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (constructor_pattern + (constructor_path + (constructor_name)) + (parenthesized_pattern + (variant_pattern + (variant_identifier) + (formal_parameters + (or_pattern + (parenthesized_pattern + (or_pattern + (constructor_pattern + (constructor_path + (constructor_name))) + (constructor_pattern + (constructor_path + (constructor_name))))) + (constructor_pattern + (constructor_path + (constructor_name)))))) + (variant_pattern + (variant_identifier)) + (variant_pattern + (variant_identifier)))) + (variant_pattern + (variant_identifier))))) + (sequence_expression + (expression_statement + (number))))))) + + + 22. Switch ranges: + + (source_file + (expression_statement + (switch_expression + (value_name) + (value_identifier) + (switch_match + (range_pattern + (character) + (character)) + (sequence_expression + (expression_statement + (number))))))) + + + 23. Boolean operators: + + (source_file + (expression_statement + (binary_expression + (value_name) + (value_name))) + (value_identifier) + (value_identifier))) + (expression_statement + (binary_expression + (value_name) + (value_name))) + (value_identifier) + (value_identifier))) + (expression_statement + (binary_expression + (binary_expression + (unary_expression + (value_name)) + (value_identifier)) + (unary_expression + (value_name))) + (value_identifier))) + (binary_expression + (unary_expression + (value_name)) + (value_identifier)) + (unary_expression + (value_name)))))) + (value_identifier)))))) + + + 24. String operators: + + (source_file + (expression_statement + (binary_expression + (value_name) + (value_name))) + (value_identifier) + (value_identifier))) + (expression_statement + (binary_expression + (binary_expression + (value_name) + (value_name)) + (value_name)))) + (value_identifier) + (value_identifier)) + (value_identifier)))) + + + 25. Coercion operator: + + (source_file + (expression_statement + (coercion_expression + (value_name) + (type_constructor_path + (type_constructor))))) + (value_identifier) + (type_identifier)))) + + + 26. Ternaries: + + (source_file + (expression_statement + (ternary_expression + (value_name) + (value_name) + (value_name))) + (value_identifier) + (value_identifier) + (value_identifier))) + (expression_statement + (ternary_expression + (value_name) + (value_name) + (value_name)))) + (value_identifier) + (value_identifier) + (value_identifier)))) + + + 27. Lists: + + (source_file + (expression_statement + (list)) + (expression_statement + (list + (number))) + (expression_statement + (list + (number))) + (expression_statement + (list + (number) + (number))) + (expression_statement + (list + (number) + (number) + (spread_element + (value_name)))) + (value_identifier)))) + (expression_statement + (list + (spread_element + (value_name)) + (value_identifier)) + (number) + (number)))) + + + 28. Member expressions: + + (source_file + (expression_statement + (member_expression + (member_expression + (value_name) + (value_path + (value_name))) + (value_path + (value_name)))) + (value_identifier) + (property_identifier)) + (property_identifier))) + (expression_statement + (member_expression + (value_name) + (value_path + (module_path + (module_name)) + (value_name))))) + (value_identifier) + (module_identifier) + (property_identifier)))) + + + 29. Subscript expressions: + + (source_file + (expression_statement + (subscript_expression + (value_name) + (value_identifier) + (number))) + (expression_statement + (subscript_expression + (value_name) + (value_identifier) + (string + (string_fragment))))) + + + 30. Variants: + + (source_file + (expression_statement + (constructor_path + (constructor_name))) + (variant + (variant_identifier))) + (expression_statement + (call_expression + (constructor_path + (constructor_name)) + (variant + (variant_identifier) + (arguments + (number)))) + (expression_statement + (call_expression + (constructor_path + (constructor_name)) + (variant + (variant_identifier) + (arguments + (number) + (type_annotation + (type_constructor_path + (type_constructor)))))) + (type_identifier))))) + (expression_statement + (call_expression + (constructor_path + (constructor_name)) + (variant + (variant_identifier) + (arguments + (value_name) + (value_identifier) + (record + (record_field + (property_identifier + (value_name)) + (property_identifier) + (number)))))) + (expression_statement + (call_expression + (constructor_path + (constructor_name)) + (variant + (variant_identifier) + (arguments + (parenthesized_expression + (call_expression + (value_path + (module_path + (module_name)) + (value_name)) + (value_identifier_path + (module_identifier) + (value_identifier)) + (arguments + (value_name))) + (value_identifier))) + (type_annotation + (type_constructor_path + (type_constructor)))))))) + (type_identifier))))))) + + + 31. Extensions: + + (source_file + (expression_statement + (extension_expression + (extension_identifier))) + (expression_statement + (extension_expression + (extension_identifier) + (expression_statement + (string + (string_fragment))))) + (expression_statement + (extension_expression + (extension_identifier) + (expression_statement + (string + (string_fragment))))) + (expression_statement + (extension_expression + (extension_identifier) + (let_declaration + (let_binding + pattern: (value_name) + pattern: (value_identifier) + body: (function + parameters: (formal_parameters + (parameter + (value_name)) + (value_identifier)) + (parameter + (value_name))) + (value_identifier))) + body: (binary_expression + left: (value_name) + right: (value_name))))))) + left: (value_identifier) + right: (value_identifier))))))) + (expression_statement + (extension_expression + (extension_identifier) + (let_declaration + (let_binding + pattern: (value_name) + pattern: (value_identifier) + body: (string + (string_fragment)))) + (let_declaration + (let_binding + pattern: (value_name) + pattern: (value_identifier) + body: (number))))) + (let_declaration + (let_binding + pattern: (value_name) + pattern: (value_identifier) + body: (extension_expression + (extension_identifier) + (expression_statement + (template_string + (template_string_content + (escape_sequence) + (escape_sequence))))))) + (let_declaration + (let_binding + pattern: (value_name) + pattern: (value_identifier) + body: (extension_expression + (extension_identifier) + (expression_statement + (template_string + (template_string_content + (escape_sequence) + (escape_sequence))))))) + (module_declaration + (module_binding + name: (module_name) + name: (module_identifier) + definition: (extension_expression + (extension_identifier) + (expression_statement + (template_string + (template_string_content))))))) + + + 32. Raise expression: + + (source_file + (expression_statement + (call_expression + function: (value_name) + function: (value_identifier) + arguments: (arguments + (call_expression + function: (constructor_path + (constructor_name)) + arguments: (arguments + (variant + (variant_identifier) + (arguments + (record + (record_field + (property_identifier + (value_name)) + (property_identifier) + (string + (string_fragment))))))))) + (expression_statement + (call_expression + function: (value_name) + function: (value_identifier) + arguments: (arguments + (constructor_path + (constructor_name)))))) + (variant + (variant_identifier)))))) + + + 33. Assert expression: + + (source_file + (expression_statement + (assert_expression + (false))) + (expression_statement + (assert_expression + (block + (expression_statement + (binary_expression + (number) + (number)))))) + (let_declaration + (let_binding + (value_name) + (value_identifier) + (function + (formal_parameters) + (assert_expression + (false)))))) + + + 34. Try-catch: + + (source_file + (expression_statement + (try_expression + (block + (expression_statement + (call_expression + (value_name) + (value_identifier) + (arguments)))) + (switch_match + (constructor_pattern + (constructor_path + (constructor_name))) + (variant_pattern + (variant_identifier)) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (constructor_pattern + (constructor_path + (constructor_name)) + (parenthesized_pattern + (variant_pattern + (variant_identifier) + (formal_parameters + (record_pattern + (value_path + (value_name)) + (value_path + (value_name))))) + (value_identifier) + (value_identifier)))) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (constructor_pattern + (constructor_path + (module_path + (module_path + (module_name)) + (module_name)) + (constructor_name)) + (parenthesized_pattern + (value_name))) + (variant_pattern + (nested_variant_identifier + (module_identifier_path + (module_identifier) + (module_identifier)) + (variant_identifier)) + (formal_parameters + (value_identifier))) + (sequence_expression + (expression_statement + (number)))))) + (expression_statement + (try_expression + (switch_expression + (call_expression + (value_name) + (value_identifier) + (arguments)) + (switch_match + (number) + (sequence_expression + (expression_statement + (string + (string_fragment))))) + (switch_match + (number) + (sequence_expression + (expression_statement + (string + (string_fragment))))) + (switch_match + (value_name) + (value_identifier) + (sequence_expression + (expression_statement + (string + (string_fragment)))))) + (switch_match + (constructor_pattern + (constructor_path + (module_path + (module_path + (module_name)) + (module_name)) + (constructor_name)) + (parenthesized_pattern + (value_name))) + (variant_pattern + (nested_variant_identifier + (module_identifier_path + (module_identifier) + (module_identifier)) + (variant_identifier)) + (formal_parameters + (value_identifier))) + (sequence_expression + (expression_statement + (string + (string_fragment))))))) + (expression_statement + (try_expression + (for_expression + (value_path + (value_name)) + (value_identifier) + (number) + (number) + (block + (expression_statement + (call_expression + (value_name) + (value_identifier) + (arguments))))) + (switch_match + (constructor_pattern + (constructor_path + (constructor_name))) + (variant_pattern + (variant_identifier)) + (sequence_expression + (expression_statement + (false))))))) + + + 35. Mutation expressions: + + (source_file + (expression_statement + (mutation_expression + (subscript_expression + (value_name) + (value_identifier) + (string + (string_fragment))) + (value_name))) + (value_identifier))) + (expression_statement + (mutation_expression + (member_expression + (value_name) + (value_path + (value_name))) + (value_name))) + (value_identifier) + (property_identifier)) + (value_identifier))) + (expression_statement + (mutation_expression + (member_expression + (value_name) + (value_path + (value_name))) + (value_name)))) + (value_identifier) + (property_identifier)) + (value_identifier)))) + + + 36. For loop: + + (source_file + (expression_statement + (for_expression + (value_path + (value_name)) + (value_identifier) + (number) + (number) + (block + (expression_statement + (call_expression + (value_path + (module_path + (module_name)) + (value_name)) + (value_identifier_path + (module_identifier) + (value_identifier)) + (arguments + (value_name))))))) + (value_identifier))))))) + (expression_statement + (for_expression + (value_path + (value_name)) + (value_identifier) + (number) + (number) + (block + (expression_statement + (call_expression + (value_path + (module_path + (module_name)) + (value_name)) + (value_identifier_path + (module_identifier) + (value_identifier)) + (arguments + (value_name)))))))) + (value_identifier)))))))) + + + 37. While loop: + + (source_file + (expression_statement + (while_expression + (true) + (block + (expression_statement + (call_expression + (value_path + (module_path + (module_name)) + (value_name)) + (value_identifier_path + (module_identifier) + (value_identifier)) + (arguments + (string + (string_fragment))))))))) + + + 38. Await expression: + + (source_file + (expression_statement + (await_expression + (value_name))) + (value_identifier))) + (expression_statement + (await_expression + (call_expression + (value_name) + (value_identifier) + (arguments)))) + (expression_statement + (binary_expression + (await_expression + (pipe_expression + (value_name) + (value_name))) + (value_identifier) + (value_identifier))) + (number)))) + + + 39. As aliasing: + + (source_file + (let_declaration + (let_binding + pattern: (value_name) + pattern: (value_identifier) + body: (function + parameters: (formal_parameters + (parameter + (alias_pattern + (record_pattern + (value_path + (value_name)) + (value_path + (value_name))) + (value_name)) + (record_pattern + (value_identifier) + (value_identifier)) + (as_aliasing + (value_identifier)) + (type_annotation + (type_constructor_path + (module_path + (module_name)) + (type_constructor))))) + (type_identifier_path + (module_identifier) + (type_identifier))))) + body: (block))))) + + + 40. Lazy Expression: + + (source_file + (expression_statement + (lazy_expression + (block + (expression_statement + (number))))) + (expression_statement + (lazy_expression + (call_expression + (value_name) + (value_identifier) + (arguments))))) + + + 41. Open: + + (source_file + (open_statement + (module_path + (module_name))) + (module_identifier)) + (open_statement + (module_path + (module_path + (module_name)) + (module_name)))) + (module_identifier_path + (module_identifier) + (module_identifier)))) + + + 42. Include: + + (source_file + (include_statement + (module_path + (module_name))) + (module_identifier)) + (include_statement + (module_path + (module_path + (module_name)) + (module_name))) + (module_identifier_path + (module_identifier) + (module_identifier))) + (include_statement + (functor_use + (module_path + (module_path + (module_name)) + (module_name)) + (module_identifier_path + (module_identifier) + (module_identifier)) + (arguments + (module_path + (module_name))))) + (module_identifier)))) + (include_statement + (functor_use + (module_path + (module_path + (module_name)) + (module_name)) + (module_identifier_path + (module_identifier) + (module_identifier)) + (arguments + (block + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)))) + (type_identifier))) + (let_declaration + (let_binding + (value_name) + (value_identifier) + (type_annotation + (type_constructor_path + (type_constructor))))))))) + (type_identifier)))))))) + (include_statement + (module_type_of + (module_path + (module_path + (module_name)) + (module_name)))) + (module_identifier_path + (module_identifier) + (module_identifier)))) + (include_statement + (parenthesized_module_type + (parenthesized_module_expression + (module_type_of + (module_path + (module_path + (module_name)) + (module_name))))) + (module_identifier_path + (module_identifier) + (module_identifier))))) + (include_statement + (typed_module_expression + (module_path + (module_name)) + (parenthesized_module_expression + (module_identifier) + (module_type_annotation + (module_type_constraint + (module_type_of + (module_path + (module_name))) + (module_identifier)) + (constrain_module + (module_path + (module_path + (module_name)) + (module_name)) + (module_path + (module_path + (module_name)) + (module_name))) + (module_identifier_path + (module_identifier) + (module_identifier)) + (module_identifier_path + (module_identifier) + (module_identifier))) + (constrain_module + (module_path + (module_name)) + (module_path + (module_path + (module_name)) + (module_name))))))) + (module_identifier) + (module_identifier_path + (module_identifier) + (module_identifier))))))) + (include_statement + (module_type_of + (block + (include_statement + (module_path + (module_name)))))) + (module_identifier))))) + (include_statement + (parenthesized_module_expression + (block + (let_declaration + (let_binding + (value_name) + (call_expression + (value_path + (module_path + (module_name)) + (value_name)) + (arguments + (string + (string_fragment)))))))))) + (block + (let_declaration + (let_binding + (value_identifier) + (call_expression + (value_identifier_path + (module_identifier) + (value_identifier)) + (arguments + (string + (string_fragment))))))))) + + + 43. Simple definition: + + (source_file + (module_declaration + (module_binding + (module_name) + (module_identifier) + (block + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)))))))) + (type_identifier))))))) + + + 44. Signature and definition: + + (source_file + (module_declaration + (module_binding + name: (module_name) + name: (module_identifier) + signature: (block + (let_declaration + (let_binding + pattern: (value_name) + pattern: (value_identifier) + (type_annotation + (type_constructor_path + (type_constructor))))) + (type_identifier)))) + (let_declaration + (let_binding + pattern: (value_name) + pattern: (value_identifier) + (type_annotation + (type_constructor_path + (type_constructor))))) + (type_identifier)))) + (let_declaration + (let_binding + pattern: (value_name) + pattern: (value_identifier) + (type_annotation + (type_constructor_path + (type_constructor)))))))) + (type_identifier))))))) + (module_declaration + (module_binding + name: (module_name) + signature: (module_type_path + (module_path + (module_name)) + (module_type_name + (module_name))) + name: (module_identifier) + signature: (module_identifier_path + (module_identifier) + (module_identifier)) + definition: (block + (type_declaration + (type_binding + name: (type_constructor_path + (type_constructor))))))) + name: (type_identifier)))))) + (module_declaration + (module_binding + name: (module_name) + name: (module_identifier) + signature: (block + (type_declaration + (type_binding + name: (type_constructor_path + (type_constructor))))) + name: (type_identifier)))) + definition: (block + (type_declaration + (type_binding + name: (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor)))))))) + name: (type_identifier) + (type_identifier))))))) + + + 45. Module types: + + (source_file + (module_declaration + (module_binding + (module_name) + (module_identifier) + (block + (type_declaration + (type_binding + (type_constructor_path + (type_constructor))))))) + (type_identifier)))))) + (module_declaration + (module_binding + (module_name) + (module_identifier) + (module_type_of + (module_path + (module_path + (module_name)) + (module_name))))) + (module_identifier_path + (module_identifier) + (module_identifier))))) + (module_declaration + (module_binding + (type_constructor)))) + (type_identifier)))) + + + 46. First Class module: + + (source_file + (expression_statement + (package_expression + (module_path + (module_name)))) + (module_pack + (module_identifier))) + (expression_statement + (package_expression + (module_path + (module_name)) + (module_pack + (module_identifier) + (module_type_annotation + (module_type_path + (module_type_name + (module_name)))))) + (module_identifier)))) + (expression_statement + (package_expression + (module_pack + (block + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)))) + (type_identifier))) + (let_declaration + (let_binding + (value_name) + (value_identifier) + (string + (string_fragment))))) + (module_type_annotation + (module_type_path + (module_type_name + (module_name)))))) + (module_identifier)))) + (expression_statement + (package_expression + (module_pack + (functor_use + (module_path + (module_name)) + (module_identifier) + (arguments + (module_unpack + (value_name)))))) + (value_identifier)))))) + (module_declaration + (module_binding + (module_name) + (module_identifier) + (module_unpack + (value_name) + (value_identifier) + (module_type_annotation + (module_type_path + (module_type_name + (module_name))))))) + (module_identifier))))) + (module_declaration + (module_binding + (module_name) + (module_identifier) + (module_unpack + (value_name) + (value_identifier) + (module_type_annotation + (module_type_constraint + (module_type_path + (module_type_name + (module_name))) + (module_identifier) + (constrain_type + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor)))))))) + (type_identifier) + (type_identifier))))))) + (module_declaration + (module_binding + (module_name) + (module_identifier) + (module_unpack + (call_expression + (value_path + (module_path + (module_name)) + (value_name)) + (value_identifier_path + (module_identifier) + (value_identifier)) + (arguments + (value_name)))))) + (value_identifier)))))) + (module_declaration + (module_binding + (module_name) + (module_identifier) + (module_unpack + (extension_expression + (extension_identifier) + (expression_statement + (value_name))))))) + (value_identifier))))))) + + + 47. Functor definition: + + (source_file + (module_declaration + (module_binding + name: (module_name) + name: (module_identifier) + definition: (functor + parameters: (functor_parameters + (functor_parameter + (module_path + (module_name)) + (module_identifier) + (module_type_annotation + (block + (type_declaration + (type_binding + name: (type_constructor_path + (type_constructor))))))) + name: (type_identifier)))))) + (functor_parameter + (module_path + (module_name)) + (module_identifier) + (module_type_annotation + (block + (type_declaration + (type_binding + name: (type_constructor_path + (type_constructor)))))))) + name: (type_identifier))))))) + return_module_type: (module_type_annotation + (block + (type_declaration + (type_binding + name: (type_constructor_path + (type_constructor)))) + name: (type_identifier))) + (type_declaration + (type_binding + name: (type_constructor_path + (type_constructor)))))) + name: (type_identifier))))) + body: (block + (type_declaration + (type_binding + name: (type_constructor_path + (type_constructor)) + (type_constructor_path + (module_path + (module_name)) + (type_constructor)))) + name: (type_identifier) + (type_identifier_path + (module_identifier) + (type_identifier)))) + (type_declaration + (type_binding + name: (type_constructor_path + (type_constructor)) + (type_constructor_path + (module_path + (module_name)) + (type_constructor))))))))) + name: (type_identifier) + (type_identifier_path + (module_identifier) + (type_identifier))))))))) + + + 48. Functor signature: + + (source_file + (module_declaration + (module_binding + (module_name) + (module_identifier) + (functor + (functor_parameters + (functor_parameter + (module_path + (module_name)) + (module_identifier) + (module_type_annotation + (module_type_path + (module_type_name + (module_name)))))) + (module_identifier)))) + (block + (let_declaration + (let_binding + (value_name) + (value_identifier) + (type_annotation + (function_type + (function_type_parameters + (type_constructor_path + (type_constructor))) + (type_constructor_path + (type_constructor))))))))))) + (type_identifier)) + (type_identifier)))))))))) + + + 49. Functor use: + + (source_file + (module_declaration + (module_binding + (module_name) + (module_identifier) + (functor_use + (module_path + (module_name)) + (module_identifier) + (arguments + (module_path + (module_name)) + (module_path + (module_path + (module_name)) + (module_name))))))) + (module_identifier) + (module_identifier_path + (module_identifier) + (module_identifier))))))) + + + 50. Alias: + + (source_file + (module_declaration + (module_binding + (module_name) + (module_path + (module_path + (module_path + (module_name)) + (module_name)) + (module_name)))) + (module_identifier) + (module_identifier_path + (module_identifier_path + (module_identifier) + (module_identifier)) + (module_identifier)))) + (module_declaration + (module_binding + (module_name) + (module_path + (module_name))))) + (module_identifier) + (module_identifier)))) + + + 51. Recursive: + + (source_file + (module_declaration + (module_binding + (module_name) + (module_identifier) + (block + (include_statement + (module_path + (module_name)))) + (module_path + (module_name)))) + (module_identifier))) + (module_identifier))) + (module_declaration + (module_binding + (module_name) + (module_type_path + (module_type_name + (module_name))) + (module_identifier) + (module_identifier) + (block + (let_declaration + (let_binding + (value_name) + (value_path + (module_path + (module_name)) + (value_name)))))) + (value_identifier) + (value_identifier_path + (module_identifier) + (value_identifier)))))) + (module_binding + (module_name) + (module_type_path + (module_type_name + (module_name))) + (module_identifier) + (module_identifier) + (block + (let_declaration + (let_binding + (value_name) + (value_identifier) + (number))))))) + + + 52. Definition through extension: + + (source_file + (module_declaration + (module_binding + (module_name) + (module_identifier) + (extension_expression + (extension_identifier) + (expression_statement + (unit)))))) + + + 53. Externals: + + (source_file + (external_declaration + (value_name) + (value_identifier) + (type_annotation + (function_type + (function_type_parameters + (type_constructor_path + (type_constructor))) + (type_constructor_path + (type_constructor)))) + (type_identifier)) + (type_identifier))) + (string + (string_fragment))) + (decorator + (decorator_identifier)) + (external_declaration + (value_name) + (value_identifier) + (type_annotation + (type_constructor_path + (type_constructor))) + (type_identifier)) + (string + (string_fragment))) + (decorator + (decorator_identifier)) + (external_declaration + (value_name) + (value_identifier) + (type_annotation + (type_constructor_path + (type_constructor))) + (type_identifier)) + (string + (string_fragment))) + (decorator + (decorator_identifier) + (decorator_arguments + (string + (string_fragment)))) + (decorator + (decorator_identifier)) + (external_declaration + (value_name) + (value_identifier) + (type_annotation + (type_constructor_path + (type_constructor))) + (type_identifier)) + (string + (string_fragment))) + (external_declaration + (value_name) + (value_identifier) + (type_annotation + (function_type + (function_type_parameters + (parameter + (object_type)) + (parameter + (uncurry) + (unit_type))) + (object_type))) + (string + (string_fragment))) + (decorator + (decorator_identifier)) + (external_declaration + (value_name) + (value_identifier) + (type_annotation + (function_type + (function_type_parameters + (parameter + (type_constructor_path + (module_path + (module_name)) + (type_constructor))) + (type_identifier_path + (module_identifier) + (type_identifier))) + (decorator + (decorator_identifier) + (decorator_arguments + (template_string + (template_string_content)))) + (parameter + (type_constructor_path + (type_constructor))) + (type_identifier)) + (decorator + (decorator_identifier) + (decorator_arguments + (string))) + (parameter + (type_constructor_path + (type_constructor))) + (type_identifier)) + (parameter + (labeled_parameter + (value_name) + (value_identifier) + (type_annotation + (type_constructor_path + (type_constructor)))))) + (type_identifier))))) + (unit_type))) + (string + (string_fragment))) + (decorator + (decorator_identifier)) + (external_declaration + (value_name) + (value_identifier) + (type_annotation + (function_type + (function_type_parameters + (parameter + (type_constructor_path + (type_constructor))) + (type_identifier)) + (parameter + (labeled_parameter + (value_name) + (value_identifier) + (type_annotation + (decorator + (decorator_identifier)) + (polyvar_type + (polyvar_declaration + (polyvar_identifier) + (polyvar_parameters + (type_constructor_path + (module_path + (module_name)) + (type_constructor)))) + (type_identifier_path + (module_identifier) + (type_identifier)))) + (polyvar_declaration + (polyvar_identifier) + (polyvar_parameters + (type_constructor_path + (module_path + (module_name)) + (type_constructor))))))))) + (type_identifier_path + (module_identifier) + (type_identifier))))))))) + (unit_type))) + (string + (string_fragment)))) + + + 54. Exception declaration: + + (source_file + (exception_declaration + (constructor_name) + (variant_identifier) + (variant_parameters + (type_constructor_path + (type_constructor)))) + (type_identifier))) + (exception_declaration + (constructor_name) + (constructor_path + (constructor_name))) + (variant_identifier) + (variant_identifier)) + (exception_declaration + (constructor_name) + (constructor_path + (module_path + (module_name)) + (constructor_name)))) + (variant_identifier) + (nested_variant_identifier + (module_identifier) + (variant_identifier)))) + + + 55. Module Constraints: + + (source_file + (expression_statement + (package_expression + (module_path + (module_name)) + (module_pack + (module_identifier) + (module_type_annotation + (module_type_constraint + (module_type_path + (module_type_name + (module_name))) + (module_identifier) + (constrain_type + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor))) + (type_identifier) + (type_identifier)) + (constrain_type + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor))))))) + (type_identifier) + (type_identifier)))))) + (module_declaration + (module_binding + name: (module_name) + name: (module_identifier) + definition: (functor + parameters: (functor_parameters) + return_module_type: (module_type_annotation + (parenthesized_module_type + (parenthesized_module_expression + (module_type_constraint + (module_type_path + (module_type_name + (module_name))) + (module_identifier) + (constrain_type + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor)))))) + (type_identifier) + (type_identifier))))) + body: (block)))) + (module_declaration + (module_binding + name: (module_name) + name: (module_identifier) + definition: (functor + parameters: (functor_parameters + (functor_parameter + (module_path + (module_name)) + (module_identifier) + (module_type_annotation + (module_type_path + (module_type_name + (module_name))))) + (module_identifier))) + (functor_parameter + (module_path + (module_name)) + (module_identifier) + (module_type_annotation + (module_type_path + (module_type_name + (module_name)))))) + (module_identifier)))) + return_module_type: (module_type_annotation + (parenthesized_module_type + (parenthesized_module_expression + (module_type_constraint + (parenthesized_module_type + (parenthesized_module_expression + (module_type_constraint + (module_type_path + (module_type_name + (module_name))) + (module_identifier) + (constrain_type + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor))))) + (type_identifier) + (type_identifier)))) + (constrain_type + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor)))))) + (type_identifier) + (type_identifier))))) + body: (block))))) + + + 56. Template strings: + + (source_file + (expression_statement + (template_string)) + (expression_statement + (template_string + (template_string_content))) + (expression_statement + (template_string + (template_string_content + (escape_sequence)))) + (expression_statement + (template_string + (template_string_content))) + (expression_statement + (template_string + (template_string_content))) + (expression_statement + (template_string + (template_string_content))) + (expression_statement + (template_string + (template_string_content + (template_substitution + (binary_expression + (number) + (number))) + (template_substitution + (binary_expression + (number) + (number)))))) + (expression_statement + (template_string + (template_string_content + (escape_sequence) + (template_substitution + (call_expression + (value_name) + (value_identifier) + (arguments + (string + (string_fragment))))) + (escape_sequence) + (template_substitution + (value_name))))) + (value_identifier))))) + (expression_statement + (template_string + (template_string_content))) + (expression_statement + (template_string + (template_string_content + (escape_sequence)))) + (expression_statement + (template_string + (template_string_content)))) + + + 57. Polyvars: + + (source_file + (expression_statement + (polyvar + (polyvar_identifier))) + (expression_statement + (polyvar + (polyvar_identifier) + (call_arguments + (arguments + (number)))) + (expression_statement + (polyvar + (polyvar_identifier + (polyvar_string + (string_fragment))))) + (expression_statement + (polyvar + (polyvar_identifier + (polyvar_string + (string_fragment))))) + (expression_statement + (polyvar + (polyvar_identifier)))) + + + 58. Simple JSX elements: + + (source_file + (expression_statement + (jsx_self_closing_element + (jsx_identifier) + (jsx_attribute + (property_identifier) + (string + (string_fragment))) + (jsx_attribute + (property_identifier) + (jsx_expression + (expression_statement + (number)))))) + (expression_statement + (jsx_element + (jsx_opening_element + (jsx_identifier + (module_path + (module_name)) + (constructor_name))) + (value_path + (value_name)) + (nested_jsx_identifier + (jsx_identifier) + (jsx_identifier))) + (value_identifier) + (jsx_element + (jsx_opening_element + (jsx_identifier)) + (value_path + (value_name)) + (value_identifier) + (jsx_closing_element + (jsx_identifier))) + (value_path + (value_name)) + (value_identifier) + (jsx_closing_element + (jsx_identifier + (module_path + (module_name)) + (constructor_name))))) + (nested_jsx_identifier + (jsx_identifier) + (jsx_identifier))))) + (expression_statement + (jsx_element + (jsx_opening_element + (jsx_identifier + (module_path + (module_path + (module_path + (module_name)) + (module_name)) + (module_name)) + (constructor_name))) + (nested_jsx_identifier + (nested_jsx_identifier + (nested_jsx_identifier + (jsx_identifier) + (jsx_identifier)) + (jsx_identifier)) + (jsx_identifier))) + (jsx_closing_element + (jsx_identifier + (module_path + (module_path + (module_path + (module_name)) + (module_name)) + (module_name)) + (constructor_name))))) + (nested_jsx_identifier + (nested_jsx_identifier + (nested_jsx_identifier + (jsx_identifier) + (jsx_identifier)) + (jsx_identifier)) + (jsx_identifier))))) + (expression_statement + (jsx_element + (jsx_opening_element + (jsx_identifier)) + (value_path + (module_path + (module_name)) + (value_name)) + (value_identifier_path + (module_identifier) + (value_identifier)) + (jsx_closing_element + (jsx_identifier)))) + (expression_statement + (jsx_element + (jsx_opening_element + (jsx_identifier)) + (member_expression + (value_name) + (value_path + (value_name))) + (value_identifier) + (property_identifier)) + (jsx_closing_element + (jsx_identifier))))) + + + 59. Attribute values: + + (source_file + (expression_statement + (jsx_self_closing_element + (jsx_identifier + (constructor_name)) + (jsx_identifier) + (jsx_attribute + (property_identifier) + (number)) + (jsx_attribute + (property_identifier) + (polyvar + (polyvar_identifier))) + (jsx_attribute + (property_identifier) + (constructor_path + (constructor_name))) + (variant + (variant_identifier))) + (jsx_attribute + (property_identifier)) + (jsx_attribute + (property_identifier)) + (jsx_attribute + (property_identifier) + (jsx_expression + (expression_statement + (value_name)))))) + (value_identifier)))))) + (expression_statement + (jsx_self_closing_element + (jsx_identifier + (constructor_name)) + (jsx_identifier) + (jsx_attribute + (property_identifier) + (pipe_expression + (value_name) + (value_name))) + (value_identifier) + (value_identifier))) + (jsx_attribute + (property_identifier) + (true))))) + + + 60. Anonymous JSX element: + + (source_file + (expression_statement + (jsx_fragment)) + (expression_statement + (jsx_element + (jsx_opening_element + (jsx_identifier + (constructor_name))) + (jsx_identifier)) + (jsx_fragment) + (jsx_closing_element + (jsx_identifier + (constructor_name)))))) + (jsx_identifier))))) + + + 61. Block children: + + (source_file + (expression_statement + (jsx_element + (jsx_opening_element + (jsx_identifier)) + (block + (let_declaration + (let_binding + (value_name) + (value_identifier) + (string + (string_fragment)))) + (expression_statement + (jsx_element + (jsx_opening_element + (jsx_identifier) + (jsx_attribute + (property_identifier))) + (block + (expression_statement + (call_expression + (value_path + (module_path + (module_name)) + (value_name)) + (value_identifier_path + (module_identifier) + (value_identifier)) + (arguments + (string + (string_fragment)))))) + (jsx_closing_element + (jsx_identifier))))) + (jsx_closing_element + (jsx_identifier))))) + + + 62. Children spread: + + (source_file + (expression_statement + (jsx_element + (jsx_opening_element + (jsx_identifier + (constructor_name))) + (jsx_identifier)) + (spread_element + (value_name)) + (value_identifier)) + (jsx_closing_element + (jsx_identifier + (constructor_name)))))) + (jsx_identifier))))) + + + 63. Attribute Block: + + (source_file + (expression_statement + (jsx_element + (jsx_opening_element + (jsx_identifier + (constructor_name)) + (jsx_identifier) + (jsx_attribute + (property_identifier) + (jsx_expression + (expression_statement + (call_expression + (value_path + (module_path + (module_name)) + (value_name)) + (value_identifier_path + (module_identifier) + (value_identifier)) + (arguments + (string + (string_fragment))))))) + (jsx_attribute + (property_identifier) + (jsx_expression + (open_statement + (module_path + (module_name))) + (module_identifier)) + (expression_statement + (record + (record_field + (property_identifier + (value_name)) + (value_name)) + (property_identifier) + (value_identifier)) + (record_field + (property_identifier + (value_name)) + (property_identifier) + (false))))))) + (jsx_self_closing_element + (jsx_identifier + (constructor_name))) + (jsx_identifier)) + (jsx_closing_element + (jsx_identifier + (constructor_name)))))) + (jsx_identifier))))) + + + 64. Spread props: + + (source_file + (expression_statement + (jsx_self_closing_element + (jsx_identifier) + (jsx_expression + (spread_element + (value_name))))) + (value_identifier))))) + (expression_statement + (jsx_element + (jsx_opening_element + (jsx_identifier + (constructor_name)) + (jsx_identifier) + (jsx_expression + (spread_element + (value_name)))) + (value_identifier)))) + (jsx_closing_element + (jsx_identifier + (constructor_name)))))) + (jsx_identifier))))) + + + 65. Decorator with type: + + (source_file + (decorator + (decorator_identifier) + (decorator_arguments + (type_annotation + (type_constructor_path + (type_constructor)))))) + (type_identifier))))) + + + 66. Plain: + + (source_file + (let_declaration + (let_binding + (value_name) + (value_identifier) + (number))) + (let_declaration + (let_binding + (value_name) + (value_name))) + (value_identifier) + (value_identifier))) + (let_declaration + (let_binding + (value_name) + (value_identifier) + (polyvar + (polyvar_identifier)))) + (let_declaration + (let_binding + (value_name) + (value_identifier) + (number))) + (let_declaration + (let_binding + (value_name) + (value_name))) + (value_identifier) + (value_identifier))) + (let_declaration + (let_binding + (value_name) + (value_identifier) + (number))) + (let_declaration + (let_binding + (value_name) + (value_identifier) + (number))) + (let_declaration + (let_binding + (value_name) + (value_identifier) + (number)))) + + + 67. Tuple destructuring: + + (source_file + (let_declaration + (let_binding + (tuple_pattern + (tuple_item_pattern + (value_name)) + (value_identifier)) + (tuple_item_pattern + (value_name)) + (value_identifier)) + (tuple_item_pattern + (tuple_pattern + (tuple_item_pattern + (value_name)) + (value_identifier)) + (tuple_item_pattern + (value_name))))) + (value_name))) + (value_identifier))))) + (value_identifier))) + (let_declaration + (let_binding + (tuple_pattern + (tuple_item_pattern + (value_name) + (value_identifier) + (type_annotation + (type_constructor_path + (type_constructor)))) + (type_identifier))) + (tuple_item_pattern + (value_name))) + (value_name))) + (value_identifier))) + (value_identifier))) + (let_declaration + (let_binding + (tuple_pattern + (tuple_item_pattern + (value_name)) + (value_identifier)) + (tuple_item_pattern + (value_name)) + (value_identifier)) + (tuple_item_pattern + (unit))) + (value_name)))) + (value_identifier)))) + + + 68. Record destructuring: + + (source_file + (let_declaration + (let_binding + (record_pattern + (value_path + (value_name)) + (value_path + (value_name))) + (value_name))) + (value_identifier) + (value_identifier)) + (value_identifier))) + (let_declaration + (let_binding + (record_pattern + (value_path + (value_name)) + (value_path + (value_name)) + (value_name)) + (value_name))) + (value_identifier) + (value_identifier) + (value_identifier)) + (value_identifier))) + (let_declaration + (let_binding + (record_pattern + (value_path + (module_path + (module_path + (module_name)) + (module_name)) + (value_name)) + (value_name)) + (value_name)))) + (value_identifier_path + (module_identifier_path + (module_identifier) + (module_identifier)) + (value_identifier)) + (value_identifier)) + (value_identifier)))) + + + 69. Array destructuring: + + (source_file + (let_declaration + (let_binding + (array_pattern + (value_name) + (value_name)) + (value_name))) + (value_identifier) + (value_identifier)) + (value_identifier))) + (let_declaration + (let_binding + (array_pattern + (value_name) + (value_name) + (value_name)) + (value_name))) + (value_identifier) + (value_identifier) + (value_identifier)) + (value_identifier))) + (let_declaration + (let_binding + (array_pattern + (decorator + (decorator_identifier)) + (value_name) + (value_name)) + (value_name)))) + (value_identifier) + (value_identifier)) + (value_identifier)))) + + + 70. List destructuring: + + (source_file + (let_declaration + (let_binding + (list_pattern + (value_name) + (value_identifier) + (spread_pattern + (value_name))) + (value_name))) + (value_identifier))) + (value_identifier))) + (let_declaration + (let_binding + (list_pattern + (decorator + (decorator_identifier)) + (value_name) + (value_identifier) + (spread_pattern + (value_name))) + (value_name)))) + (value_identifier))) + (value_identifier)))) + + + 71. Block: + + (source_file + (let_declaration + (let_binding + (value_name) + (value_identifier) + (block + (expression_statement + (number)) + (expression_statement + (number)))))) + + + 72. Annotated: + + (source_file + (let_declaration + (let_binding + (value_name) + (value_identifier) + (type_annotation + (type_constructor_path + (type_constructor))) + (type_identifier)) + (number))) + (let_declaration + (let_binding + (value_name) + (value_identifier) + (type_annotation + (function_type + (function_type_parameters + (type_constructor_path + (type_constructor))) + (type_identifier)) + (unit_type))) + (value_name)))) + (value_identifier)))) + + + 73. Recursive: + + (source_file + (let_declaration + (let_binding + (value_name) + (value_identifier) + (function + (value_name) + (value_identifier) + (call_expression + (value_name) + (value_identifier) + (arguments + (binary_expression + (value_name) + (value_identifier) + (number)))))))) + + + 74. Unit: + + (source_file + (let_declaration + (let_binding + (unit) + (value_name)))) + (value_identifier)))) + + + 75. And (Primitives): + + (source_file + (let_declaration + (let_binding + (value_name) + (value_identifier) + (number)) + (let_binding + (value_name) + (value_identifier) + (number)))) + + + 76. And (Functions): + + (source_file + (let_declaration + (let_binding + (value_name) + (value_identifier) + (function + (value_name) + (value_identifier) + (binary_expression + (value_name) + (value_identifier) + (call_expression + (value_name) + (value_identifier) + (arguments + (value_name)))))) + (value_identifier)))))) + (let_binding + (value_name) + (value_identifier) + (function + (value_name) + (value_identifier) + (binary_expression + (value_name) + (value_identifier) + (number)))))) + + + 77. And (decorated): + + (source_file + (decorator + (decorator_identifier)) + (let_declaration + (let_binding + (value_name) + (value_name)) + (value_identifier) + (value_identifier)) + (decorator + (decorator_identifier)) + (decorator + (decorator_identifier)) + (let_binding + (value_name) + (value_name)) + (value_identifier) + (value_identifier)) + (decorator + (decorator_identifier)) + (let_binding + (value_name) + (value_identifier) + (number)))) + + + 78. Labled function with uncurried: + + (source_file + (let_declaration + (let_binding + (value_name) + (value_identifier) + (function + (formal_parameters + (parameter + (uncurry) + (labeled_parameter + (value_name)))) + (value_identifier)))) + (unit))))) + + + 79. Destructuring module: + + (source_file + (let_declaration + (let_binding + (record_pattern + (value_path + (value_name)) + (value_path + (value_name))) + (package_expression + (module_path + (module_name))))) + (value_identifier) + (value_identifier)) + (module_pack + (module_identifier)))) + (let_declaration + (let_binding + (record_pattern + (value_path + (value_name)) + (value_path + (value_name))) + (package_expression + (module_path + (module_path + (module_name)) + (module_name)))))) + (value_identifier) + (value_identifier)) + (module_pack + (module_identifier_path + (module_identifier) + (module_identifier)))))) + + + 80. Packing module: + + (source_file + (let_declaration + (let_binding + (value_name) + (package_expression + (module_path + (module_name)))))) + (value_identifier) + (module_pack + (module_identifier))))) + + + 81. Unpacking module: + + (source_file + (let_declaration + (let_binding + (package_pattern + (module_name)) + (value_name)))) + (module_pack + (module_identifier)) + (value_identifier)))) + + + 82. Lazy Values: + + (source_file + (let_declaration + (let_binding + (lazy_pattern + (value_name)) + (value_identifier)) + (lazy_expression + (parenthesized_expression + (number)))))) + + + 83. Opaque: + + (source_file + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)))) + (type_identifier))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)))) + (type_identifier))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)))) + (type_identifier))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor))) + (type_identifier)) + (type_binding + (type_constructor_path + (type_constructor))))) + (type_identifier)))) + + + 84. Export: + + (source_file + (type_declaration + (type_binding + (type_constructor_path + (type_constructor))))) + (type_identifier)))) + + + 85. Alias: + + (source_file + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_constructor_path + (module_path + (module_path + (module_name)) + (module_name)) + (type_constructor))))) + (type_identifier) + (type_identifier_path + (module_identifier_path + (module_identifier) + (module_identifier)) + (type_identifier))))) + + + 86. Private: + + (source_file + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor))))) + (type_identifier) + (type_identifier)))) + + + 87. Tuple type: + + (source_file + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (tuple_type + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor)))))) + (type_identifier) + (type_identifier) + (type_identifier))))) + + + 88. Record type: + + (source_file + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (record_type + (record_type_field + (property_identifier) + (type_annotation + (type_constructor_path + (type_constructor)))) + (type_identifier))) + (record_type_field + (property_identifier) + (type_annotation + (type_constructor_path + (type_constructor)))) + (type_identifier))) + (decorator + (decorator_identifier) + (decorator_arguments + (string + (string_fragment)))) + (record_type_field + (property_identifier) + (type_annotation + (type_constructor_path + (type_constructor)))) + (type_identifier))) + (record_type_field + (property_identifier) + (type_annotation + (type_constructor_path + (type_constructor)))) + (type_identifier))) + (record_type_field + (property_identifier) + (type_annotation + (type_constructor_path + (type_constructor))))))) + (type_identifier)))))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_constructor_path + (module_path + (module_name)) + (type_constructor)) + (type_identifier) + (type_identifier_path + (module_identifier) + (type_identifier)) + (record_type + (record_type_field + (property_identifier) + (type_annotation + (type_constructor_path + (type_constructor))))))) + (type_identifier)))))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (record_type)))) + + + 89. Extensible Variant: + + (source_file + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)))) + (type_identifier))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (variant_type + (variant_declaration + (constructor_name))))) + (variant_identifier))))) + (type_declaration + (type_binding + (type_constructor_path + (module_path + (module_name)) + (type_constructor)) + (type_identifier_path + (module_identifier) + (type_identifier)) + (variant_type + (variant_declaration + (constructor_name)) + (variant_identifier)) + (variant_declaration + (constructor_name)))))) + (variant_identifier)))))) + + + 90. Variant: + + (source_file + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (variant_type + (variant_declaration + (constructor_name)) + (variant_identifier)) + (variant_declaration + (constructor_name)) + (variant_identifier)) + (decorator + (decorator_identifier) + (decorator_arguments + (string + (string_fragment)))) + (variant_declaration + (constructor_name)) + (variant_identifier)) + (variant_declaration + (constructor_name) + (variant_identifier) + (variant_parameters + (type_constructor_path + (type_constructor)))) + (type_identifier))) + (variant_declaration + (constructor_name) + (variant_identifier) + (variant_parameters + (record_type + (record_type_field + (property_identifier) + (type_annotation + (type_constructor_path + (type_constructor)))) + (type_identifier))) + (record_type_field + (property_identifier) + (type_annotation + (type_constructor_path + (type_constructor))))))) + (type_identifier)))))) + (variant_declaration + (constructor_name) + (variant_identifier) + (variant_parameters + (package_type + (module_type_path + (module_type_name + (module_name)))))) + (module_pack + (module_identifier)))) + (variant_declaration + (constructor_name) + (variant_identifier) + (variant_parameters + (package_type + (module_type_path + (module_path + (module_name)) + (module_type_name))))))))) + (module_pack + (type_identifier_path + (module_identifier) + (type_identifier))))))))) + + + 91. Annotated variant: + + (source_file + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (variant_type + (variant_declaration + (constructor_name) + (variant_identifier) + (variant_parameters + (type_constructor_path + (type_constructor))) + (type_identifier)) + (type_annotation + (type_constructor_path + (type_constructor)))))))) + (type_identifier))))))) + + + 92. Polyvar: + + (source_file + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (polyvar_type + (polyvar_declaration + (polyvar_identifier)) + (polyvar_declaration + (polyvar_identifier)) + (polyvar_declaration + (polyvar_identifier) + (polyvar_parameters + (type_constructor_path + (type_constructor)))) + (type_identifier))) + (polyvar_declaration + (polyvar_identifier + (polyvar_string + (string_fragment)))) + (polyvar_declaration + (polyvar_identifier + (polyvar_string + (string_fragment)))) + (polyvar_declaration + (polyvar_identifier)) + (decorator + (decorator_identifier) + (decorator_arguments + (string + (string_fragment)))) + (polyvar_declaration + (polyvar_identifier)) + (polyvar_declaration + (type_constructor_path + (type_constructor)))))) + (type_identifier))))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (type_parameters + (type_constructor)) + (type_identifier)) + (decorator + (decorator_identifier)) + (aliased_type + (as_aliasing_type + (polyvar_type + (polyvar_declaration + (polyvar_identifier)) + (polyvar_declaration + (polyvar_identifier)) + (polyvar_declaration + (polyvar_identifier))) + (type_constructor)))) + (type_identifier)))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (type_parameters + (type_constructor)) + (type_identifier)) + (polyvar_type + (polyvar_declaration + (generic_type + (type_constructor_path + (module_path + (module_name)) + (type_constructor)) + (type_identifier_path + (module_identifier) + (type_identifier)) + (type_arguments + (type_constructor_path + (type_constructor))))))))) + (type_identifier)))))))) + + + 93. Function: + + (source_file + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (function_type + (function_type_parameters + (type_constructor_path + (type_constructor))) + (type_constructor_path + (type_constructor))))) + (type_identifier)) + (type_identifier)))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (function_type + (function_type_parameters + (parameter + (type_constructor_path + (type_constructor)))) + (type_constructor_path + (type_constructor))))) + (type_identifier))) + (type_identifier)))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (function_type + (function_type_parameters + (parameter + (type_constructor_path + (type_constructor))) + (type_identifier)) + (parameter + (type_constructor_path + (type_constructor)))) + (type_constructor_path + (type_constructor))))) + (type_identifier))) + (type_identifier)))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (function_type + (function_type_parameters + (parameter + (labeled_parameter + (value_name) + (value_identifier) + (type_annotation + (type_constructor_path + (type_constructor))))) + (type_identifier)))) + (parameter + (labeled_parameter + (value_name) + (value_identifier) + (type_annotation + (type_constructor_path + (type_constructor))))) + (type_identifier)))) + (parameter + (unit_type))) + (type_constructor_path + (type_constructor)))))) + (type_identifier))))) + + + 94. Object: + + (source_file + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (object_type))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (object_type))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (object_type + (field + (property_identifier + (string_fragment)) + (type_constructor_path + (type_constructor)))))) + (type_identifier))))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (object_type + (field + (property_identifier + (string_fragment)) + (type_constructor_path + (type_constructor))) + (type_identifier)) + (field + (property_identifier + (string_fragment)) + (type_constructor_path + (type_constructor))) + (type_identifier)) + (field + (type_constructor_path + (type_constructor)))))) + (type_identifier))))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (type_parameters + (type_constructor)) + (aliased_type + (type_identifier)) + (as_aliasing_type + (object_type + (field + (property_identifier + (string_fragment)) + (type_constructor_path + (type_constructor)))) + (type_constructor))))) + (type_identifier))) + (type_identifier))))) + + + 95. Generic: + + (source_file + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (type_parameters + (type_constructor) + (type_constructor)) + (type_identifier) + (type_identifier)) + (tuple_type + (generic_type + (type_constructor_path + (type_constructor)) + (type_identifier) + (type_arguments + (type_constructor_path + (type_constructor)))) + (type_identifier))) + (generic_type + (type_constructor_path + (type_constructor)) + (type_identifier) + (type_arguments + (type_constructor_path + (type_constructor))))))) + (type_identifier)))))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (generic_type + (type_constructor_path + (type_constructor)) + (type_identifier) + (type_arguments + (unit) + (type_constructor_path + (type_constructor)))))) + (type_identifier))))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (type_parameters + (type_constructor)) + (aliased_type + (type_identifier)) + (as_aliasing_type + (generic_type + (type_constructor_path + (type_constructor)) + (type_identifier) + (type_arguments + (type_constructor_path + (type_constructor)))) + (type_constructor))))) + (type_identifier))) + (type_identifier))))) + + + 96. Recursive: + + (source_file + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor))))) + (type_identifier) + (type_identifier)))) + + + 97. Decorated: + + (source_file + (decorator + (decorator_identifier) + (decorator_arguments + (value_name))) + (value_identifier))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (record_type + (record_type_field + (property_identifier) + (type_annotation + (type_constructor_path + (type_constructor))))))) + (type_identifier)))))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (object_type + (decorator + (decorator_identifier)) + (field + (property_identifier + (string_fragment)) + (function_type + (function_type_parameters + (parameter + (type_constructor_path + (type_constructor))) + (type_identifier)) + (parameter + (type_constructor_path + (type_constructor)))) + (type_identifier))) + (unit_type))))))) + + + 98. Mutually Recursive: + + (source_file + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (record_type + (record_type_field + (property_identifier) + (type_annotation + (type_constructor_path + (type_constructor)))))) + (type_identifier))))) + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (record_type + (record_type_field + (property_identifier) + (type_annotation + (generic_type + (type_constructor_path + (type_constructor)) + (type_identifier) + (type_arguments + (type_constructor_path + (type_constructor)))))))))) + (type_identifier))))))))) + + + 99. Labled function with uncurried: + + (source_file + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (function_type + (function_type_parameters + (parameter + (uncurry) + (labeled_parameter + (value_name) + (value_identifier) + (type_annotation + (type_constructor_path + (type_constructor)))))) + (type_identifier))))) + (unit_type))))) + + + 100. Polymorphic type: + + (source_file + (let_declaration + (let_binding + (value_name) + (value_identifier) + (type_annotation + (polymorphic_type + (type_constructor) + (type_identifier) + (function_type + (function_type_parameters + (type_constructor_path + (type_constructor))) + (type_constructor_path + (type_constructor))))) + (type_identifier)) + (type_identifier)))) + (function + (value_name) + (value_name)))) + (value_identifier) + (value_identifier)))) + (let_declaration + (let_binding + (value_name) + (value_identifier) + (type_annotation + (polymorphic_type + (abstract_type + (type_constructor)) + (type_identifier)) + (function_type + (function_type_parameters + (parameter + (generic_type + (type_constructor_path + (type_constructor)) + (type_identifier) + (type_arguments + (type_constructor_path + (type_constructor))))) + (type_identifier)))) + (parameter + (generic_type + (type_constructor_path + (type_constructor)) + (type_identifier) + (type_arguments + (type_constructor_path + (type_constructor)))))) + (type_constructor_path + (type_constructor)))))))) + (type_identifier))))) + (type_identifier))))))) + + + 101. Variance annotations: + + (source_file + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (type_parameters + (type_constructor)))) + (type_identifier)))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (type_parameters + (type_constructor))))) + (type_identifier))))) + + + 102. Type constraint: + + (source_file + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (type_parameters + (type_constructor)) + (type_constructor_path + (type_constructor)) + (type_identifier)) + (type_identifier) + (type_constraint + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor))))) + (type_identifier) + (type_identifier)))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (type_parameters + (type_constructor) + (type_constructor)) + (type_identifier) + (type_identifier)) + (function_type + (function_type_parameters + (type_constructor_path + (type_constructor))) + (type_constructor_path + (type_constructor))) + (type_identifier)) + (type_identifier)) + (type_constraint + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor))) + (type_identifier) + (type_identifier)) + (type_constraint + (type_constructor_path + (type_constructor)) + (type_identifier) + (function_type + (function_type_parameters + (type_constructor_path + (type_constructor))) + (type_constructor_path + (type_constructor)))))) + (type_identifier)) + (type_identifier))))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_identifier) + (type_parameters + (type_constructor)) + (type_identifier)) + (type_constraint + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor)))))) + (type_identifier) + (type_identifier))))) + + + 103. Simple parameters: + + (source_file + (expression_statement + (function + (value_name) + (value_identifier) + (number))) + (expression_statement + (function + (formal_parameters) + (number))) + (expression_statement + (function + (formal_parameters + (parameter + (value_name)) + (value_identifier)) + (parameter + (value_name))) + (value_identifier))) + (number))) + (expression_statement + (function + (formal_parameters + (parameter + (value_name)) + (value_identifier)) + (parameter + (value_name))) + (value_identifier))) + (block + (expression_statement + (value_name))))) + (value_identifier))))) + (expression_statement + (function + (formal_parameters + (parameter + (value_name))) + (value_identifier))) + (number))) + (expression_statement + (function + (formal_parameters + (parameter + (value_name)) + (value_identifier)) + (parameter + (value_name))) + (value_identifier))) + (number))) + (expression_statement + (function + (formal_parameters + (parameter + (value_name)) + (value_identifier)) + (parameter + (value_name))) + (value_identifier))) + (number))) + (expression_statement + (function + (formal_parameters + (parameter + (value_name)) + (value_identifier)) + (parameter + (uncurry) + (value_name)) + (value_identifier)) + (parameter + (value_name)) + (value_identifier)) + (parameter + (uncurry) + (value_name))) + (value_identifier))) + (number))) + (expression_statement + (function + (formal_parameters + (parameter + (value_name))) + (value_identifier))) + (number)))) + + + 104. Type annotations: + + (source_file + (expression_statement + (function + parameters: (formal_parameters + (parameter + (value_name) + (value_identifier) + (type_annotation + (type_constructor_path + (type_constructor)))) + (type_identifier))) + (parameter + (labeled_parameter + (value_name) + (value_identifier) + (type_annotation + (type_constructor_path + (type_constructor)))))) + (type_identifier))))) + return_type: (type_annotation + (type_constructor_path + (type_constructor))) + (type_identifier)) + body: (number))) + (expression_statement + (function + parameters: (formal_parameters + (parameter + (record_pattern + (value_path + (value_name)) + (value_identifier) + (parenthesized_pattern + (value_name) + (value_identifier) + (type_annotation + (type_constructor_path + (type_constructor)))))) + (type_identifier))))) + (parameter + (record_pattern + (value_path + (value_name)) + (value_name)))) + (value_identifier) + (value_identifier)))) + body: (binary_expression + left: (value_name) + right: (value_name))))) + left: (value_identifier) + right: (value_identifier))))) + + + 105. Abstract type: + + (source_file + (let_declaration + (let_binding + (value_name) + (value_identifier) + (function + (formal_parameters + (parameter + (abstract_type + (type_constructor))) + (type_identifier))) + (parameter + (value_name) + (value_identifier) + (type_annotation + (type_constructor_path + (type_constructor))))) + (type_identifier)))) + (type_annotation + (type_constructor_path + (type_constructor))) + (value_name))))) + (type_identifier)) + (value_identifier))))) + + + 106. Parameter defaults: + + (source_file + (expression_statement + (function + parameters: (formal_parameters + (parameter + (labeled_parameter + (value_name) + (value_identifier) + (type_annotation + (type_constructor_path + (type_constructor))) + (type_identifier)) + default_value: (number))) + (parameter + (labeled_parameter + (value_name) + (value_identifier) + default_value: (number))) + (parameter + (labeled_parameter + (value_name) + (value_identifier) + (type_annotation + (type_constructor_path + (type_constructor))))) + (type_identifier)))) + (parameter + (labeled_parameter + (value_name))) + (value_identifier))) + (parameter + (unit))) + body: (number)))) + + + 107. Parameter aliasing: + + (source_file + (expression_statement + (function + (formal_parameters + (parameter + (labeled_parameter + (alias_pattern + (value_name) + (value_name)) + (value_identifier) + (as_aliasing + (value_identifier)) + (type_annotation + (type_constructor_path + (type_constructor))) + (type_identifier)) + (number)))) + (number))) + (expression_statement + (function + (formal_parameters + (parameter + (labeled_parameter + (alias_pattern + (value_name) + (value_identifier) + (as_aliasing + (tuple_pattern + (tuple_item_pattern + (value_name)) + (value_identifier)) + (tuple_item_pattern + (value_name))))))) + (value_name)))) + (value_identifier))))))) + (value_identifier)))) + + + 108. Record pattern: + + (source_file + (expression_statement + (function + (formal_parameters + (parameter + (record_pattern + (value_path + (value_name)) + (value_path + (value_name)) + (value_identifier) + (value_identifier) + (record_pattern + (value_path + (value_name)) + (value_path + (value_name))) + (value_path + (value_name)) + (value_name)))) + (value_identifier) + (value_identifier)) + (value_identifier) + (value_identifier)))) + (number)))) + + + 109. Ref assignment as body: + + (source_file + (expression_statement + (function + (value_name) + (value_identifier) + (mutation_expression + (value_name) + (call_expression + (constructor_path + (constructor_name)) + (value_identifier) + (variant + (variant_identifier) + (arguments + (value_name))))))) + (value_identifier))))))) + + + 110. Operator precendence: + + (source_file + (expression_statement + (function + (formal_parameters + (parameter + (value_name))) + (value_identifier))) + (binary_expression + (pipe_expression + (value_name) + (value_path + (module_path + (module_name)) + (value_name))) + (value_identifier) + (value_identifier_path + (module_identifier) + (value_identifier))) + (number))))) + + + 111. Async: + + (source_file + (expression_statement + (function + (formal_parameters) + (value_name)))) + (value_identifier)))) + +info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command. From 07d8b7d7f8886b56861aa89edbc7e7a4e0968a0f Mon Sep 17 00:00:00 2001 From: Pedro Castro Date: Sat, 6 May 2023 20:22:31 -0300 Subject: [PATCH 2/8] update tests --- grammar.js | 2 +- test/corpus/comments.txt | 45 +- test/corpus/decorators.txt | 84 +- test/corpus/expressions.txt | 1650 ++++++---- test/corpus/functions.txt | 327 +- test/corpus/jsx.txt | 279 +- test/corpus/let_bindings.txt | 389 ++- test/corpus/literals.txt | 344 +- test/corpus/modules.txt | 754 +++-- test/corpus/type_declarations.txt | 736 +++-- test/full.txt | 4955 ----------------------------- 11 files changed, 2967 insertions(+), 6598 deletions(-) delete mode 100644 test/full.txt diff --git a/grammar.js b/grammar.js index f9095ce..edbb181 100644 --- a/grammar.js +++ b/grammar.js @@ -85,7 +85,7 @@ module.exports = grammar({ [$.type_declaration], [$.let_declaration], [$.polyvar, $.polyvar_pattern], - [$._pattern], + // [$._pattern], [$._record_element, $._record_single_field], [$._record_pun_field, $._record_single_pun_field], [$._record_field_name, $.record_pattern], diff --git a/test/corpus/comments.txt b/test/corpus/comments.txt index e61cbdf..a56f0e0 100644 --- a/test/corpus/comments.txt +++ b/test/corpus/comments.txt @@ -1,6 +1,6 @@ -============================================ +================================================================================ Comments -============================================ +================================================================================ // Single line 1 @@ -37,36 +37,47 @@ switch foo { // in-switch } ---- +-------------------------------------------------------------------------------- (source_file (comment) - (expression_statement (number)) + (expression_statement + (number)) (comment) - (expression_statement (number)) + (expression_statement + (number)) (comment) - (expression_statement (number)) - (expression_statement (number)) + (expression_statement + (number)) + (expression_statement + (number)) (comment) - (expression_statement (number)) + (expression_statement + (number)) (comment) (comment) - (expression_statement (number)) + (expression_statement + (number)) (comment) - (expression_statement (number)) + (expression_statement + (number)) (comment) - (expression_statement (number)) + (expression_statement + (number)) (comment) - (expression_statement (number)) + (expression_statement + (number)) (expression_statement (pipe_expression - (value_identifier) + (value_name) (comment) - (value_identifier))) + (value_name))) (expression_statement (switch_expression - (value_identifier) + (value_name) (switch_match - (number) - (sequence_expression (expression_statement (number)))) + (number) + (sequence_expression + (expression_statement + (number)))) (comment)))) diff --git a/test/corpus/decorators.txt b/test/corpus/decorators.txt index c08f784..d3b9e36 100644 --- a/test/corpus/decorators.txt +++ b/test/corpus/decorators.txt @@ -1,6 +1,6 @@ -============================================ +================================================================================ Decorator inline -============================================ +================================================================================ @@deprecated @@Uppercase @@ -11,22 +11,29 @@ Decorator inline @@\"escape" @@\"de.2precated" ---- +-------------------------------------------------------------------------------- (source_file - (decorator (decorator_identifier)) - (decorator (decorator_identifier)) - (decorator (decorator_identifier)) - (decorator (decorator_identifier)) - (decorator (decorator_identifier)) - (decorator (decorator_identifier)) - (decorator (decorator_identifier)) - (decorator (decorator_identifier))) + (decorator + (decorator_identifier)) + (decorator + (decorator_identifier)) + (decorator + (decorator_identifier)) + (decorator + (decorator_identifier)) + (decorator + (decorator_identifier)) + (decorator + (decorator_identifier)) + (decorator + (decorator_identifier)) + (decorator + (decorator_identifier))) - -============================================ +================================================================================ Decorator with arguments -============================================ +================================================================================ @@deprecated() @@Uppercase() @@ -37,25 +44,46 @@ Decorator with arguments @@\"escape"() @@\"de.2precated"() ---- +-------------------------------------------------------------------------------- (source_file - (decorator (decorator_identifier) (decorator_arguments)) - (decorator (decorator_identifier) (decorator_arguments)) - (decorator (decorator_identifier) (decorator_arguments)) - (decorator (decorator_identifier) (decorator_arguments)) - (decorator (decorator_identifier) (decorator_arguments)) - (decorator (decorator_identifier) (decorator_arguments)) - (decorator (decorator_identifier) (decorator_arguments)) - (decorator (decorator_identifier) (decorator_arguments))) - -============================================ + (decorator + (decorator_identifier) + (decorator_arguments)) + (decorator + (decorator_identifier) + (decorator_arguments)) + (decorator + (decorator_identifier) + (decorator_arguments)) + (decorator + (decorator_identifier) + (decorator_arguments)) + (decorator + (decorator_identifier) + (decorator_arguments)) + (decorator + (decorator_identifier) + (decorator_arguments)) + (decorator + (decorator_identifier) + (decorator_arguments)) + (decorator + (decorator_identifier) + (decorator_arguments))) + +================================================================================ Decorator with type -============================================ +================================================================================ @react.component(:sharedProps) ---- +-------------------------------------------------------------------------------- (source_file - (decorator (decorator_identifier) (decorator_arguments (type_annotation (type_identifier))))) + (decorator + (decorator_identifier) + (decorator_arguments + (type_annotation + (type_constructor_path + (type_constructor)))))) diff --git a/test/corpus/expressions.txt b/test/corpus/expressions.txt index 3336457..2187530 100644 --- a/test/corpus/expressions.txt +++ b/test/corpus/expressions.txt @@ -1,87 +1,101 @@ -=========================================== +================================================================================ Unit -=========================================== +================================================================================ () ---- +-------------------------------------------------------------------------------- (source_file - (expression_statement (unit))) + (expression_statement + (unit))) -=========================================== +================================================================================ Parenthesized expressions -=========================================== +================================================================================ (5) (5: int) (()) ---- +-------------------------------------------------------------------------------- (source_file (expression_statement - (parenthesized_expression (number))) + (parenthesized_expression + (number))) (expression_statement (parenthesized_expression (number) - (type_annotation (type_identifier)))) + (type_annotation + (type_constructor_path + (type_constructor))))) (expression_statement - (parenthesized_expression (unit)))) + (parenthesized_expression + (unit)))) -=========================================== +================================================================================ Nested identifiers -=========================================== +================================================================================ Foo.Bar.baz Foo.Bar.baz.qux ---- +-------------------------------------------------------------------------------- (source_file (expression_statement - (value_identifier_path - (module_identifier_path - (module_identifier) - (module_identifier)) - (value_identifier))) + (value_path + (module_path + (module_path + (module_name)) + (module_name)) + (value_name))) (expression_statement (member_expression - (value_identifier_path - (module_identifier_path - (module_identifier) - (module_identifier)) - (value_identifier)) - (property_identifier)))) - -=========================================== + (value_path + (module_path + (module_path + (module_name)) + (module_name)) + (value_name)) + (value_path + (value_name))))) + +================================================================================ Escape identifiers -=========================================== +================================================================================ \"+." ---- +-------------------------------------------------------------------------------- -(source_file (expression_statement (value_identifier))) +(source_file + (expression_statement + (value_name))) -=========================================== +================================================================================ Tuple -=========================================== +================================================================================ (1, 2) (1, 2,) ---- +-------------------------------------------------------------------------------- (source_file (expression_statement - (tuple (number) (number))) + (tuple + (number) + (number))) (expression_statement - (tuple (number) (number)))) + (tuple + (number) + (number)))) -=========================================== +================================================================================ Call expression -=========================================== +================================================================================ min(1, 2) pow(2.0: float, ~exp=3.0: float) @@ -103,90 +117,110 @@ blocky( f(raise) call(~a=@decorator 1) ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (call_expression - function: (value_identifier) - arguments: (arguments (number) (number)))) + function: (value_name) + arguments: (arguments + (number) + (number)))) (expression_statement (call_expression - function: (value_identifier) + function: (value_name) arguments: (arguments (number) - (type_annotation (type_identifier)) + (type_annotation + (type_constructor_path + (type_constructor))) (labeled_argument - label: (value_identifier) + label: (value_path + (value_name)) value: (number) - type: (type_annotation (type_identifier)))))) + type: (type_annotation + (type_constructor_path + (type_constructor))))))) (expression_statement (call_expression - function: (value_identifier) + function: (value_name) arguments: (arguments (number) (labeled_argument - label: (value_identifier) + label: (value_path + (value_name)) value: (number)) (labeled_argument - label: (value_identifier)) + label: (value_path + (value_name))) (unit)))) (expression_statement (call_expression - function: (value_identifier) + function: (value_name) arguments: (arguments (labeled_argument - label: (value_identifier)) + label: (value_path + (value_name))) (labeled_argument - label: (value_identifier) - value: (value_identifier))))) + label: (value_path + (value_name)) + value: (value_name))))) (expression_statement (call_expression - function: (value_identifier) - arguments: (arguments (uncurry) (number)))) + function: (value_name) + arguments: (arguments + (uncurry) + (number)))) (expression_statement (call_expression - function: (value_identifier) + function: (value_name) arguments: (arguments (function - parameter: (value_identifier) + parameter: (value_name) body: (binary_expression left: (pipe_expression - (value_identifier) - (value_identifier_path - (module_identifier) - (value_identifier))) + (value_name) + (value_path + (module_path + (module_name)) + (value_name))) right: (number)))))) (expression_statement (call_expression - function: (value_identifier) + function: (value_name) arguments: (arguments (number) (block - (open_statement (module_identifier)) - (expression_statement (value_identifier))) + (open_statement + (module_path + (module_name))) + (expression_statement + (value_name))) (labeled_argument - label: (value_identifier) - value: (block (expression_statement (number))))))) - + label: (value_path + (value_name)) + value: (block + (expression_statement + (number))))))) (expression_statement (call_expression - function: (value_identifier) + function: (value_name) arguments: (arguments - (value_identifier)))) - + (value_name)))) (expression_statement (call_expression - function: (value_identifier) + function: (value_name) arguments: (arguments (labeled_argument - label: (value_identifier) - (decorator (decorator_identifier)) + label: (value_path + (value_name)) + (decorator + (decorator_identifier)) value: (number)))))) -=========================================== +================================================================================ Pipe -=========================================== +================================================================================ foo->bar->baz foo |> bar |> baz @@ -208,62 +242,80 @@ foo->{ {foo}->print() ---- +-------------------------------------------------------------------------------- (source_file - (expression_statement + (expression_statement (pipe_expression - (pipe_expression (value_identifier) (value_identifier)) - (value_identifier))) - (expression_statement + (pipe_expression + (value_name) + (value_name)) + (value_name))) + (expression_statement (pipe_expression - (pipe_expression (value_identifier) (value_identifier)) - (value_identifier))) + (pipe_expression + (value_name) + (value_name)) + (value_name))) (expression_statement (pipe_expression (pipe_expression - (value_identifier) + (value_name) (call_expression - (value_identifier_path - (module_identifier) - (value_identifier)) - (arguments (value_identifier)))) - (value_identifier_path - (module_identifier) - (value_identifier)))) + (value_path + (module_path + (module_name)) + (value_name)) + (arguments + (value_name)))) + (value_path + (module_path + (module_name)) + (value_name)))) (expression_statement (pipe_expression (number) - (variant (variant_identifier)))) + (constructor_path + (constructor_name)))) (expression_statement (pipe_expression - (value_identifier) - (polyvar (polyvar_identifier)))) + (value_name) + (polyvar + (polyvar_identifier)))) (expression_statement (pipe_expression - (value_identifier) - (value_identifier))) + (value_name) + (value_name))) (expression_statement (pipe_expression - (value_identifier) + (value_name) (parenthesized_expression (function - (value_identifier) - (binary_expression (value_identifier) (number)))))) + (value_name) + (binary_expression + (value_name) + (number)))))) (expression_statement (pipe_expression - (value_identifier) + (value_name) (block - (open_statement (module_identifier)) - (expression_statement (value_identifier))))) + (open_statement + (module_path + (module_name))) + (expression_statement + (value_name))))) (expression_statement (pipe_expression - (block (expression_statement (value_identifier))) - (call_expression (value_identifier) (arguments))))) + (block + (expression_statement + (value_name))) + (call_expression + (value_name) + (arguments))))) -=========================================== +================================================================================ Record -=========================================== +================================================================================ { ...old, @@ -281,49 +333,84 @@ Record { ?optPunning } ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (record - (spread_element (value_identifier)) - (record_field (property_identifier) (number)) - (record_field (property_identifier) (string (string_fragment))) - (record_field (property_identifier)))) + (spread_element + (value_name)) + (record_field + (property_identifier + (value_name)) + (number)) + (record_field + (property_identifier + (value_name)) + (string + (string_fragment))) + (record_field + (property_identifier + (value_name))))) (expression_statement (record - (record_field (property_identifier)) - (record_field (property_identifier)) - (record_field (property_identifier)))) + (record_field + (property_identifier + (value_name))) + (record_field + (property_identifier + (value_name))) + (record_field + (property_identifier + (value_name))))) (expression_statement (record (record_field - (property_identifier (module_identifier) (value_identifier)) + (property_identifier + (module_path + (module_name)) + (value_name)) (number)))) (expression_statement (record (record_field - (property_identifier (module_identifier) (value_identifier)) + (property_identifier + (module_path + (module_name)) + (value_name)) (number)) (record_field - (property_identifier) - (string (string_fragment))))) + (property_identifier + (value_name)) + (string + (string_fragment))))) (expression_statement (record (record_field - (property_identifier) - (variant (variant_identifier))) - (record_field (property_identifier)) + (property_identifier + (value_name)) + (constructor_path + (constructor_name))) (record_field - (property_identifier) + (property_identifier + (value_name))) + (record_field + (property_identifier + (value_name)) (parenthesized_expression - (variant (variant_identifier)) - (type_annotation (type_identifier)))))) - (expression_statement (record (property_identifier)))) + (constructor_path + (constructor_name)) + (type_annotation + (type_constructor_path + (type_constructor))))))) + (expression_statement + (record + (property_identifier + (value_name))))) -=========================================== +================================================================================ Object -=========================================== +================================================================================ { "foo": 32, @@ -334,30 +421,38 @@ Object { .. "x": 1 } { .. } ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (object (field - (property_identifier (string_fragment)) + (property_identifier + (string_fragment)) (number)) (field - (property_identifier (string_fragment)) - (string (string_fragment))) - )) + (property_identifier + (string_fragment)) + (string + (string_fragment))))) (expression_statement - (object (field - (property_identifier (string_fragment)) (number)))) + (object + (field + (property_identifier + (string_fragment)) + (number)))) (expression_statement - (object (field - (property_identifier (string_fragment)) (number)))) + (object + (field + (property_identifier + (string_fragment)) + (number)))) (expression_statement (object))) -=========================================== +================================================================================ If/else -=========================================== +================================================================================ if predicate { foo @@ -379,33 +474,49 @@ if predicateA { bar } ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (if_expression - (value_identifier) - (block (expression_statement (value_identifier))))) + (value_name) + (block + (expression_statement + (value_name))))) (expression_statement (if_expression - (value_identifier) - (block (expression_statement (value_identifier))) - (else_clause (block (expression_statement (value_identifier)))))) + (value_name) + (block + (expression_statement + (value_name))) + (else_clause + (block + (expression_statement + (value_name)))))) (expression_statement (if_expression - (value_identifier) - (block (expression_statement (value_identifier))) + (value_name) + (block + (expression_statement + (value_name))) (else_if_clause - (value_identifier) - (block (expression_statement (value_identifier)))) + (value_name) + (block + (expression_statement + (value_name)))) (else_if_clause - (value_identifier) - (block (expression_statement (value_identifier)))) - (else_clause (block (expression_statement (value_identifier))))))) + (value_name) + (block + (expression_statement + (value_name)))) + (else_clause + (block + (expression_statement + (value_name))))))) -=========================================== +================================================================================ Switch of literals -=========================================== +================================================================================ switch foo { | 1 | 2 => "few" @@ -414,30 +525,37 @@ switch foo { s ++ "many" } ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (switch_expression - (value_identifier) + (value_name) (switch_match (or_pattern (number) (number)) - (sequence_expression (expression_statement (string (string_fragment))))) + (sequence_expression + (expression_statement + (string + (string_fragment))))) (switch_match - (value_identifier) + (value_name) (sequence_expression (let_declaration - (let_binding (value_identifier) (string (string_fragment)))) + (let_binding + (value_name) + (string + (string_fragment)))) (expression_statement (binary_expression - (value_identifier) - (string (string_fragment))))))))) + (value_name) + (string + (string_fragment))))))))) -=========================================== +================================================================================ Switch of variants -=========================================== +================================================================================ switch foo { | Some(x as qux: int, {y, z}) => x @@ -446,39 +564,63 @@ switch foo { | ?Some(_) => 1 } ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (switch_expression - (value_identifier) + (value_name) (switch_match - (variant_pattern - (variant_identifier) - (formal_parameters - (value_identifier) - (as_aliasing (value_identifier)) - (type_annotation (type_identifier)) - (record_pattern - (value_identifier) - (value_identifier)))) - (sequence_expression (expression_statement (value_identifier)))) + (constructor_pattern + (constructor_path + (constructor_name)) + (tuple_pattern + (tuple_item_pattern + (alias_pattern + (value_name) + (value_name)) + (type_annotation + (type_constructor_path + (type_constructor)))) + (tuple_item_pattern + (record_pattern + (value_path + (value_name)) + (value_path + (value_name)))))) + (sequence_expression + (expression_statement + (value_name)))) (switch_match - (variant_pattern - (nested_variant_identifier - (module_identifier) - (variant_identifier))) - (sequence_expression (expression_statement (number)))) + (constructor_pattern + (constructor_path + (module_path + (module_name)) + (constructor_name))) + (sequence_expression + (expression_statement + (number)))) (switch_match - (variant_pattern (variant_identifier) (formal_parameters)) - (sequence_expression (expression_statement (number)))) + (constructor_pattern + (constructor_path + (constructor_name)) + (unit)) + (sequence_expression + (expression_statement + (number)))) (switch_match - (variant_pattern (variant_identifier) (formal_parameters (value_identifier))) - (sequence_expression (expression_statement (number))))))) + (constructor_pattern + (constructor_path + (constructor_name)) + (parenthesized_pattern + (value_name))) + (sequence_expression + (expression_statement + (number))))))) -=========================================== +================================================================================ Switch of polyvars -=========================================== +================================================================================ switch foo { | #Bar => 42 @@ -486,36 +628,51 @@ switch foo { | #...Polyvar.t as toto => 5 } ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (switch_expression - (value_identifier) + (value_name) (switch_match - (polyvar_pattern (polyvar_identifier)) - (sequence_expression (expression_statement (number)))) + (polyvar_pattern + (polyvar_identifier)) + (sequence_expression + (expression_statement + (number)))) (switch_match (polyvar_pattern (polyvar_identifier) - (formal_parameters - (value_identifier) - (as_aliasing (value_identifier)) - (type_annotation (type_identifier)) - (number))) - (as_aliasing (value_identifier)) - (sequence_expression (expression_statement (number)))) + (alias_pattern + (tuple_pattern + (tuple_item_pattern + (alias_pattern + (value_name) + (value_name)) + (type_annotation + (type_constructor_path + (type_constructor)))) + (tuple_item_pattern + (number))) + (value_name))) + (sequence_expression + (expression_statement + (number)))) (switch_match - (polyvar_type_pattern - (type_identifier_path - (module_identifier) - (type_identifier))) - (as_aliasing (value_identifier)) - (sequence_expression (expression_statement (number))))))) - -=========================================== + (alias_pattern + (polyvar_type_pattern + (type_constructor_path + (module_path + (module_name)) + (type_constructor))) + (value_name)) + (sequence_expression + (expression_statement + (number))))))) + +================================================================================ Switch of vars -=========================================== +================================================================================ switch foo { | x if x > 42 && x < 99 => x @@ -523,31 +680,43 @@ switch foo { | _ => 42 } ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (switch_expression - (value_identifier) + (value_name) (switch_match - (value_identifier) + (value_name) (guard (binary_expression - (binary_expression (value_identifier) (number)) - (binary_expression (value_identifier) (number)))) - (sequence_expression (expression_statement (value_identifier)))) + (binary_expression + (value_name) + (number)) + (binary_expression + (value_name) + (number)))) + (sequence_expression + (expression_statement + (value_name)))) (switch_match - (value_identifier) + (value_name) (guard - (binary_expression (value_identifier) (number))) - (sequence_expression (expression_statement (value_identifier)))) + (binary_expression + (value_name) + (number))) + (sequence_expression + (expression_statement + (value_name)))) (switch_match - (value_identifier) - (sequence_expression (expression_statement (number))))))) + (value_name) + (sequence_expression + (expression_statement + (number))))))) -=========================================== +================================================================================ Switch of tuples -=========================================== +================================================================================ switch (foo, bar) { | (42, 99 as zoo) => 42 @@ -555,58 +724,87 @@ switch (foo, bar) { | (_, _) => 13 } ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (switch_expression - (tuple (value_identifier) (value_identifier)) + (tuple + (value_name) + (value_name)) (switch_match (tuple_pattern - (tuple_item_pattern (number)) - (tuple_item_pattern (number) (as_aliasing (value_identifier)))) - (sequence_expression (expression_statement (number)))) + (tuple_item_pattern + (number)) + (tuple_item_pattern + (alias_pattern + (number) + (value_name)))) + (sequence_expression + (expression_statement + (number)))) (switch_match (tuple_pattern - (tuple_item_pattern (variant_pattern (variant_identifier))) - (tuple_item_pattern (polyvar_type_pattern (type_identifier)))) - (sequence_expression (expression_statement (number)))) + (tuple_item_pattern + (constructor_pattern + (constructor_path + (constructor_name)))) + (tuple_item_pattern + (polyvar_type_pattern + (type_constructor_path + (type_constructor))))) + (sequence_expression + (expression_statement + (number)))) (switch_match (tuple_pattern - (tuple_item_pattern (value_identifier)) - (tuple_item_pattern (value_identifier))) - (sequence_expression (expression_statement (number))))))) + (tuple_item_pattern + (value_name)) + (tuple_item_pattern + (value_name))) + (sequence_expression + (expression_statement + (number))))))) -=========================================== +================================================================================ Switch of mixed tuples -=========================================== +================================================================================ switch tuple { | (Variant1 | Variant2, 42.0) => 10 | _ => 20 } ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (switch_expression - (value_identifier) + (value_name) (switch_match (tuple_pattern (tuple_item_pattern (or_pattern - (variant_pattern (variant_identifier)) - (variant_pattern (variant_identifier)))) - (tuple_item_pattern (number))) - (sequence_expression (expression_statement (number)))) - (switch_match - (value_identifier) - (sequence_expression (expression_statement (number))))))) - -=========================================== + (constructor_pattern + (constructor_path + (constructor_name))) + (constructor_pattern + (constructor_path + (constructor_name))))) + (tuple_item_pattern + (number))) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (value_name) + (sequence_expression + (expression_statement + (number))))))) + +================================================================================ Switch of record patterns -=========================================== +================================================================================ switch person { | Teacher({name: "Mary" | "Joe"}) => 10 @@ -618,58 +816,85 @@ switch person { | Student({name}) => 40 } ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (switch_expression - (value_identifier) + (value_name) (switch_match - (variant_pattern - (variant_identifier) - (formal_parameters + (constructor_pattern + (constructor_path + (constructor_name)) + (parenthesized_pattern (record_pattern - (value_identifier) + (value_path + (value_name)) (or_pattern - (string (string_fragment)) - (string (string_fragment)))))) - (sequence_expression (expression_statement (number)))) + (string + (string_fragment)) + (string + (string_fragment)))))) + (sequence_expression + (expression_statement + (number)))) (switch_match - (variant_pattern - (variant_identifier) - (formal_parameters + (constructor_pattern + (constructor_path + (constructor_name)) + (parenthesized_pattern (record_pattern - (value_identifier) + (value_path + (value_name)) (record_pattern - (value_identifier) + (value_path + (value_name)) (number)) - (value_identifier) - (or_pattern - (variant_pattern - (variant_identifier) - (formal_parameters (value_identifier))) - (variant_pattern - (variant_identifier) - (formal_parameters (value_identifier))))))) - (sequence_expression (expression_statement (number)))) + (value_path + (value_name)) + (constructor_pattern + (constructor_path + (constructor_name)) + (or_pattern + (parenthesized_pattern + (value_name)) + (constructor_pattern + (constructor_path + (constructor_name)) + (parenthesized_pattern + (value_name)))))))) + (sequence_expression + (expression_statement + (number)))) (switch_match - (variant_pattern - (variant_identifier) - (formal_parameters + (constructor_pattern + (constructor_path + (constructor_name)) + (parenthesized_pattern (record_pattern - (value_identifier) - (variant_pattern (variant_identifier))))) - (sequence_expression (expression_statement (number)))) + (value_path + (value_name)) + (constructor_pattern + (constructor_path + (constructor_name)))))) + (sequence_expression + (expression_statement + (number)))) (switch_match - (variant_pattern - (variant_identifier) - (formal_parameters - (record_pattern (value_identifier)))) - (sequence_expression (expression_statement (number))))))) + (constructor_pattern + (constructor_path + (constructor_name)) + (parenthesized_pattern + (record_pattern + (value_path + (value_name))))) + (sequence_expression + (expression_statement + (number))))))) -=========================================== +================================================================================ Switch of lists -=========================================== +================================================================================ switch foo { | list{current as qux, ...others} => 1 @@ -679,41 +904,61 @@ switch foo { | list{1, 2, ...list{b, ..._} as rest} => rest } ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (switch_expression - (value_identifier) + (value_name) (switch_match (list_pattern - (value_identifier) - (as_aliasing (value_identifier)) - (spread_pattern (value_identifier))) - (sequence_expression (expression_statement (number)))) + (alias_pattern + (value_name) + (value_name)) + (spread_pattern + (value_name))) + (sequence_expression + (expression_statement + (number)))) (switch_match - (list_pattern (number) (number) (value_identifier)) - (sequence_expression (expression_statement (number)))) + (list_pattern + (number) + (number) + (value_name)) + (sequence_expression + (expression_statement + (number)))) (switch_match - (list_pattern (number)) - (sequence_expression (expression_statement (number)))) + (list_pattern + (number)) + (sequence_expression + (expression_statement + (number)))) (switch_match - (list_pattern (spread_pattern (value_identifier))) - (sequence_expression (expression_statement (number)))) + (list_pattern + (spread_pattern + (value_name))) + (sequence_expression + (expression_statement + (number)))) (switch_match (list_pattern (number) (number) - (spread_pattern - (list_pattern - (value_identifier) - (spread_pattern (value_identifier)))) - (as_aliasing (value_identifier))) - (sequence_expression (expression_statement (value_identifier))))))) + (alias_pattern + (spread_pattern + (list_pattern + (value_name) + (spread_pattern + (value_name)))) + (value_name))) + (sequence_expression + (expression_statement + (value_name))))))) -=========================================== +================================================================================ Switch of arrays -=========================================== +================================================================================ switch foo { | [head, ...others] => 1 @@ -723,32 +968,47 @@ switch foo { | [...others] => 4 } ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (switch_expression - (value_identifier) + (value_name) (switch_match - (array_pattern (value_identifier) (spread_pattern (value_identifier))) - (sequence_expression (expression_statement (number)))) + (array_pattern + (value_name) + (spread_pattern + (value_name))) + (sequence_expression + (expression_statement + (number)))) (switch_match (array_pattern (number) - (number) - (as_aliasing (value_identifier)) - (value_identifier)) - (sequence_expression (expression_statement (number)))) + (alias_pattern + (number) + (value_name)) + (value_name)) + (sequence_expression + (expression_statement + (number)))) (switch_match - (array_pattern (number)) - (sequence_expression (expression_statement (number)))) + (array_pattern + (number)) + (sequence_expression + (expression_statement + (number)))) (switch_match - (array_pattern (spread_pattern (value_identifier))) - (sequence_expression (expression_statement (number))))))) + (array_pattern + (spread_pattern + (value_name))) + (sequence_expression + (expression_statement + (number))))))) -=========================================== +================================================================================ Switch of statements -=========================================== +================================================================================ switch (element->HtmlInputElement.ofElement) { | Some(input) => @@ -757,218 +1017,281 @@ switch (element->HtmlInputElement.ofElement) { | None => () }; ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (switch_expression (parenthesized_expression (pipe_expression - (value_identifier) - (value_identifier_path (module_identifier) (value_identifier)))) + (value_name) + (value_path + (module_path + (module_name)) + (value_name)))) (switch_match - pattern: - (variant_pattern - (variant_identifier) - (formal_parameters - (value_identifier))) + pattern: (constructor_pattern + (constructor_path + (constructor_name)) + (parenthesized_pattern + (value_name))) body: (sequence_expression (expression_statement (call_expression - function: (value_identifier_path - (module_identifier) - (value_identifier)) + function: (value_path + (module_path + (module_name)) + (value_name)) arguments: (arguments - (value_identifier)))) + (value_name)))) (expression_statement (call_expression - function: (value_identifier_path - (module_identifier) - (value_identifier)) + function: (value_path + (module_path + (module_name)) + (value_name)) arguments: (arguments - (value_identifier)))))) + (value_name)))))) (switch_match - pattern: - (variant_pattern - (variant_identifier)) + pattern: (constructor_pattern + (constructor_path + (constructor_name))) body: (sequence_expression (expression_statement (unit))))))) -=========================================== +================================================================================ Switch exceptions -=========================================== +================================================================================ switch parseExn(str) { | json => 42 | exception Js.Exn.Error(obj) => 99 } ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (switch_expression - (call_expression (value_identifier) (arguments (value_identifier))) + (call_expression + (value_name) + (arguments + (value_name))) (switch_match - (value_identifier) - (sequence_expression (expression_statement (number)))) + (value_name) + (sequence_expression + (expression_statement + (number)))) (switch_match (exception_pattern - (variant_pattern - (nested_variant_identifier - (module_identifier_path (module_identifier) (module_identifier)) - (variant_identifier)) - (formal_parameters (value_identifier)))) - (sequence_expression (expression_statement (number))))))) - -=========================================== + (constructor_pattern + (constructor_path + (module_path + (module_path + (module_name)) + (module_name)) + (constructor_name)) + (parenthesized_pattern + (value_name)))) + (sequence_expression + (expression_statement + (number))))))) + +================================================================================ Switch block -=========================================== +================================================================================ switch { open Mod; foo() } { | _ => 42 } ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (switch_expression (block - (open_statement (module_identifier)) + (open_statement + (module_path + (module_name))) (expression_statement - (call_expression (value_identifier) (arguments)))) + (call_expression + (value_name) + (arguments)))) (switch_match - (value_identifier) - (sequence_expression (expression_statement (number))))))) + (value_name) + (sequence_expression + (expression_statement + (number))))))) -=========================================== +================================================================================ Switch parenthesized -=========================================== +================================================================================ switch n { | (1 | 2) => 1 | Some((This | That) | Unknow) => 0 } ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (switch_expression - (value_identifier) + (value_name) (switch_match (parenthesized_pattern (or_pattern (number) (number))) - (sequence_expression (expression_statement (number)))) + (sequence_expression + (expression_statement + (number)))) (switch_match - (variant_pattern - (variant_identifier) - (formal_parameters + (constructor_pattern + (constructor_path + (constructor_name)) + (parenthesized_pattern (or_pattern (parenthesized_pattern (or_pattern - (variant_pattern (variant_identifier)) - (variant_pattern (variant_identifier)))) - (variant_pattern (variant_identifier))))) - (sequence_expression (expression_statement (number))))))) + (constructor_pattern + (constructor_path + (constructor_name))) + (constructor_pattern + (constructor_path + (constructor_name))))) + (constructor_pattern + (constructor_path + (constructor_name)))))) + (sequence_expression + (expression_statement + (number))))))) -=========================================== +================================================================================ Switch ranges -=========================================== +================================================================================ switch c { | 'b' .. 'z' => 100 } ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (switch_expression - (value_identifier) + (value_name) (switch_match (range_pattern - (character) (character)) - (sequence_expression (expression_statement (number))))))) + (character) + (character)) + (sequence_expression + (expression_statement + (number))))))) -=========================================== +================================================================================ Math operators -=========================================== +================================================================================ - 1 + 2 / 3 -. 1.0 +. 2.0 /. 3.0 2.0 ** 3.0 ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (binary_expression - (unary_expression (number)) - (binary_expression (number) (number))) - ) + (unary_expression + (number)) + (binary_expression + (number) + (number)))) (expression_statement (binary_expression - (unary_expression (number)) - (binary_expression (number) (number))) - ) + (unary_expression + (number)) + (binary_expression + (number) + (number)))) (expression_statement - (binary_expression (number) (number))) - ) + (binary_expression + (number) + (number)))) -============================================ +================================================================================ Boolean operators -============================================ +================================================================================ i || j; i && j; !a && !b || !c && !d; ---- +-------------------------------------------------------------------------------- (source_file - (expression_statement (binary_expression (value_identifier) (value_identifier))) - (expression_statement (binary_expression (value_identifier) (value_identifier))) - (expression_statement (binary_expression + (expression_statement + (binary_expression + (value_name) + (value_name))) + (expression_statement (binary_expression - (unary_expression (value_identifier)) - (unary_expression (value_identifier))) + (value_name) + (value_name))) + (expression_statement (binary_expression - (unary_expression (value_identifier)) - (unary_expression (value_identifier)))))) - -============================================ + (binary_expression + (unary_expression + (value_name)) + (unary_expression + (value_name))) + (binary_expression + (unary_expression + (value_name)) + (unary_expression + (value_name)))))) + +================================================================================ String operators -============================================ +================================================================================ s1 ++ s2 s1 ++ s2 ++ s3 ---- +-------------------------------------------------------------------------------- (source_file - (expression_statement (binary_expression (value_identifier) (value_identifier))) - (expression_statement (binary_expression - (binary_expression (value_identifier) (value_identifier)) - (value_identifier)))) + (expression_statement + (binary_expression + (value_name) + (value_name))) + (expression_statement + (binary_expression + (binary_expression + (value_name) + (value_name)) + (value_name)))) -============================================ +================================================================================ Coercion operator -============================================ +================================================================================ value :> newType ---- +-------------------------------------------------------------------------------- -(source_file (expression_statement (coercion_expression (value_identifier) (type_identifier)))) +(source_file + (expression_statement + (coercion_expression + (value_name) + (type_constructor_path + (type_constructor))))) -============================================== +================================================================================ Ternaries -============================================== +================================================================================ condition ? case1 : case2 @@ -976,17 +1299,23 @@ condition ? case1 : case2 ---- +-------------------------------------------------------------------------------- (source_file - (expression_statement (ternary_expression - (value_identifier) (value_identifier) (value_identifier))) - (expression_statement (ternary_expression - (value_identifier) (value_identifier) (value_identifier)))) + (expression_statement + (ternary_expression + (value_name) + (value_name) + (value_name))) + (expression_statement + (ternary_expression + (value_name) + (value_name) + (value_name)))) -============================================ +================================================================================ Arrays -============================================ +================================================================================ [] [1] @@ -997,17 +1326,26 @@ Arrays 2, ] ---- +-------------------------------------------------------------------------------- (source_file - (expression_statement (array)) - (expression_statement (array (number))) - (expression_statement (array (number) (number))) - (expression_statement (array (number) (number)))) + (expression_statement + (array)) + (expression_statement + (array + (number))) + (expression_statement + (array + (number) + (number))) + (expression_statement + (array + (number) + (number)))) -============================================ +================================================================================ Lists -============================================ +================================================================================ list{} list{1} @@ -1020,53 +1358,83 @@ list{ list{ 1, 2, ...xs } list{ ...xs, 1, 2 } ---- +-------------------------------------------------------------------------------- (source_file - (expression_statement (list)) - (expression_statement (list (number))) - (expression_statement (list (number))) - (expression_statement (list (number) (number))) - (expression_statement (list (number) (number) (spread_element (value_identifier)))) - (expression_statement (list (spread_element (value_identifier)) (number) (number)))) - -============================================ + (expression_statement + (list)) + (expression_statement + (list + (number))) + (expression_statement + (list + (number))) + (expression_statement + (list + (number) + (number))) + (expression_statement + (list + (number) + (number) + (spread_element + (value_name)))) + (expression_statement + (list + (spread_element + (value_name)) + (number) + (number)))) + +================================================================================ Member expressions -============================================ +================================================================================ foo.bar.baz foo.ModuleName.bar ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (member_expression - (member_expression (value_identifier) (property_identifier)) - (property_identifier))) + (member_expression + (value_name) + (value_path + (value_name))) + (value_path + (value_name)))) (expression_statement (member_expression - (value_identifier) - (module_identifier) - (property_identifier)))) + (value_name) + (value_path + (module_path + (module_name)) + (value_name))))) -============================================ +================================================================================ Subscript expressions -============================================ +================================================================================ myArray[42] myObj["foo"] ---- +-------------------------------------------------------------------------------- (source_file - (expression_statement (subscript_expression (value_identifier) (number))) (expression_statement - (subscript_expression (value_identifier) (string (string_fragment))))) + (subscript_expression + (value_name) + (number))) + (expression_statement + (subscript_expression + (value_name) + (string + (string_fragment))))) -============================================ +================================================================================ Variants -============================================ +================================================================================ Foo Foo(42) @@ -1074,36 +1442,58 @@ Foo(42: int) Foo(qux, { bar: 3 }, ) Foo((Obj.magic(v): string)) ---- +-------------------------------------------------------------------------------- (source_file - (expression_statement (variant (variant_identifier))) - (expression_statement (variant (variant_identifier) (arguments (number)))) (expression_statement - (variant - (variant_identifier) + (constructor_path + (constructor_name))) + (expression_statement + (call_expression + (constructor_path + (constructor_name)) + (arguments + (number)))) + (expression_statement + (call_expression + (constructor_path + (constructor_name)) (arguments (number) - (type_annotation (type_identifier))))) + (type_annotation + (type_constructor_path + (type_constructor)))))) (expression_statement - (variant - (variant_identifier) + (call_expression + (constructor_path + (constructor_name)) (arguments - (value_identifier) - (record (record_field (property_identifier) (number)))))) + (value_name) + (record + (record_field + (property_identifier + (value_name)) + (number)))))) (expression_statement - (variant - (variant_identifier) + (call_expression + (constructor_path + (constructor_name)) (arguments (parenthesized_expression (call_expression - (value_identifier_path (module_identifier) (value_identifier)) - (arguments (value_identifier))) - (type_annotation (type_identifier))))))) - -============================================ + (value_path + (module_path + (module_name)) + (value_name)) + (arguments + (value_name))) + (type_annotation + (type_constructor_path + (type_constructor)))))))) + +================================================================================ Extensions -============================================ +================================================================================ %debugger %re("/[^1-9]/g") @@ -1131,7 +1521,7 @@ module Test = %graphql(` } `) ---- +-------------------------------------------------------------------------------- (source_file (expression_statement @@ -1154,95 +1544,102 @@ module Test = %graphql(` (extension_identifier) (let_declaration (let_binding - pattern: (value_identifier) + pattern: (value_name) body: (function parameters: (formal_parameters - (parameter (value_identifier)) - (parameter (value_identifier))) + (parameter + (value_name)) + (parameter + (value_name))) body: (binary_expression - left: (value_identifier) - right: (value_identifier))))))) + left: (value_name) + right: (value_name))))))) (expression_statement (extension_expression (extension_identifier) (let_declaration (let_binding - pattern: (value_identifier) + pattern: (value_name) body: (string (string_fragment)))) (let_declaration (let_binding - pattern: (value_identifier) + pattern: (value_name) body: (number))))) (let_declaration (let_binding - pattern: (value_identifier) - body: (extension_expression - (extension_identifier) - (expression_statement - (template_string - (template_string_content - (escape_sequence) - (escape_sequence))))))) + pattern: (value_name) + body: (extension_expression + (extension_identifier) + (expression_statement + (template_string + (template_string_content + (escape_sequence) + (escape_sequence))))))) (let_declaration (let_binding - pattern: (value_identifier) - body: (extension_expression - (extension_identifier) - (expression_statement - (template_string - (template_string_content - (escape_sequence) - (escape_sequence))))))) + pattern: (value_name) + body: (extension_expression + (extension_identifier) + (expression_statement + (template_string + (template_string_content + (escape_sequence) + (escape_sequence))))))) (module_declaration (module_binding - name: (module_identifier) + name: (module_name) definition: (extension_expression (extension_identifier) (expression_statement (template_string (template_string_content))))))) -=========================================== +================================================================================ Raise expression -=========================================== +================================================================================ raise(BadArgument({myMessage: "Oops!"})) raise(InvalidInput,) ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (call_expression - function: (value_identifier) + function: (value_name) arguments: (arguments - (variant - (variant_identifier) - (arguments - (record - (record_field - (property_identifier) - (string (string_fragment))))))))) + (call_expression + function: (constructor_path + (constructor_name)) + arguments: (arguments + (record + (record_field + (property_identifier + (value_name)) + (string + (string_fragment))))))))) (expression_statement (call_expression - function: (value_identifier) + function: (value_name) arguments: (arguments - (variant (variant_identifier)))))) + (constructor_path + (constructor_name)))))) -=========================================== +================================================================================ Assert expression -=========================================== +================================================================================ assert false assert { 1 > 2 } let f = () => assert false ---- +-------------------------------------------------------------------------------- (source_file (expression_statement - (assert_expression (false))) + (assert_expression + (false))) (expression_statement (assert_expression (block @@ -1252,14 +1649,15 @@ let f = () => assert false (number)))))) (let_declaration (let_binding - (value_identifier) + (value_name) (function (formal_parameters) - (assert_expression (false)))))) + (assert_expression + (false)))))) -============================================ +================================================================================ Try-catch -============================================ +================================================================================ try { someOtherJSFunctionThatThrows() @@ -1283,92 +1681,143 @@ try for i in 0 to 10 { | Not_found => false } ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (try_expression - (block (expression_statement (call_expression (value_identifier) (arguments)))) - (switch_match - (variant_pattern (variant_identifier)) - (sequence_expression (expression_statement (number)))) + (block + (expression_statement + (call_expression + (value_name) + (arguments)))) (switch_match - (variant_pattern - (variant_identifier) - (formal_parameters + (constructor_pattern + (constructor_path + (constructor_name))) + (sequence_expression + (expression_statement + (number)))) + (switch_match + (constructor_pattern + (constructor_path + (constructor_name)) + (parenthesized_pattern (record_pattern - (value_identifier) - (value_identifier)))) - (sequence_expression (expression_statement (number)))) + (value_path + (value_name)) + (value_path + (value_name))))) + (sequence_expression + (expression_statement + (number)))) (switch_match - (variant_pattern - (nested_variant_identifier - (module_identifier_path - (module_identifier) - (module_identifier)) - (variant_identifier)) - (formal_parameters (value_identifier))) - (sequence_expression (expression_statement (number)))))) + (constructor_pattern + (constructor_path + (module_path + (module_path + (module_name)) + (module_name)) + (constructor_name)) + (parenthesized_pattern + (value_name))) + (sequence_expression + (expression_statement + (number)))))) (expression_statement (try_expression (switch_expression - (call_expression (value_identifier) (arguments)) + (call_expression + (value_name) + (arguments)) (switch_match (number) - (sequence_expression (expression_statement (string (string_fragment))))) + (sequence_expression + (expression_statement + (string + (string_fragment))))) (switch_match (number) - (sequence_expression (expression_statement (string (string_fragment))))) + (sequence_expression + (expression_statement + (string + (string_fragment))))) (switch_match - (value_identifier) - (sequence_expression (expression_statement (string (string_fragment)))))) + (value_name) + (sequence_expression + (expression_statement + (string + (string_fragment)))))) (switch_match - (variant_pattern - (nested_variant_identifier - (module_identifier_path - (module_identifier) - (module_identifier)) - (variant_identifier)) - (formal_parameters (value_identifier))) - (sequence_expression (expression_statement (string (string_fragment))))))) - + (constructor_pattern + (constructor_path + (module_path + (module_path + (module_name)) + (module_name)) + (constructor_name)) + (parenthesized_pattern + (value_name))) + (sequence_expression + (expression_statement + (string + (string_fragment))))))) (expression_statement (try_expression - (for_expression (value_identifier) (number) (number) + (for_expression + (value_path + (value_name)) + (number) + (number) (block (expression_statement - (call_expression (value_identifier) (arguments))))) + (call_expression + (value_name) + (arguments))))) (switch_match - (variant_pattern (variant_identifier)) - (sequence_expression (expression_statement (false))))))) + (constructor_pattern + (constructor_path + (constructor_name))) + (sequence_expression + (expression_statement + (false))))))) -=========================================== +================================================================================ Mutation expressions -=========================================== +================================================================================ foo["bar"] = qux foo.bar = qux foo.bar := qux ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (mutation_expression - (subscript_expression (value_identifier) (string (string_fragment))) - (value_identifier))) + (subscript_expression + (value_name) + (string + (string_fragment))) + (value_name))) (expression_statement (mutation_expression - (member_expression (value_identifier) (property_identifier)) - (value_identifier))) + (member_expression + (value_name) + (value_path + (value_name))) + (value_name))) (expression_statement (mutation_expression - (member_expression (value_identifier) (property_identifier)) - (value_identifier)))) + (member_expression + (value_name) + (value_path + (value_name))) + (value_name)))) -=========================================== +================================================================================ For loop -=========================================== +================================================================================ for x in 1 to 3 { Js.log(x) @@ -1378,39 +1827,49 @@ for x in 1 downto 3 { Js.log(x) } ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (for_expression - (value_identifier) + (value_path + (value_name)) (number) (number) (block (expression_statement (call_expression - (value_identifier_path (module_identifier) (value_identifier)) - (arguments (value_identifier))))))) + (value_path + (module_path + (module_name)) + (value_name)) + (arguments + (value_name))))))) (expression_statement (for_expression - (value_identifier) + (value_path + (value_name)) (number) (number) (block (expression_statement (call_expression - (value_identifier_path (module_identifier) (value_identifier)) - (arguments (value_identifier)))))))) - -=========================================== + (value_path + (module_path + (module_name)) + (value_name)) + (arguments + (value_name)))))))) + +================================================================================ While loop -=========================================== +================================================================================ while true { Js.log("Still running") } ---- +-------------------------------------------------------------------------------- (source_file (expression_statement @@ -1419,72 +1878,87 @@ while true { (block (expression_statement (call_expression - (value_identifier_path (module_identifier) (value_identifier)) - (arguments (string (string_fragment))))))))) - -=========================================== + (value_path + (module_path + (module_name)) + (value_name)) + (arguments + (string + (string_fragment))))))))) + +================================================================================ Await expression -=========================================== +================================================================================ await somePromise await foo() await foo->bar + 5 ---- +-------------------------------------------------------------------------------- (source_file (expression_statement - (await_expression (value_identifier))) + (await_expression + (value_name))) (expression_statement (await_expression - (call_expression (value_identifier) (arguments)))) + (call_expression + (value_name) + (arguments)))) (expression_statement (binary_expression (await_expression - (pipe_expression (value_identifier) (value_identifier))) + (pipe_expression + (value_name) + (value_name))) (number)))) -=========================================== +================================================================================ As aliasing -=========================================== +================================================================================ let f = ({name, _} as foo: T.t) => {} ---- +-------------------------------------------------------------------------------- (source_file (let_declaration (let_binding - pattern: (value_identifier) + pattern: (value_name) body: (function parameters: (formal_parameters (parameter - (record_pattern - (value_identifier) - (value_identifier)) - (as_aliasing - (value_identifier)) - (type_annotation - (type_identifier_path - (module_identifier) - (type_identifier))))) + (alias_pattern + (record_pattern + (value_path + (value_name)) + (value_path + (value_name))) + (value_name)) + (type_annotation + (type_constructor_path + (module_path + (module_name)) + (type_constructor))))) body: (block))))) -=========================================== +================================================================================ Lazy Expression -=========================================== +================================================================================ lazy { 1 } lazy call() ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (lazy_expression (block - (expression_statement (number))))) + (expression_statement + (number))))) (expression_statement (lazy_expression (call_expression - (value_identifier) (arguments))))) + (value_name) + (arguments))))) diff --git a/test/corpus/functions.txt b/test/corpus/functions.txt index 8789f33..5d169ff 100644 --- a/test/corpus/functions.txt +++ b/test/corpus/functions.txt @@ -1,6 +1,6 @@ -=================================================== +================================================================================ Simple parameters -=================================================== +================================================================================ a => 1 () => 2 @@ -14,114 +14,161 @@ a => 1 (a, .b, c, .d) => 7 (async) => 1 ---- +-------------------------------------------------------------------------------- (source_file - (expression_statement (function - (value_identifier) - (number))) - (expression_statement (function - (formal_parameters) - (number))) - (expression_statement (function - (formal_parameters - (parameter (value_identifier)) (parameter (value_identifier))) - (number))) - (expression_statement (function - (formal_parameters - (parameter (value_identifier)) - (parameter (value_identifier))) - (block - (expression_statement (value_identifier))))) - (expression_statement (function - (formal_parameters - (parameter (value_identifier))) - (number))) - (expression_statement (function - (formal_parameters - (parameter (value_identifier)) (parameter (value_identifier))) - (number))) - (expression_statement (function - (formal_parameters (parameter (value_identifier)) (parameter (value_identifier))) - (number))) - (expression_statement (function - (formal_parameters - (parameter (value_identifier)) - (parameter - (uncurry) - (value_identifier)) - (parameter (value_identifier)) - (parameter - (uncurry) - (value_identifier))) - (number))) + (expression_statement + (function + (value_name) + (number))) + (expression_statement + (function + (formal_parameters) + (number))) + (expression_statement + (function + (formal_parameters + (parameter + (value_name)) + (parameter + (value_name))) + (number))) + (expression_statement + (function + (formal_parameters + (parameter + (value_name)) + (parameter + (value_name))) + (block + (expression_statement + (value_name))))) (expression_statement (function (formal_parameters - (parameter (value_identifier))) + (parameter + (value_name))) + (number))) + (expression_statement + (function + (formal_parameters + (parameter + (value_name)) + (parameter + (value_name))) + (number))) + (expression_statement + (function + (formal_parameters + (parameter + (value_name)) + (parameter + (value_name))) + (number))) + (expression_statement + (function + (formal_parameters + (parameter + (value_name)) + (parameter + (uncurry) + (value_name)) + (parameter + (value_name)) + (parameter + (uncurry) + (value_name))) + (number))) + (expression_statement + (function + (formal_parameters + (parameter + (value_name))) (number)))) -=================================================== +================================================================================ Type annotations -=================================================== +================================================================================ (x: int, ~y: float): int => 5 ({contents: (x: int)}, {contents: y}) => x == y ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (function parameters: (formal_parameters - (parameter (value_identifier) (type_annotation (type_identifier))) - (parameter (labeled_parameter (value_identifier) (type_annotation (type_identifier))))) - return_type: (type_annotation (type_identifier)) + (parameter + (value_name) + (type_annotation + (type_constructor_path + (type_constructor)))) + (parameter + (labeled_parameter + (value_name) + (type_annotation + (type_constructor_path + (type_constructor)))))) + return_type: (type_annotation + (type_constructor_path + (type_constructor))) body: (number))) - (expression_statement - (function parameters: - (formal_parameters + (function + parameters: (formal_parameters (parameter (record_pattern - (value_identifier) - (parenthesized_pattern (value_identifier) (type_annotation (type_identifier))))) + (value_path + (value_name)) + (parenthesized_pattern + (value_name) + (type_annotation + (type_constructor_path + (type_constructor)))))) (parameter (record_pattern - (value_identifier) - (value_identifier)))) + (value_path + (value_name)) + (value_name)))) body: (binary_expression - left: (value_identifier) - right: (value_identifier))))) + left: (value_name) + right: (value_name))))) -=================================================== +================================================================================ Abstract type -=================================================== +================================================================================ let foo = (type a, x: 'a): a => x ---- +-------------------------------------------------------------------------------- (source_file (let_declaration (let_binding - (value_identifier) + (value_name) (function (formal_parameters - (parameter (abstract_type (type_identifier))) (parameter - (value_identifier) - (type_annotation (type_identifier)))) - (type_annotation (type_identifier)) - (value_identifier))))) - -=================================================== + (abstract_type + (type_constructor))) + (parameter + (value_name) + (type_annotation + (type_constructor_path + (type_constructor))))) + (type_annotation + (type_constructor_path + (type_constructor))) + (value_name))))) + +================================================================================ Parameter defaults -=================================================== +================================================================================ (~x: int=3, ~y=4.0, ~z: int=?, ~w=?, ()) => 5 ---- +-------------------------------------------------------------------------------- (source_file (expression_statement @@ -129,31 +176,36 @@ Parameter defaults parameters: (formal_parameters (parameter (labeled_parameter - (value_identifier) - (type_annotation (type_identifier)) + (value_name) + (type_annotation + (type_constructor_path + (type_constructor))) default_value: (number))) (parameter (labeled_parameter - (value_identifier) + (value_name) default_value: (number))) (parameter (labeled_parameter - (value_identifier) - (type_annotation (type_identifier)))) + (value_name) + (type_annotation + (type_constructor_path + (type_constructor))))) (parameter (labeled_parameter - (value_identifier))) - (parameter (unit))) + (value_name))) + (parameter + (unit))) body: (number)))) -=================================================== +================================================================================ Parameter aliasing -=================================================== +================================================================================ (~xTheGreat as x: int=3) => 5 (~p as (x, _)) => x ---- +-------------------------------------------------------------------------------- (source_file (expression_statement @@ -161,89 +213,110 @@ Parameter aliasing (formal_parameters (parameter (labeled_parameter - (value_identifier) - (as_aliasing (value_identifier)) - (type_annotation (type_identifier)) + (alias_pattern + (value_name) + (value_name)) + (type_annotation + (type_constructor_path + (type_constructor))) (number)))) (number))) - (expression_statement (function (formal_parameters (parameter (labeled_parameter - (value_identifier) - (as_aliasing + (alias_pattern + (value_name) (tuple_pattern - (tuple_item_pattern (value_identifier)) - (tuple_item_pattern (value_identifier))))))) - (value_identifier)))) + (tuple_item_pattern + (value_name)) + (tuple_item_pattern + (value_name))))))) + (value_name)))) -=================================================== +================================================================================ Record pattern -=================================================== +================================================================================ ({fooField, barField: {baz, qux}, mooField: baa}) => 5 ---- +-------------------------------------------------------------------------------- (source_file - (expression_statement (function - (formal_parameters - (parameter - (record_pattern - (value_identifier) - (value_identifier) + (expression_statement + (function + (formal_parameters + (parameter (record_pattern - (value_identifier) - (value_identifier)) - (value_identifier) - (value_identifier)))) - (number)))) + (value_path + (value_name)) + (value_path + (value_name)) + (record_pattern + (value_path + (value_name)) + (value_path + (value_name))) + (value_path + (value_name)) + (value_name)))) + (number)))) -=================================================== +================================================================================ Ref assignment as body -=================================================== +================================================================================ reactRef => myRef := Some(reactRef) ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (function - (value_identifier) + (value_name) (mutation_expression - (value_identifier) - (variant - (variant_identifier) - (arguments (value_identifier))))))) - -=================================================== + (value_path + (value_name)) + (call_expression + (constructor_path + (constructor_name)) + (arguments + (value_name))))))) + +================================================================================ Operator precendence -=================================================== +================================================================================ (a) => a->Foo.bar == 5 ---- +-------------------------------------------------------------------------------- (source_file - (expression_statement (function - (formal_parameters (parameter (value_identifier))) - (binary_expression - (pipe_expression - (value_identifier) - (value_identifier_path (module_identifier) (value_identifier))) - (number))))) - -=================================================== + (expression_statement + (function + (formal_parameters + (parameter + (value_name))) + (binary_expression + (pipe_expression + (value_name) + (value_path + (module_path + (module_name)) + (value_name))) + (number))))) + +================================================================================ Async -=================================================== +================================================================================ async () => body ---- +-------------------------------------------------------------------------------- (source_file (expression_statement - (function (formal_parameters) (value_identifier)))) + (function + (formal_parameters) + (value_name)))) diff --git a/test/corpus/jsx.txt b/test/corpus/jsx.txt index a5af0e7..f1b0ab1 100644 --- a/test/corpus/jsx.txt +++ b/test/corpus/jsx.txt @@ -1,6 +1,6 @@ -============================================== +================================================================================ Simple JSX elements -============================================== +================================================================================
a b c @@ -8,124 +8,185 @@ Simple JSX elements
React.null

item.content

---- +-------------------------------------------------------------------------------- (source_file (expression_statement (jsx_self_closing_element (jsx_identifier) - (jsx_attribute (property_identifier) (string (string_fragment))) - (jsx_attribute (property_identifier) (jsx_expression (expression_statement (number)))))) + (jsx_attribute + (property_identifier) + (string + (string_fragment))) + (jsx_attribute + (property_identifier) + (jsx_expression + (expression_statement + (number)))))) (expression_statement (jsx_element - (jsx_opening_element (nested_jsx_identifier (jsx_identifier) (jsx_identifier))) - (value_identifier) + (jsx_opening_element + (jsx_identifier + (module_path + (module_name)) + (constructor_name))) + (value_path + (value_name)) (jsx_element - (jsx_opening_element (jsx_identifier)) - (value_identifier) - (jsx_closing_element (jsx_identifier))) - (value_identifier) - (jsx_closing_element (nested_jsx_identifier (jsx_identifier) (jsx_identifier))))) + (jsx_opening_element + (jsx_identifier)) + (value_path + (value_name)) + (jsx_closing_element + (jsx_identifier))) + (value_path + (value_name)) + (jsx_closing_element + (jsx_identifier + (module_path + (module_name)) + (constructor_name))))) (expression_statement (jsx_element (jsx_opening_element - (nested_jsx_identifier - (nested_jsx_identifier - (nested_jsx_identifier (jsx_identifier) (jsx_identifier)) - (jsx_identifier)) - (jsx_identifier))) + (jsx_identifier + (module_path + (module_path + (module_path + (module_name)) + (module_name)) + (module_name)) + (constructor_name))) (jsx_closing_element - (nested_jsx_identifier - (nested_jsx_identifier - (nested_jsx_identifier (jsx_identifier) (jsx_identifier)) - (jsx_identifier)) - (jsx_identifier))))) + (jsx_identifier + (module_path + (module_path + (module_path + (module_name)) + (module_name)) + (module_name)) + (constructor_name))))) (expression_statement (jsx_element - (jsx_opening_element (jsx_identifier)) - (value_identifier_path (module_identifier) (value_identifier)) - (jsx_closing_element (jsx_identifier)))) - + (jsx_opening_element + (jsx_identifier)) + (value_path + (module_path + (module_name)) + (value_name)) + (jsx_closing_element + (jsx_identifier)))) (expression_statement (jsx_element - (jsx_opening_element (jsx_identifier)) + (jsx_opening_element + (jsx_identifier)) (member_expression - (value_identifier) - (property_identifier)) - (jsx_closing_element (jsx_identifier))))) + (value_name) + (value_path + (value_name))) + (jsx_closing_element + (jsx_identifier))))) -============================================== +================================================================================ Custom type children -============================================== +================================================================================
"Hello"
48
---- +-------------------------------------------------------------------------------- (source_file (expression_statement (jsx_element - (jsx_opening_element (jsx_identifier)) - (string (string_fragment)) - (jsx_closing_element (jsx_identifier)))) + (jsx_opening_element + (jsx_identifier)) + (string + (string_fragment)) + (jsx_closing_element + (jsx_identifier)))) (expression_statement (jsx_element - (jsx_opening_element (jsx_identifier)) + (jsx_opening_element + (jsx_identifier)) (number) - (jsx_closing_element (jsx_identifier))))) + (jsx_closing_element + (jsx_identifier))))) -============================================== +================================================================================ Attribute values -============================================== +================================================================================ ; zoo y=true /> ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (jsx_self_closing_element - (jsx_identifier) - (jsx_attribute (property_identifier) (number)) - (jsx_attribute (property_identifier) (polyvar (polyvar_identifier))) - (jsx_attribute (property_identifier) (variant (variant_identifier))) - (jsx_attribute (property_identifier)) - (jsx_attribute (property_identifier)) - (jsx_attribute (property_identifier) (jsx_expression (expression_statement (value_identifier)))))) + (jsx_identifier + (constructor_name)) + (jsx_attribute + (property_identifier) + (number)) + (jsx_attribute + (property_identifier) + (polyvar + (polyvar_identifier))) + (jsx_attribute + (property_identifier) + (constructor_path + (constructor_name))) + (jsx_attribute + (property_identifier)) + (jsx_attribute + (property_identifier)) + (jsx_attribute + (property_identifier) + (jsx_expression + (expression_statement + (value_name)))))) (expression_statement (jsx_self_closing_element - (jsx_identifier) + (jsx_identifier + (constructor_name)) (jsx_attribute (property_identifier) - (pipe_expression (value_identifier) (value_identifier))) + (pipe_expression + (value_name) + (value_name))) (jsx_attribute (property_identifier) (true))))) -============================================== +================================================================================ Anonymous JSX element -============================================== +================================================================================ <> <> ---- +-------------------------------------------------------------------------------- (source_file - (expression_statement (jsx_fragment)) + (expression_statement + (jsx_fragment)) (expression_statement (jsx_element - (jsx_opening_element (jsx_identifier)) + (jsx_opening_element + (jsx_identifier + (constructor_name))) (jsx_fragment) - (jsx_closing_element (jsx_identifier))))) + (jsx_closing_element + (jsx_identifier + (constructor_name)))))) -=================================================== +================================================================================ Block children -=================================================== +================================================================================
{ @@ -134,44 +195,63 @@ Block children }
---- +-------------------------------------------------------------------------------- (source_file (expression_statement (jsx_element - (jsx_opening_element (jsx_identifier)) + (jsx_opening_element + (jsx_identifier)) (block (let_declaration - (let_binding (value_identifier) (string (string_fragment)))) + (let_binding + (value_name) + (string + (string_fragment)))) (expression_statement (jsx_element - (jsx_opening_element (jsx_identifier) (jsx_attribute (property_identifier))) + (jsx_opening_element + (jsx_identifier) + (jsx_attribute + (property_identifier))) (block (expression_statement (call_expression - (value_identifier_path (module_identifier) (value_identifier)) - (arguments (string (string_fragment)))))) - (jsx_closing_element (jsx_identifier))))) - (jsx_closing_element (jsx_identifier))))) + (value_path + (module_path + (module_name)) + (value_name)) + (arguments + (string + (string_fragment)))))) + (jsx_closing_element + (jsx_identifier))))) + (jsx_closing_element + (jsx_identifier))))) -=================================================== +================================================================================ Children spread -=================================================== +================================================================================ ...myChild ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (jsx_element - (jsx_opening_element (jsx_identifier)) - (spread_element (value_identifier)) - (jsx_closing_element (jsx_identifier))))) + (jsx_opening_element + (jsx_identifier + (constructor_name))) + (spread_element + (value_name)) + (jsx_closing_element + (jsx_identifier + (constructor_name)))))) -=================================================== +================================================================================ Attribute Block -=================================================== +================================================================================ ---- +-------------------------------------------------------------------------------- (source_file (expression_statement (jsx_element (jsx_opening_element - (jsx_identifier) + (jsx_identifier + (constructor_name)) (jsx_attribute (property_identifier) (jsx_expression (expression_statement (call_expression - (value_identifier_path - (module_identifier) - (value_identifier)) + (value_path + (module_path + (module_name)) + (value_name)) (arguments (string (string_fragment))))))) (jsx_attribute (property_identifier) (jsx_expression - (open_statement (module_identifier)) + (open_statement + (module_path + (module_name))) (expression_statement (record (record_field - (property_identifier) - (value_identifier)) + (property_identifier + (value_name)) + (value_name)) (record_field - (property_identifier) + (property_identifier + (value_name)) (false))))))) (jsx_self_closing_element - (jsx_identifier)) + (jsx_identifier + (constructor_name))) (jsx_closing_element - (jsx_identifier))))) + (jsx_identifier + (constructor_name)))))) -=================================================== +================================================================================ Spread props -=================================================== +================================================================================
---- +-------------------------------------------------------------------------------- (source_file (expression_statement (jsx_self_closing_element (jsx_identifier) (jsx_expression - (spread_element (value_identifier))))) + (spread_element + (value_name))))) (expression_statement (jsx_element - (jsx_opening_element (jsx_identifier) - (jsx_expression (spread_element (value_identifier)))) - (jsx_closing_element (jsx_identifier))))) + (jsx_opening_element + (jsx_identifier + (constructor_name)) + (jsx_expression + (spread_element + (value_name)))) + (jsx_closing_element + (jsx_identifier + (constructor_name)))))) diff --git a/test/corpus/let_bindings.txt b/test/corpus/let_bindings.txt index f106d8d..ef04ace 100644 --- a/test/corpus/let_bindings.txt +++ b/test/corpus/let_bindings.txt @@ -1,6 +1,6 @@ -============================================ +================================================================================ Plain -============================================ +================================================================================ let a = 5 let b = a @@ -11,279 +11,322 @@ let async = 1 let unpack = 2 export d = 5 ---- +-------------------------------------------------------------------------------- (source_file (let_declaration - (let_binding (value_identifier) (number))) + (let_binding + (value_name) + (number))) (let_declaration - (let_binding (value_identifier) (value_identifier))) + (let_binding + (value_name) + (value_name))) (let_declaration - (let_binding (value_identifier) (polyvar (polyvar_identifier)))) + (let_binding + (value_name) + (polyvar + (polyvar_identifier)))) (let_declaration - (let_binding (value_identifier) (number))) + (let_binding + (value_name) + (number))) (let_declaration - (let_binding (value_identifier) (value_identifier))) + (let_binding + (value_name) + (value_name))) (let_declaration - (let_binding (value_identifier) (number))) + (let_binding + (value_name) + (number))) (let_declaration - (let_binding (value_identifier) (number))) + (let_binding + (value_name) + (number))) (let_declaration - (let_binding (value_identifier) (number)))) + (let_binding + (value_name) + (number)))) -============================================ +================================================================================ Tuple destructuring -============================================ +================================================================================ let (a, b, (c, d)) = foo let (state: int, setState) = foo let (a, b, ()) = foo ---- +-------------------------------------------------------------------------------- (source_file (let_declaration (let_binding (tuple_pattern - (tuple_item_pattern (value_identifier)) - (tuple_item_pattern (value_identifier)) + (tuple_item_pattern + (value_name)) + (tuple_item_pattern + (value_name)) (tuple_item_pattern (tuple_pattern - (tuple_item_pattern (value_identifier)) - (tuple_item_pattern (value_identifier))))) - (value_identifier))) + (tuple_item_pattern + (value_name)) + (tuple_item_pattern + (value_name))))) + (value_name))) (let_declaration (let_binding (tuple_pattern - (tuple_item_pattern (value_identifier) (type_annotation (type_identifier))) - (tuple_item_pattern (value_identifier))) - (value_identifier))) + (tuple_item_pattern + (value_name) + (type_annotation + (type_constructor_path + (type_constructor)))) + (tuple_item_pattern + (value_name))) + (value_name))) (let_declaration (let_binding (tuple_pattern - (tuple_item_pattern (value_identifier)) - (tuple_item_pattern (value_identifier)) - (tuple_item_pattern (unit))) - (value_identifier)))) + (tuple_item_pattern + (value_name)) + (tuple_item_pattern + (value_name)) + (tuple_item_pattern + (unit))) + (value_name)))) -============================================ +================================================================================ Record destructuring -============================================ +================================================================================ let {bar, baz} = foo let {bar, baz: qux} = foo let {Bar.Bar.bar: bar} = foo ---- +-------------------------------------------------------------------------------- (source_file (let_declaration (let_binding - (record_pattern (value_identifier) (value_identifier)) (value_identifier))) - + (record_pattern + (value_path + (value_name)) + (value_path + (value_name))) + (value_name))) (let_declaration (let_binding (record_pattern - (value_identifier) - (value_identifier) - (value_identifier)) - (value_identifier))) - + (value_path + (value_name)) + (value_path + (value_name)) + (value_name)) + (value_name))) (let_declaration (let_binding (record_pattern - (value_identifier_path - (module_identifier_path - (module_identifier) - (module_identifier)) - (value_identifier)) - (value_identifier)) - (value_identifier)))) - -============================================ + (value_path + (module_path + (module_path + (module_name)) + (module_name)) + (value_name)) + (value_name)) + (value_name)))) + +================================================================================ Array destructuring -============================================ +================================================================================ let [bar, baz] = foo let [bar, baz, _] = foo let [@decorator bar, _] = foo ---- +-------------------------------------------------------------------------------- (source_file (let_declaration (let_binding (array_pattern - (value_identifier) - (value_identifier)) - (value_identifier))) - + (value_name) + (value_name)) + (value_name))) (let_declaration (let_binding (array_pattern - (value_identifier) - (value_identifier) - (value_identifier)) - (value_identifier))) - + (value_name) + (value_name) + (value_name)) + (value_name))) (let_declaration (let_binding (array_pattern - (decorator (decorator_identifier)) - (value_identifier) - (value_identifier)) - (value_identifier)))) + (decorator + (decorator_identifier)) + (value_name) + (value_name)) + (value_name)))) -============================================ +================================================================================ List destructuring -============================================ +================================================================================ let list{head, ...tail} = foo let list{@decorator head, ..._} = foo ---- +-------------------------------------------------------------------------------- (source_file (let_declaration (let_binding (list_pattern - (value_identifier) - (spread_pattern (value_identifier))) - (value_identifier))) - + (value_name) + (spread_pattern + (value_name))) + (value_name))) (let_declaration (let_binding (list_pattern - (decorator (decorator_identifier)) - (value_identifier) - (spread_pattern (value_identifier))) - (value_identifier)))) - - -============================================ + (decorator + (decorator_identifier)) + (value_name) + (spread_pattern + (value_name))) + (value_name)))) + +================================================================================ Block -============================================ +================================================================================ let x = { 3 4 } ---- +-------------------------------------------------------------------------------- (source_file (let_declaration (let_binding - (value_identifier) + (value_name) (block - (expression_statement (number)) - (expression_statement (number)))))) + (expression_statement + (number)) + (expression_statement + (number)))))) -============================================ +================================================================================ Annotated -============================================ +================================================================================ let a: int = 5 let b: 'a => unit = ignore ---- +-------------------------------------------------------------------------------- (source_file (let_declaration (let_binding - (value_identifier) - (type_annotation (type_identifier)) + (value_name) + (type_annotation + (type_constructor_path + (type_constructor))) (number))) (let_declaration (let_binding - (value_identifier) + (value_name) (type_annotation (function_type - (function_type_parameters (type_identifier)) + (function_type_parameters + (type_constructor_path + (type_constructor))) (unit_type))) - (value_identifier)))) + (value_name)))) -============================================ +================================================================================ Recursive -============================================ +================================================================================ let rec foo = n => foo(n-1) ---- +-------------------------------------------------------------------------------- (source_file (let_declaration (let_binding - (value_identifier) - (function - (value_identifier) - (call_expression - (value_identifier) - (arguments - (binary_expression - (value_identifier) - (number)))))))) - -============================================ + (value_name) + (function + (value_name) + (call_expression + (value_name) + (arguments + (binary_expression + (value_name) + (number)))))))) + +================================================================================ Unit -============================================ +================================================================================ let () = noop ---- +-------------------------------------------------------------------------------- (source_file (let_declaration - (let_binding (unit) (value_identifier)))) + (let_binding + (unit) + (value_name)))) -============================================ +================================================================================ And (Primitives) -============================================ +================================================================================ let a = 5 and b = 4 ---- +-------------------------------------------------------------------------------- (source_file (let_declaration (let_binding - (value_identifier) + (value_name) (number)) (let_binding - (value_identifier) + (value_name) (number)))) -============================================ +================================================================================ And (Functions) -============================================ +================================================================================ let rec a = x => x + b(x) and b = y => y - 1 ---- +-------------------------------------------------------------------------------- (source_file (let_declaration (let_binding - (value_identifier) + (value_name) (function - (value_identifier) + (value_name) (binary_expression - (value_identifier) + (value_name) (call_expression - (value_identifier) + (value_name) (arguments - (value_identifier)))))) + (value_name)))))) (let_binding - (value_identifier) + (value_name) (function - (value_identifier) + (value_name) (binary_expression - (value_identifier) + (value_name) (number)))))) -============================================ +================================================================================ And (decorated) -============================================ +================================================================================ @one let rec a = b @@ -292,110 +335,126 @@ and b = c @four and c = 42 ---- +-------------------------------------------------------------------------------- (source_file - (decorator (decorator_identifier)) + (decorator + (decorator_identifier)) (let_declaration (let_binding - (value_identifier) - (value_identifier)) - (decorator (decorator_identifier)) - (decorator (decorator_identifier)) + (value_name) + (value_name)) + (decorator + (decorator_identifier)) + (decorator + (decorator_identifier)) (let_binding - (value_identifier) - (value_identifier)) - (decorator (decorator_identifier)) + (value_name) + (value_name)) + (decorator + (decorator_identifier)) (let_binding - (value_identifier) + (value_name) (number)))) -=========================================== +================================================================================ Labled function with uncurried -=========================================== +================================================================================ let test = (. ~attr) => () ---- +-------------------------------------------------------------------------------- (source_file (let_declaration (let_binding - (value_identifier) + (value_name) (function (formal_parameters (parameter (uncurry) (labeled_parameter - (value_identifier)))) + (value_name)))) (unit))))) -=========================================== +================================================================================ Destructuring module -=========================================== +================================================================================ let {foo, bar} = module(User) let {baz, _} = module(User.Inner) ---- +-------------------------------------------------------------------------------- (source_file (let_declaration (let_binding (record_pattern - (value_identifier) - (value_identifier)) - (module_pack (module_identifier)))) + (value_path + (value_name)) + (value_path + (value_name))) + (package_expression + (module_path + (module_name))))) (let_declaration (let_binding (record_pattern - (value_identifier) - (value_identifier)) - (module_pack - (module_identifier_path - (module_identifier) - (module_identifier)))))) - -=========================================== + (value_path + (value_name)) + (value_path + (value_name))) + (package_expression + (module_path + (module_path + (module_name)) + (module_name)))))) + +================================================================================ Packing module -=========================================== +================================================================================ let foo = module(Bar) ---- +-------------------------------------------------------------------------------- (source_file (let_declaration (let_binding - (value_identifier) - (module_pack (module_identifier))))) + (value_name) + (package_expression + (module_path + (module_name)))))) -=========================================== +================================================================================ Unpacking module -=========================================== +================================================================================ let module(Bar) = foo ---- +-------------------------------------------------------------------------------- (source_file (let_declaration (let_binding - (module_pack (module_identifier)) - (value_identifier)))) + (package_pattern + (module_name)) + (value_name)))) -=========================================== +================================================================================ Lazy Values -=========================================== +================================================================================ let lazy x = lazy(1) ---- +-------------------------------------------------------------------------------- (source_file (let_declaration (let_binding - (lazy_pattern (value_identifier)) + (lazy_pattern + (value_name)) (lazy_expression - (parenthesized_expression (number)))))) + (parenthesized_expression + (number)))))) diff --git a/test/corpus/literals.txt b/test/corpus/literals.txt index 7606615..e5d560e 100644 --- a/test/corpus/literals.txt +++ b/test/corpus/literals.txt @@ -1,19 +1,21 @@ -============================================ +================================================================================ Boolean -============================================ +================================================================================ true false ---- +-------------------------------------------------------------------------------- (source_file - (expression_statement (true)) - (expression_statement (false))) + (expression_statement + (true)) + (expression_statement + (false))) -============================================ +================================================================================ Numbers -============================================ +================================================================================ 04000 400 @@ -61,91 +63,150 @@ Numbers 001. 002e3 ---- +-------------------------------------------------------------------------------- (source_file - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number)) - (expression_statement (number))) - -========================================== + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number)) + (expression_statement + (number))) + +================================================================================ Strings containing comment-like content -========================================== +================================================================================ "//ok\n//what" "/*ok\n/*what" ---- +-------------------------------------------------------------------------------- (source_file (expression_statement - (string (string_fragment) (escape_sequence) (string_fragment))) + (string + (string_fragment) + (escape_sequence) + (string_fragment))) (expression_statement - (string (string_fragment) (escape_sequence) (string_fragment)))) + (string + (string_fragment) + (escape_sequence) + (string_fragment)))) -========================================== +================================================================================ Quote escaping -========================================== +================================================================================ "" "\"" "a\"b" "it's a tiny tiny world" ---- +-------------------------------------------------------------------------------- (source_file - (expression_statement (string)) - (expression_statement (string (escape_sequence))) (expression_statement - (string (string_fragment) (escape_sequence) (string_fragment))) - (expression_statement (string (string_fragment)))) + (string)) + (expression_statement + (string + (escape_sequence))) + (expression_statement + (string + (string_fragment) + (escape_sequence) + (string_fragment))) + (expression_statement + (string + (string_fragment)))) -============================================ +================================================================================ Template strings -============================================ +================================================================================ `` ` ` @@ -172,41 +233,65 @@ The caller should either handle this error, or expect that exit code.` anything`Hello` ----- +-------------------------------------------------------------------------------- (source_file - (expression_statement (template_string)) - (expression_statement (template_string (template_string_content))) - (expression_statement (template_string (template_string_content (escape_sequence)))) - (expression_statement (template_string (template_string_content))) - (expression_statement (template_string (template_string_content))) - (expression_statement (template_string (template_string_content))) + (expression_statement + (template_string)) + (expression_statement + (template_string + (template_string_content))) + (expression_statement + (template_string + (template_string_content + (escape_sequence)))) + (expression_statement + (template_string + (template_string_content))) + (expression_statement + (template_string + (template_string_content))) + (expression_statement + (template_string + (template_string_content))) (expression_statement (template_string (template_string_content (template_substitution - (binary_expression (number) (number))) + (binary_expression + (number) + (number))) (template_substitution - (binary_expression (number) (number)))))) + (binary_expression + (number) + (number)))))) (expression_statement (template_string (template_string_content (escape_sequence) (template_substitution (call_expression - (value_identifier) + (value_name) (arguments (string (string_fragment))))) - (escape_sequence) - (template_substitution (value_identifier))))) - (expression_statement (template_string (template_string_content))) - (expression_statement (template_string (template_string_content (escape_sequence)))) - (expression_statement (template_string (template_string_content)))) + (escape_sequence) + (template_substitution + (value_name))))) + (expression_statement + (template_string + (template_string_content))) + (expression_statement + (template_string + (template_string_content + (escape_sequence)))) + (expression_statement + (template_string + (template_string_content)))) -============================================ +================================================================================ Tricky template strings -============================================ +================================================================================ `$` `$$` @@ -214,18 +299,28 @@ Tricky template strings `$-notAsubstitution` `$NotAsubstitution` ---- +-------------------------------------------------------------------------------- (source_file - (expression_statement (template_string (template_string_content))) - (expression_statement (template_string (template_string_content))) - (expression_statement (template_string (template_string_content))) - (expression_statement (template_string (template_string_content))) - (expression_statement (template_string (template_string_content)))) + (expression_statement + (template_string + (template_string_content))) + (expression_statement + (template_string + (template_string_content))) + (expression_statement + (template_string + (template_string_content))) + (expression_statement + (template_string + (template_string_content))) + (expression_statement + (template_string + (template_string_content)))) -============================================ +================================================================================ Characters -============================================ +================================================================================ 'a' '\'' '\\' @@ -236,22 +331,36 @@ Characters '\u{1F600}' '@' ---- +-------------------------------------------------------------------------------- (source_file - (expression_statement (character)) - (expression_statement (character (escape_sequence))) - (expression_statement (character (escape_sequence))) - (expression_statement (character)) - (expression_statement (character)) - (expression_statement (character (escape_sequence))) - (expression_statement (character (escape_sequence))) - (expression_statement (character (escape_sequence))) - (expression_statement (character))) - -============================================ + (expression_statement + (character)) + (expression_statement + (character + (escape_sequence))) + (expression_statement + (character + (escape_sequence))) + (expression_statement + (character)) + (expression_statement + (character)) + (expression_statement + (character + (escape_sequence))) + (expression_statement + (character + (escape_sequence))) + (expression_statement + (character + (escape_sequence))) + (expression_statement + (character))) + +================================================================================ Polyvars -============================================ +================================================================================ #foo #Bar(7) @@ -259,16 +368,27 @@ Polyvars #\"qux" #77 ---- +-------------------------------------------------------------------------------- (source_file (expression_statement - (polyvar (polyvar_identifier))) + (polyvar + (polyvar_identifier))) (expression_statement - (polyvar (polyvar_identifier) (arguments (number)))) + (polyvar + (polyvar_identifier) + (call_arguments + (number)))) (expression_statement - (polyvar (polyvar_identifier (polyvar_string (string_fragment))))) + (polyvar + (polyvar_identifier + (polyvar_string + (string_fragment))))) (expression_statement - (polyvar (polyvar_identifier (polyvar_string (string_fragment))))) + (polyvar + (polyvar_identifier + (polyvar_string + (string_fragment))))) (expression_statement - (polyvar (polyvar_identifier)))) + (polyvar + (polyvar_identifier)))) diff --git a/test/corpus/modules.txt b/test/corpus/modules.txt index 636ae7e..a3f7839 100644 --- a/test/corpus/modules.txt +++ b/test/corpus/modules.txt @@ -1,22 +1,25 @@ -=========================================== +================================================================================ Open -=========================================== +================================================================================ open Foo open! Foo.Bar ---- +-------------------------------------------------------------------------------- (source_file - (open_statement (module_identifier)) (open_statement - (module_identifier_path - (module_identifier) - (module_identifier)))) + (module_path + (module_name))) + (open_statement + (module_path + (module_path + (module_name)) + (module_name)))) -=========================================== +================================================================================ Include -=========================================== +================================================================================ include Foo include Foo.Bar @@ -38,80 +41,126 @@ include ( } ) ---- +-------------------------------------------------------------------------------- (source_file - (include_statement (module_identifier)) (include_statement - (module_identifier_path (module_identifier) (module_identifier))) + (module_path + (module_name))) + (include_statement + (module_path + (module_path + (module_name)) + (module_name))) (include_statement (functor_use - (module_identifier_path (module_identifier) (module_identifier)) - (arguments (module_identifier)))) + (module_path + (module_path + (module_name)) + (module_name)) + (arguments + (module_path + (module_name))))) (include_statement (functor_use - (module_identifier_path (module_identifier) (module_identifier)) + (module_path + (module_path + (module_name)) + (module_name)) (arguments (block - (type_declaration (type_binding (type_identifier))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)))) (let_declaration (let_binding - (value_identifier) - (type_annotation (type_identifier)))))))) + (value_name) + (type_annotation + (type_constructor_path + (type_constructor))))))))) (include_statement (module_type_of - (module_identifier_path (module_identifier) (module_identifier)))) + (module_path + (module_path + (module_name)) + (module_name)))) (include_statement - (parenthesized_module_expression + (parenthesized_module_type (module_type_of - (module_identifier_path (module_identifier) (module_identifier))))) - + (module_path + (module_path + (module_name)) + (module_name))))) (include_statement - (parenthesized_module_expression - (module_identifier) + (typed_module_expression + (module_path + (module_name)) (module_type_annotation (module_type_constraint - (module_type_of (module_identifier)) + (module_type_of + (module_path + (module_name))) (constrain_module - (module_identifier_path - (module_identifier) (module_identifier)) - (module_identifier_path (module_identifier) (module_identifier))) + (module_path + (module_path + (module_name)) + (module_name)) + (module_path + (module_path + (module_name)) + (module_name))) (constrain_module - (module_identifier) - (module_identifier_path (module_identifier) - (module_identifier))))))) - + (module_path + (module_name)) + (module_path + (module_path + (module_name)) + (module_name))))))) (include_statement (module_type_of - (block (include_statement (module_identifier))))) - + (block + (include_statement + (module_path + (module_name)))))) (include_statement - (block - (let_declaration - (let_binding (value_identifier) - (call_expression - (value_identifier_path (module_identifier) (value_identifier)) - (arguments (string (string_fragment))))))))) - -=========================================== + (parenthesized_module_expression + (block + (let_declaration + (let_binding + (value_name) + (call_expression + (value_path + (module_path + (module_name)) + (value_name)) + (arguments + (string + (string_fragment)))))))))) + +================================================================================ Simple definition -=========================================== +================================================================================ module MyModule = { type t } ---- +-------------------------------------------------------------------------------- (source_file (module_declaration (module_binding - (module_identifier) - (block (type_declaration (type_binding (type_identifier))))))) + (module_name) + (block + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)))))))) -=========================================== +================================================================================ Signature and definition -=========================================== +================================================================================ module MyModule: { let a: int @@ -129,71 +178,94 @@ module MyModule: { type t = int } ---- +-------------------------------------------------------------------------------- (source_file (module_declaration (module_binding - name: (module_identifier) + name: (module_name) signature: (block (let_declaration (let_binding - pattern: (value_identifier) (type_annotation (type_identifier)))) + pattern: (value_name) + (type_annotation + (type_constructor_path + (type_constructor))))) (let_declaration - (let_binding - pattern: (value_identifier) (type_annotation (type_identifier)))) + (let_binding + pattern: (value_name) + (type_annotation + (type_constructor_path + (type_constructor))))) (let_declaration (let_binding - pattern: (value_identifier) (type_annotation (type_identifier))))))) + pattern: (value_name) + (type_annotation + (type_constructor_path + (type_constructor)))))))) (module_declaration (module_binding - name: (module_identifier) - signature: (module_identifier_path (module_identifier) (module_identifier)) - definition: - (block - (type_declaration - (type_binding - name: (type_identifier)))))) + name: (module_name) + signature: (module_type_path + (module_path + (module_name)) + (module_type_name + (module_name))) + definition: (block + (type_declaration + (type_binding + name: (type_constructor_path + (type_constructor))))))) (module_declaration (module_binding - name: (module_identifier) - signature: - (block - (type_declaration - (type_binding - name: (type_identifier)))) - definition: - (block - (type_declaration - (type_binding - name: (type_identifier) - (type_identifier))))))) - -=========================================== + name: (module_name) + signature: (block + (type_declaration + (type_binding + name: (type_constructor_path + (type_constructor))))) + definition: (block + (type_declaration + (type_binding + name: (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor)))))))) + +================================================================================ Module types -=========================================== +================================================================================ module type S1 = { type t } module type S2 = module type of MyModule.Submod module type t ---- +-------------------------------------------------------------------------------- (source_file (module_declaration (module_binding - (module_identifier) - (block (type_declaration (type_binding (type_identifier)))))) + (module_name) + (block + (type_declaration + (type_binding + (type_constructor_path + (type_constructor))))))) (module_declaration (module_binding - (module_identifier) + (module_name) (module_type_of - (module_identifier_path (module_identifier) (module_identifier))))) - (module_declaration (module_binding (type_identifier)))) + (module_path + (module_path + (module_name)) + (module_name))))) + (module_declaration + (module_binding + (type_constructor)))) -=========================================== +================================================================================ First Class module -=========================================== +================================================================================ module(LightTheme) module(A: A) @@ -213,170 +285,238 @@ module S = unpack(Mod.read(v)) module S = unpack(%extension(payload)) ---- +-------------------------------------------------------------------------------- (source_file (expression_statement - (module_pack (module_identifier))) + (package_expression + (module_path + (module_name)))) (expression_statement - (module_pack - (module_identifier) - (module_type_annotation (module_identifier)))) + (package_expression + (module_path + (module_name)) + (module_type_annotation + (module_type_path + (module_type_name + (module_name)))))) (expression_statement - (module_pack + (package_expression (block - (type_declaration (type_binding (type_identifier))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)))) (let_declaration (let_binding - (value_identifier) - (string (string_fragment))))) - (module_type_annotation (module_identifier)))) + (value_name) + (string + (string_fragment))))) + (module_type_annotation + (module_type_path + (module_type_name + (module_name)))))) (expression_statement - (module_pack + (package_expression (functor_use - (module_identifier) + (module_path + (module_name)) (arguments (module_unpack - (value_identifier)))))) + (value_name)))))) (module_declaration (module_binding - (module_identifier) + (module_name) (module_unpack - (value_identifier) - (module_type_annotation (module_identifier))))) + (value_name) + (module_type_annotation + (module_type_path + (module_type_name + (module_name))))))) (module_declaration (module_binding - (module_identifier) + (module_name) (module_unpack - (value_identifier) + (value_name) (module_type_annotation - (module_type_constraint (module_identifier) - (constrain_type (type_identifier) (type_identifier))))))) + (module_type_constraint + (module_type_path + (module_type_name + (module_name))) + (constrain_type + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor)))))))) (module_declaration (module_binding - (module_identifier) + (module_name) (module_unpack (call_expression - (value_identifier_path (module_identifier) (value_identifier)) - (arguments (value_identifier)))))) + (value_path + (module_path + (module_name)) + (value_name)) + (arguments + (value_name)))))) (module_declaration (module_binding - (module_identifier) - (module_unpack - (extension_expression - (extension_identifier) - (expression_statement (value_identifier))))))) - + (module_name) + (module_unpack + (extension_expression + (extension_identifier) + (expression_statement + (value_name))))))) -=========================================== +================================================================================ Functor definition -=========================================== +================================================================================ module MyFunctor = (X: {type t}, Y: {type t}): {type tx; type ty} => { type tx = X.t type ty = Y.t } ---- +-------------------------------------------------------------------------------- (source_file (module_declaration (module_binding - name: (module_identifier) + name: (module_name) definition: (functor parameters: (functor_parameters (functor_parameter - (module_identifier) - (module_type_annotation (block (type_declaration (type_binding name: (type_identifier)))))) + (module_path + (module_name)) + (module_type_annotation + (block + (type_declaration + (type_binding + name: (type_constructor_path + (type_constructor))))))) (functor_parameter - (module_identifier) - (module_type_annotation (block (type_declaration (type_binding name: (type_identifier))))))) + (module_path + (module_name)) + (module_type_annotation + (block + (type_declaration + (type_binding + name: (type_constructor_path + (type_constructor)))))))) return_module_type: (module_type_annotation - (block - (type_declaration - (type_binding name: (type_identifier))) - (type_declaration - (type_binding name: (type_identifier))))) + (block + (type_declaration + (type_binding + name: (type_constructor_path + (type_constructor)))) + (type_declaration + (type_binding + name: (type_constructor_path + (type_constructor)))))) body: (block (type_declaration (type_binding - name: (type_identifier) - (type_identifier_path (module_identifier) (type_identifier)))) + name: (type_constructor_path + (type_constructor)) + (type_constructor_path + (module_path + (module_name)) + (type_constructor)))) (type_declaration (type_binding - name: (type_identifier) - (type_identifier_path (module_identifier) (type_identifier))))))))) - -=========================================== + name: (type_constructor_path + (type_constructor)) + (type_constructor_path + (module_path + (module_name)) + (type_constructor))))))))) + +================================================================================ Functor signature -=========================================== +================================================================================ module Make: (Content: StaticContent) => { let make: string => string } ---- +-------------------------------------------------------------------------------- (source_file (module_declaration (module_binding - (module_identifier) + (module_name) (functor (functor_parameters (functor_parameter - (module_identifier) - (module_type_annotation (module_identifier)))) + (module_path + (module_name)) + (module_type_annotation + (module_type_path + (module_type_name + (module_name)))))) (block (let_declaration (let_binding - (value_identifier) + (value_name) (type_annotation - (function_type (function_type_parameters (type_identifier)) (type_identifier)))))))))) - -=========================================== + (function_type + (function_type_parameters + (type_constructor_path + (type_constructor))) + (type_constructor_path + (type_constructor))))))))))) + +================================================================================ Functor use -=========================================== +================================================================================ module M = MyFunctor(Foo, Bar.Baz) ---- +-------------------------------------------------------------------------------- (source_file (module_declaration (module_binding - (module_identifier) + (module_name) (functor_use - (module_identifier) + (module_path + (module_name)) (arguments - (module_identifier) - (module_identifier_path (module_identifier) (module_identifier))))))) - -=========================================== + (module_path + (module_name)) + (module_path + (module_path + (module_name)) + (module_name))))))) + +================================================================================ Alias -=========================================== +================================================================================ module Q = Foo.Bar.Qux module Foo' = Foo ---- +-------------------------------------------------------------------------------- (source_file (module_declaration (module_binding - (module_identifier) - (module_identifier_path - (module_identifier_path - (module_identifier) - (module_identifier)) - (module_identifier)))) + (module_name) + (module_path + (module_path + (module_path + (module_name)) + (module_name)) + (module_name)))) (module_declaration (module_binding - (module_identifier) - (module_identifier)))) + (module_name) + (module_path + (module_name))))) -=========================================== +================================================================================ Recursive -=========================================== +================================================================================ module rec BYOBReader: { include Reader @@ -389,51 +529,63 @@ and B: T = { let x = 1 } ---- +-------------------------------------------------------------------------------- (source_file (module_declaration (module_binding - (module_identifier) + (module_name) (block - (include_statement (module_identifier))) - (module_identifier))) - + (include_statement + (module_path + (module_name)))) + (module_path + (module_name)))) (module_declaration (module_binding - (module_identifier) (module_identifier) + (module_name) + (module_type_path + (module_type_name + (module_name))) (block (let_declaration (let_binding - (value_identifier) - (value_identifier_path - (module_identifier) (value_identifier)))))) + (value_name) + (value_path + (module_path + (module_name)) + (value_name)))))) (module_binding - (module_identifier) (module_identifier) + (module_name) + (module_type_path + (module_type_name + (module_name))) (block (let_declaration (let_binding - (value_identifier) (number))))))) + (value_name) + (number))))))) -=========================================== +================================================================================ Definition through extension -=========================================== +================================================================================ module Styles = %makeStyles(()) ---- +-------------------------------------------------------------------------------- (source_file (module_declaration (module_binding - (module_identifier) + (module_name) (extension_expression (extension_identifier) - (expression_statement (unit)))))) + (expression_statement + (unit)))))) -=========================================== +================================================================================ Externals -=========================================== +================================================================================ external aX: t => float = "aX" @val external foo: int = "foo" @@ -451,117 +603,166 @@ external add: ( ~option: @unwrap [#Option(Dom.htmlOptionElement) | #OptGroup(Dom.htmlOptGroupElement)], ) => unit = "add" ---- +-------------------------------------------------------------------------------- (source_file (external_declaration - (value_identifier) + (value_name) (type_annotation (function_type - (function_type_parameters (type_identifier)) - (type_identifier))) - (string (string_fragment))) - - (decorator (decorator_identifier)) + (function_type_parameters + (type_constructor_path + (type_constructor))) + (type_constructor_path + (type_constructor)))) + (string + (string_fragment))) + (decorator + (decorator_identifier)) (external_declaration - (value_identifier) - (type_annotation (type_identifier)) - (string (string_fragment))) - - (decorator (decorator_identifier)) + (value_name) + (type_annotation + (type_constructor_path + (type_constructor))) + (string + (string_fragment))) + (decorator + (decorator_identifier)) (external_declaration - (value_identifier) - (type_annotation (type_identifier)) - (string (string_fragment))) - - (decorator (decorator_identifier) (decorator_arguments (string (string_fragment)))) - (decorator (decorator_identifier)) + (value_name) + (type_annotation + (type_constructor_path + (type_constructor))) + (string + (string_fragment))) + (decorator + (decorator_identifier) + (decorator_arguments + (string + (string_fragment)))) + (decorator + (decorator_identifier)) (external_declaration - (value_identifier) - (type_annotation (type_identifier)) - (string (string_fragment))) - + (value_name) + (type_annotation + (type_constructor_path + (type_constructor))) + (string + (string_fragment))) (external_declaration - (value_identifier) + (value_name) (type_annotation (function_type (function_type_parameters - (parameter (object_type)) - (parameter (uncurry) (unit_type))) + (parameter + (object_type)) + (parameter + (uncurry) + (unit_type))) (object_type))) - (string (string_fragment))) - - - (decorator (decorator_identifier)) + (string + (string_fragment))) + (decorator + (decorator_identifier)) (external_declaration - (value_identifier) + (value_name) (type_annotation (function_type (function_type_parameters (parameter - (type_identifier_path (module_identifier) (type_identifier))) - (decorator (decorator_identifier) (decorator_arguments (template_string (template_string_content)))) + (type_constructor_path + (module_path + (module_name)) + (type_constructor))) + (decorator + (decorator_identifier) + (decorator_arguments + (template_string + (template_string_content)))) (parameter - (type_identifier)) - (decorator (decorator_identifier) (decorator_arguments (string))) + (type_constructor_path + (type_constructor))) + (decorator + (decorator_identifier) + (decorator_arguments + (string))) (parameter - (type_identifier)) + (type_constructor_path + (type_constructor))) (parameter (labeled_parameter - (value_identifier) (type_annotation (type_identifier))))) + (value_name) + (type_annotation + (type_constructor_path + (type_constructor)))))) (unit_type))) - (string (string_fragment))) - - (decorator (decorator_identifier)) + (string + (string_fragment))) + (decorator + (decorator_identifier)) (external_declaration - (value_identifier) + (value_name) (type_annotation (function_type (function_type_parameters - (parameter (type_identifier)) + (parameter + (type_constructor_path + (type_constructor))) (parameter (labeled_parameter - (value_identifier) + (value_name) (type_annotation - (decorator (decorator_identifier)) + (decorator + (decorator_identifier)) (polyvar_type (polyvar_declaration (polyvar_identifier) (polyvar_parameters - (type_identifier_path (module_identifier) (type_identifier)))) + (type_constructor_path + (module_path + (module_name)) + (type_constructor)))) (polyvar_declaration (polyvar_identifier) (polyvar_parameters - (type_identifier_path (module_identifier) (type_identifier))))))))) + (type_constructor_path + (module_path + (module_name)) + (type_constructor))))))))) (unit_type))) - (string (string_fragment)))) + (string + (string_fragment)))) -=========================================== +================================================================================ Exception declaration -=========================================== +================================================================================ exception InputClosed(string) exception Error = Failed exception Invalid = Errors.Invalid ---- +-------------------------------------------------------------------------------- (source_file (exception_declaration - (variant_identifier) - (variant_parameters (type_identifier))) + (constructor_name) + (variant_parameters + (type_constructor_path + (type_constructor)))) (exception_declaration - (variant_identifier) - (variant_identifier)) + (constructor_name) + (constructor_path + (constructor_name))) (exception_declaration - (variant_identifier) - (nested_variant_identifier - (module_identifier) - (variant_identifier)))) + (constructor_name) + (constructor_path + (module_path + (module_name)) + (constructor_name)))) -========================================= +================================================================================ Module Constraints -========================================= +================================================================================ module(M: T with type t = a and type t = b) @@ -571,57 +772,80 @@ module M = (Na: N, Nb: N): ( (S with type t = x) with type a = b ) => {} ---- +-------------------------------------------------------------------------------- (source_file (expression_statement - (module_pack - (module_identifier) + (package_expression + (module_path + (module_name)) (module_type_annotation (module_type_constraint - (module_identifier) + (module_type_path + (module_type_name + (module_name))) (constrain_type - (type_identifier) - (type_identifier)) + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor))) (constrain_type - (type_identifier) - (type_identifier)))))) - + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor))))))) (module_declaration (module_binding - name: (module_identifier) + name: (module_name) definition: (functor parameters: (functor_parameters) return_module_type: (module_type_annotation - (parenthesized_module_expression + (parenthesized_module_type (module_type_constraint - (module_identifier) + (module_type_path + (module_type_name + (module_name))) (constrain_type - (type_identifier) - (type_identifier))))) + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor)))))) body: (block)))) - (module_declaration (module_binding - name: (module_identifier) + name: (module_name) definition: (functor parameters: (functor_parameters (functor_parameter - (module_identifier) - (module_type_annotation (module_identifier))) + (module_path + (module_name)) + (module_type_annotation + (module_type_path + (module_type_name + (module_name))))) (functor_parameter - (module_identifier) - (module_type_annotation (module_identifier)))) + (module_path + (module_name)) + (module_type_annotation + (module_type_path + (module_type_name + (module_name)))))) return_module_type: (module_type_annotation - (parenthesized_module_expression + (parenthesized_module_type (module_type_constraint - (parenthesized_module_expression + (parenthesized_module_type (module_type_constraint - (module_identifier) + (module_type_path + (module_type_name + (module_name))) (constrain_type - (type_identifier) - (type_identifier)))) + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor))))) (constrain_type - (type_identifier) - (type_identifier))))) + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor)))))) body: (block))))) diff --git a/test/corpus/type_declarations.txt b/test/corpus/type_declarations.txt index 6a298f1..8ad6b09 100644 --- a/test/corpus/type_declarations.txt +++ b/test/corpus/type_declarations.txt @@ -1,81 +1,109 @@ -=========================================== +================================================================================ Opaque -=========================================== +================================================================================ type t type t' type \"type" type t and b ---- +-------------------------------------------------------------------------------- (source_file - (type_declaration (type_binding (type_identifier))) - (type_declaration (type_binding (type_identifier))) - (type_declaration (type_binding (type_identifier))) - (type_declaration - (type_binding - (type_identifier)) - (type_binding - (type_identifier)))) - -=========================================== + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor))) + (type_binding + (type_constructor_path + (type_constructor))))) + +================================================================================ Export -=========================================== +================================================================================ export type t ---- +-------------------------------------------------------------------------------- (source_file - (type_declaration (type_binding (type_identifier)))) - + (type_declaration + (type_binding + (type_constructor_path + (type_constructor))))) -=========================================== +================================================================================ Alias -=========================================== +================================================================================ type t = Foo.Bar.qux ---- +-------------------------------------------------------------------------------- (source_file (type_declaration (type_binding - (type_identifier) - (type_identifier_path - (module_identifier_path - (module_identifier) - (module_identifier)) - (type_identifier))))) + (type_constructor_path + (type_constructor)) + (type_constructor_path + (module_path + (module_path + (module_name)) + (module_name)) + (type_constructor))))) -=========================================== +================================================================================ Private -=========================================== +================================================================================ type t = private string ---- +-------------------------------------------------------------------------------- -(source_file (type_declaration (type_binding (type_identifier) (type_identifier)))) +(source_file + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor))))) -=========================================== +================================================================================ Tuple type -=========================================== +================================================================================ type t = (int, string, float) ---- +-------------------------------------------------------------------------------- (source_file (type_declaration (type_binding - (type_identifier) - (tuple_type (type_identifier) (type_identifier) (type_identifier))))) - -=========================================== + (type_constructor_path + (type_constructor)) + (tuple_type + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor)))))) + +================================================================================ Record type -=========================================== +================================================================================ type t = { a: int, @@ -93,44 +121,67 @@ type t = Mod.t = {a: int} type t = {} ---- +-------------------------------------------------------------------------------- (source_file (type_declaration (type_binding - (type_identifier) + (type_constructor_path + (type_constructor)) (record_type (record_type_field - (property_identifier) (type_annotation (type_identifier))) + (property_identifier) + (type_annotation + (type_constructor_path + (type_constructor)))) (record_type_field - (property_identifier) (type_annotation (type_identifier))) + (property_identifier) + (type_annotation + (type_constructor_path + (type_constructor)))) (decorator - (decorator_identifier) - (decorator_arguments (string (string_fragment)))) + (decorator_identifier) + (decorator_arguments + (string + (string_fragment)))) (record_type_field (property_identifier) - (type_annotation (type_identifier))) + (type_annotation + (type_constructor_path + (type_constructor)))) (record_type_field - (property_identifier) (type_annotation (type_identifier))) + (property_identifier) + (type_annotation + (type_constructor_path + (type_constructor)))) (record_type_field - (property_identifier) (type_annotation (type_identifier)))))) + (property_identifier) + (type_annotation + (type_constructor_path + (type_constructor))))))) (type_declaration (type_binding - (type_identifier) - (type_identifier_path - (module_identifier) (type_identifier)) + (type_constructor_path + (type_constructor)) + (type_constructor_path + (module_path + (module_name)) + (type_constructor)) (record_type (record_type_field (property_identifier) - (type_annotation (type_identifier)))))) + (type_annotation + (type_constructor_path + (type_constructor))))))) (type_declaration (type_binding - (type_identifier) + (type_constructor_path + (type_constructor)) (record_type)))) -=========================================== +================================================================================ Extensible Variant -=========================================== +================================================================================ type t = .. @@ -140,30 +191,35 @@ type M.t += | Point | Line ---- +-------------------------------------------------------------------------------- (source_file (type_declaration (type_binding - (type_identifier))) + (type_constructor_path + (type_constructor)))) (type_declaration (type_binding - (type_identifier) + (type_constructor_path + (type_constructor)) (variant_type (variant_declaration - (variant_identifier))))) + (constructor_name))))) (type_declaration (type_binding - (type_identifier_path (module_identifier) (type_identifier)) + (type_constructor_path + (module_path + (module_name)) + (type_constructor)) (variant_type (variant_declaration - (variant_identifier)) + (constructor_name)) (variant_declaration - (variant_identifier)))))) + (constructor_name)))))) -=========================================== +================================================================================ Variant -=========================================== +================================================================================ type t = | A @@ -174,59 +230,86 @@ type t = | D(module(Foo)) | D(module(Bar.t)) ---- +-------------------------------------------------------------------------------- (source_file (type_declaration (type_binding - (type_identifier) + (type_constructor_path + (type_constructor)) (variant_type - (variant_declaration (variant_identifier)) - (variant_declaration (variant_identifier)) - (decorator (decorator_identifier) (decorator_arguments (string (string_fragment)))) (variant_declaration - (variant_identifier)) + (constructor_name)) + (variant_declaration + (constructor_name)) + (decorator + (decorator_identifier) + (decorator_arguments + (string + (string_fragment)))) (variant_declaration - (variant_identifier) (variant_parameters (type_identifier))) + (constructor_name)) + (variant_declaration + (constructor_name) + (variant_parameters + (type_constructor_path + (type_constructor)))) (variant_declaration - (variant_identifier) + (constructor_name) (variant_parameters (record_type (record_type_field - (property_identifier) (type_annotation (type_identifier))) + (property_identifier) + (type_annotation + (type_constructor_path + (type_constructor)))) (record_type_field - (property_identifier) (type_annotation (type_identifier)))))) + (property_identifier) + (type_annotation + (type_constructor_path + (type_constructor))))))) (variant_declaration - (variant_identifier) + (constructor_name) (variant_parameters - (module_pack (module_identifier)))) + (package_type + (module_type_path + (module_type_name + (module_name)))))) (variant_declaration - (variant_identifier) + (constructor_name) (variant_parameters - (module_pack - (type_identifier_path (module_identifier) (type_identifier))))))))) + (package_type + (module_type_path + (module_path + (module_name)) + (module_type_name))))))))) -=========================================== +================================================================================ Annotated variant -=========================================== +================================================================================ type rec t = Any('a): t ---- +-------------------------------------------------------------------------------- (source_file (type_declaration (type_binding - (type_identifier) + (type_constructor_path + (type_constructor)) (variant_type (variant_declaration - (variant_identifier) - (variant_parameters (type_identifier)) - (type_annotation (type_identifier))))))) + (constructor_name) + (variant_parameters + (type_constructor_path + (type_constructor))) + (type_annotation + (type_constructor_path + (type_constructor)))))))) -=========================================== +================================================================================ Polyvar -=========================================== +================================================================================ type t = [> | #AAA @@ -243,95 +326,150 @@ type t = [> type foo<'a> = @decorator [> #Blue | #DeepBlue | #LightBlue ] as 'a type t<'w> = [M.t<'w>] ---- +-------------------------------------------------------------------------------- (source_file (type_declaration (type_binding - (type_identifier) + (type_constructor_path + (type_constructor)) (polyvar_type - (polyvar_declaration (polyvar_identifier)) - (polyvar_declaration (polyvar_identifier)) (polyvar_declaration - (polyvar_identifier) (polyvar_parameters (type_identifier))) - (polyvar_declaration (polyvar_identifier (polyvar_string (string_fragment)))) - (polyvar_declaration (polyvar_identifier (polyvar_string (string_fragment)))) - (polyvar_declaration (polyvar_identifier)) - (decorator (decorator_identifier) (decorator_arguments (string (string_fragment)))) - (polyvar_declaration (polyvar_identifier)) - (polyvar_declaration (type_identifier))))) - + (polyvar_identifier)) + (polyvar_declaration + (polyvar_identifier)) + (polyvar_declaration + (polyvar_identifier) + (polyvar_parameters + (type_constructor_path + (type_constructor)))) + (polyvar_declaration + (polyvar_identifier + (polyvar_string + (string_fragment)))) + (polyvar_declaration + (polyvar_identifier + (polyvar_string + (string_fragment)))) + (polyvar_declaration + (polyvar_identifier)) + (decorator + (decorator_identifier) + (decorator_arguments + (string + (string_fragment)))) + (polyvar_declaration + (polyvar_identifier)) + (polyvar_declaration + (type_constructor_path + (type_constructor)))))) (type_declaration (type_binding - (type_identifier) - (type_parameters (type_identifier)) - (decorator (decorator_identifier)) - (as_aliasing_type + (type_constructor_path + (type_constructor)) + (type_parameters + (type_constructor)) + (decorator + (decorator_identifier)) + (aliased_type (polyvar_type - (polyvar_declaration (polyvar_identifier)) - (polyvar_declaration (polyvar_identifier)) - (polyvar_declaration (polyvar_identifier))) - (type_identifier)))) - - (type_declaration - (type_binding - (type_identifier) - (type_parameters (type_identifier)) + (polyvar_declaration + (polyvar_identifier)) + (polyvar_declaration + (polyvar_identifier)) + (polyvar_declaration + (polyvar_identifier))) + (type_constructor)))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_parameters + (type_constructor)) (polyvar_type (polyvar_declaration (generic_type - (type_identifier_path (module_identifier) (type_identifier)) - (type_arguments (type_identifier)))))))) - -=========================================== + (type_constructor_path + (module_path + (module_name)) + (type_constructor)) + (type_arguments + (type_constructor_path + (type_constructor))))))))) + +================================================================================ Function -=========================================== +================================================================================ type fooA = t => float type fooB = (t) => float type fooC = (t1, t2) => float type fooD = (~arg1: t1, ~arg2: t2=?, unit) => float ---- +-------------------------------------------------------------------------------- (source_file (type_declaration (type_binding - (type_identifier) + (type_constructor_path + (type_constructor)) (function_type - (function_type_parameters (type_identifier)) - (type_identifier)))) + (function_type_parameters + (type_constructor_path + (type_constructor))) + (type_constructor_path + (type_constructor))))) (type_declaration (type_binding - (type_identifier) + (type_constructor_path + (type_constructor)) (function_type - (function_type_parameters (parameter (type_identifier))) - (type_identifier)))) + (function_type_parameters + (parameter + (type_constructor_path + (type_constructor)))) + (type_constructor_path + (type_constructor))))) (type_declaration (type_binding - (type_identifier) + (type_constructor_path + (type_constructor)) (function_type (function_type_parameters - (parameter (type_identifier)) - (parameter (type_identifier))) - (type_identifier)))) + (parameter + (type_constructor_path + (type_constructor))) + (parameter + (type_constructor_path + (type_constructor)))) + (type_constructor_path + (type_constructor))))) (type_declaration (type_binding - (type_identifier) + (type_constructor_path + (type_constructor)) (function_type (function_type_parameters - (parameter (labeled_parameter - (value_identifier) - (type_annotation (type_identifier)))) - (parameter (labeled_parameter - (value_identifier) - (type_annotation (type_identifier)))) - (parameter (unit_type))) - (type_identifier))))) - -=========================================== + (parameter + (labeled_parameter + (value_name) + (type_annotation + (type_constructor_path + (type_constructor))))) + (parameter + (labeled_parameter + (value_name) + (type_annotation + (type_constructor_path + (type_constructor))))) + (parameter + (unit_type))) + (type_constructor_path + (type_constructor)))))) + +================================================================================ Object -=========================================== +================================================================================ type t = {..} type t = {.} @@ -343,89 +481,138 @@ type t = { } type t<'a> = {.."name": string} as 'a ---- +-------------------------------------------------------------------------------- (source_file (type_declaration (type_binding - (type_identifier) + (type_constructor_path + (type_constructor)) (object_type))) (type_declaration (type_binding - (type_identifier) + (type_constructor_path + (type_constructor)) (object_type))) (type_declaration (type_binding - (type_identifier) + (type_constructor_path + (type_constructor)) (object_type - (field (property_identifier (string_fragment)) (type_identifier))))) + (field + (property_identifier + (string_fragment)) + (type_constructor_path + (type_constructor)))))) (type_declaration (type_binding - (type_identifier) + (type_constructor_path + (type_constructor)) (object_type - (field (property_identifier (string_fragment)) (type_identifier)) - (field (property_identifier (string_fragment)) (type_identifier)) - (field (type_identifier))))) + (field + (property_identifier + (string_fragment)) + (type_constructor_path + (type_constructor))) + (field + (property_identifier + (string_fragment)) + (type_constructor_path + (type_constructor))) + (field + (type_constructor_path + (type_constructor)))))) (type_declaration (type_binding - (type_identifier) - (type_parameters (type_identifier)) - (as_aliasing_type + (type_constructor_path + (type_constructor)) + (type_parameters + (type_constructor)) + (aliased_type (object_type - (field (property_identifier (string_fragment)) (type_identifier))) - (type_identifier))))) - -=========================================== + (field + (property_identifier + (string_fragment)) + (type_constructor_path + (type_constructor)))) + (type_constructor))))) + +================================================================================ Generic -=========================================== +================================================================================ type t<'a, 'b> = (array<'a>, array<'b>) type t = result<(), string> type t<'a> = generic<'a> as 's ---- +-------------------------------------------------------------------------------- (source_file (type_declaration (type_binding - (type_identifier) - (type_parameters (type_identifier) (type_identifier)) + (type_constructor_path + (type_constructor)) + (type_parameters + (type_constructor) + (type_constructor)) (tuple_type - (generic_type (type_identifier) (type_arguments (type_identifier))) - (generic_type (type_identifier) (type_arguments (type_identifier)))))) + (generic_type + (type_constructor_path + (type_constructor)) + (type_arguments + (type_constructor_path + (type_constructor)))) + (generic_type + (type_constructor_path + (type_constructor)) + (type_arguments + (type_constructor_path + (type_constructor))))))) (type_declaration (type_binding - (type_identifier) + (type_constructor_path + (type_constructor)) (generic_type - (type_identifier) + (type_constructor_path + (type_constructor)) (type_arguments (unit) - (type_identifier))))) - + (type_constructor_path + (type_constructor)))))) (type_declaration (type_binding - (type_identifier) - (type_parameters (type_identifier)) - (as_aliasing_type + (type_constructor_path + (type_constructor)) + (type_parameters + (type_constructor)) + (aliased_type (generic_type - (type_identifier) - (type_arguments (type_identifier))) - (type_identifier))))) - -=========================================== + (type_constructor_path + (type_constructor)) + (type_arguments + (type_constructor_path + (type_constructor)))) + (type_constructor))))) + +================================================================================ Recursive -=========================================== +================================================================================ type rec t = t ---- +-------------------------------------------------------------------------------- (source_file - (type_declaration (type_binding (type_identifier) (type_identifier)))) + (type_declaration + (type_binding + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor))))) -=========================================== +================================================================================ Decorated -=========================================== +================================================================================ @deriving(abstract) type transitionCreateArgs = { @@ -434,34 +621,46 @@ type transitionCreateArgs = { type person = {@meth "say": (string, string) => unit} ---- +-------------------------------------------------------------------------------- (source_file - (decorator (decorator_identifier) (decorator_arguments (value_identifier))) + (decorator + (decorator_identifier) + (decorator_arguments + (value_name))) (type_declaration (type_binding - (type_identifier) + (type_constructor_path + (type_constructor)) (record_type (record_type_field (property_identifier) - (type_annotation (type_identifier)))))) - + (type_annotation + (type_constructor_path + (type_constructor))))))) (type_declaration (type_binding - (type_identifier) + (type_constructor_path + (type_constructor)) (object_type - (decorator (decorator_identifier)) + (decorator + (decorator_identifier)) (field - (property_identifier (string_fragment)) + (property_identifier + (string_fragment)) (function_type (function_type_parameters - (parameter (type_identifier)) - (parameter (type_identifier))) + (parameter + (type_constructor_path + (type_constructor))) + (parameter + (type_constructor_path + (type_constructor)))) (unit_type))))))) -=========================================== +================================================================================ Mutually Recursive -=========================================== +================================================================================ type rec student = { teacher: teacher @@ -470,150 +669,191 @@ and teacher = { students: array } ---- +-------------------------------------------------------------------------------- (source_file (type_declaration (type_binding - (type_identifier) + (type_constructor_path + (type_constructor)) (record_type (record_type_field (property_identifier) (type_annotation - (type_identifier))))) + (type_constructor_path + (type_constructor)))))) (type_binding - (type_identifier) + (type_constructor_path + (type_constructor)) (record_type (record_type_field (property_identifier) (type_annotation (generic_type - (type_identifier) + (type_constructor_path + (type_constructor)) (type_arguments - (type_identifier))))))))) + (type_constructor_path + (type_constructor)))))))))) - -=========================================== +================================================================================ Labled function with uncurried -=========================================== +================================================================================ type test = (. ~attr: string) => unit ---- +-------------------------------------------------------------------------------- (source_file (type_declaration (type_binding - (type_identifier) + (type_constructor_path + (type_constructor)) (function_type (function_type_parameters (parameter (uncurry) (labeled_parameter - (value_identifier) + (value_name) (type_annotation - (type_identifier))))) + (type_constructor_path + (type_constructor)))))) (unit_type))))) -=========================================== +================================================================================ Polymorphic type -=========================================== +================================================================================ let id: 'a. 'a => 'a = x => x let add: type a. (number, number) => a ---- +-------------------------------------------------------------------------------- (source_file (let_declaration (let_binding - (value_identifier) + (value_name) (type_annotation (polymorphic_type - (type_identifier) + (type_constructor) (function_type - (function_type_parameters (type_identifier)) - (type_identifier)))) + (function_type_parameters + (type_constructor_path + (type_constructor))) + (type_constructor_path + (type_constructor))))) (function - (value_identifier) - (value_identifier)))) - + (value_name) + (value_name)))) (let_declaration (let_binding - (value_identifier) + (value_name) (type_annotation (polymorphic_type - (abstract_type (type_identifier)) + (abstract_type + (type_constructor)) (function_type (function_type_parameters (parameter (generic_type - (type_identifier) - (type_arguments (type_identifier)))) + (type_constructor_path + (type_constructor)) + (type_arguments + (type_constructor_path + (type_constructor))))) (parameter (generic_type - (type_identifier) + (type_constructor_path + (type_constructor)) (type_arguments - (type_identifier))))) (type_identifier))))))) + (type_constructor_path + (type_constructor)))))) + (type_constructor_path + (type_constructor)))))))) -=========================================== +================================================================================ Variance annotations -=========================================== +================================================================================ type t<+'a> type t<-'a> ---- +-------------------------------------------------------------------------------- (source_file (type_declaration (type_binding - (type_identifier) - (type_parameters (type_identifier)))) + (type_constructor_path + (type_constructor)) + (type_parameters + (type_constructor)))) (type_declaration (type_binding - (type_identifier) - (type_parameters (type_identifier))))) + (type_constructor_path + (type_constructor)) + (type_parameters + (type_constructor))))) -=========================================== +================================================================================ Type constraint -=========================================== +================================================================================ type t<'a> = 'a constraint 'a = int type decorator<'a, 'b> = 'a => 'b constraint 'a = int constraint 'b = _ => _ type t<'a> constraint 'a = t ---- +-------------------------------------------------------------------------------- (source_file (type_declaration (type_binding - (type_identifier) - (type_parameters (type_identifier)) - (type_identifier) + (type_constructor_path + (type_constructor)) + (type_parameters + (type_constructor)) + (type_constructor_path + (type_constructor)) (type_constraint - (type_identifier) (type_identifier)))) - + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor))))) (type_declaration (type_binding - (type_identifier) - (type_parameters (type_identifier) (type_identifier)) + (type_constructor_path + (type_constructor)) + (type_parameters + (type_constructor) + (type_constructor)) (function_type - (function_type_parameters (type_identifier)) - (type_identifier)) + (function_type_parameters + (type_constructor_path + (type_constructor))) + (type_constructor_path + (type_constructor))) (type_constraint - (type_identifier) (type_identifier)) + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor))) (type_constraint - (type_identifier) + (type_constructor_path + (type_constructor)) (function_type - (function_type_parameters (type_identifier)) - (type_identifier))))) - + (function_type_parameters + (type_constructor_path + (type_constructor))) + (type_constructor_path + (type_constructor)))))) (type_declaration (type_binding - (type_identifier) - (type_parameters (type_identifier)) + (type_constructor_path + (type_constructor)) + (type_parameters + (type_constructor)) (type_constraint - (type_identifier) - (type_identifier))))) + (type_constructor_path + (type_constructor)) + (type_constructor_path + (type_constructor)))))) diff --git a/test/full.txt b/test/full.txt deleted file mode 100644 index 16a316b..0000000 --- a/test/full.txt +++ /dev/null @@ -1,4955 +0,0 @@ -yarn run v1.22.19 -$ /home/pedro/Desktop/projects/tree-sitter-rescript/node_modules/.bin/tree-sitter test - comments: - βœ— Comments - expressions: - βœ“ Unit - βœ— Parenthesized expressions - βœ— Nested identifiers - βœ— Escape identifiers - βœ“ Tuple - βœ— Call expression - βœ— Pipe - βœ— Record - βœ“ Object - βœ— If/else - βœ— Switch of literals - βœ— Switch of variants - βœ— Switch of polyvars - βœ— Switch of vars - βœ— Switch of tuples - βœ— Switch of mixed tuples - βœ— Switch of record patterns - βœ— Switch of lists - βœ— Switch of arrays - βœ— Switch of statements - βœ— Switch exceptions - βœ— Switch block - βœ— Switch parenthesized - βœ— Switch ranges - βœ“ Math operators - βœ— Boolean operators - βœ— String operators - βœ— Coercion operator - βœ— Ternaries - βœ“ Arrays - βœ— Lists - βœ— Member expressions - βœ— Subscript expressions - βœ— Variants - βœ— Extensions - βœ— Raise expression - βœ— Assert expression - βœ— Try-catch - βœ— Mutation expressions - βœ— For loop - βœ— While loop - βœ— Await expression - βœ— As aliasing - βœ— Lazy Expression - modules: - βœ— Open - βœ— Include - βœ— Simple definition - βœ— Signature and definition - βœ— Module types - βœ— First Class module - βœ— Functor definition - βœ— Functor signature - βœ— Functor use - βœ— Alias - βœ— Recursive - βœ— Definition through extension - βœ— Externals - βœ— Exception declaration - βœ— Module Constraints - literals: - βœ“ Boolean - βœ“ Numbers - βœ“ Strings containing comment-like content - βœ“ Quote escaping - βœ— Template strings - βœ“ Tricky template strings - βœ“ Characters - βœ— Polyvars - error_scopes: - jsx: - βœ— Simple JSX elements - βœ“ Custom type children - βœ— Attribute values - βœ— Anonymous JSX element - βœ— Block children - βœ— Children spread - βœ— Attribute Block - βœ— Spread props - decorators: - βœ“ Decorator inline - βœ“ Decorator with arguments - βœ— Decorator with type - let_bindings: - βœ— Plain - βœ— Tuple destructuring - βœ— Record destructuring - βœ— Array destructuring - βœ— List destructuring - βœ— Block - βœ— Annotated - βœ— Recursive - βœ— Unit - βœ— And (Primitives) - βœ— And (Functions) - βœ— And (decorated) - βœ— Labled function with uncurried - βœ— Destructuring module - βœ— Packing module - βœ— Unpacking module - βœ— Lazy Values - type_declarations: - βœ— Opaque - βœ— Export - βœ— Alias - βœ— Private - βœ— Tuple type - βœ— Record type - βœ— Extensible Variant - βœ— Variant - βœ— Annotated variant - βœ— Polyvar - βœ— Function - βœ— Object - βœ— Generic - βœ— Recursive - βœ— Decorated - βœ— Mutually Recursive - βœ— Labled function with uncurried - βœ— Polymorphic type - βœ— Variance annotations - βœ— Type constraint - functions: - βœ— Simple parameters - βœ— Type annotations - βœ— Abstract type - βœ— Parameter defaults - βœ— Parameter aliasing - βœ— Record pattern - βœ— Ref assignment as body - βœ— Operator precendence - βœ— Async - -111 failures: - -expected / actual - - 1. Comments: - - (source_file - (comment) - (expression_statement - (number)) - (comment) - (expression_statement - (number)) - (comment) - (expression_statement - (number)) - (expression_statement - (number)) - (comment) - (expression_statement - (number)) - (comment) - (comment) - (expression_statement - (number)) - (comment) - (expression_statement - (number)) - (comment) - (expression_statement - (number)) - (comment) - (expression_statement - (number)) - (expression_statement - (pipe_expression - (value_name) - (value_identifier) - (comment) - (value_name))) - (value_identifier))) - (expression_statement - (switch_expression - (value_name) - (value_identifier) - (switch_match - (number) - (sequence_expression - (expression_statement - (number)))) - (comment)))) - - - 2. Parenthesized expressions: - - (source_file - (expression_statement - (parenthesized_expression - (number))) - (expression_statement - (parenthesized_expression - (number) - (type_annotation - (type_constructor_path - (type_constructor))))) - (type_identifier)))) - (expression_statement - (parenthesized_expression - (unit)))) - - - 3. Nested identifiers: - - (source_file - (expression_statement - (value_path - (module_path - (module_path - (module_name)) - (module_name)) - (value_name))) - (value_identifier_path - (module_identifier_path - (module_identifier) - (module_identifier)) - (value_identifier))) - (expression_statement - (member_expression - (value_path - (module_path - (module_path - (module_name)) - (module_name)) - (value_name)) - (value_path - (value_name))))) - (value_identifier_path - (module_identifier_path - (module_identifier) - (module_identifier)) - (value_identifier)) - (property_identifier)))) - - - 4. Escape identifiers: - - (source_file - (expression_statement - (value_name))) - (value_identifier))) - - - 5. Call expression: - - (source_file - (expression_statement - (call_expression - function: (value_name) - function: (value_identifier) - arguments: (arguments - (number) - (number)))) - (expression_statement - (call_expression - function: (value_name) - function: (value_identifier) - arguments: (arguments - (number) - (type_annotation - (type_constructor_path - (type_constructor))) - (type_identifier)) - (labeled_argument - label: (value_path - (value_name)) - label: (value_identifier) - value: (number) - type: (type_annotation - (type_constructor_path - (type_constructor))))))) - (type_identifier)))))) - (expression_statement - (call_expression - function: (value_name) - function: (value_identifier) - arguments: (arguments - (number) - (labeled_argument - label: (value_path - (value_name)) - label: (value_identifier) - value: (number)) - (labeled_argument - label: (value_path - (value_name))) - label: (value_identifier)) - (unit)))) - (expression_statement - (call_expression - function: (value_name) - function: (value_identifier) - arguments: (arguments - (labeled_argument - label: (value_path - (value_name))) - label: (value_identifier)) - (labeled_argument - label: (value_path - (value_name)) - value: (value_name))))) - label: (value_identifier) - value: (value_identifier))))) - (expression_statement - (call_expression - function: (value_name) - function: (value_identifier) - arguments: (arguments - (uncurry) - (number)))) - (expression_statement - (call_expression - function: (value_name) - function: (value_identifier) - arguments: (arguments - (function - parameter: (value_name) - parameter: (value_identifier) - body: (binary_expression - left: (pipe_expression - (value_name) - (value_path - (module_path - (module_name)) - (value_name))) - (value_identifier) - (value_identifier_path - (module_identifier) - (value_identifier))) - right: (number)))))) - (expression_statement - (call_expression - function: (value_name) - function: (value_identifier) - arguments: (arguments - (number) - (block - (open_statement - (module_path - (module_name))) - (module_identifier)) - (expression_statement - (value_name))) - (value_identifier))) - (labeled_argument - label: (value_path - (value_name)) - label: (value_identifier) - value: (block - (expression_statement - (number))))))) - (expression_statement - (call_expression - function: (value_name) - function: (value_identifier) - arguments: (arguments - (value_name)))) - (value_identifier)))) - (expression_statement - (call_expression - function: (value_name) - function: (value_identifier) - arguments: (arguments - (labeled_argument - label: (value_path - (value_name)) - label: (value_identifier) - (decorator - (decorator_identifier)) - value: (number)))))) - - - 6. Pipe: - - (source_file - (expression_statement - (pipe_expression - (pipe_expression - (value_name) - (value_name)) - (value_name))) - (value_identifier) - (value_identifier)) - (value_identifier))) - (expression_statement - (pipe_expression - (pipe_expression - (value_name) - (value_name)) - (value_name))) - (value_identifier) - (value_identifier)) - (value_identifier))) - (expression_statement - (pipe_expression - (pipe_expression - (value_name) - (value_identifier) - (call_expression - (value_path - (module_path - (module_name)) - (value_name)) - (value_identifier_path - (module_identifier) - (value_identifier)) - (arguments - (value_name)))) - (value_path - (module_path - (module_name)) - (value_name)))) - (value_identifier)))) - (value_identifier_path - (module_identifier) - (value_identifier)))) - (expression_statement - (pipe_expression - (number) - (constructor_path - (constructor_name)))) - (variant - (variant_identifier)))) - (expression_statement - (pipe_expression - (value_name) - (value_identifier) - (polyvar - (polyvar_identifier)))) - (expression_statement - (pipe_expression - (value_name) - (value_name))) - (value_identifier) - (value_identifier))) - (expression_statement - (pipe_expression - (value_name) - (value_identifier) - (parenthesized_expression - (function - (value_name) - (value_identifier) - (binary_expression - (value_name) - (value_identifier) - (number)))))) - (expression_statement - (pipe_expression - (value_name) - (value_identifier) - (block - (open_statement - (module_path - (module_name))) - (module_identifier)) - (expression_statement - (value_name))))) - (value_identifier))))) - (expression_statement - (pipe_expression - (block - (expression_statement - (value_name))) - (value_identifier))) - (call_expression - (value_name) - (value_identifier) - (arguments))))) - - - 7. Record: - - (source_file - (expression_statement - (record - (spread_element - (value_name)) - (value_identifier)) - (record_field - (property_identifier - (value_name)) - (property_identifier) - (number)) - (record_field - (property_identifier - (value_name)) - (property_identifier) - (string - (string_fragment))) - (record_field - (property_identifier - (value_name))))) - (property_identifier)))) - (expression_statement - (record - (record_field - (property_identifier - (value_name))) - (property_identifier)) - (record_field - (property_identifier - (value_name))) - (property_identifier)) - (record_field - (property_identifier - (value_name))))) - (property_identifier)))) - (expression_statement - (record - (record_field - (property_identifier - (module_path - (module_name)) - (value_name)) - (module_identifier) - (value_identifier)) - (number)))) - (expression_statement - (record - (record_field - (property_identifier - (module_path - (module_name)) - (value_name)) - (module_identifier) - (value_identifier)) - (number)) - (record_field - (property_identifier - (value_name)) - (property_identifier) - (string - (string_fragment))))) - (expression_statement - (record - (record_field - (property_identifier - (value_name)) - (constructor_path - (constructor_name))) - (property_identifier) - (variant - (variant_identifier))) - (record_field - (property_identifier - (value_name))) - (property_identifier)) - (record_field - (property_identifier - (value_name)) - (property_identifier) - (parenthesized_expression - (constructor_path - (constructor_name)) - (variant - (variant_identifier)) - (type_annotation - (type_constructor_path - (type_constructor))))))) - (type_identifier)))))) - (expression_statement - (record - (property_identifier - (value_name))))) - (property_identifier)))) - - - 8. If/else: - - (source_file - (expression_statement - (if_expression - (value_name) - (value_identifier) - (block - (expression_statement - (value_name))))) - (value_identifier))))) - (expression_statement - (if_expression - (value_name) - (value_identifier) - (block - (expression_statement - (value_name))) - (value_identifier))) - (else_clause - (block - (expression_statement - (value_name)))))) - (value_identifier)))))) - (expression_statement - (if_expression - (value_name) - (value_identifier) - (block - (expression_statement - (value_name))) - (value_identifier))) - (else_if_clause - (value_name) - (value_identifier) - (block - (expression_statement - (value_name)))) - (value_identifier)))) - (else_if_clause - (value_name) - (value_identifier) - (block - (expression_statement - (value_name)))) - (value_identifier)))) - (else_clause - (block - (expression_statement - (value_name))))))) - (value_identifier))))))) - - - 9. Switch of literals: - - (source_file - (expression_statement - (switch_expression - (value_name) - (value_identifier) - (switch_match - (or_pattern - (number) - (number)) - (sequence_expression - (expression_statement - (string - (string_fragment))))) - (switch_match - (value_name) - (value_identifier) - (sequence_expression - (let_declaration - (let_binding - (value_name) - (value_identifier) - (string - (string_fragment)))) - (expression_statement - (binary_expression - (value_name) - (value_identifier) - (string - (string_fragment))))))))) - - - 10. Switch of variants: - - (source_file - (expression_statement - (switch_expression - (value_name) - (value_identifier) - (switch_match - (constructor_pattern - (constructor_path - (constructor_name)) - (tuple_pattern - (tuple_item_pattern - (alias_pattern - (value_name) - (value_name)) - (type_annotation - (type_constructor_path - (type_constructor)))) - (tuple_item_pattern - (record_pattern - (value_path - (value_name)) - (value_path - (value_name)))))) - (variant_pattern - (variant_identifier) - (formal_parameters - (value_identifier) - (as_aliasing - (value_identifier)) - (type_annotation - (type_identifier)) - (record_pattern - (value_identifier) - (value_identifier)))) - (sequence_expression - (expression_statement - (value_name)))) - (value_identifier)))) - (switch_match - (constructor_pattern - (constructor_path - (module_path - (module_name)) - (constructor_name))) - (variant_pattern - (nested_variant_identifier - (module_identifier) - (variant_identifier))) - (sequence_expression - (expression_statement - (number)))) - (switch_match - (constructor_pattern - (constructor_path - (constructor_name)) - (unit)) - (variant_pattern - (variant_identifier) - (formal_parameters)) - (sequence_expression - (expression_statement - (number)))) - (switch_match - (constructor_pattern - (constructor_path - (constructor_name)) - (parenthesized_pattern - (value_name))) - (variant_pattern - (variant_identifier) - (formal_parameters - (value_identifier))) - (sequence_expression - (expression_statement - (number))))))) - - - 11. Switch of polyvars: - - (source_file - (expression_statement - (switch_expression - (value_name) - (value_identifier) - (switch_match - (polyvar_pattern - (polyvar_identifier)) - (sequence_expression - (expression_statement - (number)))) - (switch_match - (polyvar_pattern - (polyvar_identifier) - (alias_pattern - (tuple_pattern - (tuple_item_pattern - (alias_pattern - (value_name) - (value_name)) - (type_annotation - (type_constructor_path - (type_constructor)))) - (tuple_item_pattern - (number))) - (value_name))) - (formal_parameters - (value_identifier) - (as_aliasing - (value_identifier)) - (type_annotation - (type_identifier)) - (number))) - (as_aliasing - (value_identifier)) - (sequence_expression - (expression_statement - (number)))) - (switch_match - (alias_pattern - (polyvar_type_pattern - (type_constructor_path - (module_path - (module_name)) - (type_constructor))) - (value_name)) - (polyvar_type_pattern - (type_identifier_path - (module_identifier) - (type_identifier))) - (as_aliasing - (value_identifier)) - (sequence_expression - (expression_statement - (number))))))) - - - 12. Switch of vars: - - (source_file - (expression_statement - (switch_expression - (value_name) - (value_identifier) - (switch_match - (value_name) - (value_identifier) - (guard - (binary_expression - (binary_expression - (value_name) - (value_identifier) - (number)) - (binary_expression - (value_name) - (value_identifier) - (number)))) - (sequence_expression - (expression_statement - (value_name)))) - (value_identifier)))) - (switch_match - (value_name) - (value_identifier) - (guard - (binary_expression - (value_name) - (value_identifier) - (number))) - (sequence_expression - (expression_statement - (value_name)))) - (value_identifier)))) - (switch_match - (value_name) - (value_identifier) - (sequence_expression - (expression_statement - (number))))))) - - - 13. Switch of tuples: - - (source_file - (expression_statement - (switch_expression - (tuple - (value_name) - (value_name)) - (value_identifier) - (value_identifier)) - (switch_match - (tuple_pattern - (tuple_item_pattern - (number)) - (tuple_item_pattern - (alias_pattern - (number) - (value_name)))) - (number) - (as_aliasing - (value_identifier)))) - (sequence_expression - (expression_statement - (number)))) - (switch_match - (tuple_pattern - (tuple_item_pattern - (constructor_pattern - (constructor_path - (constructor_name)))) - (variant_pattern - (variant_identifier))) - (tuple_item_pattern - (polyvar_type_pattern - (type_constructor_path - (type_constructor))))) - (type_identifier)))) - (sequence_expression - (expression_statement - (number)))) - (switch_match - (tuple_pattern - (tuple_item_pattern - (value_name)) - (value_identifier)) - (tuple_item_pattern - (value_name))) - (value_identifier))) - (sequence_expression - (expression_statement - (number))))))) - - - 14. Switch of mixed tuples: - - (source_file - (expression_statement - (switch_expression - (value_name) - (value_identifier) - (switch_match - (tuple_pattern - (tuple_item_pattern - (or_pattern - (constructor_pattern - (constructor_path - (constructor_name))) - (constructor_pattern - (constructor_path - (constructor_name))))) - (variant_pattern - (variant_identifier)) - (variant_pattern - (variant_identifier)))) - (tuple_item_pattern - (number))) - (sequence_expression - (expression_statement - (number)))) - (switch_match - (value_name) - (value_identifier) - (sequence_expression - (expression_statement - (number))))))) - - - 15. Switch of record patterns: - - (source_file - (expression_statement - (switch_expression - (value_name) - (value_identifier) - (switch_match - (constructor_pattern - (constructor_path - (constructor_name)) - (parenthesized_pattern - (variant_pattern - (variant_identifier) - (formal_parameters - (record_pattern - (value_path - (value_name)) - (value_identifier) - (or_pattern - (string - (string_fragment)) - (string - (string_fragment)))))) - (sequence_expression - (expression_statement - (number)))) - (switch_match - (constructor_pattern - (constructor_path - (constructor_name)) - (parenthesized_pattern - (variant_pattern - (variant_identifier) - (formal_parameters - (record_pattern - (value_path - (value_name)) - (value_identifier) - (record_pattern - (value_path - (value_name)) - (value_identifier) - (number)) - (value_path - (value_name)) - (constructor_pattern - (constructor_path - (constructor_name)) - (or_pattern - (parenthesized_pattern - (value_name)) - (constructor_pattern - (constructor_path - (constructor_name)) - (parenthesized_pattern - (value_name)))))))) - (value_identifier) - (or_pattern - (variant_pattern - (variant_identifier) - (formal_parameters - (value_identifier))) - (variant_pattern - (variant_identifier) - (formal_parameters - (value_identifier))))))) - (sequence_expression - (expression_statement - (number)))) - (switch_match - (constructor_pattern - (constructor_path - (constructor_name)) - (parenthesized_pattern - (variant_pattern - (variant_identifier) - (formal_parameters - (record_pattern - (value_path - (value_name)) - (constructor_pattern - (constructor_path - (constructor_name)))))) - (value_identifier) - (variant_pattern - (variant_identifier))))) - (sequence_expression - (expression_statement - (number)))) - (switch_match - (constructor_pattern - (constructor_path - (constructor_name)) - (parenthesized_pattern - (variant_pattern - (variant_identifier) - (formal_parameters - (record_pattern - (value_path - (value_name))))) - (value_identifier)))) - (sequence_expression - (expression_statement - (number))))))) - - - 16. Switch of lists: - - (source_file - (expression_statement - (switch_expression - (value_name) - (value_identifier) - (switch_match - (list_pattern - (alias_pattern - (value_name) - (value_name)) - (value_identifier) - (as_aliasing - (value_identifier)) - (spread_pattern - (value_name))) - (value_identifier))) - (sequence_expression - (expression_statement - (number)))) - (switch_match - (list_pattern - (number) - (number) - (value_name)) - (value_identifier)) - (sequence_expression - (expression_statement - (number)))) - (switch_match - (list_pattern - (number)) - (sequence_expression - (expression_statement - (number)))) - (switch_match - (list_pattern - (spread_pattern - (value_name))) - (value_identifier))) - (sequence_expression - (expression_statement - (number)))) - (switch_match - (list_pattern - (number) - (number) - (alias_pattern - (spread_pattern - (list_pattern - (value_name) - (spread_pattern - (value_name)))) - (value_name))) - (spread_pattern - (list_pattern - (value_identifier) - (spread_pattern - (value_identifier)))) - (as_aliasing - (value_identifier))) - (sequence_expression - (expression_statement - (value_name))))))) - (value_identifier))))))) - - - 17. Switch of arrays: - - (source_file - (expression_statement - (switch_expression - (value_name) - (value_identifier) - (switch_match - (array_pattern - (value_name) - (value_identifier) - (spread_pattern - (value_name))) - (value_identifier))) - (sequence_expression - (expression_statement - (number)))) - (switch_match - (array_pattern - (number) - (alias_pattern - (number) - (value_name)) - (value_name)) - (number) - (as_aliasing - (value_identifier)) - (value_identifier)) - (sequence_expression - (expression_statement - (number)))) - (switch_match - (array_pattern - (number)) - (sequence_expression - (expression_statement - (number)))) - (switch_match - (array_pattern - (spread_pattern - (value_name))) - (value_identifier))) - (sequence_expression - (expression_statement - (number))))))) - - - 18. Switch of statements: - - (source_file - (expression_statement - (switch_expression - (parenthesized_expression - (pipe_expression - (value_name) - (value_path - (module_path - (module_name)) - (value_name)))) - (value_identifier) - (value_identifier_path - (module_identifier) - (value_identifier)))) - (switch_match - pattern: (constructor_pattern - (constructor_path - (constructor_name)) - (parenthesized_pattern - (value_name))) - pattern: (variant_pattern - (variant_identifier) - (formal_parameters - (value_identifier))) - body: (sequence_expression - (expression_statement - (call_expression - function: (value_path - (module_path - (module_name)) - (value_name)) - function: (value_identifier_path - (module_identifier) - (value_identifier)) - arguments: (arguments - (value_name)))) - (value_identifier)))) - (expression_statement - (call_expression - function: (value_path - (module_path - (module_name)) - (value_name)) - function: (value_identifier_path - (module_identifier) - (value_identifier)) - arguments: (arguments - (value_name)))))) - (value_identifier)))))) - (switch_match - pattern: (constructor_pattern - (constructor_path - (constructor_name))) - pattern: (variant_pattern - (variant_identifier)) - body: (sequence_expression - (expression_statement - (unit))))))) - - - 19. Switch exceptions: - - (source_file - (expression_statement - (switch_expression - (call_expression - (value_name) - (value_identifier) - (arguments - (value_name))) - (value_identifier))) - (switch_match - (value_name) - (value_identifier) - (sequence_expression - (expression_statement - (number)))) - (switch_match - (exception_pattern - (constructor_pattern - (constructor_path - (module_path - (module_path - (module_name)) - (module_name)) - (constructor_name)) - (parenthesized_pattern - (value_name)))) - (variant_pattern - (nested_variant_identifier - (module_identifier_path - (module_identifier) - (module_identifier)) - (variant_identifier)) - (formal_parameters - (value_identifier)))) - (sequence_expression - (expression_statement - (number))))))) - - - 20. Switch block: - - (source_file - (expression_statement - (switch_expression - (block - (open_statement - (module_path - (module_name))) - (module_identifier)) - (expression_statement - (call_expression - (value_name) - (value_identifier) - (arguments)))) - (switch_match - (value_name) - (value_identifier) - (sequence_expression - (expression_statement - (number))))))) - - - 21. Switch parenthesized: - - (source_file - (expression_statement - (switch_expression - (value_name) - (value_identifier) - (switch_match - (parenthesized_pattern - (or_pattern - (number) - (number))) - (sequence_expression - (expression_statement - (number)))) - (switch_match - (constructor_pattern - (constructor_path - (constructor_name)) - (parenthesized_pattern - (variant_pattern - (variant_identifier) - (formal_parameters - (or_pattern - (parenthesized_pattern - (or_pattern - (constructor_pattern - (constructor_path - (constructor_name))) - (constructor_pattern - (constructor_path - (constructor_name))))) - (constructor_pattern - (constructor_path - (constructor_name)))))) - (variant_pattern - (variant_identifier)) - (variant_pattern - (variant_identifier)))) - (variant_pattern - (variant_identifier))))) - (sequence_expression - (expression_statement - (number))))))) - - - 22. Switch ranges: - - (source_file - (expression_statement - (switch_expression - (value_name) - (value_identifier) - (switch_match - (range_pattern - (character) - (character)) - (sequence_expression - (expression_statement - (number))))))) - - - 23. Boolean operators: - - (source_file - (expression_statement - (binary_expression - (value_name) - (value_name))) - (value_identifier) - (value_identifier))) - (expression_statement - (binary_expression - (value_name) - (value_name))) - (value_identifier) - (value_identifier))) - (expression_statement - (binary_expression - (binary_expression - (unary_expression - (value_name)) - (value_identifier)) - (unary_expression - (value_name))) - (value_identifier))) - (binary_expression - (unary_expression - (value_name)) - (value_identifier)) - (unary_expression - (value_name)))))) - (value_identifier)))))) - - - 24. String operators: - - (source_file - (expression_statement - (binary_expression - (value_name) - (value_name))) - (value_identifier) - (value_identifier))) - (expression_statement - (binary_expression - (binary_expression - (value_name) - (value_name)) - (value_name)))) - (value_identifier) - (value_identifier)) - (value_identifier)))) - - - 25. Coercion operator: - - (source_file - (expression_statement - (coercion_expression - (value_name) - (type_constructor_path - (type_constructor))))) - (value_identifier) - (type_identifier)))) - - - 26. Ternaries: - - (source_file - (expression_statement - (ternary_expression - (value_name) - (value_name) - (value_name))) - (value_identifier) - (value_identifier) - (value_identifier))) - (expression_statement - (ternary_expression - (value_name) - (value_name) - (value_name)))) - (value_identifier) - (value_identifier) - (value_identifier)))) - - - 27. Lists: - - (source_file - (expression_statement - (list)) - (expression_statement - (list - (number))) - (expression_statement - (list - (number))) - (expression_statement - (list - (number) - (number))) - (expression_statement - (list - (number) - (number) - (spread_element - (value_name)))) - (value_identifier)))) - (expression_statement - (list - (spread_element - (value_name)) - (value_identifier)) - (number) - (number)))) - - - 28. Member expressions: - - (source_file - (expression_statement - (member_expression - (member_expression - (value_name) - (value_path - (value_name))) - (value_path - (value_name)))) - (value_identifier) - (property_identifier)) - (property_identifier))) - (expression_statement - (member_expression - (value_name) - (value_path - (module_path - (module_name)) - (value_name))))) - (value_identifier) - (module_identifier) - (property_identifier)))) - - - 29. Subscript expressions: - - (source_file - (expression_statement - (subscript_expression - (value_name) - (value_identifier) - (number))) - (expression_statement - (subscript_expression - (value_name) - (value_identifier) - (string - (string_fragment))))) - - - 30. Variants: - - (source_file - (expression_statement - (constructor_path - (constructor_name))) - (variant - (variant_identifier))) - (expression_statement - (call_expression - (constructor_path - (constructor_name)) - (variant - (variant_identifier) - (arguments - (number)))) - (expression_statement - (call_expression - (constructor_path - (constructor_name)) - (variant - (variant_identifier) - (arguments - (number) - (type_annotation - (type_constructor_path - (type_constructor)))))) - (type_identifier))))) - (expression_statement - (call_expression - (constructor_path - (constructor_name)) - (variant - (variant_identifier) - (arguments - (value_name) - (value_identifier) - (record - (record_field - (property_identifier - (value_name)) - (property_identifier) - (number)))))) - (expression_statement - (call_expression - (constructor_path - (constructor_name)) - (variant - (variant_identifier) - (arguments - (parenthesized_expression - (call_expression - (value_path - (module_path - (module_name)) - (value_name)) - (value_identifier_path - (module_identifier) - (value_identifier)) - (arguments - (value_name))) - (value_identifier))) - (type_annotation - (type_constructor_path - (type_constructor)))))))) - (type_identifier))))))) - - - 31. Extensions: - - (source_file - (expression_statement - (extension_expression - (extension_identifier))) - (expression_statement - (extension_expression - (extension_identifier) - (expression_statement - (string - (string_fragment))))) - (expression_statement - (extension_expression - (extension_identifier) - (expression_statement - (string - (string_fragment))))) - (expression_statement - (extension_expression - (extension_identifier) - (let_declaration - (let_binding - pattern: (value_name) - pattern: (value_identifier) - body: (function - parameters: (formal_parameters - (parameter - (value_name)) - (value_identifier)) - (parameter - (value_name))) - (value_identifier))) - body: (binary_expression - left: (value_name) - right: (value_name))))))) - left: (value_identifier) - right: (value_identifier))))))) - (expression_statement - (extension_expression - (extension_identifier) - (let_declaration - (let_binding - pattern: (value_name) - pattern: (value_identifier) - body: (string - (string_fragment)))) - (let_declaration - (let_binding - pattern: (value_name) - pattern: (value_identifier) - body: (number))))) - (let_declaration - (let_binding - pattern: (value_name) - pattern: (value_identifier) - body: (extension_expression - (extension_identifier) - (expression_statement - (template_string - (template_string_content - (escape_sequence) - (escape_sequence))))))) - (let_declaration - (let_binding - pattern: (value_name) - pattern: (value_identifier) - body: (extension_expression - (extension_identifier) - (expression_statement - (template_string - (template_string_content - (escape_sequence) - (escape_sequence))))))) - (module_declaration - (module_binding - name: (module_name) - name: (module_identifier) - definition: (extension_expression - (extension_identifier) - (expression_statement - (template_string - (template_string_content))))))) - - - 32. Raise expression: - - (source_file - (expression_statement - (call_expression - function: (value_name) - function: (value_identifier) - arguments: (arguments - (call_expression - function: (constructor_path - (constructor_name)) - arguments: (arguments - (variant - (variant_identifier) - (arguments - (record - (record_field - (property_identifier - (value_name)) - (property_identifier) - (string - (string_fragment))))))))) - (expression_statement - (call_expression - function: (value_name) - function: (value_identifier) - arguments: (arguments - (constructor_path - (constructor_name)))))) - (variant - (variant_identifier)))))) - - - 33. Assert expression: - - (source_file - (expression_statement - (assert_expression - (false))) - (expression_statement - (assert_expression - (block - (expression_statement - (binary_expression - (number) - (number)))))) - (let_declaration - (let_binding - (value_name) - (value_identifier) - (function - (formal_parameters) - (assert_expression - (false)))))) - - - 34. Try-catch: - - (source_file - (expression_statement - (try_expression - (block - (expression_statement - (call_expression - (value_name) - (value_identifier) - (arguments)))) - (switch_match - (constructor_pattern - (constructor_path - (constructor_name))) - (variant_pattern - (variant_identifier)) - (sequence_expression - (expression_statement - (number)))) - (switch_match - (constructor_pattern - (constructor_path - (constructor_name)) - (parenthesized_pattern - (variant_pattern - (variant_identifier) - (formal_parameters - (record_pattern - (value_path - (value_name)) - (value_path - (value_name))))) - (value_identifier) - (value_identifier)))) - (sequence_expression - (expression_statement - (number)))) - (switch_match - (constructor_pattern - (constructor_path - (module_path - (module_path - (module_name)) - (module_name)) - (constructor_name)) - (parenthesized_pattern - (value_name))) - (variant_pattern - (nested_variant_identifier - (module_identifier_path - (module_identifier) - (module_identifier)) - (variant_identifier)) - (formal_parameters - (value_identifier))) - (sequence_expression - (expression_statement - (number)))))) - (expression_statement - (try_expression - (switch_expression - (call_expression - (value_name) - (value_identifier) - (arguments)) - (switch_match - (number) - (sequence_expression - (expression_statement - (string - (string_fragment))))) - (switch_match - (number) - (sequence_expression - (expression_statement - (string - (string_fragment))))) - (switch_match - (value_name) - (value_identifier) - (sequence_expression - (expression_statement - (string - (string_fragment)))))) - (switch_match - (constructor_pattern - (constructor_path - (module_path - (module_path - (module_name)) - (module_name)) - (constructor_name)) - (parenthesized_pattern - (value_name))) - (variant_pattern - (nested_variant_identifier - (module_identifier_path - (module_identifier) - (module_identifier)) - (variant_identifier)) - (formal_parameters - (value_identifier))) - (sequence_expression - (expression_statement - (string - (string_fragment))))))) - (expression_statement - (try_expression - (for_expression - (value_path - (value_name)) - (value_identifier) - (number) - (number) - (block - (expression_statement - (call_expression - (value_name) - (value_identifier) - (arguments))))) - (switch_match - (constructor_pattern - (constructor_path - (constructor_name))) - (variant_pattern - (variant_identifier)) - (sequence_expression - (expression_statement - (false))))))) - - - 35. Mutation expressions: - - (source_file - (expression_statement - (mutation_expression - (subscript_expression - (value_name) - (value_identifier) - (string - (string_fragment))) - (value_name))) - (value_identifier))) - (expression_statement - (mutation_expression - (member_expression - (value_name) - (value_path - (value_name))) - (value_name))) - (value_identifier) - (property_identifier)) - (value_identifier))) - (expression_statement - (mutation_expression - (member_expression - (value_name) - (value_path - (value_name))) - (value_name)))) - (value_identifier) - (property_identifier)) - (value_identifier)))) - - - 36. For loop: - - (source_file - (expression_statement - (for_expression - (value_path - (value_name)) - (value_identifier) - (number) - (number) - (block - (expression_statement - (call_expression - (value_path - (module_path - (module_name)) - (value_name)) - (value_identifier_path - (module_identifier) - (value_identifier)) - (arguments - (value_name))))))) - (value_identifier))))))) - (expression_statement - (for_expression - (value_path - (value_name)) - (value_identifier) - (number) - (number) - (block - (expression_statement - (call_expression - (value_path - (module_path - (module_name)) - (value_name)) - (value_identifier_path - (module_identifier) - (value_identifier)) - (arguments - (value_name)))))))) - (value_identifier)))))))) - - - 37. While loop: - - (source_file - (expression_statement - (while_expression - (true) - (block - (expression_statement - (call_expression - (value_path - (module_path - (module_name)) - (value_name)) - (value_identifier_path - (module_identifier) - (value_identifier)) - (arguments - (string - (string_fragment))))))))) - - - 38. Await expression: - - (source_file - (expression_statement - (await_expression - (value_name))) - (value_identifier))) - (expression_statement - (await_expression - (call_expression - (value_name) - (value_identifier) - (arguments)))) - (expression_statement - (binary_expression - (await_expression - (pipe_expression - (value_name) - (value_name))) - (value_identifier) - (value_identifier))) - (number)))) - - - 39. As aliasing: - - (source_file - (let_declaration - (let_binding - pattern: (value_name) - pattern: (value_identifier) - body: (function - parameters: (formal_parameters - (parameter - (alias_pattern - (record_pattern - (value_path - (value_name)) - (value_path - (value_name))) - (value_name)) - (record_pattern - (value_identifier) - (value_identifier)) - (as_aliasing - (value_identifier)) - (type_annotation - (type_constructor_path - (module_path - (module_name)) - (type_constructor))))) - (type_identifier_path - (module_identifier) - (type_identifier))))) - body: (block))))) - - - 40. Lazy Expression: - - (source_file - (expression_statement - (lazy_expression - (block - (expression_statement - (number))))) - (expression_statement - (lazy_expression - (call_expression - (value_name) - (value_identifier) - (arguments))))) - - - 41. Open: - - (source_file - (open_statement - (module_path - (module_name))) - (module_identifier)) - (open_statement - (module_path - (module_path - (module_name)) - (module_name)))) - (module_identifier_path - (module_identifier) - (module_identifier)))) - - - 42. Include: - - (source_file - (include_statement - (module_path - (module_name))) - (module_identifier)) - (include_statement - (module_path - (module_path - (module_name)) - (module_name))) - (module_identifier_path - (module_identifier) - (module_identifier))) - (include_statement - (functor_use - (module_path - (module_path - (module_name)) - (module_name)) - (module_identifier_path - (module_identifier) - (module_identifier)) - (arguments - (module_path - (module_name))))) - (module_identifier)))) - (include_statement - (functor_use - (module_path - (module_path - (module_name)) - (module_name)) - (module_identifier_path - (module_identifier) - (module_identifier)) - (arguments - (block - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)))) - (type_identifier))) - (let_declaration - (let_binding - (value_name) - (value_identifier) - (type_annotation - (type_constructor_path - (type_constructor))))))))) - (type_identifier)))))))) - (include_statement - (module_type_of - (module_path - (module_path - (module_name)) - (module_name)))) - (module_identifier_path - (module_identifier) - (module_identifier)))) - (include_statement - (parenthesized_module_type - (parenthesized_module_expression - (module_type_of - (module_path - (module_path - (module_name)) - (module_name))))) - (module_identifier_path - (module_identifier) - (module_identifier))))) - (include_statement - (typed_module_expression - (module_path - (module_name)) - (parenthesized_module_expression - (module_identifier) - (module_type_annotation - (module_type_constraint - (module_type_of - (module_path - (module_name))) - (module_identifier)) - (constrain_module - (module_path - (module_path - (module_name)) - (module_name)) - (module_path - (module_path - (module_name)) - (module_name))) - (module_identifier_path - (module_identifier) - (module_identifier)) - (module_identifier_path - (module_identifier) - (module_identifier))) - (constrain_module - (module_path - (module_name)) - (module_path - (module_path - (module_name)) - (module_name))))))) - (module_identifier) - (module_identifier_path - (module_identifier) - (module_identifier))))))) - (include_statement - (module_type_of - (block - (include_statement - (module_path - (module_name)))))) - (module_identifier))))) - (include_statement - (parenthesized_module_expression - (block - (let_declaration - (let_binding - (value_name) - (call_expression - (value_path - (module_path - (module_name)) - (value_name)) - (arguments - (string - (string_fragment)))))))))) - (block - (let_declaration - (let_binding - (value_identifier) - (call_expression - (value_identifier_path - (module_identifier) - (value_identifier)) - (arguments - (string - (string_fragment))))))))) - - - 43. Simple definition: - - (source_file - (module_declaration - (module_binding - (module_name) - (module_identifier) - (block - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)))))))) - (type_identifier))))))) - - - 44. Signature and definition: - - (source_file - (module_declaration - (module_binding - name: (module_name) - name: (module_identifier) - signature: (block - (let_declaration - (let_binding - pattern: (value_name) - pattern: (value_identifier) - (type_annotation - (type_constructor_path - (type_constructor))))) - (type_identifier)))) - (let_declaration - (let_binding - pattern: (value_name) - pattern: (value_identifier) - (type_annotation - (type_constructor_path - (type_constructor))))) - (type_identifier)))) - (let_declaration - (let_binding - pattern: (value_name) - pattern: (value_identifier) - (type_annotation - (type_constructor_path - (type_constructor)))))))) - (type_identifier))))))) - (module_declaration - (module_binding - name: (module_name) - signature: (module_type_path - (module_path - (module_name)) - (module_type_name - (module_name))) - name: (module_identifier) - signature: (module_identifier_path - (module_identifier) - (module_identifier)) - definition: (block - (type_declaration - (type_binding - name: (type_constructor_path - (type_constructor))))))) - name: (type_identifier)))))) - (module_declaration - (module_binding - name: (module_name) - name: (module_identifier) - signature: (block - (type_declaration - (type_binding - name: (type_constructor_path - (type_constructor))))) - name: (type_identifier)))) - definition: (block - (type_declaration - (type_binding - name: (type_constructor_path - (type_constructor)) - (type_constructor_path - (type_constructor)))))))) - name: (type_identifier) - (type_identifier))))))) - - - 45. Module types: - - (source_file - (module_declaration - (module_binding - (module_name) - (module_identifier) - (block - (type_declaration - (type_binding - (type_constructor_path - (type_constructor))))))) - (type_identifier)))))) - (module_declaration - (module_binding - (module_name) - (module_identifier) - (module_type_of - (module_path - (module_path - (module_name)) - (module_name))))) - (module_identifier_path - (module_identifier) - (module_identifier))))) - (module_declaration - (module_binding - (type_constructor)))) - (type_identifier)))) - - - 46. First Class module: - - (source_file - (expression_statement - (package_expression - (module_path - (module_name)))) - (module_pack - (module_identifier))) - (expression_statement - (package_expression - (module_path - (module_name)) - (module_pack - (module_identifier) - (module_type_annotation - (module_type_path - (module_type_name - (module_name)))))) - (module_identifier)))) - (expression_statement - (package_expression - (module_pack - (block - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)))) - (type_identifier))) - (let_declaration - (let_binding - (value_name) - (value_identifier) - (string - (string_fragment))))) - (module_type_annotation - (module_type_path - (module_type_name - (module_name)))))) - (module_identifier)))) - (expression_statement - (package_expression - (module_pack - (functor_use - (module_path - (module_name)) - (module_identifier) - (arguments - (module_unpack - (value_name)))))) - (value_identifier)))))) - (module_declaration - (module_binding - (module_name) - (module_identifier) - (module_unpack - (value_name) - (value_identifier) - (module_type_annotation - (module_type_path - (module_type_name - (module_name))))))) - (module_identifier))))) - (module_declaration - (module_binding - (module_name) - (module_identifier) - (module_unpack - (value_name) - (value_identifier) - (module_type_annotation - (module_type_constraint - (module_type_path - (module_type_name - (module_name))) - (module_identifier) - (constrain_type - (type_constructor_path - (type_constructor)) - (type_constructor_path - (type_constructor)))))))) - (type_identifier) - (type_identifier))))))) - (module_declaration - (module_binding - (module_name) - (module_identifier) - (module_unpack - (call_expression - (value_path - (module_path - (module_name)) - (value_name)) - (value_identifier_path - (module_identifier) - (value_identifier)) - (arguments - (value_name)))))) - (value_identifier)))))) - (module_declaration - (module_binding - (module_name) - (module_identifier) - (module_unpack - (extension_expression - (extension_identifier) - (expression_statement - (value_name))))))) - (value_identifier))))))) - - - 47. Functor definition: - - (source_file - (module_declaration - (module_binding - name: (module_name) - name: (module_identifier) - definition: (functor - parameters: (functor_parameters - (functor_parameter - (module_path - (module_name)) - (module_identifier) - (module_type_annotation - (block - (type_declaration - (type_binding - name: (type_constructor_path - (type_constructor))))))) - name: (type_identifier)))))) - (functor_parameter - (module_path - (module_name)) - (module_identifier) - (module_type_annotation - (block - (type_declaration - (type_binding - name: (type_constructor_path - (type_constructor)))))))) - name: (type_identifier))))))) - return_module_type: (module_type_annotation - (block - (type_declaration - (type_binding - name: (type_constructor_path - (type_constructor)))) - name: (type_identifier))) - (type_declaration - (type_binding - name: (type_constructor_path - (type_constructor)))))) - name: (type_identifier))))) - body: (block - (type_declaration - (type_binding - name: (type_constructor_path - (type_constructor)) - (type_constructor_path - (module_path - (module_name)) - (type_constructor)))) - name: (type_identifier) - (type_identifier_path - (module_identifier) - (type_identifier)))) - (type_declaration - (type_binding - name: (type_constructor_path - (type_constructor)) - (type_constructor_path - (module_path - (module_name)) - (type_constructor))))))))) - name: (type_identifier) - (type_identifier_path - (module_identifier) - (type_identifier))))))))) - - - 48. Functor signature: - - (source_file - (module_declaration - (module_binding - (module_name) - (module_identifier) - (functor - (functor_parameters - (functor_parameter - (module_path - (module_name)) - (module_identifier) - (module_type_annotation - (module_type_path - (module_type_name - (module_name)))))) - (module_identifier)))) - (block - (let_declaration - (let_binding - (value_name) - (value_identifier) - (type_annotation - (function_type - (function_type_parameters - (type_constructor_path - (type_constructor))) - (type_constructor_path - (type_constructor))))))))))) - (type_identifier)) - (type_identifier)))))))))) - - - 49. Functor use: - - (source_file - (module_declaration - (module_binding - (module_name) - (module_identifier) - (functor_use - (module_path - (module_name)) - (module_identifier) - (arguments - (module_path - (module_name)) - (module_path - (module_path - (module_name)) - (module_name))))))) - (module_identifier) - (module_identifier_path - (module_identifier) - (module_identifier))))))) - - - 50. Alias: - - (source_file - (module_declaration - (module_binding - (module_name) - (module_path - (module_path - (module_path - (module_name)) - (module_name)) - (module_name)))) - (module_identifier) - (module_identifier_path - (module_identifier_path - (module_identifier) - (module_identifier)) - (module_identifier)))) - (module_declaration - (module_binding - (module_name) - (module_path - (module_name))))) - (module_identifier) - (module_identifier)))) - - - 51. Recursive: - - (source_file - (module_declaration - (module_binding - (module_name) - (module_identifier) - (block - (include_statement - (module_path - (module_name)))) - (module_path - (module_name)))) - (module_identifier))) - (module_identifier))) - (module_declaration - (module_binding - (module_name) - (module_type_path - (module_type_name - (module_name))) - (module_identifier) - (module_identifier) - (block - (let_declaration - (let_binding - (value_name) - (value_path - (module_path - (module_name)) - (value_name)))))) - (value_identifier) - (value_identifier_path - (module_identifier) - (value_identifier)))))) - (module_binding - (module_name) - (module_type_path - (module_type_name - (module_name))) - (module_identifier) - (module_identifier) - (block - (let_declaration - (let_binding - (value_name) - (value_identifier) - (number))))))) - - - 52. Definition through extension: - - (source_file - (module_declaration - (module_binding - (module_name) - (module_identifier) - (extension_expression - (extension_identifier) - (expression_statement - (unit)))))) - - - 53. Externals: - - (source_file - (external_declaration - (value_name) - (value_identifier) - (type_annotation - (function_type - (function_type_parameters - (type_constructor_path - (type_constructor))) - (type_constructor_path - (type_constructor)))) - (type_identifier)) - (type_identifier))) - (string - (string_fragment))) - (decorator - (decorator_identifier)) - (external_declaration - (value_name) - (value_identifier) - (type_annotation - (type_constructor_path - (type_constructor))) - (type_identifier)) - (string - (string_fragment))) - (decorator - (decorator_identifier)) - (external_declaration - (value_name) - (value_identifier) - (type_annotation - (type_constructor_path - (type_constructor))) - (type_identifier)) - (string - (string_fragment))) - (decorator - (decorator_identifier) - (decorator_arguments - (string - (string_fragment)))) - (decorator - (decorator_identifier)) - (external_declaration - (value_name) - (value_identifier) - (type_annotation - (type_constructor_path - (type_constructor))) - (type_identifier)) - (string - (string_fragment))) - (external_declaration - (value_name) - (value_identifier) - (type_annotation - (function_type - (function_type_parameters - (parameter - (object_type)) - (parameter - (uncurry) - (unit_type))) - (object_type))) - (string - (string_fragment))) - (decorator - (decorator_identifier)) - (external_declaration - (value_name) - (value_identifier) - (type_annotation - (function_type - (function_type_parameters - (parameter - (type_constructor_path - (module_path - (module_name)) - (type_constructor))) - (type_identifier_path - (module_identifier) - (type_identifier))) - (decorator - (decorator_identifier) - (decorator_arguments - (template_string - (template_string_content)))) - (parameter - (type_constructor_path - (type_constructor))) - (type_identifier)) - (decorator - (decorator_identifier) - (decorator_arguments - (string))) - (parameter - (type_constructor_path - (type_constructor))) - (type_identifier)) - (parameter - (labeled_parameter - (value_name) - (value_identifier) - (type_annotation - (type_constructor_path - (type_constructor)))))) - (type_identifier))))) - (unit_type))) - (string - (string_fragment))) - (decorator - (decorator_identifier)) - (external_declaration - (value_name) - (value_identifier) - (type_annotation - (function_type - (function_type_parameters - (parameter - (type_constructor_path - (type_constructor))) - (type_identifier)) - (parameter - (labeled_parameter - (value_name) - (value_identifier) - (type_annotation - (decorator - (decorator_identifier)) - (polyvar_type - (polyvar_declaration - (polyvar_identifier) - (polyvar_parameters - (type_constructor_path - (module_path - (module_name)) - (type_constructor)))) - (type_identifier_path - (module_identifier) - (type_identifier)))) - (polyvar_declaration - (polyvar_identifier) - (polyvar_parameters - (type_constructor_path - (module_path - (module_name)) - (type_constructor))))))))) - (type_identifier_path - (module_identifier) - (type_identifier))))))))) - (unit_type))) - (string - (string_fragment)))) - - - 54. Exception declaration: - - (source_file - (exception_declaration - (constructor_name) - (variant_identifier) - (variant_parameters - (type_constructor_path - (type_constructor)))) - (type_identifier))) - (exception_declaration - (constructor_name) - (constructor_path - (constructor_name))) - (variant_identifier) - (variant_identifier)) - (exception_declaration - (constructor_name) - (constructor_path - (module_path - (module_name)) - (constructor_name)))) - (variant_identifier) - (nested_variant_identifier - (module_identifier) - (variant_identifier)))) - - - 55. Module Constraints: - - (source_file - (expression_statement - (package_expression - (module_path - (module_name)) - (module_pack - (module_identifier) - (module_type_annotation - (module_type_constraint - (module_type_path - (module_type_name - (module_name))) - (module_identifier) - (constrain_type - (type_constructor_path - (type_constructor)) - (type_constructor_path - (type_constructor))) - (type_identifier) - (type_identifier)) - (constrain_type - (type_constructor_path - (type_constructor)) - (type_constructor_path - (type_constructor))))))) - (type_identifier) - (type_identifier)))))) - (module_declaration - (module_binding - name: (module_name) - name: (module_identifier) - definition: (functor - parameters: (functor_parameters) - return_module_type: (module_type_annotation - (parenthesized_module_type - (parenthesized_module_expression - (module_type_constraint - (module_type_path - (module_type_name - (module_name))) - (module_identifier) - (constrain_type - (type_constructor_path - (type_constructor)) - (type_constructor_path - (type_constructor)))))) - (type_identifier) - (type_identifier))))) - body: (block)))) - (module_declaration - (module_binding - name: (module_name) - name: (module_identifier) - definition: (functor - parameters: (functor_parameters - (functor_parameter - (module_path - (module_name)) - (module_identifier) - (module_type_annotation - (module_type_path - (module_type_name - (module_name))))) - (module_identifier))) - (functor_parameter - (module_path - (module_name)) - (module_identifier) - (module_type_annotation - (module_type_path - (module_type_name - (module_name)))))) - (module_identifier)))) - return_module_type: (module_type_annotation - (parenthesized_module_type - (parenthesized_module_expression - (module_type_constraint - (parenthesized_module_type - (parenthesized_module_expression - (module_type_constraint - (module_type_path - (module_type_name - (module_name))) - (module_identifier) - (constrain_type - (type_constructor_path - (type_constructor)) - (type_constructor_path - (type_constructor))))) - (type_identifier) - (type_identifier)))) - (constrain_type - (type_constructor_path - (type_constructor)) - (type_constructor_path - (type_constructor)))))) - (type_identifier) - (type_identifier))))) - body: (block))))) - - - 56. Template strings: - - (source_file - (expression_statement - (template_string)) - (expression_statement - (template_string - (template_string_content))) - (expression_statement - (template_string - (template_string_content - (escape_sequence)))) - (expression_statement - (template_string - (template_string_content))) - (expression_statement - (template_string - (template_string_content))) - (expression_statement - (template_string - (template_string_content))) - (expression_statement - (template_string - (template_string_content - (template_substitution - (binary_expression - (number) - (number))) - (template_substitution - (binary_expression - (number) - (number)))))) - (expression_statement - (template_string - (template_string_content - (escape_sequence) - (template_substitution - (call_expression - (value_name) - (value_identifier) - (arguments - (string - (string_fragment))))) - (escape_sequence) - (template_substitution - (value_name))))) - (value_identifier))))) - (expression_statement - (template_string - (template_string_content))) - (expression_statement - (template_string - (template_string_content - (escape_sequence)))) - (expression_statement - (template_string - (template_string_content)))) - - - 57. Polyvars: - - (source_file - (expression_statement - (polyvar - (polyvar_identifier))) - (expression_statement - (polyvar - (polyvar_identifier) - (call_arguments - (arguments - (number)))) - (expression_statement - (polyvar - (polyvar_identifier - (polyvar_string - (string_fragment))))) - (expression_statement - (polyvar - (polyvar_identifier - (polyvar_string - (string_fragment))))) - (expression_statement - (polyvar - (polyvar_identifier)))) - - - 58. Simple JSX elements: - - (source_file - (expression_statement - (jsx_self_closing_element - (jsx_identifier) - (jsx_attribute - (property_identifier) - (string - (string_fragment))) - (jsx_attribute - (property_identifier) - (jsx_expression - (expression_statement - (number)))))) - (expression_statement - (jsx_element - (jsx_opening_element - (jsx_identifier - (module_path - (module_name)) - (constructor_name))) - (value_path - (value_name)) - (nested_jsx_identifier - (jsx_identifier) - (jsx_identifier))) - (value_identifier) - (jsx_element - (jsx_opening_element - (jsx_identifier)) - (value_path - (value_name)) - (value_identifier) - (jsx_closing_element - (jsx_identifier))) - (value_path - (value_name)) - (value_identifier) - (jsx_closing_element - (jsx_identifier - (module_path - (module_name)) - (constructor_name))))) - (nested_jsx_identifier - (jsx_identifier) - (jsx_identifier))))) - (expression_statement - (jsx_element - (jsx_opening_element - (jsx_identifier - (module_path - (module_path - (module_path - (module_name)) - (module_name)) - (module_name)) - (constructor_name))) - (nested_jsx_identifier - (nested_jsx_identifier - (nested_jsx_identifier - (jsx_identifier) - (jsx_identifier)) - (jsx_identifier)) - (jsx_identifier))) - (jsx_closing_element - (jsx_identifier - (module_path - (module_path - (module_path - (module_name)) - (module_name)) - (module_name)) - (constructor_name))))) - (nested_jsx_identifier - (nested_jsx_identifier - (nested_jsx_identifier - (jsx_identifier) - (jsx_identifier)) - (jsx_identifier)) - (jsx_identifier))))) - (expression_statement - (jsx_element - (jsx_opening_element - (jsx_identifier)) - (value_path - (module_path - (module_name)) - (value_name)) - (value_identifier_path - (module_identifier) - (value_identifier)) - (jsx_closing_element - (jsx_identifier)))) - (expression_statement - (jsx_element - (jsx_opening_element - (jsx_identifier)) - (member_expression - (value_name) - (value_path - (value_name))) - (value_identifier) - (property_identifier)) - (jsx_closing_element - (jsx_identifier))))) - - - 59. Attribute values: - - (source_file - (expression_statement - (jsx_self_closing_element - (jsx_identifier - (constructor_name)) - (jsx_identifier) - (jsx_attribute - (property_identifier) - (number)) - (jsx_attribute - (property_identifier) - (polyvar - (polyvar_identifier))) - (jsx_attribute - (property_identifier) - (constructor_path - (constructor_name))) - (variant - (variant_identifier))) - (jsx_attribute - (property_identifier)) - (jsx_attribute - (property_identifier)) - (jsx_attribute - (property_identifier) - (jsx_expression - (expression_statement - (value_name)))))) - (value_identifier)))))) - (expression_statement - (jsx_self_closing_element - (jsx_identifier - (constructor_name)) - (jsx_identifier) - (jsx_attribute - (property_identifier) - (pipe_expression - (value_name) - (value_name))) - (value_identifier) - (value_identifier))) - (jsx_attribute - (property_identifier) - (true))))) - - - 60. Anonymous JSX element: - - (source_file - (expression_statement - (jsx_fragment)) - (expression_statement - (jsx_element - (jsx_opening_element - (jsx_identifier - (constructor_name))) - (jsx_identifier)) - (jsx_fragment) - (jsx_closing_element - (jsx_identifier - (constructor_name)))))) - (jsx_identifier))))) - - - 61. Block children: - - (source_file - (expression_statement - (jsx_element - (jsx_opening_element - (jsx_identifier)) - (block - (let_declaration - (let_binding - (value_name) - (value_identifier) - (string - (string_fragment)))) - (expression_statement - (jsx_element - (jsx_opening_element - (jsx_identifier) - (jsx_attribute - (property_identifier))) - (block - (expression_statement - (call_expression - (value_path - (module_path - (module_name)) - (value_name)) - (value_identifier_path - (module_identifier) - (value_identifier)) - (arguments - (string - (string_fragment)))))) - (jsx_closing_element - (jsx_identifier))))) - (jsx_closing_element - (jsx_identifier))))) - - - 62. Children spread: - - (source_file - (expression_statement - (jsx_element - (jsx_opening_element - (jsx_identifier - (constructor_name))) - (jsx_identifier)) - (spread_element - (value_name)) - (value_identifier)) - (jsx_closing_element - (jsx_identifier - (constructor_name)))))) - (jsx_identifier))))) - - - 63. Attribute Block: - - (source_file - (expression_statement - (jsx_element - (jsx_opening_element - (jsx_identifier - (constructor_name)) - (jsx_identifier) - (jsx_attribute - (property_identifier) - (jsx_expression - (expression_statement - (call_expression - (value_path - (module_path - (module_name)) - (value_name)) - (value_identifier_path - (module_identifier) - (value_identifier)) - (arguments - (string - (string_fragment))))))) - (jsx_attribute - (property_identifier) - (jsx_expression - (open_statement - (module_path - (module_name))) - (module_identifier)) - (expression_statement - (record - (record_field - (property_identifier - (value_name)) - (value_name)) - (property_identifier) - (value_identifier)) - (record_field - (property_identifier - (value_name)) - (property_identifier) - (false))))))) - (jsx_self_closing_element - (jsx_identifier - (constructor_name))) - (jsx_identifier)) - (jsx_closing_element - (jsx_identifier - (constructor_name)))))) - (jsx_identifier))))) - - - 64. Spread props: - - (source_file - (expression_statement - (jsx_self_closing_element - (jsx_identifier) - (jsx_expression - (spread_element - (value_name))))) - (value_identifier))))) - (expression_statement - (jsx_element - (jsx_opening_element - (jsx_identifier - (constructor_name)) - (jsx_identifier) - (jsx_expression - (spread_element - (value_name)))) - (value_identifier)))) - (jsx_closing_element - (jsx_identifier - (constructor_name)))))) - (jsx_identifier))))) - - - 65. Decorator with type: - - (source_file - (decorator - (decorator_identifier) - (decorator_arguments - (type_annotation - (type_constructor_path - (type_constructor)))))) - (type_identifier))))) - - - 66. Plain: - - (source_file - (let_declaration - (let_binding - (value_name) - (value_identifier) - (number))) - (let_declaration - (let_binding - (value_name) - (value_name))) - (value_identifier) - (value_identifier))) - (let_declaration - (let_binding - (value_name) - (value_identifier) - (polyvar - (polyvar_identifier)))) - (let_declaration - (let_binding - (value_name) - (value_identifier) - (number))) - (let_declaration - (let_binding - (value_name) - (value_name))) - (value_identifier) - (value_identifier))) - (let_declaration - (let_binding - (value_name) - (value_identifier) - (number))) - (let_declaration - (let_binding - (value_name) - (value_identifier) - (number))) - (let_declaration - (let_binding - (value_name) - (value_identifier) - (number)))) - - - 67. Tuple destructuring: - - (source_file - (let_declaration - (let_binding - (tuple_pattern - (tuple_item_pattern - (value_name)) - (value_identifier)) - (tuple_item_pattern - (value_name)) - (value_identifier)) - (tuple_item_pattern - (tuple_pattern - (tuple_item_pattern - (value_name)) - (value_identifier)) - (tuple_item_pattern - (value_name))))) - (value_name))) - (value_identifier))))) - (value_identifier))) - (let_declaration - (let_binding - (tuple_pattern - (tuple_item_pattern - (value_name) - (value_identifier) - (type_annotation - (type_constructor_path - (type_constructor)))) - (type_identifier))) - (tuple_item_pattern - (value_name))) - (value_name))) - (value_identifier))) - (value_identifier))) - (let_declaration - (let_binding - (tuple_pattern - (tuple_item_pattern - (value_name)) - (value_identifier)) - (tuple_item_pattern - (value_name)) - (value_identifier)) - (tuple_item_pattern - (unit))) - (value_name)))) - (value_identifier)))) - - - 68. Record destructuring: - - (source_file - (let_declaration - (let_binding - (record_pattern - (value_path - (value_name)) - (value_path - (value_name))) - (value_name))) - (value_identifier) - (value_identifier)) - (value_identifier))) - (let_declaration - (let_binding - (record_pattern - (value_path - (value_name)) - (value_path - (value_name)) - (value_name)) - (value_name))) - (value_identifier) - (value_identifier) - (value_identifier)) - (value_identifier))) - (let_declaration - (let_binding - (record_pattern - (value_path - (module_path - (module_path - (module_name)) - (module_name)) - (value_name)) - (value_name)) - (value_name)))) - (value_identifier_path - (module_identifier_path - (module_identifier) - (module_identifier)) - (value_identifier)) - (value_identifier)) - (value_identifier)))) - - - 69. Array destructuring: - - (source_file - (let_declaration - (let_binding - (array_pattern - (value_name) - (value_name)) - (value_name))) - (value_identifier) - (value_identifier)) - (value_identifier))) - (let_declaration - (let_binding - (array_pattern - (value_name) - (value_name) - (value_name)) - (value_name))) - (value_identifier) - (value_identifier) - (value_identifier)) - (value_identifier))) - (let_declaration - (let_binding - (array_pattern - (decorator - (decorator_identifier)) - (value_name) - (value_name)) - (value_name)))) - (value_identifier) - (value_identifier)) - (value_identifier)))) - - - 70. List destructuring: - - (source_file - (let_declaration - (let_binding - (list_pattern - (value_name) - (value_identifier) - (spread_pattern - (value_name))) - (value_name))) - (value_identifier))) - (value_identifier))) - (let_declaration - (let_binding - (list_pattern - (decorator - (decorator_identifier)) - (value_name) - (value_identifier) - (spread_pattern - (value_name))) - (value_name)))) - (value_identifier))) - (value_identifier)))) - - - 71. Block: - - (source_file - (let_declaration - (let_binding - (value_name) - (value_identifier) - (block - (expression_statement - (number)) - (expression_statement - (number)))))) - - - 72. Annotated: - - (source_file - (let_declaration - (let_binding - (value_name) - (value_identifier) - (type_annotation - (type_constructor_path - (type_constructor))) - (type_identifier)) - (number))) - (let_declaration - (let_binding - (value_name) - (value_identifier) - (type_annotation - (function_type - (function_type_parameters - (type_constructor_path - (type_constructor))) - (type_identifier)) - (unit_type))) - (value_name)))) - (value_identifier)))) - - - 73. Recursive: - - (source_file - (let_declaration - (let_binding - (value_name) - (value_identifier) - (function - (value_name) - (value_identifier) - (call_expression - (value_name) - (value_identifier) - (arguments - (binary_expression - (value_name) - (value_identifier) - (number)))))))) - - - 74. Unit: - - (source_file - (let_declaration - (let_binding - (unit) - (value_name)))) - (value_identifier)))) - - - 75. And (Primitives): - - (source_file - (let_declaration - (let_binding - (value_name) - (value_identifier) - (number)) - (let_binding - (value_name) - (value_identifier) - (number)))) - - - 76. And (Functions): - - (source_file - (let_declaration - (let_binding - (value_name) - (value_identifier) - (function - (value_name) - (value_identifier) - (binary_expression - (value_name) - (value_identifier) - (call_expression - (value_name) - (value_identifier) - (arguments - (value_name)))))) - (value_identifier)))))) - (let_binding - (value_name) - (value_identifier) - (function - (value_name) - (value_identifier) - (binary_expression - (value_name) - (value_identifier) - (number)))))) - - - 77. And (decorated): - - (source_file - (decorator - (decorator_identifier)) - (let_declaration - (let_binding - (value_name) - (value_name)) - (value_identifier) - (value_identifier)) - (decorator - (decorator_identifier)) - (decorator - (decorator_identifier)) - (let_binding - (value_name) - (value_name)) - (value_identifier) - (value_identifier)) - (decorator - (decorator_identifier)) - (let_binding - (value_name) - (value_identifier) - (number)))) - - - 78. Labled function with uncurried: - - (source_file - (let_declaration - (let_binding - (value_name) - (value_identifier) - (function - (formal_parameters - (parameter - (uncurry) - (labeled_parameter - (value_name)))) - (value_identifier)))) - (unit))))) - - - 79. Destructuring module: - - (source_file - (let_declaration - (let_binding - (record_pattern - (value_path - (value_name)) - (value_path - (value_name))) - (package_expression - (module_path - (module_name))))) - (value_identifier) - (value_identifier)) - (module_pack - (module_identifier)))) - (let_declaration - (let_binding - (record_pattern - (value_path - (value_name)) - (value_path - (value_name))) - (package_expression - (module_path - (module_path - (module_name)) - (module_name)))))) - (value_identifier) - (value_identifier)) - (module_pack - (module_identifier_path - (module_identifier) - (module_identifier)))))) - - - 80. Packing module: - - (source_file - (let_declaration - (let_binding - (value_name) - (package_expression - (module_path - (module_name)))))) - (value_identifier) - (module_pack - (module_identifier))))) - - - 81. Unpacking module: - - (source_file - (let_declaration - (let_binding - (package_pattern - (module_name)) - (value_name)))) - (module_pack - (module_identifier)) - (value_identifier)))) - - - 82. Lazy Values: - - (source_file - (let_declaration - (let_binding - (lazy_pattern - (value_name)) - (value_identifier)) - (lazy_expression - (parenthesized_expression - (number)))))) - - - 83. Opaque: - - (source_file - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)))) - (type_identifier))) - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)))) - (type_identifier))) - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)))) - (type_identifier))) - (type_declaration - (type_binding - (type_constructor_path - (type_constructor))) - (type_identifier)) - (type_binding - (type_constructor_path - (type_constructor))))) - (type_identifier)))) - - - 84. Export: - - (source_file - (type_declaration - (type_binding - (type_constructor_path - (type_constructor))))) - (type_identifier)))) - - - 85. Alias: - - (source_file - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_constructor_path - (module_path - (module_path - (module_name)) - (module_name)) - (type_constructor))))) - (type_identifier) - (type_identifier_path - (module_identifier_path - (module_identifier) - (module_identifier)) - (type_identifier))))) - - - 86. Private: - - (source_file - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_constructor_path - (type_constructor))))) - (type_identifier) - (type_identifier)))) - - - 87. Tuple type: - - (source_file - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (tuple_type - (type_constructor_path - (type_constructor)) - (type_constructor_path - (type_constructor)) - (type_constructor_path - (type_constructor)))))) - (type_identifier) - (type_identifier) - (type_identifier))))) - - - 88. Record type: - - (source_file - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (record_type - (record_type_field - (property_identifier) - (type_annotation - (type_constructor_path - (type_constructor)))) - (type_identifier))) - (record_type_field - (property_identifier) - (type_annotation - (type_constructor_path - (type_constructor)))) - (type_identifier))) - (decorator - (decorator_identifier) - (decorator_arguments - (string - (string_fragment)))) - (record_type_field - (property_identifier) - (type_annotation - (type_constructor_path - (type_constructor)))) - (type_identifier))) - (record_type_field - (property_identifier) - (type_annotation - (type_constructor_path - (type_constructor)))) - (type_identifier))) - (record_type_field - (property_identifier) - (type_annotation - (type_constructor_path - (type_constructor))))))) - (type_identifier)))))) - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_constructor_path - (module_path - (module_name)) - (type_constructor)) - (type_identifier) - (type_identifier_path - (module_identifier) - (type_identifier)) - (record_type - (record_type_field - (property_identifier) - (type_annotation - (type_constructor_path - (type_constructor))))))) - (type_identifier)))))) - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (record_type)))) - - - 89. Extensible Variant: - - (source_file - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)))) - (type_identifier))) - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (variant_type - (variant_declaration - (constructor_name))))) - (variant_identifier))))) - (type_declaration - (type_binding - (type_constructor_path - (module_path - (module_name)) - (type_constructor)) - (type_identifier_path - (module_identifier) - (type_identifier)) - (variant_type - (variant_declaration - (constructor_name)) - (variant_identifier)) - (variant_declaration - (constructor_name)))))) - (variant_identifier)))))) - - - 90. Variant: - - (source_file - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (variant_type - (variant_declaration - (constructor_name)) - (variant_identifier)) - (variant_declaration - (constructor_name)) - (variant_identifier)) - (decorator - (decorator_identifier) - (decorator_arguments - (string - (string_fragment)))) - (variant_declaration - (constructor_name)) - (variant_identifier)) - (variant_declaration - (constructor_name) - (variant_identifier) - (variant_parameters - (type_constructor_path - (type_constructor)))) - (type_identifier))) - (variant_declaration - (constructor_name) - (variant_identifier) - (variant_parameters - (record_type - (record_type_field - (property_identifier) - (type_annotation - (type_constructor_path - (type_constructor)))) - (type_identifier))) - (record_type_field - (property_identifier) - (type_annotation - (type_constructor_path - (type_constructor))))))) - (type_identifier)))))) - (variant_declaration - (constructor_name) - (variant_identifier) - (variant_parameters - (package_type - (module_type_path - (module_type_name - (module_name)))))) - (module_pack - (module_identifier)))) - (variant_declaration - (constructor_name) - (variant_identifier) - (variant_parameters - (package_type - (module_type_path - (module_path - (module_name)) - (module_type_name))))))))) - (module_pack - (type_identifier_path - (module_identifier) - (type_identifier))))))))) - - - 91. Annotated variant: - - (source_file - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (variant_type - (variant_declaration - (constructor_name) - (variant_identifier) - (variant_parameters - (type_constructor_path - (type_constructor))) - (type_identifier)) - (type_annotation - (type_constructor_path - (type_constructor)))))))) - (type_identifier))))))) - - - 92. Polyvar: - - (source_file - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (polyvar_type - (polyvar_declaration - (polyvar_identifier)) - (polyvar_declaration - (polyvar_identifier)) - (polyvar_declaration - (polyvar_identifier) - (polyvar_parameters - (type_constructor_path - (type_constructor)))) - (type_identifier))) - (polyvar_declaration - (polyvar_identifier - (polyvar_string - (string_fragment)))) - (polyvar_declaration - (polyvar_identifier - (polyvar_string - (string_fragment)))) - (polyvar_declaration - (polyvar_identifier)) - (decorator - (decorator_identifier) - (decorator_arguments - (string - (string_fragment)))) - (polyvar_declaration - (polyvar_identifier)) - (polyvar_declaration - (type_constructor_path - (type_constructor)))))) - (type_identifier))))) - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (type_parameters - (type_constructor)) - (type_identifier)) - (decorator - (decorator_identifier)) - (aliased_type - (as_aliasing_type - (polyvar_type - (polyvar_declaration - (polyvar_identifier)) - (polyvar_declaration - (polyvar_identifier)) - (polyvar_declaration - (polyvar_identifier))) - (type_constructor)))) - (type_identifier)))) - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (type_parameters - (type_constructor)) - (type_identifier)) - (polyvar_type - (polyvar_declaration - (generic_type - (type_constructor_path - (module_path - (module_name)) - (type_constructor)) - (type_identifier_path - (module_identifier) - (type_identifier)) - (type_arguments - (type_constructor_path - (type_constructor))))))))) - (type_identifier)))))))) - - - 93. Function: - - (source_file - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (function_type - (function_type_parameters - (type_constructor_path - (type_constructor))) - (type_constructor_path - (type_constructor))))) - (type_identifier)) - (type_identifier)))) - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (function_type - (function_type_parameters - (parameter - (type_constructor_path - (type_constructor)))) - (type_constructor_path - (type_constructor))))) - (type_identifier))) - (type_identifier)))) - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (function_type - (function_type_parameters - (parameter - (type_constructor_path - (type_constructor))) - (type_identifier)) - (parameter - (type_constructor_path - (type_constructor)))) - (type_constructor_path - (type_constructor))))) - (type_identifier))) - (type_identifier)))) - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (function_type - (function_type_parameters - (parameter - (labeled_parameter - (value_name) - (value_identifier) - (type_annotation - (type_constructor_path - (type_constructor))))) - (type_identifier)))) - (parameter - (labeled_parameter - (value_name) - (value_identifier) - (type_annotation - (type_constructor_path - (type_constructor))))) - (type_identifier)))) - (parameter - (unit_type))) - (type_constructor_path - (type_constructor)))))) - (type_identifier))))) - - - 94. Object: - - (source_file - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (object_type))) - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (object_type))) - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (object_type - (field - (property_identifier - (string_fragment)) - (type_constructor_path - (type_constructor)))))) - (type_identifier))))) - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (object_type - (field - (property_identifier - (string_fragment)) - (type_constructor_path - (type_constructor))) - (type_identifier)) - (field - (property_identifier - (string_fragment)) - (type_constructor_path - (type_constructor))) - (type_identifier)) - (field - (type_constructor_path - (type_constructor)))))) - (type_identifier))))) - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (type_parameters - (type_constructor)) - (aliased_type - (type_identifier)) - (as_aliasing_type - (object_type - (field - (property_identifier - (string_fragment)) - (type_constructor_path - (type_constructor)))) - (type_constructor))))) - (type_identifier))) - (type_identifier))))) - - - 95. Generic: - - (source_file - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (type_parameters - (type_constructor) - (type_constructor)) - (type_identifier) - (type_identifier)) - (tuple_type - (generic_type - (type_constructor_path - (type_constructor)) - (type_identifier) - (type_arguments - (type_constructor_path - (type_constructor)))) - (type_identifier))) - (generic_type - (type_constructor_path - (type_constructor)) - (type_identifier) - (type_arguments - (type_constructor_path - (type_constructor))))))) - (type_identifier)))))) - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (generic_type - (type_constructor_path - (type_constructor)) - (type_identifier) - (type_arguments - (unit) - (type_constructor_path - (type_constructor)))))) - (type_identifier))))) - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (type_parameters - (type_constructor)) - (aliased_type - (type_identifier)) - (as_aliasing_type - (generic_type - (type_constructor_path - (type_constructor)) - (type_identifier) - (type_arguments - (type_constructor_path - (type_constructor)))) - (type_constructor))))) - (type_identifier))) - (type_identifier))))) - - - 96. Recursive: - - (source_file - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_constructor_path - (type_constructor))))) - (type_identifier) - (type_identifier)))) - - - 97. Decorated: - - (source_file - (decorator - (decorator_identifier) - (decorator_arguments - (value_name))) - (value_identifier))) - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (record_type - (record_type_field - (property_identifier) - (type_annotation - (type_constructor_path - (type_constructor))))))) - (type_identifier)))))) - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (object_type - (decorator - (decorator_identifier)) - (field - (property_identifier - (string_fragment)) - (function_type - (function_type_parameters - (parameter - (type_constructor_path - (type_constructor))) - (type_identifier)) - (parameter - (type_constructor_path - (type_constructor)))) - (type_identifier))) - (unit_type))))))) - - - 98. Mutually Recursive: - - (source_file - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (record_type - (record_type_field - (property_identifier) - (type_annotation - (type_constructor_path - (type_constructor)))))) - (type_identifier))))) - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (record_type - (record_type_field - (property_identifier) - (type_annotation - (generic_type - (type_constructor_path - (type_constructor)) - (type_identifier) - (type_arguments - (type_constructor_path - (type_constructor)))))))))) - (type_identifier))))))))) - - - 99. Labled function with uncurried: - - (source_file - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (function_type - (function_type_parameters - (parameter - (uncurry) - (labeled_parameter - (value_name) - (value_identifier) - (type_annotation - (type_constructor_path - (type_constructor)))))) - (type_identifier))))) - (unit_type))))) - - - 100. Polymorphic type: - - (source_file - (let_declaration - (let_binding - (value_name) - (value_identifier) - (type_annotation - (polymorphic_type - (type_constructor) - (type_identifier) - (function_type - (function_type_parameters - (type_constructor_path - (type_constructor))) - (type_constructor_path - (type_constructor))))) - (type_identifier)) - (type_identifier)))) - (function - (value_name) - (value_name)))) - (value_identifier) - (value_identifier)))) - (let_declaration - (let_binding - (value_name) - (value_identifier) - (type_annotation - (polymorphic_type - (abstract_type - (type_constructor)) - (type_identifier)) - (function_type - (function_type_parameters - (parameter - (generic_type - (type_constructor_path - (type_constructor)) - (type_identifier) - (type_arguments - (type_constructor_path - (type_constructor))))) - (type_identifier)))) - (parameter - (generic_type - (type_constructor_path - (type_constructor)) - (type_identifier) - (type_arguments - (type_constructor_path - (type_constructor)))))) - (type_constructor_path - (type_constructor)))))))) - (type_identifier))))) - (type_identifier))))))) - - - 101. Variance annotations: - - (source_file - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (type_parameters - (type_constructor)))) - (type_identifier)))) - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (type_parameters - (type_constructor))))) - (type_identifier))))) - - - 102. Type constraint: - - (source_file - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (type_parameters - (type_constructor)) - (type_constructor_path - (type_constructor)) - (type_identifier)) - (type_identifier) - (type_constraint - (type_constructor_path - (type_constructor)) - (type_constructor_path - (type_constructor))))) - (type_identifier) - (type_identifier)))) - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (type_parameters - (type_constructor) - (type_constructor)) - (type_identifier) - (type_identifier)) - (function_type - (function_type_parameters - (type_constructor_path - (type_constructor))) - (type_constructor_path - (type_constructor))) - (type_identifier)) - (type_identifier)) - (type_constraint - (type_constructor_path - (type_constructor)) - (type_constructor_path - (type_constructor))) - (type_identifier) - (type_identifier)) - (type_constraint - (type_constructor_path - (type_constructor)) - (type_identifier) - (function_type - (function_type_parameters - (type_constructor_path - (type_constructor))) - (type_constructor_path - (type_constructor)))))) - (type_identifier)) - (type_identifier))))) - (type_declaration - (type_binding - (type_constructor_path - (type_constructor)) - (type_identifier) - (type_parameters - (type_constructor)) - (type_identifier)) - (type_constraint - (type_constructor_path - (type_constructor)) - (type_constructor_path - (type_constructor)))))) - (type_identifier) - (type_identifier))))) - - - 103. Simple parameters: - - (source_file - (expression_statement - (function - (value_name) - (value_identifier) - (number))) - (expression_statement - (function - (formal_parameters) - (number))) - (expression_statement - (function - (formal_parameters - (parameter - (value_name)) - (value_identifier)) - (parameter - (value_name))) - (value_identifier))) - (number))) - (expression_statement - (function - (formal_parameters - (parameter - (value_name)) - (value_identifier)) - (parameter - (value_name))) - (value_identifier))) - (block - (expression_statement - (value_name))))) - (value_identifier))))) - (expression_statement - (function - (formal_parameters - (parameter - (value_name))) - (value_identifier))) - (number))) - (expression_statement - (function - (formal_parameters - (parameter - (value_name)) - (value_identifier)) - (parameter - (value_name))) - (value_identifier))) - (number))) - (expression_statement - (function - (formal_parameters - (parameter - (value_name)) - (value_identifier)) - (parameter - (value_name))) - (value_identifier))) - (number))) - (expression_statement - (function - (formal_parameters - (parameter - (value_name)) - (value_identifier)) - (parameter - (uncurry) - (value_name)) - (value_identifier)) - (parameter - (value_name)) - (value_identifier)) - (parameter - (uncurry) - (value_name))) - (value_identifier))) - (number))) - (expression_statement - (function - (formal_parameters - (parameter - (value_name))) - (value_identifier))) - (number)))) - - - 104. Type annotations: - - (source_file - (expression_statement - (function - parameters: (formal_parameters - (parameter - (value_name) - (value_identifier) - (type_annotation - (type_constructor_path - (type_constructor)))) - (type_identifier))) - (parameter - (labeled_parameter - (value_name) - (value_identifier) - (type_annotation - (type_constructor_path - (type_constructor)))))) - (type_identifier))))) - return_type: (type_annotation - (type_constructor_path - (type_constructor))) - (type_identifier)) - body: (number))) - (expression_statement - (function - parameters: (formal_parameters - (parameter - (record_pattern - (value_path - (value_name)) - (value_identifier) - (parenthesized_pattern - (value_name) - (value_identifier) - (type_annotation - (type_constructor_path - (type_constructor)))))) - (type_identifier))))) - (parameter - (record_pattern - (value_path - (value_name)) - (value_name)))) - (value_identifier) - (value_identifier)))) - body: (binary_expression - left: (value_name) - right: (value_name))))) - left: (value_identifier) - right: (value_identifier))))) - - - 105. Abstract type: - - (source_file - (let_declaration - (let_binding - (value_name) - (value_identifier) - (function - (formal_parameters - (parameter - (abstract_type - (type_constructor))) - (type_identifier))) - (parameter - (value_name) - (value_identifier) - (type_annotation - (type_constructor_path - (type_constructor))))) - (type_identifier)))) - (type_annotation - (type_constructor_path - (type_constructor))) - (value_name))))) - (type_identifier)) - (value_identifier))))) - - - 106. Parameter defaults: - - (source_file - (expression_statement - (function - parameters: (formal_parameters - (parameter - (labeled_parameter - (value_name) - (value_identifier) - (type_annotation - (type_constructor_path - (type_constructor))) - (type_identifier)) - default_value: (number))) - (parameter - (labeled_parameter - (value_name) - (value_identifier) - default_value: (number))) - (parameter - (labeled_parameter - (value_name) - (value_identifier) - (type_annotation - (type_constructor_path - (type_constructor))))) - (type_identifier)))) - (parameter - (labeled_parameter - (value_name))) - (value_identifier))) - (parameter - (unit))) - body: (number)))) - - - 107. Parameter aliasing: - - (source_file - (expression_statement - (function - (formal_parameters - (parameter - (labeled_parameter - (alias_pattern - (value_name) - (value_name)) - (value_identifier) - (as_aliasing - (value_identifier)) - (type_annotation - (type_constructor_path - (type_constructor))) - (type_identifier)) - (number)))) - (number))) - (expression_statement - (function - (formal_parameters - (parameter - (labeled_parameter - (alias_pattern - (value_name) - (value_identifier) - (as_aliasing - (tuple_pattern - (tuple_item_pattern - (value_name)) - (value_identifier)) - (tuple_item_pattern - (value_name))))))) - (value_name)))) - (value_identifier))))))) - (value_identifier)))) - - - 108. Record pattern: - - (source_file - (expression_statement - (function - (formal_parameters - (parameter - (record_pattern - (value_path - (value_name)) - (value_path - (value_name)) - (value_identifier) - (value_identifier) - (record_pattern - (value_path - (value_name)) - (value_path - (value_name))) - (value_path - (value_name)) - (value_name)))) - (value_identifier) - (value_identifier)) - (value_identifier) - (value_identifier)))) - (number)))) - - - 109. Ref assignment as body: - - (source_file - (expression_statement - (function - (value_name) - (value_identifier) - (mutation_expression - (value_name) - (call_expression - (constructor_path - (constructor_name)) - (value_identifier) - (variant - (variant_identifier) - (arguments - (value_name))))))) - (value_identifier))))))) - - - 110. Operator precendence: - - (source_file - (expression_statement - (function - (formal_parameters - (parameter - (value_name))) - (value_identifier))) - (binary_expression - (pipe_expression - (value_name) - (value_path - (module_path - (module_name)) - (value_name))) - (value_identifier) - (value_identifier_path - (module_identifier) - (value_identifier))) - (number))))) - - - 111. Async: - - (source_file - (expression_statement - (function - (formal_parameters) - (value_name)))) - (value_identifier)))) - -info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command. From 730562b8e75b18bc33c0260dae2e2aaeaa351fb5 Mon Sep 17 00:00:00 2001 From: Pedro Castro Date: Sat, 6 May 2023 20:22:49 -0300 Subject: [PATCH 3/8] update --- grammar.js | 1 - 1 file changed, 1 deletion(-) diff --git a/grammar.js b/grammar.js index edbb181..6855516 100644 --- a/grammar.js +++ b/grammar.js @@ -85,7 +85,6 @@ module.exports = grammar({ [$.type_declaration], [$.let_declaration], [$.polyvar, $.polyvar_pattern], - // [$._pattern], [$._record_element, $._record_single_field], [$._record_pun_field, $._record_single_pun_field], [$._record_field_name, $.record_pattern], From 6d0e57eed4cb1d7fa4e6651abf11dbaa91d6e269 Mon Sep 17 00:00:00 2001 From: Pedro Castro Date: Sun, 7 May 2023 12:50:48 -0300 Subject: [PATCH 4/8] fix --- grammar.js | 16 +++++----------- src/scanner.c | 7 +++++-- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/grammar.js b/grammar.js index 6855516..6628ab9 100644 --- a/grammar.js +++ b/grammar.js @@ -175,11 +175,6 @@ module.exports = grammar({ sep1('and', $.module_binding) ), - _module_structure: $ => seq( - $._module_definition, - optional($.module_type_annotation), - ), - _module_definition: $ => choice( $.block, $.module_expression, @@ -194,12 +189,12 @@ module.exports = grammar({ ) ), - functor: $ => seq( + functor: $ => prec.right(seq( field('parameters', $.functor_parameters), optional(field('return_module_type', $.module_type_annotation)), '=>', - field('body', $._module_definition), - ), + field('body', choice($._module_type, $.block)), + )), functor_parameters: $ => parenthesize( optional(commaSep1t($.functor_parameter)), @@ -207,7 +202,7 @@ module.exports = grammar({ functor_parameter: $ => seq( $.module_path, - $.module_type_annotation, + optional($.module_type_annotation) ), module_type_annotation: $ => seq( @@ -1102,7 +1097,6 @@ module.exports = grammar({ polyvar: $ => prec.right(seq( $.polyvar_identifier, optional($.call_arguments) - // optional(alias($.variant_arguments, $.arguments)), )), _type_constructor: $ => choice( @@ -1160,7 +1154,7 @@ module.exports = grammar({ module_type_constraint: $ => prec.right(seq( $._module_type, 'with', - sep1('and', choice($.constrain_type, $.constrain_module, /* $.constrain_module_type */)) + sep1('and', choice($.constrain_type, $.constrain_module)) )), constrain_module: $ => seq( diff --git a/src/scanner.c b/src/scanner.c index b02d8b9..11cdc7e 100644 --- a/src/scanner.c +++ b/src/scanner.c @@ -239,8 +239,11 @@ bool tree_sitter_rescript_external_scanner_scan( if (lexer->lookahead == 'n') { advance(lexer); if (lexer->lookahead == 'd') { - // Ignore new lines before `and` keyword (recursive definition) - in_multiline_statement = true; + advance(lexer); + if (is_whitespace(lexer->lookahead)) { + // Ignore new lines before `and` keyword (recursive definition) + in_multiline_statement = true; + } } } } From 45526d5d6169fd81ee2ad9dab5facdb2045b1fd9 Mon Sep 17 00:00:00 2001 From: Pedro Castro Date: Sat, 3 Jun 2023 20:53:46 -0300 Subject: [PATCH 5/8] more fixes --- grammar.js | 30 ++++++------ test/corpus/expressions.txt | 98 ++++++++++++++++++------------------- test/corpus/functions.txt | 8 +-- test/corpus/literals.txt | 2 +- 4 files changed, 67 insertions(+), 71 deletions(-) diff --git a/grammar.js b/grammar.js index 6628ab9..9777c1f 100644 --- a/grammar.js +++ b/grammar.js @@ -65,6 +65,7 @@ module.exports = grammar({ [$.lazy_pattern, $.exception_pattern, $.or_pattern], [$.exception_pattern, $.alias_pattern], [$.lazy_pattern, $.alias_pattern], + [$.alias_pattern, $.or_pattern], [$.primary_expression, $.constructor_pattern], [$.module_name, $.constructor_name], [$.module_binding, $._module_type] @@ -99,6 +100,8 @@ module.exports = grammar({ [$._reserved_identifier, $.function], [$.type_binding, $._inline_type], [$.call_arguments, $.unit], + [$._pattern_arguments, $.call_arguments], + [$._pattern] ], rules: { @@ -722,13 +725,8 @@ module.exports = grammar({ ), ), - _alias_labeled_parameter: $ => seq('~', $.value_name, 'as', $._pattern), - labeled_parameter: $ => seq( - choice( - seq('~', $.value_name), - alias($._alias_labeled_parameter, $.alias_pattern) - ), + seq('~', $._pattern), optional($.type_annotation), optional(field('default_value', $._labeled_parameter_default_value)), ), @@ -750,7 +748,7 @@ module.exports = grammar({ // unfinished constructs are generally treated as literal expressions, // not patterns. _pattern: $ => prec.dynamic(-1, choice( - $.value_name, + seq($.value_name, optional($.type_annotation)), $._literal_pattern, $._destructuring_pattern, $.polyvar_type_pattern, @@ -761,16 +759,16 @@ module.exports = grammar({ $.or_pattern, $.range_pattern, $.exception_pattern, - $.alias_pattern + $.alias_pattern, )), - alias_pattern: $ => seq( + alias_pattern: $ => prec.left(seq( $._pattern, 'as', - $.value_name - ), + $._pattern, + )), - parenthesized_pattern: $ => parenthesize(seq($._pattern, optional($.type_annotation))), + parenthesized_pattern: $ => parenthesize($._pattern), range_pattern: $ => seq( $._literal_pattern, @@ -805,15 +803,17 @@ module.exports = grammar({ $.false, ), + _pattern_arguments: $ => parenthesize(commaSept($._pattern)), + constructor_pattern: $ => prec.right(seq( optional('?'), $.constructor_path, - optional($._pattern) + optional(alias($._pattern_arguments, $.arguments)) )), polyvar_pattern: $ => prec.right(seq( $.polyvar_identifier, - optional($._pattern) + optional(alias($._pattern_arguments, $.arguments)) )), record_pattern: $ => seq( @@ -1096,7 +1096,7 @@ module.exports = grammar({ polyvar: $ => prec.right(seq( $.polyvar_identifier, - optional($.call_arguments) + optional(alias($.call_arguments, $.arguments)) )), _type_constructor: $ => choice( diff --git a/test/corpus/expressions.txt b/test/corpus/expressions.txt index cd6e09e..0e916e3 100644 --- a/test/corpus/expressions.txt +++ b/test/corpus/expressions.txt @@ -563,20 +563,18 @@ switch foo { (constructor_pattern (constructor_path (constructor_name)) - (tuple_pattern - (tuple_item_pattern - (alias_pattern - (value_name) - (value_name)) + (arguments + (alias_pattern + (value_name) + (value_name) (type_annotation (type_constructor_path (type_constructor)))) - (tuple_item_pattern - (record_pattern - (value_path - (value_name)) - (value_path - (value_name)))))) + (record_pattern + (value_path + (value_name)) + (value_path + (value_name))))) (sequence_expression (expression_statement (value_name)))) @@ -593,7 +591,7 @@ switch foo { (constructor_pattern (constructor_path (constructor_name)) - (unit)) + (arguments)) (sequence_expression (expression_statement (number)))) @@ -601,7 +599,7 @@ switch foo { (constructor_pattern (constructor_path (constructor_name)) - (parenthesized_pattern + (arguments (value_name))) (sequence_expression (expression_statement @@ -630,20 +628,18 @@ switch foo { (expression_statement (number)))) (switch_match - (polyvar_pattern - (polyvar_identifier) - (alias_pattern - (tuple_pattern - (tuple_item_pattern - (alias_pattern - (value_name) - (value_name)) + (alias_pattern + (polyvar_pattern + (polyvar_identifier) + (arguments + (alias_pattern + (value_name) + (value_name) (type_annotation (type_constructor_path (type_constructor)))) - (tuple_item_pattern - (number))) - (value_name))) + (number))) + (value_name)) (sequence_expression (expression_statement (number)))) @@ -815,7 +811,7 @@ switch person { (constructor_pattern (constructor_path (constructor_name)) - (parenthesized_pattern + (arguments (record_pattern (value_path (value_name)) @@ -831,7 +827,7 @@ switch person { (constructor_pattern (constructor_path (constructor_name)) - (parenthesized_pattern + (arguments (record_pattern (value_path (value_name)) @@ -841,17 +837,17 @@ switch person { (number)) (value_path (value_name)) - (constructor_pattern - (constructor_path - (constructor_name)) - (or_pattern - (parenthesized_pattern - (value_name)) - (constructor_pattern - (constructor_path - (constructor_name)) - (parenthesized_pattern - (value_name)))))))) + (or_pattern + (constructor_pattern + (constructor_path + (constructor_name)) + (arguments + (value_name))) + (constructor_pattern + (constructor_path + (constructor_name)) + (arguments + (value_name))))))) (sequence_expression (expression_statement (number)))) @@ -859,7 +855,7 @@ switch person { (constructor_pattern (constructor_path (constructor_name)) - (parenthesized_pattern + (arguments (record_pattern (value_path (value_name)) @@ -873,7 +869,7 @@ switch person { (constructor_pattern (constructor_path (constructor_name)) - (parenthesized_pattern + (arguments (record_pattern (value_path (value_name))))) @@ -1022,7 +1018,7 @@ switch (element->HtmlInputElement.ofElement) { pattern: (constructor_pattern (constructor_path (constructor_name)) - (parenthesized_pattern + (arguments (value_name))) body: (sequence_expression (expression_statement @@ -1081,7 +1077,7 @@ switch parseExn(str) { (module_name)) (module_name)) (constructor_name)) - (parenthesized_pattern + (arguments (value_name)))) (sequence_expression (expression_statement @@ -1141,7 +1137,7 @@ switch n { (constructor_pattern (constructor_path (constructor_name)) - (parenthesized_pattern + (arguments (or_pattern (parenthesized_pattern (or_pattern @@ -1691,7 +1687,7 @@ try for i in 0 to 10 { (constructor_pattern (constructor_path (constructor_name)) - (parenthesized_pattern + (arguments (record_pattern (value_path (value_name)) @@ -1708,7 +1704,7 @@ try for i in 0 to 10 { (module_name)) (module_name)) (constructor_name)) - (parenthesized_pattern + (arguments (value_name))) (sequence_expression (expression_statement @@ -1745,7 +1741,7 @@ try for i in 0 to 10 { (module_name)) (module_name)) (constructor_name)) - (parenthesized_pattern + (arguments (value_name))) (sequence_expression (expression_statement @@ -1923,12 +1919,12 @@ let f = ({name, _} as foo: T.t) => {} (value_name)) (value_path (value_name))) - (value_name)) - (type_annotation - (type_constructor_path - (module_path - (module_name)) - (type_constructor))))) + (value_name) + (type_annotation + (type_constructor_path + (module_path + (module_name)) + (type_constructor)))))) body: (block))))) ================================================================================ diff --git a/test/corpus/functions.txt b/test/corpus/functions.txt index 5d169ff..1017044 100644 --- a/test/corpus/functions.txt +++ b/test/corpus/functions.txt @@ -215,10 +215,10 @@ Parameter aliasing (labeled_parameter (alias_pattern (value_name) - (value_name)) - (type_annotation - (type_constructor_path - (type_constructor))) + (value_name) + (type_annotation + (type_constructor_path + (type_constructor)))) (number)))) (number))) (expression_statement diff --git a/test/corpus/literals.txt b/test/corpus/literals.txt index e5d560e..447fa1a 100644 --- a/test/corpus/literals.txt +++ b/test/corpus/literals.txt @@ -377,7 +377,7 @@ Polyvars (expression_statement (polyvar (polyvar_identifier) - (call_arguments + (arguments (number)))) (expression_statement (polyvar From 72659d766f15d12317dc1aa390f795270502b5e4 Mon Sep 17 00:00:00 2001 From: Pedro Castro Date: Sat, 3 Jun 2023 23:37:56 -0300 Subject: [PATCH 6/8] use constructor_declaration --- grammar.js | 11 ++--- test/corpus/modules.txt | 10 +++-- test/corpus/type_declarations.txt | 75 +++++++++++++++---------------- 3 files changed, 45 insertions(+), 51 deletions(-) diff --git a/grammar.js b/grammar.js index 9777c1f..a2ab8bb 100644 --- a/grammar.js +++ b/grammar.js @@ -226,8 +226,7 @@ module.exports = grammar({ exception_declaration: $ => seq( 'exception', - $.constructor_name, - optional($.variant_parameters), + $.constructor_declaration, optional(seq('=', $.constructor_path)) ), @@ -314,17 +313,15 @@ module.exports = grammar({ variant_type: $ => prec.left(seq( optional('|'), - barSep1($.variant_declaration), + barSep1($.constructor_declaration), )), - variant_declaration: $ => prec.right(seq( + constructor_declaration: $ => prec.right(seq( $.constructor_name, - optional($.variant_parameters), + optional(parenthesize(commaSep1t($._type))), optional($.type_annotation), )), - variant_parameters: $ => parenthesize(commaSep1t($._type)), - polyvar_type: $ => prec.left(seq( choice('[', '[>', '[<',), optional('|'), diff --git a/test/corpus/modules.txt b/test/corpus/modules.txt index 0848ec4..6de05f7 100644 --- a/test/corpus/modules.txt +++ b/test/corpus/modules.txt @@ -764,16 +764,18 @@ exception Invalid = Errors.Invalid (source_file (exception_declaration - (constructor_name) - (variant_parameters + (constructor_declaration + (constructor_name) (type_constructor_path (type_constructor)))) (exception_declaration - (constructor_name) + (constructor_declaration + (constructor_name)) (constructor_path (constructor_name))) (exception_declaration - (constructor_name) + (constructor_declaration + (constructor_name)) (constructor_path (module_path (module_name)) diff --git a/test/corpus/type_declarations.txt b/test/corpus/type_declarations.txt index 831354d..c8dd19b 100644 --- a/test/corpus/type_declarations.txt +++ b/test/corpus/type_declarations.txt @@ -197,7 +197,7 @@ type M.t += (type_constructor_path (type_constructor)) (variant_type - (variant_declaration + (constructor_declaration (constructor_name))))) (type_declaration (type_binding @@ -206,9 +206,9 @@ type M.t += (module_name)) (type_constructor)) (variant_type - (variant_declaration + (constructor_declaration (constructor_name)) - (variant_declaration + (constructor_declaration (constructor_name)))))) ================================================================================ @@ -232,46 +232,42 @@ type t = (type_constructor_path (type_constructor)) (variant_type - (variant_declaration + (constructor_declaration (constructor_name)) - (variant_declaration + (constructor_declaration (constructor_name)) - (variant_declaration + (constructor_declaration (constructor_name)) - (variant_declaration + (constructor_declaration (constructor_name) - (variant_parameters - (type_constructor_path - (type_constructor)))) - (variant_declaration + (type_constructor_path + (type_constructor))) + (constructor_declaration (constructor_name) - (variant_parameters - (record_type - (record_type_field - (property_identifier) - (type_annotation - (type_constructor_path - (type_constructor)))) - (record_type_field - (property_identifier) - (type_annotation - (type_constructor_path - (type_constructor))))))) - (variant_declaration + (record_type + (record_type_field + (property_identifier) + (type_annotation + (type_constructor_path + (type_constructor)))) + (record_type_field + (property_identifier) + (type_annotation + (type_constructor_path + (type_constructor)))))) + (constructor_declaration (constructor_name) - (variant_parameters - (package_type - (module_type_path - (module_type_name - (module_name)))))) - (variant_declaration + (package_type + (module_type_path + (module_type_name + (module_name))))) + (constructor_declaration (constructor_name) - (variant_parameters - (package_type - (module_type_path - (module_path - (module_name)) - (module_type_name))))))))) + (package_type + (module_type_path + (module_path + (module_name)) + (module_type_name)))))))) ================================================================================ Annotated variant @@ -287,11 +283,10 @@ type rec t = Any('a): t (type_constructor_path (type_constructor)) (variant_type - (variant_declaration + (constructor_declaration (constructor_name) - (variant_parameters - (type_constructor_path - (type_constructor))) + (type_constructor_path + (type_constructor)) (type_annotation (type_constructor_path (type_constructor)))))))) From 1ed17540c349a2341a9b19a8daf76d0d55a8b593 Mon Sep 17 00:00:00 2001 From: Pedro Castro Date: Sun, 4 Jun 2023 02:25:51 -0300 Subject: [PATCH 7/8] refactor polyvar --- grammar.js | 17 +++++------------ test/corpus/expressions.txt | 7 +++---- test/corpus/jsx.txt | 3 +-- test/corpus/let_bindings.txt | 3 +-- test/corpus/literals.txt | 20 ++++++++------------ test/corpus/modules.txt | 22 ++++++++++------------ test/corpus/type_declarations.txt | 25 ++++++++++++------------- 7 files changed, 40 insertions(+), 57 deletions(-) diff --git a/grammar.js b/grammar.js index a2ab8bb..275c7d0 100644 --- a/grammar.js +++ b/grammar.js @@ -80,6 +80,7 @@ module.exports = grammar({ [$.primary_expression, $.value_path], [$.primary_expression, $._pattern, $.value_path], [$.primary_expression, $._jsx_child], + [$.primary_expression, $.polyvar_pattern], [$.tuple_type, $.function_type_parameter], [$.list, $.list_pattern], [$.array, $.array_pattern], @@ -332,15 +333,13 @@ module.exports = grammar({ polyvar_declaration: $ => prec.right( choice( seq( - $.polyvar_identifier, - optional($.polyvar_parameters), + $.polyvar, + optional(parenthesize(commaSep1t($._type))), ), $._inline_type ) ), - polyvar_parameters: $ => parenthesize(commaSep1t($._type)), - record_type: $ => seq( '{', commaSept($.record_type_field), @@ -809,7 +808,7 @@ module.exports = grammar({ )), polyvar_pattern: $ => prec.right(seq( - $.polyvar_identifier, + $.polyvar, optional(alias($._pattern_arguments, $.arguments)) )), @@ -1090,12 +1089,6 @@ module.exports = grammar({ optional($._newline), )), - - polyvar: $ => prec.right(seq( - $.polyvar_identifier, - optional(alias($.call_arguments, $.arguments)) - )), - _type_constructor: $ => choice( $.type_constructor_path, ".." @@ -1182,7 +1175,7 @@ module.exports = grammar({ $.block, ), - polyvar_identifier: $ => seq( + polyvar: $ => seq( '#', choice( /[a-zA-Z0-9_']+/, diff --git a/test/corpus/expressions.txt b/test/corpus/expressions.txt index 0e916e3..b150b7f 100644 --- a/test/corpus/expressions.txt +++ b/test/corpus/expressions.txt @@ -269,8 +269,7 @@ foo->{ (expression_statement (pipe_expression (value_name) - (polyvar - (polyvar_identifier)))) + (polyvar))) (expression_statement (pipe_expression (value_name) @@ -623,14 +622,14 @@ switch foo { (value_name) (switch_match (polyvar_pattern - (polyvar_identifier)) + (polyvar)) (sequence_expression (expression_statement (number)))) (switch_match (alias_pattern (polyvar_pattern - (polyvar_identifier) + (polyvar) (arguments (alias_pattern (value_name) diff --git a/test/corpus/jsx.txt b/test/corpus/jsx.txt index f1b0ab1..4b72565 100644 --- a/test/corpus/jsx.txt +++ b/test/corpus/jsx.txt @@ -134,8 +134,7 @@ Attribute values (number)) (jsx_attribute (property_identifier) - (polyvar - (polyvar_identifier))) + (polyvar)) (jsx_attribute (property_identifier) (constructor_path diff --git a/test/corpus/let_bindings.txt b/test/corpus/let_bindings.txt index d1bf452..3c3740f 100644 --- a/test/corpus/let_bindings.txt +++ b/test/corpus/let_bindings.txt @@ -25,8 +25,7 @@ export d = 5 (let_declaration (let_binding (value_name) - (polyvar - (polyvar_identifier)))) + (polyvar))) (let_declaration (let_binding (value_name) diff --git a/test/corpus/literals.txt b/test/corpus/literals.txt index 447fa1a..887b69a 100644 --- a/test/corpus/literals.txt +++ b/test/corpus/literals.txt @@ -372,23 +372,19 @@ Polyvars (source_file (expression_statement - (polyvar - (polyvar_identifier))) + (polyvar)) (expression_statement - (polyvar - (polyvar_identifier) + (call_expression + (polyvar) (arguments (number)))) (expression_statement (polyvar - (polyvar_identifier - (polyvar_string - (string_fragment))))) + (polyvar_string + (string_fragment)))) (expression_statement (polyvar - (polyvar_identifier - (polyvar_string - (string_fragment))))) + (polyvar_string + (string_fragment)))) (expression_statement - (polyvar - (polyvar_identifier)))) + (polyvar))) diff --git a/test/corpus/modules.txt b/test/corpus/modules.txt index 6de05f7..4f77ec2 100644 --- a/test/corpus/modules.txt +++ b/test/corpus/modules.txt @@ -735,19 +735,17 @@ external add: ( (type_annotation (polyvar_type (polyvar_declaration - (polyvar_identifier) - (polyvar_parameters - (type_constructor_path - (module_path - (module_name)) - (type_constructor)))) + (polyvar) + (type_constructor_path + (module_path + (module_name)) + (type_constructor))) (polyvar_declaration - (polyvar_identifier) - (polyvar_parameters - (type_constructor_path - (module_path - (module_name)) - (type_constructor))))))))) + (polyvar) + (type_constructor_path + (module_path + (module_name)) + (type_constructor)))))))) (unit_type))) (string (string_fragment)))) diff --git a/test/corpus/type_declarations.txt b/test/corpus/type_declarations.txt index c8dd19b..1ac82b4 100644 --- a/test/corpus/type_declarations.txt +++ b/test/corpus/type_declarations.txt @@ -319,26 +319,25 @@ type t<'w> = [M.t<'w>] (type_constructor)) (polyvar_type (polyvar_declaration - (polyvar_identifier)) + (polyvar)) (polyvar_declaration - (polyvar_identifier)) + (polyvar)) (polyvar_declaration - (polyvar_identifier) - (polyvar_parameters - (type_constructor_path - (type_constructor)))) + (polyvar) + (type_constructor_path + (type_constructor))) (polyvar_declaration - (polyvar_identifier + (polyvar (polyvar_string (string_fragment)))) (polyvar_declaration - (polyvar_identifier + (polyvar (polyvar_string (string_fragment)))) (polyvar_declaration - (polyvar_identifier)) + (polyvar)) (polyvar_declaration - (polyvar_identifier)) + (polyvar)) (polyvar_declaration (type_constructor_path (type_constructor)))))) @@ -351,11 +350,11 @@ type t<'w> = [M.t<'w>] (aliased_type (polyvar_type (polyvar_declaration - (polyvar_identifier)) + (polyvar)) (polyvar_declaration - (polyvar_identifier)) + (polyvar)) (polyvar_declaration - (polyvar_identifier))) + (polyvar))) (type_constructor)))) (type_declaration (type_binding From 12a38b5447b6fd3fe63a226b885a05df3419d264 Mon Sep 17 00:00:00 2001 From: Pedro Castro Date: Sat, 10 Jun 2023 01:37:00 -0300 Subject: [PATCH 8/8] update tests --- test/corpus/expressions.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/corpus/expressions.txt b/test/corpus/expressions.txt index f9d35a5..ead2e7f 100644 --- a/test/corpus/expressions.txt +++ b/test/corpus/expressions.txt @@ -1189,14 +1189,14 @@ switch c { (source_file (expression_statement (switch_expression - (value_identifier) + (value_name) (switch_match (lazy_pattern (parenthesized_pattern - (value_identifier))) + (value_name))) (sequence_expression (expression_statement - (value_identifier)))) + (value_name)))) (switch_match (tuple_pattern (tuple_item_pattern