diff options
| author | gingerBill <bill@gingerbill.org> | 2024-06-29 20:04:34 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2024-06-29 20:04:34 +0100 |
| commit | 34fce83d668f1f1754e88c29a8f0e3df71c60057 (patch) | |
| tree | 02410d35cad0da0ce8e2a8c0bb2cc78c64d21e44 /src/parser.cpp | |
| parent | b1a1da6618ce8ea5ffc8b7fca520895f01d36929 (diff) | |
Improve `-strict-style` rules for `if-else` statements
Diffstat (limited to 'src/parser.cpp')
| -rw-r--r-- | src/parser.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/parser.cpp b/src/parser.cpp index 51dc03085..583f4a57d 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -1486,7 +1486,7 @@ gb_internal bool skip_possible_newline(AstFile *f) { return false; } -gb_internal bool skip_possible_newline_for_literal(AstFile *f, bool seen_where=false) { +gb_internal bool skip_possible_newline_for_literal(AstFile *f, bool ignore_strict_style=false) { Token curr = f->curr_token; if (token_is_newline(curr)) { Token next = peek_token(f); @@ -1494,7 +1494,7 @@ gb_internal bool skip_possible_newline_for_literal(AstFile *f, bool seen_where=f switch (next.kind) { case Token_OpenBrace: case Token_else: - if (build_context.strict_style && !seen_where) { + if (build_context.strict_style && !ignore_strict_style) { syntax_error(next, "With '-strict-style' the attached brace style (1TBS) is enforced"); } /*fallthrough*/ @@ -4548,7 +4548,11 @@ gb_internal Ast *parse_if_stmt(AstFile *f) { body = parse_block_stmt(f, false); } - skip_possible_newline_for_literal(f); + bool ignore_strict_style = false; + if (token.pos.line == ast_end_token(body).pos.line) { + ignore_strict_style = true; + } + skip_possible_newline_for_literal(f, ignore_strict_style); if (f->curr_token.kind == Token_else) { Token else_token = expect_token(f, Token_else); switch (f->curr_token.kind) { @@ -4600,7 +4604,11 @@ gb_internal Ast *parse_when_stmt(AstFile *f) { body = parse_block_stmt(f, true); } - skip_possible_newline_for_literal(f); + bool ignore_strict_style = false; + if (token.pos.line == ast_end_token(body).pos.line) { + ignore_strict_style = true; + } + skip_possible_newline_for_literal(f, ignore_strict_style); if (f->curr_token.kind == Token_else) { Token else_token = expect_token(f, Token_else); switch (f->curr_token.kind) { |