From abe96a4765785382e366f4f01d06e86fa76bbca3 Mon Sep 17 00:00:00 2001 From: memoryruins Date: Thu, 28 Mar 2019 18:38:59 -0400 Subject: recognize async move --- crates/ra_parser/src/grammar/expressions/atom.rs | 4 ++-- crates/ra_parser/src/grammar/items.rs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'crates') diff --git a/crates/ra_parser/src/grammar/expressions/atom.rs b/crates/ra_parser/src/grammar/expressions/atom.rs index a23977bfb..8653d4055 100644 --- a/crates/ra_parser/src/grammar/expressions/atom.rs +++ b/crates/ra_parser/src/grammar/expressions/atom.rs @@ -92,10 +92,10 @@ pub(super) fn atom_expr(p: &mut Parser, r: Restrictions) -> Option<(CompletedMar } } } - - ASYNC_KW if la == L_CURLY => { + ASYNC_KW if la == L_CURLY || la == MOVE_KW => { let m = p.start(); p.bump(); + p.eat(MOVE_KW); block_expr(p, Some(m)) } MATCH_KW => match_expr(p), diff --git a/crates/ra_parser/src/grammar/items.rs b/crates/ra_parser/src/grammar/items.rs index c24e6d1e0..8d8828652 100644 --- a/crates/ra_parser/src/grammar/items.rs +++ b/crates/ra_parser/src/grammar/items.rs @@ -82,7 +82,7 @@ pub(super) fn maybe_item(p: &mut Parser, m: Marker, flavor: ItemFlavor) -> Resul // 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 { + if p.at(ASYNC_KW) && p.nth(1) != L_CURLY && p.nth(1) != MOVE_KW { p.eat(ASYNC_KW); has_mods = true; } -- cgit v1.2.3 From c7264b4f07604649a2b46db816c3a3bc2d5728a6 Mon Sep 17 00:00:00 2001 From: memoryruins Date: Thu, 28 Mar 2019 18:40:00 -0400 Subject: add test for async blocks --- .../tests/data/parser/ok/0049_async_block.rs | 5 ++++ .../tests/data/parser/ok/0049_async_block.txt | 35 ++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 crates/ra_syntax/tests/data/parser/ok/0049_async_block.rs create mode 100644 crates/ra_syntax/tests/data/parser/ok/0049_async_block.txt (limited to 'crates') diff --git a/crates/ra_syntax/tests/data/parser/ok/0049_async_block.rs b/crates/ra_syntax/tests/data/parser/ok/0049_async_block.rs new file mode 100644 index 000000000..4781b3225 --- /dev/null +++ b/crates/ra_syntax/tests/data/parser/ok/0049_async_block.rs @@ -0,0 +1,5 @@ +fn foo() { + async {}; + async move {}; +} + diff --git a/crates/ra_syntax/tests/data/parser/ok/0049_async_block.txt b/crates/ra_syntax/tests/data/parser/ok/0049_async_block.txt new file mode 100644 index 000000000..6212e1130 --- /dev/null +++ b/crates/ra_syntax/tests/data/parser/ok/0049_async_block.txt @@ -0,0 +1,35 @@ +SOURCE_FILE@[0; 47) + FN_DEF@[0; 45) + FN_KW@[0; 2) + WHITESPACE@[2; 3) + NAME@[3; 6) + IDENT@[3; 6) "foo" + PARAM_LIST@[6; 8) + L_PAREN@[6; 7) + R_PAREN@[7; 8) + WHITESPACE@[8; 9) + BLOCK@[9; 45) + L_CURLY@[9; 10) + WHITESPACE@[10; 15) + EXPR_STMT@[15; 24) + BLOCK_EXPR@[15; 23) + ASYNC_KW@[15; 20) + WHITESPACE@[20; 21) + BLOCK@[21; 23) + L_CURLY@[21; 22) + R_CURLY@[22; 23) + SEMI@[23; 24) + WHITESPACE@[24; 29) + EXPR_STMT@[29; 43) + BLOCK_EXPR@[29; 42) + ASYNC_KW@[29; 34) + WHITESPACE@[34; 35) + MOVE_KW@[35; 39) + WHITESPACE@[39; 40) + BLOCK@[40; 42) + L_CURLY@[40; 41) + R_CURLY@[41; 42) + SEMI@[42; 43) + WHITESPACE@[43; 44) + R_CURLY@[44; 45) + WHITESPACE@[45; 47) -- cgit v1.2.3