diff options
Diffstat (limited to 'crates')
21 files changed, 326 insertions, 307 deletions
diff --git a/crates/ra_parser/src/grammar.rs b/crates/ra_parser/src/grammar.rs index c2e1d701e..88468bc97 100644 --- a/crates/ra_parser/src/grammar.rs +++ b/crates/ra_parser/src/grammar.rs | |||
@@ -110,7 +110,7 @@ pub(crate) mod fragments { | |||
110 | } | 110 | } |
111 | 111 | ||
112 | pub(crate) fn item(p: &mut Parser) { | 112 | pub(crate) fn item(p: &mut Parser) { |
113 | items::item_or_macro(p, true, items::ItemFlavor::Mod) | 113 | items::item_or_macro(p, true) |
114 | } | 114 | } |
115 | 115 | ||
116 | pub(crate) fn macro_items(p: &mut Parser) { | 116 | pub(crate) fn macro_items(p: &mut Parser) { |
diff --git a/crates/ra_parser/src/grammar/expressions.rs b/crates/ra_parser/src/grammar/expressions.rs index 51eaf7af6..3291e3f14 100644 --- a/crates/ra_parser/src/grammar/expressions.rs +++ b/crates/ra_parser/src/grammar/expressions.rs | |||
@@ -73,7 +73,7 @@ pub(super) fn stmt(p: &mut Parser, with_semi: StmtWithSemi) { | |||
73 | 73 | ||
74 | // test block_items | 74 | // test block_items |
75 | // fn a() { fn b() {} } | 75 | // fn a() { fn b() {} } |
76 | let m = match items::maybe_item(p, m, items::ItemFlavor::Mod) { | 76 | let m = match items::maybe_item(p, m) { |
77 | Ok(()) => return, | 77 | Ok(()) => return, |
78 | Err(m) => m, | 78 | Err(m) => m, |
79 | }; | 79 | }; |
diff --git a/crates/ra_parser/src/grammar/items.rs b/crates/ra_parser/src/grammar/items.rs index cca524cea..9b7623434 100644 --- a/crates/ra_parser/src/grammar/items.rs +++ b/crates/ra_parser/src/grammar/items.rs | |||
@@ -22,24 +22,19 @@ use super::*; | |||
22 | pub(super) fn mod_contents(p: &mut Parser, stop_on_r_curly: bool) { | 22 | pub(super) fn mod_contents(p: &mut Parser, stop_on_r_curly: bool) { |
23 | attributes::inner_attributes(p); | 23 | attributes::inner_attributes(p); |
24 | while !(stop_on_r_curly && p.at(T!['}']) || p.at(EOF)) { | 24 | while !(stop_on_r_curly && p.at(T!['}']) || p.at(EOF)) { |
25 | item_or_macro(p, stop_on_r_curly, ItemFlavor::Mod) | 25 | item_or_macro(p, stop_on_r_curly) |
26 | } | 26 | } |
27 | } | 27 | } |
28 | 28 | ||
29 | pub(super) enum ItemFlavor { | ||
30 | Mod, | ||
31 | Trait, | ||
32 | } | ||
33 | |||
34 | pub(super) const ITEM_RECOVERY_SET: TokenSet = token_set![ | 29 | pub(super) const ITEM_RECOVERY_SET: TokenSet = token_set![ |
35 | FN_KW, STRUCT_KW, ENUM_KW, IMPL_KW, TRAIT_KW, CONST_KW, STATIC_KW, LET_KW, MOD_KW, PUB_KW, | 30 | FN_KW, STRUCT_KW, ENUM_KW, IMPL_KW, TRAIT_KW, CONST_KW, STATIC_KW, LET_KW, MOD_KW, PUB_KW, |
36 | CRATE_KW, USE_KW, MACRO_KW | 31 | CRATE_KW, USE_KW, MACRO_KW |
37 | ]; | 32 | ]; |
38 | 33 | ||
39 | pub(super) fn item_or_macro(p: &mut Parser, stop_on_r_curly: bool, flavor: ItemFlavor) { | 34 | pub(super) fn item_or_macro(p: &mut Parser, stop_on_r_curly: bool) { |
40 | let m = p.start(); | 35 | let m = p.start(); |
41 | attributes::outer_attributes(p); | 36 | attributes::outer_attributes(p); |
42 | let m = match maybe_item(p, m, flavor) { | 37 | let m = match maybe_item(p, m) { |
43 | Ok(()) => { | 38 | Ok(()) => { |
44 | if p.at(T![;]) { | 39 | if p.at(T![;]) { |
45 | p.err_and_bump( | 40 | p.err_and_bump( |
@@ -76,7 +71,7 @@ pub(super) fn item_or_macro(p: &mut Parser, stop_on_r_curly: bool, flavor: ItemF | |||
76 | } | 71 | } |
77 | } | 72 | } |
78 | 73 | ||
79 | pub(super) fn maybe_item(p: &mut Parser, m: Marker, flavor: ItemFlavor) -> Result<(), Marker> { | 74 | pub(super) fn maybe_item(p: &mut Parser, m: Marker) -> Result<(), Marker> { |
80 | // test_err pub_expr | 75 | // test_err pub_expr |
81 | // fn foo() { pub 92; } | 76 | // fn foo() { pub 92; } |
82 | let has_visibility = opt_visibility(p); | 77 | let has_visibility = opt_visibility(p); |
@@ -114,38 +109,29 @@ pub(super) fn maybe_item(p: &mut Parser, m: Marker, flavor: ItemFlavor) -> Resul | |||
114 | has_mods = true; | 109 | has_mods = true; |
115 | } | 110 | } |
116 | 111 | ||
117 | if p.at(IDENT) | 112 | // test default_item |
118 | && p.at_contextual_kw("default") | 113 | // default impl T for Foo {} |
119 | && (match p.nth(1) { | 114 | if p.at(IDENT) && p.at_contextual_kw("default") { |
120 | T![impl] => true, | 115 | match p.nth(1) { |
116 | T![fn] | T![type] | T![const] | T![impl] => { | ||
117 | p.bump_remap(T![default]); | ||
118 | has_mods = true; | ||
119 | } | ||
121 | T![unsafe] => { | 120 | T![unsafe] => { |
122 | // test default_unsafe_impl | 121 | // test default_unsafe_item |
123 | // default unsafe impl Foo {} | 122 | // default unsafe impl T for Foo { |
124 | |||
125 | // test default_unsafe_fn | ||
126 | // impl T for Foo { | ||
127 | // default unsafe fn foo() {} | 123 | // default unsafe fn foo() {} |
128 | // } | 124 | // } |
129 | if p.nth(2) == T![impl] || p.nth(2) == T![fn] { | 125 | if matches!(p.nth(2), T![impl] | T![fn]) { |
130 | p.bump_remap(T![default]); | 126 | p.bump_remap(T![default]); |
131 | p.bump(T![unsafe]); | 127 | p.bump(T![unsafe]); |
132 | has_mods = true; | 128 | has_mods = true; |
133 | } | 129 | } |
134 | false | ||
135 | } | ||
136 | T![fn] | T![type] | T![const] => { | ||
137 | if let ItemFlavor::Mod = flavor { | ||
138 | true | ||
139 | } else { | ||
140 | false | ||
141 | } | ||
142 | } | 130 | } |
143 | _ => false, | 131 | _ => (), |
144 | }) | 132 | } |
145 | { | ||
146 | p.bump_remap(T![default]); | ||
147 | has_mods = true; | ||
148 | } | 133 | } |
134 | |||
149 | if p.at(IDENT) && p.at_contextual_kw("existential") && p.nth(1) == T![type] { | 135 | if p.at(IDENT) && p.at_contextual_kw("existential") && p.nth(1) == T![type] { |
150 | p.bump_remap(T![existential]); | 136 | p.bump_remap(T![existential]); |
151 | has_mods = true; | 137 | has_mods = true; |
diff --git a/crates/ra_parser/src/grammar/items/traits.rs b/crates/ra_parser/src/grammar/items/traits.rs index ef9c8ff5b..751ce65f2 100644 --- a/crates/ra_parser/src/grammar/items/traits.rs +++ b/crates/ra_parser/src/grammar/items/traits.rs | |||
@@ -47,7 +47,7 @@ pub(crate) fn trait_item_list(p: &mut Parser) { | |||
47 | error_block(p, "expected an item"); | 47 | error_block(p, "expected an item"); |
48 | continue; | 48 | continue; |
49 | } | 49 | } |
50 | item_or_macro(p, true, ItemFlavor::Trait); | 50 | item_or_macro(p, true); |
51 | } | 51 | } |
52 | p.expect(T!['}']); | 52 | p.expect(T!['}']); |
53 | m.complete(p, ASSOC_ITEM_LIST); | 53 | m.complete(p, ASSOC_ITEM_LIST); |
@@ -104,7 +104,7 @@ pub(crate) fn impl_item_list(p: &mut Parser) { | |||
104 | error_block(p, "expected an item"); | 104 | error_block(p, "expected an item"); |
105 | continue; | 105 | continue; |
106 | } | 106 | } |
107 | item_or_macro(p, true, ItemFlavor::Mod); | 107 | item_or_macro(p, true); |
108 | } | 108 | } |
109 | p.expect(T!['}']); | 109 | p.expect(T!['}']); |
110 | m.complete(p, ASSOC_ITEM_LIST); | 110 | m.complete(p, ASSOC_ITEM_LIST); |
diff --git a/crates/ra_syntax/test_data/parser/err/0043_default_const.rast b/crates/ra_syntax/test_data/parser/err/0043_default_const.rast deleted file mode 100644 index 51ad2a846..000000000 --- a/crates/ra_syntax/test_data/parser/err/0043_default_const.rast +++ /dev/null | |||
@@ -1,40 +0,0 @@ | |||
1 | SOURCE_FILE@0..39 | ||
2 | TRAIT@0..38 | ||
3 | TRAIT_KW@0..5 "trait" | ||
4 | WHITESPACE@5..6 " " | ||
5 | NAME@6..7 | ||
6 | IDENT@6..7 "T" | ||
7 | WHITESPACE@7..8 " " | ||
8 | ASSOC_ITEM_LIST@8..38 | ||
9 | L_CURLY@8..9 "{" | ||
10 | WHITESPACE@9..12 "\n " | ||
11 | MACRO_CALL@12..19 | ||
12 | PATH@12..19 | ||
13 | PATH_SEGMENT@12..19 | ||
14 | NAME_REF@12..19 | ||
15 | IDENT@12..19 "default" | ||
16 | WHITESPACE@19..20 " " | ||
17 | CONST@20..36 | ||
18 | CONST_KW@20..25 "const" | ||
19 | WHITESPACE@25..26 " " | ||
20 | NAME@26..27 | ||
21 | IDENT@26..27 "f" | ||
22 | COLON@27..28 ":" | ||
23 | WHITESPACE@28..29 " " | ||
24 | PATH_TYPE@29..31 | ||
25 | PATH@29..31 | ||
26 | PATH_SEGMENT@29..31 | ||
27 | NAME_REF@29..31 | ||
28 | IDENT@29..31 "u8" | ||
29 | WHITESPACE@31..32 " " | ||
30 | EQ@32..33 "=" | ||
31 | WHITESPACE@33..34 " " | ||
32 | LITERAL@34..35 | ||
33 | INT_NUMBER@34..35 "0" | ||
34 | SEMICOLON@35..36 ";" | ||
35 | WHITESPACE@36..37 "\n" | ||
36 | R_CURLY@37..38 "}" | ||
37 | WHITESPACE@38..39 "\n" | ||
38 | error 19..19: expected BANG | ||
39 | error 19..19: expected `{`, `[`, `(` | ||
40 | error 19..19: expected SEMICOLON | ||
diff --git a/crates/ra_syntax/test_data/parser/err/0043_default_const.rs b/crates/ra_syntax/test_data/parser/err/0043_default_const.rs deleted file mode 100644 index 80f15474a..000000000 --- a/crates/ra_syntax/test_data/parser/err/0043_default_const.rs +++ /dev/null | |||
@@ -1,3 +0,0 @@ | |||
1 | trait T { | ||
2 | default const f: u8 = 0; | ||
3 | } | ||
diff --git a/crates/ra_syntax/test_data/parser/inline/err/0014_default_fn_type.rast b/crates/ra_syntax/test_data/parser/inline/err/0014_default_fn_type.rast deleted file mode 100644 index acd72094b..000000000 --- a/crates/ra_syntax/test_data/parser/inline/err/0014_default_fn_type.rast +++ /dev/null | |||
@@ -1,58 +0,0 @@ | |||
1 | SOURCE_FILE@0..62 | ||
2 | TRAIT@0..61 | ||
3 | TRAIT_KW@0..5 "trait" | ||
4 | WHITESPACE@5..6 " " | ||
5 | NAME@6..7 | ||
6 | IDENT@6..7 "T" | ||
7 | WHITESPACE@7..8 " " | ||
8 | ASSOC_ITEM_LIST@8..61 | ||
9 | L_CURLY@8..9 "{" | ||
10 | WHITESPACE@9..14 "\n " | ||
11 | MACRO_CALL@14..21 | ||
12 | PATH@14..21 | ||
13 | PATH_SEGMENT@14..21 | ||
14 | NAME_REF@14..21 | ||
15 | IDENT@14..21 "default" | ||
16 | WHITESPACE@21..22 " " | ||
17 | TYPE_ALIAS@22..35 | ||
18 | TYPE_KW@22..26 "type" | ||
19 | WHITESPACE@26..27 " " | ||
20 | NAME@27..28 | ||
21 | IDENT@27..28 "T" | ||
22 | WHITESPACE@28..29 " " | ||
23 | EQ@29..30 "=" | ||
24 | WHITESPACE@30..31 " " | ||
25 | PATH_TYPE@31..34 | ||
26 | PATH@31..34 | ||
27 | PATH_SEGMENT@31..34 | ||
28 | NAME_REF@31..34 | ||
29 | IDENT@31..34 "Bar" | ||
30 | SEMICOLON@34..35 ";" | ||
31 | WHITESPACE@35..40 "\n " | ||
32 | MACRO_CALL@40..47 | ||
33 | PATH@40..47 | ||
34 | PATH_SEGMENT@40..47 | ||
35 | NAME_REF@40..47 | ||
36 | IDENT@40..47 "default" | ||
37 | WHITESPACE@47..48 " " | ||
38 | FN@48..59 | ||
39 | FN_KW@48..50 "fn" | ||
40 | WHITESPACE@50..51 " " | ||
41 | NAME@51..54 | ||
42 | IDENT@51..54 "foo" | ||
43 | PARAM_LIST@54..56 | ||
44 | L_PAREN@54..55 "(" | ||
45 | R_PAREN@55..56 ")" | ||
46 | WHITESPACE@56..57 " " | ||
47 | BLOCK_EXPR@57..59 | ||
48 | L_CURLY@57..58 "{" | ||
49 | R_CURLY@58..59 "}" | ||
50 | WHITESPACE@59..60 "\n" | ||
51 | R_CURLY@60..61 "}" | ||
52 | WHITESPACE@61..62 "\n" | ||
53 | error 21..21: expected BANG | ||
54 | error 21..21: expected `{`, `[`, `(` | ||
55 | error 21..21: expected SEMICOLON | ||
56 | error 47..47: expected BANG | ||
57 | error 47..47: expected `{`, `[`, `(` | ||
58 | error 47..47: expected SEMICOLON | ||
diff --git a/crates/ra_syntax/test_data/parser/inline/err/0014_default_fn_type.rs b/crates/ra_syntax/test_data/parser/inline/err/0014_default_fn_type.rs deleted file mode 100644 index 15ba8f4a8..000000000 --- a/crates/ra_syntax/test_data/parser/inline/err/0014_default_fn_type.rs +++ /dev/null | |||
@@ -1,4 +0,0 @@ | |||
1 | trait T { | ||
2 | default type T = Bar; | ||
3 | default fn foo() {} | ||
4 | } | ||
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0132_default_fn_type.rast b/crates/ra_syntax/test_data/parser/inline/ok/0132_default_fn_type.rast deleted file mode 100644 index b8d26a53a..000000000 --- a/crates/ra_syntax/test_data/parser/inline/ok/0132_default_fn_type.rast +++ /dev/null | |||
@@ -1,55 +0,0 @@ | |||
1 | SOURCE_FILE@0..69 | ||
2 | IMPL@0..68 | ||
3 | IMPL_KW@0..4 "impl" | ||
4 | WHITESPACE@4..5 " " | ||
5 | PATH_TYPE@5..6 | ||
6 | PATH@5..6 | ||
7 | PATH_SEGMENT@5..6 | ||
8 | NAME_REF@5..6 | ||
9 | IDENT@5..6 "T" | ||
10 | WHITESPACE@6..7 " " | ||
11 | FOR_KW@7..10 "for" | ||
12 | WHITESPACE@10..11 " " | ||
13 | PATH_TYPE@11..14 | ||
14 | PATH@11..14 | ||
15 | PATH_SEGMENT@11..14 | ||
16 | NAME_REF@11..14 | ||
17 | IDENT@11..14 "Foo" | ||
18 | WHITESPACE@14..15 " " | ||
19 | ASSOC_ITEM_LIST@15..68 | ||
20 | L_CURLY@15..16 "{" | ||
21 | WHITESPACE@16..21 "\n " | ||
22 | TYPE_ALIAS@21..42 | ||
23 | DEFAULT_KW@21..28 "default" | ||
24 | WHITESPACE@28..29 " " | ||
25 | TYPE_KW@29..33 "type" | ||
26 | WHITESPACE@33..34 " " | ||
27 | NAME@34..35 | ||
28 | IDENT@34..35 "T" | ||
29 | WHITESPACE@35..36 " " | ||
30 | EQ@36..37 "=" | ||
31 | WHITESPACE@37..38 " " | ||
32 | PATH_TYPE@38..41 | ||
33 | PATH@38..41 | ||
34 | PATH_SEGMENT@38..41 | ||
35 | NAME_REF@38..41 | ||
36 | IDENT@38..41 "Bar" | ||
37 | SEMICOLON@41..42 ";" | ||
38 | WHITESPACE@42..47 "\n " | ||
39 | FN@47..66 | ||
40 | DEFAULT_KW@47..54 "default" | ||
41 | WHITESPACE@54..55 " " | ||
42 | FN_KW@55..57 "fn" | ||
43 | WHITESPACE@57..58 " " | ||
44 | NAME@58..61 | ||
45 | IDENT@58..61 "foo" | ||
46 | PARAM_LIST@61..63 | ||
47 | L_PAREN@61..62 "(" | ||
48 | R_PAREN@62..63 ")" | ||
49 | WHITESPACE@63..64 " " | ||
50 | BLOCK_EXPR@64..66 | ||
51 | L_CURLY@64..65 "{" | ||
52 | R_CURLY@65..66 "}" | ||
53 | WHITESPACE@66..67 "\n" | ||
54 | R_CURLY@67..68 "}" | ||
55 | WHITESPACE@68..69 "\n" | ||
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0132_default_fn_type.rs b/crates/ra_syntax/test_data/parser/inline/ok/0132_default_fn_type.rs deleted file mode 100644 index 8f5d61113..000000000 --- a/crates/ra_syntax/test_data/parser/inline/ok/0132_default_fn_type.rs +++ /dev/null | |||
@@ -1,4 +0,0 @@ | |||
1 | impl T for Foo { | ||
2 | default type T = Bar; | ||
3 | default fn foo() {} | ||
4 | } | ||
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_fn.rast b/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_fn.rast deleted file mode 100644 index 1269621dc..000000000 --- a/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_fn.rast +++ /dev/null | |||
@@ -1,40 +0,0 @@ | |||
1 | SOURCE_FILE@0..50 | ||
2 | IMPL@0..49 | ||
3 | IMPL_KW@0..4 "impl" | ||
4 | WHITESPACE@4..5 " " | ||
5 | PATH_TYPE@5..6 | ||
6 | PATH@5..6 | ||
7 | PATH_SEGMENT@5..6 | ||
8 | NAME_REF@5..6 | ||
9 | IDENT@5..6 "T" | ||
10 | WHITESPACE@6..7 " " | ||
11 | FOR_KW@7..10 "for" | ||
12 | WHITESPACE@10..11 " " | ||
13 | PATH_TYPE@11..14 | ||
14 | PATH@11..14 | ||
15 | PATH_SEGMENT@11..14 | ||
16 | NAME_REF@11..14 | ||
17 | IDENT@11..14 "Foo" | ||
18 | WHITESPACE@14..15 " " | ||
19 | ASSOC_ITEM_LIST@15..49 | ||
20 | L_CURLY@15..16 "{" | ||
21 | WHITESPACE@16..21 "\n " | ||
22 | FN@21..47 | ||
23 | DEFAULT_KW@21..28 "default" | ||
24 | WHITESPACE@28..29 " " | ||
25 | UNSAFE_KW@29..35 "unsafe" | ||
26 | WHITESPACE@35..36 " " | ||
27 | FN_KW@36..38 "fn" | ||
28 | WHITESPACE@38..39 " " | ||
29 | NAME@39..42 | ||
30 | IDENT@39..42 "foo" | ||
31 | PARAM_LIST@42..44 | ||
32 | L_PAREN@42..43 "(" | ||
33 | R_PAREN@43..44 ")" | ||
34 | WHITESPACE@44..45 " " | ||
35 | BLOCK_EXPR@45..47 | ||
36 | L_CURLY@45..46 "{" | ||
37 | R_CURLY@46..47 "}" | ||
38 | WHITESPACE@47..48 "\n" | ||
39 | R_CURLY@48..49 "}" | ||
40 | WHITESPACE@49..50 "\n" | ||
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_impl.rast b/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_impl.rast deleted file mode 100644 index 6bfe925af..000000000 --- a/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_impl.rast +++ /dev/null | |||
@@ -1,18 +0,0 @@ | |||
1 | SOURCE_FILE@0..27 | ||
2 | IMPL@0..26 | ||
3 | DEFAULT_KW@0..7 "default" | ||
4 | WHITESPACE@7..8 " " | ||
5 | UNSAFE_KW@8..14 "unsafe" | ||
6 | WHITESPACE@14..15 " " | ||
7 | IMPL_KW@15..19 "impl" | ||
8 | WHITESPACE@19..20 " " | ||
9 | PATH_TYPE@20..23 | ||
10 | PATH@20..23 | ||
11 | PATH_SEGMENT@20..23 | ||
12 | NAME_REF@20..23 | ||
13 | IDENT@20..23 "Foo" | ||
14 | WHITESPACE@23..24 " " | ||
15 | ASSOC_ITEM_LIST@24..26 | ||
16 | L_CURLY@24..25 "{" | ||
17 | R_CURLY@25..26 "}" | ||
18 | WHITESPACE@26..27 "\n" | ||
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_impl.rs b/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_impl.rs deleted file mode 100644 index ba0998ff4..000000000 --- a/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_impl.rs +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | default unsafe impl Foo {} | ||
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_item.rast b/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_item.rast new file mode 100644 index 000000000..f2e201460 --- /dev/null +++ b/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_item.rast | |||
@@ -0,0 +1,44 @@ | |||
1 | SOURCE_FILE@0..65 | ||
2 | IMPL@0..64 | ||
3 | DEFAULT_KW@0..7 "default" | ||
4 | WHITESPACE@7..8 " " | ||
5 | UNSAFE_KW@8..14 "unsafe" | ||
6 | WHITESPACE@14..15 " " | ||
7 | IMPL_KW@15..19 "impl" | ||
8 | WHITESPACE@19..20 " " | ||
9 | PATH_TYPE@20..21 | ||
10 | PATH@20..21 | ||
11 | PATH_SEGMENT@20..21 | ||
12 | NAME_REF@20..21 | ||
13 | IDENT@20..21 "T" | ||
14 | WHITESPACE@21..22 " " | ||
15 | FOR_KW@22..25 "for" | ||
16 | WHITESPACE@25..26 " " | ||
17 | PATH_TYPE@26..29 | ||
18 | PATH@26..29 | ||
19 | PATH_SEGMENT@26..29 | ||
20 | NAME_REF@26..29 | ||
21 | IDENT@26..29 "Foo" | ||
22 | WHITESPACE@29..30 " " | ||
23 | ASSOC_ITEM_LIST@30..64 | ||
24 | L_CURLY@30..31 "{" | ||
25 | WHITESPACE@31..36 "\n " | ||
26 | FN@36..62 | ||
27 | DEFAULT_KW@36..43 "default" | ||
28 | WHITESPACE@43..44 " " | ||
29 | UNSAFE_KW@44..50 "unsafe" | ||
30 | WHITESPACE@50..51 " " | ||
31 | FN_KW@51..53 "fn" | ||
32 | WHITESPACE@53..54 " " | ||
33 | NAME@54..57 | ||
34 | IDENT@54..57 "foo" | ||
35 | PARAM_LIST@57..59 | ||
36 | L_PAREN@57..58 "(" | ||
37 | R_PAREN@58..59 ")" | ||
38 | WHITESPACE@59..60 " " | ||
39 | BLOCK_EXPR@60..62 | ||
40 | L_CURLY@60..61 "{" | ||
41 | R_CURLY@61..62 "}" | ||
42 | WHITESPACE@62..63 "\n" | ||
43 | R_CURLY@63..64 "}" | ||
44 | WHITESPACE@64..65 "\n" | ||
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_fn.rs b/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_item.rs index 12926cd8a..96340f84a 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_fn.rs +++ b/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_item.rs | |||
@@ -1,3 +1,3 @@ | |||
1 | impl T for Foo { | 1 | default unsafe impl T for Foo { |
2 | default unsafe fn foo() {} | 2 | default unsafe fn foo() {} |
3 | } | 3 | } |
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0164_default_item.rast b/crates/ra_syntax/test_data/parser/inline/ok/0164_default_item.rast new file mode 100644 index 000000000..9282772f3 --- /dev/null +++ b/crates/ra_syntax/test_data/parser/inline/ok/0164_default_item.rast | |||
@@ -0,0 +1,24 @@ | |||
1 | SOURCE_FILE@0..26 | ||
2 | IMPL@0..25 | ||
3 | DEFAULT_KW@0..7 "default" | ||
4 | WHITESPACE@7..8 " " | ||
5 | IMPL_KW@8..12 "impl" | ||
6 | WHITESPACE@12..13 " " | ||
7 | PATH_TYPE@13..14 | ||
8 | PATH@13..14 | ||
9 | PATH_SEGMENT@13..14 | ||
10 | NAME_REF@13..14 | ||
11 | IDENT@13..14 "T" | ||
12 | WHITESPACE@14..15 " " | ||
13 | FOR_KW@15..18 "for" | ||
14 | WHITESPACE@18..19 " " | ||
15 | PATH_TYPE@19..22 | ||
16 | PATH@19..22 | ||
17 | PATH_SEGMENT@19..22 | ||
18 | NAME_REF@19..22 | ||
19 | IDENT@19..22 "Foo" | ||
20 | WHITESPACE@22..23 " " | ||
21 | ASSOC_ITEM_LIST@23..25 | ||
22 | L_CURLY@23..24 "{" | ||
23 | R_CURLY@24..25 "}" | ||
24 | WHITESPACE@25..26 "\n" | ||
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0164_default_item.rs b/crates/ra_syntax/test_data/parser/inline/ok/0164_default_item.rs new file mode 100644 index 000000000..a6836cbd5 --- /dev/null +++ b/crates/ra_syntax/test_data/parser/inline/ok/0164_default_item.rs | |||
@@ -0,0 +1 @@ | |||
default impl T for Foo {} | |||
diff --git a/crates/ra_syntax/test_data/parser/ok/0066_default_const.rast b/crates/ra_syntax/test_data/parser/ok/0066_default_const.rast deleted file mode 100644 index 6246a31a6..000000000 --- a/crates/ra_syntax/test_data/parser/ok/0066_default_const.rast +++ /dev/null | |||
@@ -1,44 +0,0 @@ | |||
1 | SOURCE_FILE@0..46 | ||
2 | IMPL@0..45 | ||
3 | IMPL_KW@0..4 "impl" | ||
4 | WHITESPACE@4..5 " " | ||
5 | PATH_TYPE@5..6 | ||
6 | PATH@5..6 | ||
7 | PATH_SEGMENT@5..6 | ||
8 | NAME_REF@5..6 | ||
9 | IDENT@5..6 "T" | ||
10 | WHITESPACE@6..7 " " | ||
11 | FOR_KW@7..10 "for" | ||
12 | WHITESPACE@10..11 " " | ||
13 | PATH_TYPE@11..14 | ||
14 | PATH@11..14 | ||
15 | PATH_SEGMENT@11..14 | ||
16 | NAME_REF@11..14 | ||
17 | IDENT@11..14 "Foo" | ||
18 | WHITESPACE@14..15 " " | ||
19 | ASSOC_ITEM_LIST@15..45 | ||
20 | L_CURLY@15..16 "{" | ||
21 | WHITESPACE@16..19 "\n " | ||
22 | CONST@19..43 | ||
23 | DEFAULT_KW@19..26 "default" | ||
24 | WHITESPACE@26..27 " " | ||
25 | CONST_KW@27..32 "const" | ||
26 | WHITESPACE@32..33 " " | ||
27 | NAME@33..34 | ||
28 | IDENT@33..34 "f" | ||
29 | COLON@34..35 ":" | ||
30 | WHITESPACE@35..36 " " | ||
31 | PATH_TYPE@36..38 | ||
32 | PATH@36..38 | ||
33 | PATH_SEGMENT@36..38 | ||
34 | NAME_REF@36..38 | ||
35 | IDENT@36..38 "u8" | ||
36 | WHITESPACE@38..39 " " | ||
37 | EQ@39..40 "=" | ||
38 | WHITESPACE@40..41 " " | ||
39 | LITERAL@41..42 | ||
40 | INT_NUMBER@41..42 "0" | ||
41 | SEMICOLON@42..43 ";" | ||
42 | WHITESPACE@43..44 "\n" | ||
43 | R_CURLY@44..45 "}" | ||
44 | WHITESPACE@45..46 "\n" | ||
diff --git a/crates/ra_syntax/test_data/parser/ok/0066_default_const.rs b/crates/ra_syntax/test_data/parser/ok/0066_default_const.rs deleted file mode 100644 index dfb3b92dc..000000000 --- a/crates/ra_syntax/test_data/parser/ok/0066_default_const.rs +++ /dev/null | |||
@@ -1,3 +0,0 @@ | |||
1 | impl T for Foo { | ||
2 | default const f: u8 = 0; | ||
3 | } | ||
diff --git a/crates/ra_syntax/test_data/parser/ok/0066_default_modifier.rast b/crates/ra_syntax/test_data/parser/ok/0066_default_modifier.rast new file mode 100644 index 000000000..e9b57ec3b --- /dev/null +++ b/crates/ra_syntax/test_data/parser/ok/0066_default_modifier.rast | |||
@@ -0,0 +1,218 @@ | |||
1 | SOURCE_FILE@0..294 | ||
2 | TRAIT@0..113 | ||
3 | TRAIT_KW@0..5 "trait" | ||
4 | WHITESPACE@5..6 " " | ||
5 | NAME@6..7 | ||
6 | IDENT@6..7 "T" | ||
7 | WHITESPACE@7..8 " " | ||
8 | ASSOC_ITEM_LIST@8..113 | ||
9 | L_CURLY@8..9 "{" | ||
10 | WHITESPACE@9..12 "\n " | ||
11 | TYPE_ALIAS@12..33 | ||
12 | DEFAULT_KW@12..19 "default" | ||
13 | WHITESPACE@19..20 " " | ||
14 | TYPE_KW@20..24 "type" | ||
15 | WHITESPACE@24..25 " " | ||
16 | NAME@25..26 | ||
17 | IDENT@25..26 "T" | ||
18 | WHITESPACE@26..27 " " | ||
19 | EQ@27..28 "=" | ||
20 | WHITESPACE@28..29 " " | ||
21 | PATH_TYPE@29..32 | ||
22 | PATH@29..32 | ||
23 | PATH_SEGMENT@29..32 | ||
24 | NAME_REF@29..32 | ||
25 | IDENT@29..32 "Bar" | ||
26 | SEMICOLON@32..33 ";" | ||
27 | WHITESPACE@33..36 "\n " | ||
28 | CONST@36..60 | ||
29 | DEFAULT_KW@36..43 "default" | ||
30 | WHITESPACE@43..44 " " | ||
31 | CONST_KW@44..49 "const" | ||
32 | WHITESPACE@49..50 " " | ||
33 | NAME@50..51 | ||
34 | IDENT@50..51 "f" | ||
35 | COLON@51..52 ":" | ||
36 | WHITESPACE@52..53 " " | ||
37 | PATH_TYPE@53..55 | ||
38 | PATH@53..55 | ||
39 | PATH_SEGMENT@53..55 | ||
40 | NAME_REF@53..55 | ||
41 | IDENT@53..55 "u8" | ||
42 | WHITESPACE@55..56 " " | ||
43 | EQ@56..57 "=" | ||
44 | WHITESPACE@57..58 " " | ||
45 | LITERAL@58..59 | ||
46 | INT_NUMBER@58..59 "0" | ||
47 | SEMICOLON@59..60 ";" | ||
48 | WHITESPACE@60..63 "\n " | ||
49 | FN@63..82 | ||
50 | DEFAULT_KW@63..70 "default" | ||
51 | WHITESPACE@70..71 " " | ||
52 | FN_KW@71..73 "fn" | ||
53 | WHITESPACE@73..74 " " | ||
54 | NAME@74..77 | ||
55 | IDENT@74..77 "foo" | ||
56 | PARAM_LIST@77..79 | ||
57 | L_PAREN@77..78 "(" | ||
58 | R_PAREN@78..79 ")" | ||
59 | WHITESPACE@79..80 " " | ||
60 | BLOCK_EXPR@80..82 | ||
61 | L_CURLY@80..81 "{" | ||
62 | R_CURLY@81..82 "}" | ||
63 | WHITESPACE@82..85 "\n " | ||
64 | FN@85..111 | ||
65 | DEFAULT_KW@85..92 "default" | ||
66 | WHITESPACE@92..93 " " | ||
67 | UNSAFE_KW@93..99 "unsafe" | ||
68 | WHITESPACE@99..100 " " | ||
69 | FN_KW@100..102 "fn" | ||
70 | WHITESPACE@102..103 " " | ||
71 | NAME@103..106 | ||
72 | IDENT@103..106 "bar" | ||
73 | PARAM_LIST@106..108 | ||
74 | L_PAREN@106..107 "(" | ||
75 | R_PAREN@107..108 ")" | ||
76 | WHITESPACE@108..109 " " | ||
77 | BLOCK_EXPR@109..111 | ||
78 | L_CURLY@109..110 "{" | ||
79 | R_CURLY@110..111 "}" | ||
80 | WHITESPACE@111..112 "\n" | ||
81 | R_CURLY@112..113 "}" | ||
82 | WHITESPACE@113..115 "\n\n" | ||
83 | IMPL@115..235 | ||
84 | IMPL_KW@115..119 "impl" | ||
85 | WHITESPACE@119..120 " " | ||
86 | PATH_TYPE@120..121 | ||
87 | PATH@120..121 | ||
88 | PATH_SEGMENT@120..121 | ||
89 | NAME_REF@120..121 | ||
90 | IDENT@120..121 "T" | ||
91 | WHITESPACE@121..122 " " | ||
92 | FOR_KW@122..125 "for" | ||
93 | WHITESPACE@125..126 " " | ||
94 | PATH_TYPE@126..129 | ||
95 | PATH@126..129 | ||
96 | PATH_SEGMENT@126..129 | ||
97 | NAME_REF@126..129 | ||
98 | IDENT@126..129 "Foo" | ||
99 | WHITESPACE@129..130 " " | ||
100 | ASSOC_ITEM_LIST@130..235 | ||
101 | L_CURLY@130..131 "{" | ||
102 | WHITESPACE@131..134 "\n " | ||
103 | TYPE_ALIAS@134..155 | ||
104 | DEFAULT_KW@134..141 "default" | ||
105 | WHITESPACE@141..142 " " | ||
106 | TYPE_KW@142..146 "type" | ||
107 | WHITESPACE@146..147 " " | ||
108 | NAME@147..148 | ||
109 | IDENT@147..148 "T" | ||
110 | WHITESPACE@148..149 " " | ||
111 | EQ@149..150 "=" | ||
112 | WHITESPACE@150..151 " " | ||
113 | PATH_TYPE@151..154 | ||
114 | PATH@151..154 | ||
115 | PATH_SEGMENT@151..154 | ||
116 | NAME_REF@151..154 | ||
117 | IDENT@151..154 "Bar" | ||
118 | SEMICOLON@154..155 ";" | ||
119 | WHITESPACE@155..158 "\n " | ||
120 | CONST@158..182 | ||
121 | DEFAULT_KW@158..165 "default" | ||
122 | WHITESPACE@165..166 " " | ||
123 | CONST_KW@166..171 "const" | ||
124 | WHITESPACE@171..172 " " | ||
125 | NAME@172..173 | ||
126 | IDENT@172..173 "f" | ||
127 | COLON@173..174 ":" | ||
128 | WHITESPACE@174..175 " " | ||
129 | PATH_TYPE@175..177 | ||
130 | PATH@175..177 | ||
131 | PATH_SEGMENT@175..177 | ||
132 | NAME_REF@175..177 | ||
133 | IDENT@175..177 "u8" | ||
134 | WHITESPACE@177..178 " " | ||
135 | EQ@178..179 "=" | ||
136 | WHITESPACE@179..180 " " | ||
137 | LITERAL@180..181 | ||
138 | INT_NUMBER@180..181 "0" | ||
139 | SEMICOLON@181..182 ";" | ||
140 | WHITESPACE@182..185 "\n " | ||
141 | FN@185..204 | ||
142 | DEFAULT_KW@185..192 "default" | ||
143 | WHITESPACE@192..193 " " | ||
144 | FN_KW@193..195 "fn" | ||
145 | WHITESPACE@195..196 " " | ||
146 | NAME@196..199 | ||
147 | IDENT@196..199 "foo" | ||
148 | PARAM_LIST@199..201 | ||
149 | L_PAREN@199..200 "(" | ||
150 | R_PAREN@200..201 ")" | ||
151 | WHITESPACE@201..202 " " | ||
152 | BLOCK_EXPR@202..204 | ||
153 | L_CURLY@202..203 "{" | ||
154 | R_CURLY@203..204 "}" | ||
155 | WHITESPACE@204..207 "\n " | ||
156 | FN@207..233 | ||
157 | DEFAULT_KW@207..214 "default" | ||
158 | WHITESPACE@214..215 " " | ||
159 | UNSAFE_KW@215..221 "unsafe" | ||
160 | WHITESPACE@221..222 " " | ||
161 | FN_KW@222..224 "fn" | ||
162 | WHITESPACE@224..225 " " | ||
163 | NAME@225..228 | ||
164 | IDENT@225..228 "bar" | ||
165 | PARAM_LIST@228..230 | ||
166 | L_PAREN@228..229 "(" | ||
167 | R_PAREN@229..230 ")" | ||
168 | WHITESPACE@230..231 " " | ||
169 | BLOCK_EXPR@231..233 | ||
170 | L_CURLY@231..232 "{" | ||
171 | R_CURLY@232..233 "}" | ||
172 | WHITESPACE@233..234 "\n" | ||
173 | R_CURLY@234..235 "}" | ||
174 | WHITESPACE@235..237 "\n\n" | ||
175 | IMPL@237..261 | ||
176 | DEFAULT_KW@237..244 "default" | ||
177 | WHITESPACE@244..245 " " | ||
178 | IMPL_KW@245..249 "impl" | ||
179 | WHITESPACE@249..250 " " | ||
180 | PATH_TYPE@250..251 | ||
181 | PATH@250..251 | ||
182 | PATH_SEGMENT@250..251 | ||
183 | NAME_REF@250..251 | ||
184 | IDENT@250..251 "T" | ||
185 | WHITESPACE@251..252 " " | ||
186 | FOR_KW@252..255 "for" | ||
187 | WHITESPACE@255..256 " " | ||
188 | TUPLE_TYPE@256..258 | ||
189 | L_PAREN@256..257 "(" | ||
190 | R_PAREN@257..258 ")" | ||
191 | WHITESPACE@258..259 " " | ||
192 | ASSOC_ITEM_LIST@259..261 | ||
193 | L_CURLY@259..260 "{" | ||
194 | R_CURLY@260..261 "}" | ||
195 | WHITESPACE@261..262 "\n" | ||
196 | IMPL@262..293 | ||
197 | DEFAULT_KW@262..269 "default" | ||
198 | WHITESPACE@269..270 " " | ||
199 | UNSAFE_KW@270..276 "unsafe" | ||
200 | WHITESPACE@276..277 " " | ||
201 | IMPL_KW@277..281 "impl" | ||
202 | WHITESPACE@281..282 " " | ||
203 | PATH_TYPE@282..283 | ||
204 | PATH@282..283 | ||
205 | PATH_SEGMENT@282..283 | ||
206 | NAME_REF@282..283 | ||
207 | IDENT@282..283 "T" | ||
208 | WHITESPACE@283..284 " " | ||
209 | FOR_KW@284..287 "for" | ||
210 | WHITESPACE@287..288 " " | ||
211 | TUPLE_TYPE@288..290 | ||
212 | L_PAREN@288..289 "(" | ||
213 | R_PAREN@289..290 ")" | ||
214 | WHITESPACE@290..291 " " | ||
215 | ASSOC_ITEM_LIST@291..293 | ||
216 | L_CURLY@291..292 "{" | ||
217 | R_CURLY@292..293 "}" | ||
218 | WHITESPACE@293..294 "\n" | ||
diff --git a/crates/ra_syntax/test_data/parser/ok/0066_default_modifier.rs b/crates/ra_syntax/test_data/parser/ok/0066_default_modifier.rs new file mode 100644 index 000000000..e443e3495 --- /dev/null +++ b/crates/ra_syntax/test_data/parser/ok/0066_default_modifier.rs | |||
@@ -0,0 +1,16 @@ | |||
1 | trait T { | ||
2 | default type T = Bar; | ||
3 | default const f: u8 = 0; | ||
4 | default fn foo() {} | ||
5 | default unsafe fn bar() {} | ||
6 | } | ||
7 | |||
8 | impl T for Foo { | ||
9 | default type T = Bar; | ||
10 | default const f: u8 = 0; | ||
11 | default fn foo() {} | ||
12 | default unsafe fn bar() {} | ||
13 | } | ||
14 | |||
15 | default impl T for () {} | ||
16 | default unsafe impl T for () {} | ||