diff options
Diffstat (limited to 'crates')
34 files changed, 278 insertions, 0 deletions
diff --git a/crates/parser/src/grammar.rs b/crates/parser/src/grammar.rs index 63cc90027..bb9ffea8b 100644 --- a/crates/parser/src/grammar.rs +++ b/crates/parser/src/grammar.rs | |||
@@ -66,6 +66,10 @@ pub(crate) mod fragments { | |||
66 | expressions::stmt(p, expressions::StmtWithSemi::No) | 66 | expressions::stmt(p, expressions::StmtWithSemi::No) |
67 | } | 67 | } |
68 | 68 | ||
69 | pub(crate) fn stmt_optional_semi(p: &mut Parser) { | ||
70 | expressions::stmt(p, expressions::StmtWithSemi::Optional) | ||
71 | } | ||
72 | |||
69 | pub(crate) fn opt_visibility(p: &mut Parser) { | 73 | pub(crate) fn opt_visibility(p: &mut Parser) { |
70 | let _ = super::opt_visibility(p); | 74 | let _ = super::opt_visibility(p); |
71 | } | 75 | } |
diff --git a/crates/parser/src/lib.rs b/crates/parser/src/lib.rs index 811e740f9..9dfe63028 100644 --- a/crates/parser/src/lib.rs +++ b/crates/parser/src/lib.rs | |||
@@ -88,6 +88,7 @@ pub enum FragmentKind { | |||
88 | Path, | 88 | Path, |
89 | Expr, | 89 | Expr, |
90 | Statement, | 90 | Statement, |
91 | StatementOptionalSemi, | ||
91 | Type, | 92 | Type, |
92 | Pattern, | 93 | Pattern, |
93 | Item, | 94 | Item, |
@@ -118,6 +119,7 @@ pub fn parse_fragment( | |||
118 | FragmentKind::Visibility => grammar::fragments::opt_visibility, | 119 | FragmentKind::Visibility => grammar::fragments::opt_visibility, |
119 | FragmentKind::MetaItem => grammar::fragments::meta_item, | 120 | FragmentKind::MetaItem => grammar::fragments::meta_item, |
120 | FragmentKind::Statement => grammar::fragments::stmt, | 121 | FragmentKind::Statement => grammar::fragments::stmt, |
122 | FragmentKind::StatementOptionalSemi => grammar::fragments::stmt_optional_semi, | ||
121 | FragmentKind::Items => grammar::fragments::macro_items, | 123 | FragmentKind::Items => grammar::fragments::macro_items, |
122 | FragmentKind::Statements => grammar::fragments::macro_stmts, | 124 | FragmentKind::Statements => grammar::fragments::macro_stmts, |
123 | FragmentKind::Attr => grammar::fragments::attr, | 125 | FragmentKind::Attr => grammar::fragments::attr, |
diff --git a/crates/ssr/src/parsing.rs b/crates/ssr/src/parsing.rs index f3b084baf..289affe90 100644 --- a/crates/ssr/src/parsing.rs +++ b/crates/ssr/src/parsing.rs | |||
@@ -78,6 +78,7 @@ impl ParsedRule { | |||
78 | builder.try_add(ast::Item::parse(&raw_pattern), raw_template.map(ast::Item::parse)); | 78 | builder.try_add(ast::Item::parse(&raw_pattern), raw_template.map(ast::Item::parse)); |
79 | builder.try_add(ast::Path::parse(&raw_pattern), raw_template.map(ast::Path::parse)); | 79 | builder.try_add(ast::Path::parse(&raw_pattern), raw_template.map(ast::Path::parse)); |
80 | builder.try_add(ast::Pat::parse(&raw_pattern), raw_template.map(ast::Pat::parse)); | 80 | 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)); | ||
81 | builder.build() | 82 | builder.build() |
82 | } | 83 | } |
83 | } | 84 | } |
diff --git a/crates/ssr/src/tests.rs b/crates/ssr/src/tests.rs index 63131f6ca..c4149a849 100644 --- a/crates/ssr/src/tests.rs +++ b/crates/ssr/src/tests.rs | |||
@@ -160,6 +160,50 @@ fn assert_match_failure_reason(pattern: &str, code: &str, snippet: &str, expecte | |||
160 | } | 160 | } |
161 | 161 | ||
162 | #[test] | 162 | #[test] |
163 | fn ssr_let_stmt_in_macro_match() { | ||
164 | assert_matches( | ||
165 | "let a = 0", | ||
166 | r#" | ||
167 | macro_rules! m1 { ($a:stmt) => {$a}; } | ||
168 | fn f() {m1!{ let a = 0 };}"#, | ||
169 | // FIXME: Whitespace is not part of the matched block | ||
170 | &["leta=0"], | ||
171 | ); | ||
172 | } | ||
173 | |||
174 | #[test] | ||
175 | fn ssr_let_stmt_in_fn_match() { | ||
176 | assert_matches("let $a = 10;", "fn main() { let x = 10; x }", &["let x = 10;"]); | ||
177 | assert_matches("let $a = $b;", "fn main() { let x = 10; x }", &["let x = 10;"]); | ||
178 | } | ||
179 | |||
180 | #[test] | ||
181 | fn ssr_block_expr_match() { | ||
182 | assert_matches("{ let $a = $b; }", "fn main() { let x = 10; }", &["{ let x = 10; }"]); | ||
183 | assert_matches("{ let $a = $b; $c }", "fn main() { let x = 10; x }", &["{ let x = 10; x }"]); | ||
184 | } | ||
185 | |||
186 | #[test] | ||
187 | fn ssr_let_stmt_replace() { | ||
188 | // Pattern and template with trailing semicolon | ||
189 | assert_ssr_transform( | ||
190 | "let $a = $b; ==>> let $a = 11;", | ||
191 | "fn main() { let x = 10; x }", | ||
192 | expect![["fn main() { let x = 11; x }"]], | ||
193 | ); | ||
194 | } | ||
195 | |||
196 | #[test] | ||
197 | fn ssr_let_stmt_replace_expr() { | ||
198 | // Trailing semicolon should be dropped from the new expression | ||
199 | assert_ssr_transform( | ||
200 | "let $a = $b; ==>> $b", | ||
201 | "fn main() { let x = 10; }", | ||
202 | expect![["fn main() { 10 }"]], | ||
203 | ); | ||
204 | } | ||
205 | |||
206 | #[test] | ||
163 | fn ssr_function_to_method() { | 207 | fn ssr_function_to_method() { |
164 | assert_ssr_transform( | 208 | assert_ssr_transform( |
165 | "my_function($a, $b) ==>> ($a).my_method($b)", | 209 | "my_function($a, $b) ==>> ($a).my_method($b)", |
diff --git a/crates/syntax/src/lib.rs b/crates/syntax/src/lib.rs index 4d272f367..da151e328 100644 --- a/crates/syntax/src/lib.rs +++ b/crates/syntax/src/lib.rs | |||
@@ -212,6 +212,13 @@ impl ast::Attr { | |||
212 | } | 212 | } |
213 | } | 213 | } |
214 | 214 | ||
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::StatementOptionalSemi) | ||
219 | } | ||
220 | } | ||
221 | |||
215 | /// Matches a `SyntaxNode` against an `ast` type. | 222 | /// Matches a `SyntaxNode` against an `ast` type. |
216 | /// | 223 | /// |
217 | /// # Example: | 224 | /// # Example: |
diff --git a/crates/syntax/src/tests.rs b/crates/syntax/src/tests.rs index 8c217dfe0..9d3433c9d 100644 --- a/crates/syntax/src/tests.rs +++ b/crates/syntax/src/tests.rs | |||
@@ -103,6 +103,15 @@ fn type_parser_tests() { | |||
103 | } | 103 | } |
104 | 104 | ||
105 | #[test] | 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 | |||
114 | #[test] | ||
106 | fn parser_fuzz_tests() { | 115 | fn parser_fuzz_tests() { |
107 | for (_, text) in collect_rust_files(&test_data_dir(), &["parser/fuzz-failures"]) { | 116 | for (_, text) in collect_rust_files(&test_data_dir(), &["parser/fuzz-failures"]) { |
108 | fuzz::check_parser(&text) | 117 | fuzz::check_parser(&text) |
diff --git a/crates/syntax/test_data/parser/fragments/stmt/err/0000_attr.rast b/crates/syntax/test_data/parser/fragments/stmt/err/0000_attr.rast new file mode 100644 index 000000000..5df7507e2 --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/err/0000_attr.rast | |||
@@ -0,0 +1 @@ | |||
ERROR | |||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/err/0000_attr.rs b/crates/syntax/test_data/parser/fragments/stmt/err/0000_attr.rs new file mode 100644 index 000000000..988df0705 --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/err/0000_attr.rs | |||
@@ -0,0 +1 @@ | |||
#[foo] | |||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/err/0000_multiple_stmts.rast b/crates/syntax/test_data/parser/fragments/stmt/err/0000_multiple_stmts.rast new file mode 100644 index 000000000..5df7507e2 --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/err/0000_multiple_stmts.rast | |||
@@ -0,0 +1 @@ | |||
ERROR | |||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/err/0000_multiple_stmts.rs b/crates/syntax/test_data/parser/fragments/stmt/err/0000_multiple_stmts.rs new file mode 100644 index 000000000..7e3b2fd49 --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/err/0000_multiple_stmts.rs | |||
@@ -0,0 +1 @@ | |||
a(); b(); c() | |||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/err/0000_open_parenthesis.rast b/crates/syntax/test_data/parser/fragments/stmt/err/0000_open_parenthesis.rast new file mode 100644 index 000000000..5df7507e2 --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/err/0000_open_parenthesis.rast | |||
@@ -0,0 +1 @@ | |||
ERROR | |||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/err/0000_open_parenthesis.rs b/crates/syntax/test_data/parser/fragments/stmt/err/0000_open_parenthesis.rs new file mode 100644 index 000000000..2d06f3766 --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/err/0000_open_parenthesis.rs | |||
@@ -0,0 +1 @@ | |||
( | |||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/err/0000_semicolon.rast b/crates/syntax/test_data/parser/fragments/stmt/err/0000_semicolon.rast new file mode 100644 index 000000000..5df7507e2 --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/err/0000_semicolon.rast | |||
@@ -0,0 +1 @@ | |||
ERROR | |||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/err/0000_semicolon.rs b/crates/syntax/test_data/parser/fragments/stmt/err/0000_semicolon.rs new file mode 100644 index 000000000..092bc2b04 --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/err/0000_semicolon.rs | |||
@@ -0,0 +1 @@ | |||
; | |||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/err/0000_unterminated_expr.rast b/crates/syntax/test_data/parser/fragments/stmt/err/0000_unterminated_expr.rast new file mode 100644 index 000000000..5df7507e2 --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/err/0000_unterminated_expr.rast | |||
@@ -0,0 +1 @@ | |||
ERROR | |||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/err/0000_unterminated_expr.rs b/crates/syntax/test_data/parser/fragments/stmt/err/0000_unterminated_expr.rs new file mode 100644 index 000000000..ca49acb07 --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/err/0000_unterminated_expr.rs | |||
@@ -0,0 +1 @@ | |||
1 + | |||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/ok/0000_expr.rast b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_expr.rast new file mode 100644 index 000000000..274fdf16d --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_expr.rast | |||
@@ -0,0 +1,9 @@ | |||
1 | EXPR_STMT@0..5 | ||
2 | BIN_EXPR@0..5 | ||
3 | LITERAL@0..1 | ||
4 | INT_NUMBER@0..1 "1" | ||
5 | WHITESPACE@1..2 " " | ||
6 | PLUS@2..3 "+" | ||
7 | WHITESPACE@3..4 " " | ||
8 | LITERAL@4..5 | ||
9 | INT_NUMBER@4..5 "1" | ||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/ok/0000_expr.rs b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_expr.rs new file mode 100644 index 000000000..8d2f0971e --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_expr.rs | |||
@@ -0,0 +1 @@ | |||
1 + 1 | |||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/ok/0000_expr_block.rast b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_expr_block.rast new file mode 100644 index 000000000..6c946091f --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_expr_block.rast | |||
@@ -0,0 +1,69 @@ | |||
1 | EXPR_STMT@0..55 | ||
2 | BLOCK_EXPR@0..55 | ||
3 | L_CURLY@0..1 "{" | ||
4 | WHITESPACE@1..6 "\n " | ||
5 | LET_STMT@6..20 | ||
6 | LET_KW@6..9 "let" | ||
7 | WHITESPACE@9..10 " " | ||
8 | IDENT_PAT@10..11 | ||
9 | NAME@10..11 | ||
10 | IDENT@10..11 "x" | ||
11 | WHITESPACE@11..12 " " | ||
12 | EQ@12..13 "=" | ||
13 | WHITESPACE@13..14 " " | ||
14 | CALL_EXPR@14..19 | ||
15 | PATH_EXPR@14..17 | ||
16 | PATH@14..17 | ||
17 | PATH_SEGMENT@14..17 | ||
18 | NAME_REF@14..17 | ||
19 | IDENT@14..17 "foo" | ||
20 | ARG_LIST@17..19 | ||
21 | L_PAREN@17..18 "(" | ||
22 | R_PAREN@18..19 ")" | ||
23 | SEMICOLON@19..20 ";" | ||
24 | WHITESPACE@20..25 "\n " | ||
25 | LET_STMT@25..39 | ||
26 | LET_KW@25..28 "let" | ||
27 | WHITESPACE@28..29 " " | ||
28 | IDENT_PAT@29..30 | ||
29 | NAME@29..30 | ||
30 | IDENT@29..30 "y" | ||
31 | WHITESPACE@30..31 " " | ||
32 | EQ@31..32 "=" | ||
33 | WHITESPACE@32..33 " " | ||
34 | CALL_EXPR@33..38 | ||
35 | PATH_EXPR@33..36 | ||
36 | PATH@33..36 | ||
37 | PATH_SEGMENT@33..36 | ||
38 | NAME_REF@33..36 | ||
39 | IDENT@33..36 "bar" | ||
40 | ARG_LIST@36..38 | ||
41 | L_PAREN@36..37 "(" | ||
42 | R_PAREN@37..38 ")" | ||
43 | SEMICOLON@38..39 ";" | ||
44 | WHITESPACE@39..44 "\n " | ||
45 | CALL_EXPR@44..53 | ||
46 | PATH_EXPR@44..46 | ||
47 | PATH@44..46 | ||
48 | PATH_SEGMENT@44..46 | ||
49 | NAME_REF@44..46 | ||
50 | IDENT@44..46 "Ok" | ||
51 | ARG_LIST@46..53 | ||
52 | L_PAREN@46..47 "(" | ||
53 | BIN_EXPR@47..52 | ||
54 | PATH_EXPR@47..48 | ||
55 | PATH@47..48 | ||
56 | PATH_SEGMENT@47..48 | ||
57 | NAME_REF@47..48 | ||
58 | IDENT@47..48 "x" | ||
59 | WHITESPACE@48..49 " " | ||
60 | PLUS@49..50 "+" | ||
61 | WHITESPACE@50..51 " " | ||
62 | PATH_EXPR@51..52 | ||
63 | PATH@51..52 | ||
64 | PATH_SEGMENT@51..52 | ||
65 | NAME_REF@51..52 | ||
66 | IDENT@51..52 "y" | ||
67 | R_PAREN@52..53 ")" | ||
68 | WHITESPACE@53..54 "\n" | ||
69 | R_CURLY@54..55 "}" | ||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/ok/0000_expr_block.rs b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_expr_block.rs new file mode 100644 index 000000000..ffa5c1e66 --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_expr_block.rs | |||
@@ -0,0 +1,5 @@ | |||
1 | { | ||
2 | let x = foo(); | ||
3 | let y = bar(); | ||
4 | Ok(x + y) | ||
5 | } | ||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/ok/0000_fn_call.rast b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_fn_call.rast new file mode 100644 index 000000000..8c186da93 --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_fn_call.rast | |||
@@ -0,0 +1,11 @@ | |||
1 | EXPR_STMT@0..6 | ||
2 | CALL_EXPR@0..5 | ||
3 | PATH_EXPR@0..3 | ||
4 | PATH@0..3 | ||
5 | PATH_SEGMENT@0..3 | ||
6 | NAME_REF@0..3 | ||
7 | IDENT@0..3 "foo" | ||
8 | ARG_LIST@3..5 | ||
9 | L_PAREN@3..4 "(" | ||
10 | R_PAREN@4..5 ")" | ||
11 | SEMICOLON@5..6 ";" | ||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/ok/0000_fn_call.rs b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_fn_call.rs new file mode 100644 index 000000000..a280f9a5c --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_fn_call.rs | |||
@@ -0,0 +1 @@ | |||
foo(); | |||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/ok/0000_let_stmt.rast b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_let_stmt.rast new file mode 100644 index 000000000..8ab38da21 --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_let_stmt.rast | |||
@@ -0,0 +1,12 @@ | |||
1 | LET_STMT@0..11 | ||
2 | LET_KW@0..3 "let" | ||
3 | WHITESPACE@3..4 " " | ||
4 | IDENT_PAT@4..5 | ||
5 | NAME@4..5 | ||
6 | IDENT@4..5 "x" | ||
7 | WHITESPACE@5..6 " " | ||
8 | EQ@6..7 "=" | ||
9 | WHITESPACE@7..8 " " | ||
10 | LITERAL@8..10 | ||
11 | INT_NUMBER@8..10 "10" | ||
12 | SEMICOLON@10..11 ";" | ||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/ok/0000_let_stmt.rs b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_let_stmt.rs new file mode 100644 index 000000000..de8a7f1fc --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_let_stmt.rs | |||
@@ -0,0 +1 @@ | |||
let x = 10; | |||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/ok/0000_macro_let_stmt.rast b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_macro_let_stmt.rast new file mode 100644 index 000000000..81d6df29a --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_macro_let_stmt.rast | |||
@@ -0,0 +1,21 @@ | |||
1 | EXPR_STMT@0..18 | ||
2 | MACRO_CALL@0..17 | ||
3 | PATH@0..2 | ||
4 | PATH_SEGMENT@0..2 | ||
5 | NAME_REF@0..2 | ||
6 | IDENT@0..2 "m1" | ||
7 | BANG@2..3 "!" | ||
8 | TOKEN_TREE@3..17 | ||
9 | L_CURLY@3..4 "{" | ||
10 | WHITESPACE@4..5 " " | ||
11 | LET_KW@5..8 "let" | ||
12 | WHITESPACE@8..9 " " | ||
13 | IDENT@9..10 "a" | ||
14 | WHITESPACE@10..11 " " | ||
15 | EQ@11..12 "=" | ||
16 | WHITESPACE@12..13 " " | ||
17 | INT_NUMBER@13..14 "0" | ||
18 | SEMICOLON@14..15 ";" | ||
19 | WHITESPACE@15..16 " " | ||
20 | R_CURLY@16..17 "}" | ||
21 | SEMICOLON@17..18 ";" | ||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/ok/0000_macro_let_stmt.rs b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_macro_let_stmt.rs new file mode 100644 index 000000000..075f30159 --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_macro_let_stmt.rs | |||
@@ -0,0 +1 @@ | |||
m1!{ let a = 0; }; | |||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/ok/0000_macro_unterminated_let_stmt.rast b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_macro_unterminated_let_stmt.rast new file mode 100644 index 000000000..81d6df29a --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_macro_unterminated_let_stmt.rast | |||
@@ -0,0 +1,21 @@ | |||
1 | EXPR_STMT@0..18 | ||
2 | MACRO_CALL@0..17 | ||
3 | PATH@0..2 | ||
4 | PATH_SEGMENT@0..2 | ||
5 | NAME_REF@0..2 | ||
6 | IDENT@0..2 "m1" | ||
7 | BANG@2..3 "!" | ||
8 | TOKEN_TREE@3..17 | ||
9 | L_CURLY@3..4 "{" | ||
10 | WHITESPACE@4..5 " " | ||
11 | LET_KW@5..8 "let" | ||
12 | WHITESPACE@8..9 " " | ||
13 | IDENT@9..10 "a" | ||
14 | WHITESPACE@10..11 " " | ||
15 | EQ@11..12 "=" | ||
16 | WHITESPACE@12..13 " " | ||
17 | INT_NUMBER@13..14 "0" | ||
18 | SEMICOLON@14..15 ";" | ||
19 | WHITESPACE@15..16 " " | ||
20 | R_CURLY@16..17 "}" | ||
21 | SEMICOLON@17..18 ";" | ||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/ok/0000_macro_unterminated_let_stmt.rs b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_macro_unterminated_let_stmt.rs new file mode 100644 index 000000000..075f30159 --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_macro_unterminated_let_stmt.rs | |||
@@ -0,0 +1 @@ | |||
m1!{ let a = 0; }; | |||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/ok/0000_struct_item.rast b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_struct_item.rast new file mode 100644 index 000000000..64c5d2969 --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_struct_item.rast | |||
@@ -0,0 +1,22 @@ | |||
1 | STRUCT@0..28 | ||
2 | STRUCT_KW@0..6 "struct" | ||
3 | WHITESPACE@6..7 " " | ||
4 | NAME@7..10 | ||
5 | IDENT@7..10 "Foo" | ||
6 | WHITESPACE@10..11 " " | ||
7 | RECORD_FIELD_LIST@11..28 | ||
8 | L_CURLY@11..12 "{" | ||
9 | WHITESPACE@12..17 "\n " | ||
10 | RECORD_FIELD@17..25 | ||
11 | NAME@17..20 | ||
12 | IDENT@17..20 "bar" | ||
13 | COLON@20..21 ":" | ||
14 | WHITESPACE@21..22 " " | ||
15 | PATH_TYPE@22..25 | ||
16 | PATH@22..25 | ||
17 | PATH_SEGMENT@22..25 | ||
18 | NAME_REF@22..25 | ||
19 | IDENT@22..25 "u32" | ||
20 | COMMA@25..26 "," | ||
21 | WHITESPACE@26..27 "\n" | ||
22 | R_CURLY@27..28 "}" | ||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/ok/0000_struct_item.rs b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_struct_item.rs new file mode 100644 index 000000000..e5473e3ac --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_struct_item.rs | |||
@@ -0,0 +1,3 @@ | |||
1 | struct Foo { | ||
2 | bar: u32, | ||
3 | } | ||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/ok/0000_unterminated_fn_call.rast b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_unterminated_fn_call.rast new file mode 100644 index 000000000..9089906bc --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_unterminated_fn_call.rast | |||
@@ -0,0 +1,10 @@ | |||
1 | EXPR_STMT@0..5 | ||
2 | CALL_EXPR@0..5 | ||
3 | PATH_EXPR@0..3 | ||
4 | PATH@0..3 | ||
5 | PATH_SEGMENT@0..3 | ||
6 | NAME_REF@0..3 | ||
7 | IDENT@0..3 "foo" | ||
8 | ARG_LIST@3..5 | ||
9 | L_PAREN@3..4 "(" | ||
10 | R_PAREN@4..5 ")" | ||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/ok/0000_unterminated_fn_call.rs b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_unterminated_fn_call.rs new file mode 100644 index 000000000..eb28ef440 --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_unterminated_fn_call.rs | |||
@@ -0,0 +1 @@ | |||
foo() | |||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/ok/0000_unterminated_let_stmt.rast b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_unterminated_let_stmt.rast new file mode 100644 index 000000000..37663671f --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_unterminated_let_stmt.rast | |||
@@ -0,0 +1,11 @@ | |||
1 | LET_STMT@0..10 | ||
2 | LET_KW@0..3 "let" | ||
3 | WHITESPACE@3..4 " " | ||
4 | IDENT_PAT@4..5 | ||
5 | NAME@4..5 | ||
6 | IDENT@4..5 "x" | ||
7 | WHITESPACE@5..6 " " | ||
8 | EQ@6..7 "=" | ||
9 | WHITESPACE@7..8 " " | ||
10 | LITERAL@8..10 | ||
11 | INT_NUMBER@8..10 "10" | ||
diff --git a/crates/syntax/test_data/parser/fragments/stmt/ok/0000_unterminated_let_stmt.rs b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_unterminated_let_stmt.rs new file mode 100644 index 000000000..78364b2a9 --- /dev/null +++ b/crates/syntax/test_data/parser/fragments/stmt/ok/0000_unterminated_let_stmt.rs | |||
@@ -0,0 +1 @@ | |||
let x = 10 | |||