aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/ra_parser/src/grammar.rs2
-rw-r--r--crates/ra_parser/src/grammar/expressions.rs2
-rw-r--r--crates/ra_parser/src/grammar/items.rs50
-rw-r--r--crates/ra_parser/src/grammar/items/traits.rs4
-rw-r--r--crates/ra_syntax/test_data/parser/err/0043_default_const.rast40
-rw-r--r--crates/ra_syntax/test_data/parser/err/0043_default_const.rs3
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0014_default_fn_type.rast58
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0014_default_fn_type.rs4
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0132_default_fn_type.rast55
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0132_default_fn_type.rs4
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_fn.rast40
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_impl.rast18
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_impl.rs1
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_item.rast44
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_item.rs (renamed from crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_fn.rs)2
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0164_default_item.rast24
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0164_default_item.rs1
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0066_default_const.rast44
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0066_default_const.rs3
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0066_default_modifier.rast218
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0066_default_modifier.rs16
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::*;
22pub(super) fn mod_contents(p: &mut Parser, stop_on_r_curly: bool) { 22pub(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
29pub(super) enum ItemFlavor {
30 Mod,
31 Trait,
32}
33
34pub(super) const ITEM_RECOVERY_SET: TokenSet = token_set![ 29pub(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
39pub(super) fn item_or_macro(p: &mut Parser, stop_on_r_curly: bool, flavor: ItemFlavor) { 34pub(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
79pub(super) fn maybe_item(p: &mut Parser, m: Marker, flavor: ItemFlavor) -> Result<(), Marker> { 74pub(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 @@
1SOURCE_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"
38error 19..19: expected BANG
39error 19..19: expected `{`, `[`, `(`
40error 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 @@
1trait 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 @@
1SOURCE_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"
53error 21..21: expected BANG
54error 21..21: expected `{`, `[`, `(`
55error 21..21: expected SEMICOLON
56error 47..47: expected BANG
57error 47..47: expected `{`, `[`, `(`
58error 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 @@
1trait 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 @@
1SOURCE_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 @@
1impl 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 @@
1SOURCE_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 @@
1SOURCE_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 @@
1default 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 @@
1SOURCE_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 @@
1impl T for Foo { 1default 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 @@
1SOURCE_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 @@
1SOURCE_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 @@
1impl 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 @@
1SOURCE_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 @@
1trait T {
2 default type T = Bar;
3 default const f: u8 = 0;
4 default fn foo() {}
5 default unsafe fn bar() {}
6}
7
8impl 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
15default impl T for () {}
16default unsafe impl T for () {}