From ffed132e52964f029a586a3efd4afc879ed39c59 Mon Sep 17 00:00:00 2001 From: pcpthm Date: Tue, 19 Mar 2019 17:24:02 +0900 Subject: Allow attributes on top level expression A top level expression is either - a expression statement or - the last expression in a block --- .../parser/inline/ok/0126_attr_on_expr_stmt.rs | 6 ++ .../parser/inline/ok/0126_attr_on_expr_stmt.txt | 88 ++++++++++++++++++++++ .../inline/ok/0127_attr_on_last_expr_in_block.rs | 4 + .../inline/ok/0127_attr_on_last_expr_in_block.txt | 54 +++++++++++++ 4 files changed, 152 insertions(+) create mode 100644 crates/ra_syntax/tests/data/parser/inline/ok/0126_attr_on_expr_stmt.rs create mode 100644 crates/ra_syntax/tests/data/parser/inline/ok/0126_attr_on_expr_stmt.txt create mode 100644 crates/ra_syntax/tests/data/parser/inline/ok/0127_attr_on_last_expr_in_block.rs create mode 100644 crates/ra_syntax/tests/data/parser/inline/ok/0127_attr_on_last_expr_in_block.txt (limited to 'crates/ra_syntax') diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0126_attr_on_expr_stmt.rs b/crates/ra_syntax/tests/data/parser/inline/ok/0126_attr_on_expr_stmt.rs new file mode 100644 index 000000000..b28c078f9 --- /dev/null +++ b/crates/ra_syntax/tests/data/parser/inline/ok/0126_attr_on_expr_stmt.rs @@ -0,0 +1,6 @@ +fn foo() { + #[A] foo(); + #[B] bar!{} + #[C] #[D] {} + #[D] return (); +} diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0126_attr_on_expr_stmt.txt b/crates/ra_syntax/tests/data/parser/inline/ok/0126_attr_on_expr_stmt.txt new file mode 100644 index 000000000..7cd525cc7 --- /dev/null +++ b/crates/ra_syntax/tests/data/parser/inline/ok/0126_attr_on_expr_stmt.txt @@ -0,0 +1,88 @@ +SOURCE_FILE@[0; 82) + FN_DEF@[0; 81) + 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; 81) + L_CURLY@[9; 10) + WHITESPACE@[10; 15) + EXPR_STMT@[15; 26) + ATTR@[15; 19) + POUND@[15; 16) + TOKEN_TREE@[16; 19) + L_BRACK@[16; 17) + IDENT@[17; 18) "A" + R_BRACK@[18; 19) + WHITESPACE@[19; 20) + CALL_EXPR@[20; 25) + PATH_EXPR@[20; 23) + PATH@[20; 23) + PATH_SEGMENT@[20; 23) + NAME_REF@[20; 23) + IDENT@[20; 23) "foo" + ARG_LIST@[23; 25) + L_PAREN@[23; 24) + R_PAREN@[24; 25) + SEMI@[25; 26) + WHITESPACE@[26; 31) + EXPR_STMT@[31; 42) + ATTR@[31; 35) + POUND@[31; 32) + TOKEN_TREE@[32; 35) + L_BRACK@[32; 33) + IDENT@[33; 34) "B" + R_BRACK@[34; 35) + WHITESPACE@[35; 36) + MACRO_CALL@[36; 42) + PATH@[36; 39) + PATH_SEGMENT@[36; 39) + NAME_REF@[36; 39) + IDENT@[36; 39) "bar" + EXCL@[39; 40) + TOKEN_TREE@[40; 42) + L_CURLY@[40; 41) + R_CURLY@[41; 42) + WHITESPACE@[42; 47) + EXPR_STMT@[47; 59) + ATTR@[47; 51) + POUND@[47; 48) + TOKEN_TREE@[48; 51) + L_BRACK@[48; 49) + IDENT@[49; 50) "C" + R_BRACK@[50; 51) + WHITESPACE@[51; 52) + ATTR@[52; 56) + POUND@[52; 53) + TOKEN_TREE@[53; 56) + L_BRACK@[53; 54) + IDENT@[54; 55) "D" + R_BRACK@[55; 56) + WHITESPACE@[56; 57) + BLOCK_EXPR@[57; 59) + BLOCK@[57; 59) + L_CURLY@[57; 58) + R_CURLY@[58; 59) + WHITESPACE@[59; 64) + EXPR_STMT@[64; 79) + ATTR@[64; 68) + POUND@[64; 65) + TOKEN_TREE@[65; 68) + L_BRACK@[65; 66) + IDENT@[66; 67) "D" + R_BRACK@[67; 68) + WHITESPACE@[68; 69) + RETURN_EXPR@[69; 78) + RETURN_KW@[69; 75) + WHITESPACE@[75; 76) + TUPLE_EXPR@[76; 78) + L_PAREN@[76; 77) + R_PAREN@[77; 78) + SEMI@[78; 79) + WHITESPACE@[79; 80) + R_CURLY@[80; 81) + WHITESPACE@[81; 82) diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0127_attr_on_last_expr_in_block.rs b/crates/ra_syntax/tests/data/parser/inline/ok/0127_attr_on_last_expr_in_block.rs new file mode 100644 index 000000000..9c5c8eb36 --- /dev/null +++ b/crates/ra_syntax/tests/data/parser/inline/ok/0127_attr_on_last_expr_in_block.rs @@ -0,0 +1,4 @@ +fn foo() { + { #[A] bar!()? } + #[B] &() +} diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0127_attr_on_last_expr_in_block.txt b/crates/ra_syntax/tests/data/parser/inline/ok/0127_attr_on_last_expr_in_block.txt new file mode 100644 index 000000000..4af64559c --- /dev/null +++ b/crates/ra_syntax/tests/data/parser/inline/ok/0127_attr_on_last_expr_in_block.txt @@ -0,0 +1,54 @@ +SOURCE_FILE@[0; 47) + FN_DEF@[0; 46) + 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; 46) + L_CURLY@[9; 10) + WHITESPACE@[10; 15) + EXPR_STMT@[15; 31) + BLOCK_EXPR@[15; 31) + BLOCK@[15; 31) + L_CURLY@[15; 16) + WHITESPACE@[16; 17) + TRY_EXPR@[17; 29) + ATTR@[17; 21) + POUND@[17; 18) + TOKEN_TREE@[18; 21) + L_BRACK@[18; 19) + IDENT@[19; 20) "A" + R_BRACK@[20; 21) + WHITESPACE@[21; 22) + MACRO_CALL@[22; 28) + PATH@[22; 25) + PATH_SEGMENT@[22; 25) + NAME_REF@[22; 25) + IDENT@[22; 25) "bar" + EXCL@[25; 26) + TOKEN_TREE@[26; 28) + L_PAREN@[26; 27) + R_PAREN@[27; 28) + QUESTION@[28; 29) + WHITESPACE@[29; 30) + R_CURLY@[30; 31) + WHITESPACE@[31; 36) + REF_EXPR@[36; 44) + ATTR@[36; 40) + POUND@[36; 37) + TOKEN_TREE@[37; 40) + L_BRACK@[37; 38) + IDENT@[38; 39) "B" + R_BRACK@[39; 40) + WHITESPACE@[40; 41) + AMP@[41; 42) + TUPLE_EXPR@[42; 44) + L_PAREN@[42; 43) + R_PAREN@[43; 44) + WHITESPACE@[44; 45) + R_CURLY@[45; 46) + WHITESPACE@[46; 47) -- cgit v1.2.3