Skip to content

Commit e38685c

Browse files
committed
Parse default unsafe fn
1 parent 3999bbb commit e38685c

File tree

3 files changed

+50
-1
lines changed

3 files changed

+50
-1
lines changed

crates/ra_parser/src/grammar/items.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,13 @@ pub(super) fn maybe_item(p: &mut Parser, m: Marker, flavor: ItemFlavor) -> Resul
121121
T![unsafe] => {
122122
// test default_unsafe_impl
123123
// default unsafe impl Foo {}
124-
if p.nth(2) == T![impl] {
124+
125+
// test default_unsafe_fn
126+
// impl T for Foo {
127+
// default unsafe fn foo() {}
128+
// }
129+
let sk = p.nth(2);
130+
if sk == T![impl] || sk == T![fn] {
125131
p.bump_remap(T![default]);
126132
p.bump(T![unsafe]);
127133
has_mods = true;
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
SOURCE_FILE@0..50
2+
IMPL_DEF@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+
ITEM_LIST@15..49
20+
L_CURLY@15..16 "{"
21+
WHITESPACE@16..21 "\n "
22+
FN_DEF@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"
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
impl T for Foo {
2+
default unsafe fn foo() {}
3+
}

0 commit comments

Comments
 (0)