From ad72699553c39f159f25a6dc7ecd5df953817407 Mon Sep 17 00:00:00 2001 From: Caio Date: Sat, 9 Mar 2019 20:40:22 -0300 Subject: Add async keyword --- crates/ra_parser/src/grammar/expressions/atom.rs | 5 +++++ crates/ra_parser/src/grammar/items.rs | 10 +++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) (limited to 'crates/ra_parser/src/grammar') diff --git a/crates/ra_parser/src/grammar/expressions/atom.rs b/crates/ra_parser/src/grammar/expressions/atom.rs index 9f282c74d..53bb26c5f 100644 --- a/crates/ra_parser/src/grammar/expressions/atom.rs +++ b/crates/ra_parser/src/grammar/expressions/atom.rs @@ -93,6 +93,11 @@ pub(super) fn atom_expr(p: &mut Parser, r: Restrictions) -> Option<(CompletedMar } } + ASYNC_KW if la == L_CURLY => { + let m = p.start(); + p.bump(); + block_expr(p, Some(m)) + } MATCH_KW => match_expr(p), UNSAFE_KW if la == L_CURLY => { let m = p.start(); diff --git a/crates/ra_parser/src/grammar/items.rs b/crates/ra_parser/src/grammar/items.rs index ab9d2de90..91f9bfe8a 100644 --- a/crates/ra_parser/src/grammar/items.rs +++ b/crates/ra_parser/src/grammar/items.rs @@ -86,9 +86,14 @@ pub(super) fn maybe_item(p: &mut Parser, flavor: ItemFlavor) -> MaybeItem { } let mut has_mods = false; + // modifiers - has_mods |= p.eat(CONST_KW); + has_mods |= p.eat(CONST_KW); + if p.at(ASYNC_KW) && p.nth(1) != L_CURLY { + p.eat(ASYNC_KW); + has_mods = true; + } // test_err unsafe_block_in_mod // fn foo(){} unsafe { } fn bar(){} if p.at(UNSAFE_KW) && p.nth(1) != L_CURLY { @@ -110,6 +115,9 @@ pub(super) fn maybe_item(p: &mut Parser, flavor: ItemFlavor) -> MaybeItem { // items let kind = match p.current() { + // test async_fn + // async fn foo() {} + // test extern_fn // extern fn foo() {} -- cgit v1.2.3 From cc9721996c4680e257db76aafea12a9565196d92 Mon Sep 17 00:00:00 2001 From: Caio Date: Sun, 10 Mar 2019 14:35:25 -0300 Subject: Add test for async block --- crates/ra_parser/src/grammar/items.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'crates/ra_parser/src/grammar') diff --git a/crates/ra_parser/src/grammar/items.rs b/crates/ra_parser/src/grammar/items.rs index 91f9bfe8a..a057c8167 100644 --- a/crates/ra_parser/src/grammar/items.rs +++ b/crates/ra_parser/src/grammar/items.rs @@ -88,7 +88,8 @@ pub(super) fn maybe_item(p: &mut Parser, flavor: ItemFlavor) -> MaybeItem { let mut has_mods = false; // modifiers - + // test_err async_without_semicolon + // fn foo() { let _ = async {} } has_mods |= p.eat(CONST_KW); if p.at(ASYNC_KW) && p.nth(1) != L_CURLY { p.eat(ASYNC_KW); -- cgit v1.2.3