Skip to content

Commit 4e351e8

Browse files
committed
parser,syntax: Add separate parser for stmt with optional semicolon
Adjusting `grammar::fragments::stmt` to Optional or Yes will break original functionality and tests.
1 parent e2ceedd commit 4e351e8

16 files changed

+73
-10
lines changed

crates/parser/src/grammar.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ pub(crate) mod fragments {
6666
expressions::stmt(p, expressions::StmtWithSemi::No)
6767
}
6868

69+
pub(crate) fn stmt_optional_semi(p: &mut Parser) {
70+
expressions::stmt(p, expressions::StmtWithSemi::Optional)
71+
}
72+
6973
pub(crate) fn opt_visibility(p: &mut Parser) {
7074
let _ = super::opt_visibility(p);
7175
}

crates/parser/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ pub enum FragmentKind {
8888
Path,
8989
Expr,
9090
Statement,
91+
StatementOptionalSemi,
9192
Type,
9293
Pattern,
9394
Item,
@@ -118,6 +119,7 @@ pub fn parse_fragment(
118119
FragmentKind::Visibility => grammar::fragments::opt_visibility,
119120
FragmentKind::MetaItem => grammar::fragments::meta_item,
120121
FragmentKind::Statement => grammar::fragments::stmt,
122+
FragmentKind::StatementOptionalSemi => grammar::fragments::stmt_optional_semi,
121123
FragmentKind::Items => grammar::fragments::macro_items,
122124
FragmentKind::Statements => grammar::fragments::macro_stmts,
123125
FragmentKind::Attr => grammar::fragments::attr,

crates/syntax/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ impl ast::Attr {
215215
impl ast::Stmt {
216216
/// Returns `text`, parsed as statement, but only if it has no errors.
217217
pub fn parse(text: &str) -> Result<Self, ()> {
218-
parsing::parse_text_fragment(text, parser::FragmentKind::Statement)
218+
parsing::parse_text_fragment(text, parser::FragmentKind::StatementOptionalSemi)
219219
}
220220
}
221221

crates/syntax/src/tests.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,7 @@ fn type_parser_tests() {
104104

105105
#[test]
106106
fn stmt_parser_tests() {
107-
fragment_parser_dir_test(
108-
&["parser/fragments/stmt/ok"],
109-
&["parser/fragments/stmt/err"],
110-
crate::ast::Stmt::parse,
111-
);
107+
fragment_parser_dir_test(&["parser/fragments/stmt/ok"], &[], crate::ast::Stmt::parse);
112108
}
113109

114110
#[test]

crates/syntax/test_data/parser/fragments/stmt/err/0000_fn_call.rast

Lines changed: 0 additions & 1 deletion
This file was deleted.

crates/syntax/test_data/parser/fragments/stmt/err/0000_let_stmt.rast

Lines changed: 0 additions & 1 deletion
This file was deleted.

crates/syntax/test_data/parser/fragments/stmt/err/0000_macro_let_stmt.rast

Lines changed: 0 additions & 1 deletion
This file was deleted.

crates/syntax/test_data/parser/fragments/stmt/err/0000_macro_unterminated_let_stmt.rast

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 11 additions & 0 deletions
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
2+
3+
4+
5+
6+
7+
8+
9+
10+
11+
12+

0 commit comments

Comments
 (0)