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>
This commit is contained in:
commit
e66c7b3a45
@ -118,7 +118,17 @@ pub(super) fn maybe_item(p: &mut Parser, m: Marker, flavor: ItemFlavor) -> Resul
|
||||
&& p.at_contextual_kw("default")
|
||||
&& (match p.nth(1) {
|
||||
T![impl] => true,
|
||||
T![fn] | T![type] => {
|
||||
T![unsafe] => {
|
||||
// test default_unsafe_impl
|
||||
// default unsafe impl Foo {}
|
||||
if p.nth(2) == T![impl] {
|
||||
p.bump_remap(T![default]);
|
||||
p.bump(T![unsafe]);
|
||||
has_mods = true;
|
||||
}
|
||||
false
|
||||
}
|
||||
T![fn] | T![type] | T![const] => {
|
||||
if let ItemFlavor::Mod = flavor {
|
||||
true
|
||||
} else {
|
||||
@ -198,6 +208,9 @@ pub(super) fn maybe_item(p: &mut Parser, m: Marker, flavor: ItemFlavor) -> Resul
|
||||
// default type T = Bar;
|
||||
// default fn foo() {}
|
||||
// }
|
||||
T![const] => {
|
||||
consts::const_def(p, m);
|
||||
}
|
||||
|
||||
// test unsafe_default_impl
|
||||
// unsafe default impl Foo {}
|
||||
|
@ -0,0 +1,40 @@
|
||||
SOURCE_FILE@0..39
|
||||
TRAIT_DEF@0..38
|
||||
TRAIT_KW@0..5 "trait"
|
||||
WHITESPACE@5..6 " "
|
||||
NAME@6..7
|
||||
IDENT@6..7 "T"
|
||||
WHITESPACE@7..8 " "
|
||||
ITEM_LIST@8..38
|
||||
L_CURLY@8..9 "{"
|
||||
WHITESPACE@9..12 "\n "
|
||||
MACRO_CALL@12..19
|
||||
PATH@12..19
|
||||
PATH_SEGMENT@12..19
|
||||
NAME_REF@12..19
|
||||
IDENT@12..19 "default"
|
||||
WHITESPACE@19..20 " "
|
||||
CONST_DEF@20..36
|
||||
CONST_KW@20..25 "const"
|
||||
WHITESPACE@25..26 " "
|
||||
NAME@26..27
|
||||
IDENT@26..27 "f"
|
||||
COLON@27..28 ":"
|
||||
WHITESPACE@28..29 " "
|
||||
PATH_TYPE@29..31
|
||||
PATH@29..31
|
||||
PATH_SEGMENT@29..31
|
||||
NAME_REF@29..31
|
||||
IDENT@29..31 "u8"
|
||||
WHITESPACE@31..32 " "
|
||||
EQ@32..33 "="
|
||||
WHITESPACE@33..34 " "
|
||||
LITERAL@34..35
|
||||
INT_NUMBER@34..35 "0"
|
||||
SEMICOLON@35..36 ";"
|
||||
WHITESPACE@36..37 "\n"
|
||||
R_CURLY@37..38 "}"
|
||||
WHITESPACE@38..39 "\n"
|
||||
error 19..19: expected BANG
|
||||
error 19..19: expected `{`, `[`, `(`
|
||||
error 19..19: expected SEMICOLON
|
@ -0,0 +1,3 @@
|
||||
trait T {
|
||||
default const f: u8 = 0;
|
||||
}
|
@ -17,23 +17,29 @@ SOURCE_FILE@0..50
|
||||
L_CURLY@22..23 "{"
|
||||
R_CURLY@23..24 "}"
|
||||
WHITESPACE@24..25 "\n"
|
||||
ERROR@25..31
|
||||
CONST_DEF@25..46
|
||||
UNSAFE_KW@25..31 "unsafe"
|
||||
WHITESPACE@31..32 " "
|
||||
FN_DEF@32..49
|
||||
WHITESPACE@31..32 " "
|
||||
CONST_KW@32..37 "const"
|
||||
WHITESPACE@37..38 " "
|
||||
FN_KW@38..40 "fn"
|
||||
ERROR@38..40
|
||||
FN_KW@38..40 "fn"
|
||||
WHITESPACE@40..41 " "
|
||||
NAME@41..44
|
||||
IDENT@41..44 "bar"
|
||||
PARAM_LIST@44..46
|
||||
L_PAREN@44..45 "("
|
||||
R_PAREN@45..46 ")"
|
||||
WHITESPACE@46..47 " "
|
||||
BLOCK_EXPR@47..49
|
||||
L_CURLY@47..48 "{"
|
||||
R_CURLY@48..49 "}"
|
||||
PATH_TYPE@41..46
|
||||
PATH@41..46
|
||||
PATH_SEGMENT@41..46
|
||||
NAME_REF@41..44
|
||||
IDENT@41..44 "bar"
|
||||
PARAM_LIST@44..46
|
||||
L_PAREN@44..45 "("
|
||||
R_PAREN@45..46 ")"
|
||||
WHITESPACE@46..47 " "
|
||||
ERROR@47..49
|
||||
L_CURLY@47..48 "{"
|
||||
R_CURLY@48..49 "}"
|
||||
WHITESPACE@49..50 "\n"
|
||||
error 6..6: expected existential, fn, trait or impl
|
||||
error 31..31: expected existential, fn, trait or impl
|
||||
error 38..38: expected a name
|
||||
error 40..40: expected COLON
|
||||
error 46..46: expected SEMICOLON
|
||||
error 47..47: expected an item
|
||||
|
@ -0,0 +1,18 @@
|
||||
SOURCE_FILE@0..27
|
||||
IMPL_DEF@0..26
|
||||
DEFAULT_KW@0..7 "default"
|
||||
WHITESPACE@7..8 " "
|
||||
UNSAFE_KW@8..14 "unsafe"
|
||||
WHITESPACE@14..15 " "
|
||||
IMPL_KW@15..19 "impl"
|
||||
WHITESPACE@19..20 " "
|
||||
PATH_TYPE@20..23
|
||||
PATH@20..23
|
||||
PATH_SEGMENT@20..23
|
||||
NAME_REF@20..23
|
||||
IDENT@20..23 "Foo"
|
||||
WHITESPACE@23..24 " "
|
||||
ITEM_LIST@24..26
|
||||
L_CURLY@24..25 "{"
|
||||
R_CURLY@25..26 "}"
|
||||
WHITESPACE@26..27 "\n"
|
@ -0,0 +1 @@
|
||||
default unsafe impl Foo {}
|
44
crates/ra_syntax/test_data/parser/ok/0066_default_const.rast
Normal file
44
crates/ra_syntax/test_data/parser/ok/0066_default_const.rast
Normal file
@ -0,0 +1,44 @@
|
||||
SOURCE_FILE@0..46
|
||||
IMPL_DEF@0..45
|
||||
IMPL_KW@0..4 "impl"
|
||||
WHITESPACE@4..5 " "
|
||||
PATH_TYPE@5..6
|
||||
PATH@5..6
|
||||
PATH_SEGMENT@5..6
|
||||
NAME_REF@5..6
|
||||
IDENT@5..6 "T"
|
||||
WHITESPACE@6..7 " "
|
||||
FOR_KW@7..10 "for"
|
||||
WHITESPACE@10..11 " "
|
||||
PATH_TYPE@11..14
|
||||
PATH@11..14
|
||||
PATH_SEGMENT@11..14
|
||||
NAME_REF@11..14
|
||||
IDENT@11..14 "Foo"
|
||||
WHITESPACE@14..15 " "
|
||||
ITEM_LIST@15..45
|
||||
L_CURLY@15..16 "{"
|
||||
WHITESPACE@16..19 "\n "
|
||||
CONST_DEF@19..43
|
||||
DEFAULT_KW@19..26 "default"
|
||||
WHITESPACE@26..27 " "
|
||||
CONST_KW@27..32 "const"
|
||||
WHITESPACE@32..33 " "
|
||||
NAME@33..34
|
||||
IDENT@33..34 "f"
|
||||
COLON@34..35 ":"
|
||||
WHITESPACE@35..36 " "
|
||||
PATH_TYPE@36..38
|
||||
PATH@36..38
|
||||
PATH_SEGMENT@36..38
|
||||
NAME_REF@36..38
|
||||
IDENT@36..38 "u8"
|
||||
WHITESPACE@38..39 " "
|
||||
EQ@39..40 "="
|
||||
WHITESPACE@40..41 " "
|
||||
LITERAL@41..42
|
||||
INT_NUMBER@41..42 "0"
|
||||
SEMICOLON@42..43 ";"
|
||||
WHITESPACE@43..44 "\n"
|
||||
R_CURLY@44..45 "}"
|
||||
WHITESPACE@45..46 "\n"
|
@ -0,0 +1,3 @@
|
||||
impl T for Foo {
|
||||
default const f: u8 = 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user