Skip to content

Commit defa3cd

Browse files
committed
Fix else/else if parsing when on new line after closing brace
Add 'else' to scanner's multiline statement detection, matching 'and' handling
1 parent 5702498 commit defa3cd

2 files changed

Lines changed: 73 additions & 1 deletion

File tree

src/scanner.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,18 @@ bool tree_sitter_rescript_external_scanner_scan(
243243
in_multiline_statement = true;
244244
}
245245
}
246+
} else if (lexer->lookahead == 'e') {
247+
advance(lexer);
248+
if (lexer->lookahead == 'l') {
249+
advance(lexer);
250+
if (lexer->lookahead == 's') {
251+
advance(lexer);
252+
if (lexer->lookahead == 'e') {
253+
// Ignore new lines before `else` keyword (else/else if clauses)
254+
in_multiline_statement = true;
255+
}
256+
}
257+
}
246258
}
247259

248260
if (in_multiline_statement) {

test/corpus/expressions.txt

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,66 @@ if predicateA {
479479
(expression_statement
480480
(value_identifier)))))))
481481

482+
================================================================================
483+
If/else with else on new line
484+
================================================================================
485+
486+
if predicateA {
487+
foo
488+
}
489+
else if predicateB {
490+
bar
491+
}
492+
else {
493+
baz
494+
}
495+
496+
if predicateA {
497+
foo
498+
} // comment before else if
499+
else if predicateB {
500+
bar
501+
} // comment before else
502+
else {
503+
baz
504+
}
505+
506+
--------------------------------------------------------------------------------
507+
508+
(source_file
509+
(expression_statement
510+
(if_expression
511+
(value_identifier)
512+
(block
513+
(expression_statement
514+
(value_identifier)))
515+
(else_if_clause
516+
(value_identifier)
517+
(block
518+
(expression_statement
519+
(value_identifier))))
520+
(else_clause
521+
(block
522+
(expression_statement
523+
(value_identifier))))))
524+
(expression_statement
525+
(if_expression
526+
(value_identifier)
527+
(block
528+
(expression_statement
529+
(value_identifier)))
530+
(comment)
531+
(else_if_clause
532+
(value_identifier)
533+
(block
534+
(expression_statement
535+
(value_identifier))))
536+
(comment)
537+
(else_clause
538+
(block
539+
(expression_statement
540+
(value_identifier)))))))
541+
482542
================================================================================
483543
Switch of literals
484544
================================================================================
@@ -1639,7 +1699,7 @@ try for i in 0 to 10 {
16391699
call()
16401700
} catch {
16411701
| Not_found => false
1642-
}
1702+
}
16431703

16441704
--------------------------------------------------------------------------------
16451705

0 commit comments

Comments
 (0)