fix: ce expression on same line as decl

pull/625/head^2
Nikolaj Sidorenco 2024-04-22 17:26:22 +07:00
parent 93bb9b4eeb
commit 3720231a64
No known key found for this signature in database
6 changed files with 140 additions and 65 deletions

@ -1,7 +1,4 @@
let f xs =
xs[..1]
xs[0..]
xs[0..1]
xs[.. 1]
xs[0 ..]
xs[0 .. 1]
let f = A {
x
}

8
src/grammar.json generated

@ -4443,8 +4443,12 @@
]
},
{
"type": "SYMBOL",
"name": "identifier"
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",

21
src/node-types.json generated

@ -390,16 +390,17 @@
{
"type": "argument_name_spec",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "identifier",
"named": true
}
]
"fields": {
"name": {
"multiple": false,
"required": true,
"types": [
{
"type": "identifier",
"named": true
}
]
}
}
},
{

79
src/parser.c generated

@ -21,7 +21,7 @@
#define EXTERNAL_TOKEN_COUNT 8
#define FIELD_COUNT 17
#define MAX_ALIAS_SEQUENCE_LENGTH 11
#define PRODUCTION_ID_COUNT 37
#define PRODUCTION_ID_COUNT 38
enum ts_symbol_identifiers {
sym_identifier = 1,
@ -3025,14 +3025,15 @@ static const TSFieldMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = {
[25] = {.index = 26, .length = 1},
[27] = {.index = 27, .length = 2},
[28] = {.index = 29, .length = 1},
[29] = {.index = 30, .length = 2},
[30] = {.index = 32, .length = 1},
[31] = {.index = 33, .length = 3},
[32] = {.index = 36, .length = 1},
[29] = {.index = 30, .length = 1},
[30] = {.index = 31, .length = 2},
[31] = {.index = 33, .length = 1},
[32] = {.index = 34, .length = 3},
[33] = {.index = 37, .length = 1},
[34] = {.index = 38, .length = 3},
[35] = {.index = 41, .length = 1},
[34] = {.index = 38, .length = 1},
[35] = {.index = 39, .length = 3},
[36] = {.index = 42, .length = 1},
[37] = {.index = 43, .length = 1},
};
static const TSFieldMapEntry ts_field_map_entries[] = {
@ -3085,27 +3086,29 @@ static const TSFieldMapEntry ts_field_map_entries[] = {
{field_from, 0},
{field_to, 2},
[29] =
{field_constructor, 1},
{field_name, 0},
[30] =
{field_constructor, 1},
[31] =
{field_guard, 1},
{field_then, 4},
[32] =
{field_body, 3, .inherited = true},
[33] =
{field_body, 3, .inherited = true},
[34] =
{field_else, 6, .inherited = true},
{field_guard, 1},
{field_then, 4},
[36] =
{field_in, 6},
[37] =
{field_args, 1},
{field_in, 6},
[38] =
{field_args, 1},
[39] =
{field_else, 7, .inherited = true},
{field_guard, 1},
{field_then, 4},
[41] =
{field_args, 2},
[42] =
{field_args, 2},
[43] =
{field_else, 2},
};
@ -351061,8 +351064,8 @@ static const TSParseActionEntry ts_parse_actions[] = {
[139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4466),
[141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4472),
[143] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4473),
[145] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_expression, 7, .production_id = 32),
[147] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_expression, 7, .production_id = 32),
[145] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_expression, 7, .production_id = 33),
[147] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_expression, 7, .production_id = 33),
[149] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_mutate_expression, 3, .production_id = 18),
[151] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_mutate_expression, 3, .production_id = 18),
[153] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_tuple_expression_repeat1, 2),
@ -352068,8 +352071,8 @@ static const TSParseActionEntry ts_parse_actions[] = {
[2165] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1077),
[2167] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1067),
[2169] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_int_repeat1, 2), SHIFT_REPEAT(1077),
[2172] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__if_then_expression, 6, .production_id = 29),
[2174] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__if_then_expression, 6, .production_id = 29),
[2172] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__if_then_expression, 6, .production_id = 30),
[2174] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__if_then_expression, 6, .production_id = 30),
[2176] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4698),
[2178] = {.entry = {.count = 1, .reusable = true}}, SHIFT(923),
[2180] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1073),
@ -352290,8 +352293,8 @@ static const TSParseActionEntry ts_parse_actions[] = {
[2625] = {.entry = {.count = 1, .reusable = false}}, SHIFT(5021),
[2627] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object_instantiation_expression, 5),
[2629] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_instantiation_expression, 5),
[2631] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__if_then_else_expression, 7, .production_id = 31),
[2633] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__if_then_else_expression, 7, .production_id = 31),
[2631] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__if_then_else_expression, 7, .production_id = 32),
[2633] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__if_then_else_expression, 7, .production_id = 32),
[2635] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_verbatim_string, 2),
[2637] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_verbatim_string, 2),
[2639] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_bytearray, 2),
@ -352308,16 +352311,16 @@ static const TSParseActionEntry ts_parse_actions[] = {
[2661] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__identifier_or_op, 1),
[2663] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_expression, 11),
[2665] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_expression, 11),
[2667] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__else_expression, 4, .production_id = 36),
[2669] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__else_expression, 4, .production_id = 36),
[2667] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__else_expression, 4, .production_id = 37),
[2669] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__else_expression, 4, .production_id = 37),
[2671] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_expression, 9),
[2673] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_expression, 9),
[2675] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_expression, 9),
[2677] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_expression, 9),
[2679] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_expression, 8),
[2681] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_expression, 8),
[2683] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__if_then_else_expression, 8, .production_id = 34),
[2685] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__if_then_else_expression, 8, .production_id = 34),
[2683] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__if_then_else_expression, 8, .production_id = 35),
[2685] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__if_then_else_expression, 8, .production_id = 35),
[2687] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_sequential_expression_repeat1, 2), SHIFT_REPEAT(759),
[2690] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_array_expression, 2),
[2692] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array_expression, 2),
@ -353291,15 +353294,15 @@ static const TSParseActionEntry ts_parse_actions[] = {
[4840] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__property_defn, 9),
[4842] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_member_signature, 7),
[4844] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_member_signature, 7),
[4846] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__method_defn, 7, .production_id = 35),
[4848] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__method_defn, 7, .production_id = 35),
[4846] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__method_defn, 7, .production_id = 36),
[4848] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__method_defn, 7, .production_id = 36),
[4850] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_additional_constr_defn, 7),
[4852] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_additional_constr_defn, 7),
[4854] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_member_defn, 1),
[4856] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_member_defn, 1),
[4858] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5222),
[4860] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__method_defn, 6, .production_id = 33),
[4862] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__method_defn, 6, .production_id = 33),
[4860] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__method_defn, 6, .production_id = 34),
[4862] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__method_defn, 6, .production_id = 34),
[4864] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5233),
[4866] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_defn_elements, 1),
[4868] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__type_defn_elements, 1),
@ -353312,8 +353315,8 @@ static const TSParseActionEntry ts_parse_actions[] = {
[4882] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__object_members, 4),
[4884] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_additional_constr_defn, 6),
[4886] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_additional_constr_defn, 6),
[4888] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_or_prop_defn, 5, .production_id = 30),
[4890] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_or_prop_defn, 5, .production_id = 30),
[4888] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_or_prop_defn, 5, .production_id = 31),
[4890] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_or_prop_defn, 5, .production_id = 31),
[4892] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4528),
[4894] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5223),
[4896] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3574),
@ -353605,8 +353608,8 @@ static const TSParseActionEntry ts_parse_actions[] = {
[5498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2844),
[5500] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1839),
[5502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1799),
[5504] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_anon_type_defn, 6, .production_id = 28),
[5506] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_anon_type_defn, 6, .production_id = 28),
[5504] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_anon_type_defn, 6, .production_id = 29),
[5506] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_anon_type_defn, 6, .production_id = 29),
[5508] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2833),
[5510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2863),
[5512] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1706),
@ -354246,10 +354249,10 @@ static const TSParseActionEntry ts_parse_actions[] = {
[6812] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2017),
[6814] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3221),
[6816] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5013),
[6818] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_name_spec, 2),
[6820] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_name_spec, 2),
[6822] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_name_spec, 3),
[6824] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_name_spec, 3),
[6818] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_name_spec, 2, .production_id = 28),
[6820] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_name_spec, 2, .production_id = 28),
[6822] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_name_spec, 3, .production_id = 1),
[6824] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_name_spec, 3, .production_id = 1),
[6826] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3323),
[6828] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2756),
[6830] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3301),
@ -354511,7 +354514,7 @@ static const TSParseActionEntry ts_parse_actions[] = {
[7362] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constraint, 8),
[7364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1626),
[7366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3173),
[7368] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_elif_expression, 6, .production_id = 29),
[7368] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_elif_expression, 6, .production_id = 30),
[7370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2125),
[7372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(501),
[7374] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1601),

@ -191,6 +191,13 @@ bool tree_sitter_fsharp_external_scanner_scan(void *payload, TSLexer *lexer,
found_bracket_end = true;
}
if (valid_symbols[INDENT] && !found_start_of_infix_op && !found_bracket_end &&
!error_recovery_mode) {
array_push(&scanner->indents, indent_length);
lexer->result_symbol = INDENT;
return true;
}
if (scanner->indents.size > 0) {
uint16_t current_indent_length = *array_back(&scanner->indents);
@ -201,13 +208,6 @@ bool tree_sitter_fsharp_external_scanner_scan(void *payload, TSLexer *lexer,
return true;
}
if (valid_symbols[INDENT] && !found_start_of_infix_op &&
!found_bracket_end && !error_recovery_mode) {
array_push(&scanner->indents, indent_length);
lexer->result_symbol = INDENT;
return true;
}
if (found_bracket_end && valid_symbols[DEDENT]) {
array_pop(&scanner->indents);
lexer->result_symbol = DEDENT;
@ -223,7 +223,7 @@ bool tree_sitter_fsharp_external_scanner_scan(void *payload, TSLexer *lexer,
}
if ((valid_symbols[DEDENT] || (!valid_symbols[NEWLINE])) &&
indent_length < current_indent_length) {
indent_length < current_indent_length && !found_bracket_end) {
array_pop(&scanner->indents);
lexer->result_symbol = DEDENT;
return true;

@ -836,6 +836,76 @@ do
(const
(unit))))))))
================================================================================
ce expression 3
================================================================================
let f = async {
do! Async.sleep 5
return ()
}
--------------------------------------------------------------------------------
(file
(value_declaration
(function_or_value_defn
(value_declaration_left
(identifier_pattern
(long_identifier
(identifier))))
(ce_expression
(long_identifier_or_op
(long_identifier
(identifier)))
(sequential_expression
(do_expression
(application_expression
(long_identifier_or_op
(long_identifier
(identifier)
(identifier)))
(const
(int))))
(return_expression
(const
(unit))))))))
================================================================================
ce expression 4
================================================================================
let f = async {
do! Async.sleep 5
return ()
}
--------------------------------------------------------------------------------
(file
(value_declaration
(function_or_value_defn
(value_declaration_left
(identifier_pattern
(long_identifier
(identifier))))
(ce_expression
(long_identifier_or_op
(long_identifier
(identifier)))
(sequential_expression
(do_expression
(application_expression
(long_identifier_or_op
(long_identifier
(identifier)
(identifier)))
(const
(int))))
(return_expression
(const
(unit))))))))
================================================================================
call function from list of functions
================================================================================