From e89b97524a3940d7e19649ca76874aebd1d09e29 Mon Sep 17 00:00:00 2001 From: Andrey Tkachenko Date: Mon, 1 Apr 2019 14:58:36 +0400 Subject: Async block in argument position --- crates/ra_parser/src/grammar/expressions/atom.rs | 1 + .../data/parser/ok/0050_async_block_as_argument.rs | 5 ++ .../parser/ok/0050_async_block_as_argument.txt | 90 ++++++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 crates/ra_syntax/tests/data/parser/ok/0050_async_block_as_argument.rs create mode 100644 crates/ra_syntax/tests/data/parser/ok/0050_async_block_as_argument.txt diff --git a/crates/ra_parser/src/grammar/expressions/atom.rs b/crates/ra_parser/src/grammar/expressions/atom.rs index 8653d4055..b82fa17cb 100644 --- a/crates/ra_parser/src/grammar/expressions/atom.rs +++ b/crates/ra_parser/src/grammar/expressions/atom.rs @@ -51,6 +51,7 @@ pub(super) const ATOM_EXPR_FIRST: TokenSet = BREAK_KW, CONTINUE_KW, LIFETIME, + ASYNC_KW, ]); const EXPR_RECOVERY_SET: TokenSet = token_set![LET_KW]; diff --git a/crates/ra_syntax/tests/data/parser/ok/0050_async_block_as_argument.rs b/crates/ra_syntax/tests/data/parser/ok/0050_async_block_as_argument.rs new file mode 100644 index 000000000..ec4612cff --- /dev/null +++ b/crates/ra_syntax/tests/data/parser/ok/0050_async_block_as_argument.rs @@ -0,0 +1,5 @@ +fn foo(x: impl std::future::Future) {} + +fn main() { + foo(async move { 12 }) +} diff --git a/crates/ra_syntax/tests/data/parser/ok/0050_async_block_as_argument.txt b/crates/ra_syntax/tests/data/parser/ok/0050_async_block_as_argument.txt new file mode 100644 index 000000000..82f0f8142 --- /dev/null +++ b/crates/ra_syntax/tests/data/parser/ok/0050_async_block_as_argument.txt @@ -0,0 +1,90 @@ +SOURCE_FILE@[0; 95) + FN_DEF@[0; 52) + FN_KW@[0; 2) + WHITESPACE@[2; 3) + NAME@[3; 6) + IDENT@[3; 6) "foo" + PARAM_LIST@[6; 49) + L_PAREN@[6; 7) + PARAM@[7; 48) + BIND_PAT@[7; 8) + NAME@[7; 8) + IDENT@[7; 8) "x" + COLON@[8; 9) + WHITESPACE@[9; 10) + IMPL_TRAIT_TYPE@[10; 48) + IMPL_KW@[10; 14) + WHITESPACE@[14; 15) + TYPE_BOUND_LIST@[15; 48) + TYPE_BOUND@[15; 48) + PATH_TYPE@[15; 48) + PATH@[15; 48) + PATH@[15; 26) + PATH@[15; 18) + PATH_SEGMENT@[15; 18) + NAME_REF@[15; 18) + IDENT@[15; 18) "std" + COLONCOLON@[18; 20) + PATH_SEGMENT@[20; 26) + NAME_REF@[20; 26) + IDENT@[20; 26) "future" + COLONCOLON@[26; 28) + PATH_SEGMENT@[28; 48) + NAME_REF@[28; 34) + IDENT@[28; 34) "Future" + TYPE_ARG_LIST@[34; 48) + L_ANGLE@[34; 35) + ASSOC_TYPE_ARG@[35; 47) + NAME_REF@[35; 41) + IDENT@[35; 41) "Output" + WHITESPACE@[41; 42) + EQ@[42; 43) + WHITESPACE@[43; 44) + PATH_TYPE@[44; 47) + PATH@[44; 47) + PATH_SEGMENT@[44; 47) + NAME_REF@[44; 47) + IDENT@[44; 47) "i32" + R_ANGLE@[47; 48) + R_PAREN@[48; 49) + WHITESPACE@[49; 50) + BLOCK@[50; 52) + L_CURLY@[50; 51) + R_CURLY@[51; 52) + WHITESPACE@[52; 54) + FN_DEF@[54; 94) + FN_KW@[54; 56) + WHITESPACE@[56; 57) + NAME@[57; 61) + IDENT@[57; 61) "main" + PARAM_LIST@[61; 63) + L_PAREN@[61; 62) + R_PAREN@[62; 63) + WHITESPACE@[63; 64) + BLOCK@[64; 94) + L_CURLY@[64; 65) + WHITESPACE@[65; 70) + CALL_EXPR@[70; 92) + PATH_EXPR@[70; 73) + PATH@[70; 73) + PATH_SEGMENT@[70; 73) + NAME_REF@[70; 73) + IDENT@[70; 73) "foo" + ARG_LIST@[73; 92) + L_PAREN@[73; 74) + BLOCK_EXPR@[74; 91) + ASYNC_KW@[74; 79) + WHITESPACE@[79; 80) + MOVE_KW@[80; 84) + WHITESPACE@[84; 85) + BLOCK@[85; 91) + L_CURLY@[85; 86) + WHITESPACE@[86; 87) + LITERAL@[87; 89) + INT_NUMBER@[87; 89) "12" + WHITESPACE@[89; 90) + R_CURLY@[90; 91) + R_PAREN@[91; 92) + WHITESPACE@[92; 93) + R_CURLY@[93; 94) + WHITESPACE@[94; 95) -- cgit v1.2.3