Skip to content

Commit d3446dc

Browse files
committed
syntax,ssr: Implement statement parsing
1 parent 354c1da commit d3446dc

25 files changed

+161
-0
lines changed

crates/ssr/src/parsing.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ impl ParsedRule {
7878
builder.try_add(ast::Item::parse(&raw_pattern), raw_template.map(ast::Item::parse));
7979
builder.try_add(ast::Path::parse(&raw_pattern), raw_template.map(ast::Path::parse));
8080
builder.try_add(ast::Pat::parse(&raw_pattern), raw_template.map(ast::Pat::parse));
81+
builder.try_add(ast::Stmt::parse(&raw_pattern), raw_template.map(ast::Stmt::parse));
8182
builder.build()
8283
}
8384
}

crates/syntax/src/lib.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,13 @@ impl ast::Attr {
212212
}
213213
}
214214

215+
impl ast::Stmt {
216+
/// Returns `text`, parsed as statement, but only if it has no errors.
217+
pub fn parse(text: &str) -> Result<Self, ()> {
218+
parsing::parse_text_fragment(text, parser::FragmentKind::Statement)
219+
}
220+
}
221+
215222
/// Matches a `SyntaxNode` against an `ast` type.
216223
///
217224
/// # Example:

crates/syntax/src/tests.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,15 @@ fn type_parser_tests() {
102102
);
103103
}
104104

105+
#[test]
106+
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+
);
112+
}
113+
105114
#[test]
106115
fn parser_fuzz_tests() {
107116
for (_, text) in collect_rust_files(&test_data_dir(), &["parser/fuzz-failures"]) {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ERROR
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
#[foo]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ERROR
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
foo();
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ERROR
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
let x = 10;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ERROR
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
m1!{ let a = 0; };
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ERROR
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
m1!{ let a = 0; };
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ERROR
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
a(); b(); c()
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
2+
3+
4+
5+
6+
7+
8+
9+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
1 + 1
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
2+
3+
4+
5+
6+
7+
8+
9+
10+
11+
12+
13+
14+
15+
16+
17+
18+
19+
20+
21+
22+
23+
24+
25+
26+
27+
28+
29+
30+
31+
32+
33+
34+
35+
36+
37+
38+
39+
40+
41+
42+
43+
44+
45+
46+
47+
48+
49+
50+
51+
52+
53+
54+
55+
56+
57+
58+
59+
60+
61+
62+
63+
64+
65+
66+
67+
68+
69+
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
let x = foo();
3+
let y = bar();
4+
Ok(x + y)
5+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
struct Foo {
2+
bar: u32,
3+
}
Lines changed: 10 additions & 0 deletions
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
foo()
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
2+
3+
4+
5+
6+
7+
8+
9+
10+
11+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
let x = 10

0 commit comments

Comments
 (0)