aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2020-06-04 18:51:03 +0100
committerGitHub <noreply@github.com>2020-06-04 18:51:03 +0100
commite66c7b3a453e7b7385f103ae7f1f3f7438bdb31b (patch)
tree4a71b164a5b2e97cf219d7cfcd926b9119b6f646
parentc19496f845a4adcd7e0f48f5dcb5b405bbc63dfc (diff)
parentc4fd46398132a409d7947141094d7301c0f0af73 (diff)
Merge #4737
4737: Parse default unsafe & default const r=matklad a=Avi-D-coder Closes: #4718 #4264 Co-authored-by: Avi Dessauer <avi.the.coder@gmail.com>
-rw-r--r--crates/ra_parser/src/grammar/items.rs15
-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/0010_wrong_order_fns.rast34
-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/ok/0066_default_const.rast44
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0066_default_const.rs3
8 files changed, 143 insertions, 15 deletions
diff --git a/crates/ra_parser/src/grammar/items.rs b/crates/ra_parser/src/grammar/items.rs
index 67a924de5..9c14b954a 100644
--- a/crates/ra_parser/src/grammar/items.rs
+++ b/crates/ra_parser/src/grammar/items.rs
@@ -118,7 +118,17 @@ pub(super) fn maybe_item(p: &mut Parser, m: Marker, flavor: ItemFlavor) -> Resul
118 && p.at_contextual_kw("default") 118 && p.at_contextual_kw("default")
119 && (match p.nth(1) { 119 && (match p.nth(1) {
120 T![impl] => true, 120 T![impl] => true,
121 T![fn] | T![type] => { 121 T![unsafe] => {
122 // test default_unsafe_impl
123 // default unsafe impl Foo {}
124 if p.nth(2) == T![impl] {
125 p.bump_remap(T![default]);
126 p.bump(T![unsafe]);
127 has_mods = true;
128 }
129 false
130 }
131 T![fn] | T![type] | T![const] => {
122 if let ItemFlavor::Mod = flavor { 132 if let ItemFlavor::Mod = flavor {
123 true 133 true
124 } else { 134 } else {
@@ -198,6 +208,9 @@ pub(super) fn maybe_item(p: &mut Parser, m: Marker, flavor: ItemFlavor) -> Resul
198 // default type T = Bar; 208 // default type T = Bar;
199 // default fn foo() {} 209 // default fn foo() {}
200 // } 210 // }
211 T![const] => {
212 consts::const_def(p, m);
213 }
201 214
202 // test unsafe_default_impl 215 // test unsafe_default_impl
203 // unsafe default impl Foo {} 216 // unsafe default impl Foo {}
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
new file mode 100644
index 000000000..8eb583ef8
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/err/0043_default_const.rast
@@ -0,0 +1,40 @@
1SOURCE_FILE@0..39
2 TRAIT_DEF@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 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_DEF@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
new file mode 100644
index 000000000..80f15474a
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/err/0043_default_const.rs
@@ -0,0 +1,3 @@
1trait T {
2 default const f: u8 = 0;
3}
diff --git a/crates/ra_syntax/test_data/parser/inline/err/0010_wrong_order_fns.rast b/crates/ra_syntax/test_data/parser/inline/err/0010_wrong_order_fns.rast
index 9be441110..53f7ebaf9 100644
--- a/crates/ra_syntax/test_data/parser/inline/err/0010_wrong_order_fns.rast
+++ b/crates/ra_syntax/test_data/parser/inline/err/0010_wrong_order_fns.rast
@@ -17,23 +17,29 @@ SOURCE_FILE@0..50
17 L_CURLY@22..23 "{" 17 L_CURLY@22..23 "{"
18 R_CURLY@23..24 "}" 18 R_CURLY@23..24 "}"
19 WHITESPACE@24..25 "\n" 19 WHITESPACE@24..25 "\n"
20 ERROR@25..31 20 CONST_DEF@25..46
21 UNSAFE_KW@25..31 "unsafe" 21 UNSAFE_KW@25..31 "unsafe"
22 WHITESPACE@31..32 " " 22 WHITESPACE@31..32 " "
23 FN_DEF@32..49
24 CONST_KW@32..37 "const" 23 CONST_KW@32..37 "const"
25 WHITESPACE@37..38 " " 24 WHITESPACE@37..38 " "
26 FN_KW@38..40 "fn" 25 ERROR@38..40
26 FN_KW@38..40 "fn"
27 WHITESPACE@40..41 " " 27 WHITESPACE@40..41 " "
28 NAME@41..44 28 PATH_TYPE@41..46
29 IDENT@41..44 "bar" 29 PATH@41..46
30 PARAM_LIST@44..46 30 PATH_SEGMENT@41..46
31 L_PAREN@44..45 "(" 31 NAME_REF@41..44
32 R_PAREN@45..46 ")" 32 IDENT@41..44 "bar"
33 WHITESPACE@46..47 " " 33 PARAM_LIST@44..46
34 BLOCK_EXPR@47..49 34 L_PAREN@44..45 "("
35 L_CURLY@47..48 "{" 35 R_PAREN@45..46 ")"
36 R_CURLY@48..49 "}" 36 WHITESPACE@46..47 " "
37 ERROR@47..49
38 L_CURLY@47..48 "{"
39 R_CURLY@48..49 "}"
37 WHITESPACE@49..50 "\n" 40 WHITESPACE@49..50 "\n"
38error 6..6: expected existential, fn, trait or impl 41error 6..6: expected existential, fn, trait or impl
39error 31..31: expected existential, fn, trait or impl 42error 38..38: expected a name
43error 40..40: expected COLON
44error 46..46: expected SEMICOLON
45error 47..47: expected an item
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
new file mode 100644
index 000000000..a9eda5668
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_impl.rast
@@ -0,0 +1,18 @@
1SOURCE_FILE@0..27
2 IMPL_DEF@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 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
new file mode 100644
index 000000000..ba0998ff4
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_impl.rs
@@ -0,0 +1 @@
default unsafe impl 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
new file mode 100644
index 000000000..dab0247ee
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/ok/0066_default_const.rast
@@ -0,0 +1,44 @@
1SOURCE_FILE@0..46
2 IMPL_DEF@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 ITEM_LIST@15..45
20 L_CURLY@15..16 "{"
21 WHITESPACE@16..19 "\n "
22 CONST_DEF@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
new file mode 100644
index 000000000..dfb3b92dc
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/ok/0066_default_const.rs
@@ -0,0 +1,3 @@
1impl T for Foo {
2 default const f: u8 = 0;
3}