Allow attributes before function arguments
This adds support for function calls of the form: ```rust ( #[attr(...)] 1.2, #[attr_one(...)] #[attr_two(...)] 1.5, ... etc ... ) ``` Closes https://github.com/rust-analyzer/rust-analyzer/issues/2801
This commit is contained in:
parent
f7a7092d69
commit
c3ac2c93fb
3 changed files with 126 additions and 0 deletions
|
@ -535,11 +535,22 @@ fn cast_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker {
|
|||
m.complete(p, CAST_EXPR)
|
||||
}
|
||||
|
||||
// test arg_list
|
||||
// fn assert_float(s: &str, n: f64) {}
|
||||
// fn foo() {
|
||||
// assert_float(
|
||||
// "1.797693134862315708e+308L",
|
||||
// #[allow(clippy::excessive_precision)]
|
||||
// #[allow(dead_code)]
|
||||
// 1.797_693_134_862_315_730_8e+308,
|
||||
// );
|
||||
// }
|
||||
fn arg_list(p: &mut Parser) {
|
||||
assert!(p.at(T!['(']));
|
||||
let m = p.start();
|
||||
p.bump(T!['(']);
|
||||
while !p.at(T![')']) && !p.at(EOF) {
|
||||
attributes::outer_attributes(p);
|
||||
if !p.at_ts(EXPR_FIRST) {
|
||||
p.error("expected expression");
|
||||
break;
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
fn assert_float(s: &str, n: f64) {}
|
||||
fn foo() {
|
||||
assert_float(
|
||||
"1.797693134862315708e+308L",
|
||||
#[allow(clippy::excessive_precision)]
|
||||
#[allow(dead_code)]
|
||||
1.797_693_134_862_315_730_8e+308,
|
||||
);
|
||||
}
|
106
crates/ra_syntax/test_data/parser/inline/ok/0152_arg_list.txt
Normal file
106
crates/ra_syntax/test_data/parser/inline/ok/0152_arg_list.txt
Normal file
|
@ -0,0 +1,106 @@
|
|||
SOURCE_FILE@[0; 228)
|
||||
FN_DEF@[0; 35)
|
||||
FN_KW@[0; 2) "fn"
|
||||
WHITESPACE@[2; 3) " "
|
||||
NAME@[3; 15)
|
||||
IDENT@[3; 15) "assert_float"
|
||||
PARAM_LIST@[15; 32)
|
||||
L_PAREN@[15; 16) "("
|
||||
PARAM@[16; 23)
|
||||
BIND_PAT@[16; 17)
|
||||
NAME@[16; 17)
|
||||
IDENT@[16; 17) "s"
|
||||
COLON@[17; 18) ":"
|
||||
WHITESPACE@[18; 19) " "
|
||||
REFERENCE_TYPE@[19; 23)
|
||||
AMP@[19; 20) "&"
|
||||
PATH_TYPE@[20; 23)
|
||||
PATH@[20; 23)
|
||||
PATH_SEGMENT@[20; 23)
|
||||
NAME_REF@[20; 23)
|
||||
IDENT@[20; 23) "str"
|
||||
COMMA@[23; 24) ","
|
||||
WHITESPACE@[24; 25) " "
|
||||
PARAM@[25; 31)
|
||||
BIND_PAT@[25; 26)
|
||||
NAME@[25; 26)
|
||||
IDENT@[25; 26) "n"
|
||||
COLON@[26; 27) ":"
|
||||
WHITESPACE@[27; 28) " "
|
||||
PATH_TYPE@[28; 31)
|
||||
PATH@[28; 31)
|
||||
PATH_SEGMENT@[28; 31)
|
||||
NAME_REF@[28; 31)
|
||||
IDENT@[28; 31) "f64"
|
||||
R_PAREN@[31; 32) ")"
|
||||
WHITESPACE@[32; 33) " "
|
||||
BLOCK_EXPR@[33; 35)
|
||||
BLOCK@[33; 35)
|
||||
L_CURLY@[33; 34) "{"
|
||||
R_CURLY@[34; 35) "}"
|
||||
WHITESPACE@[35; 36) "\n"
|
||||
FN_DEF@[36; 227)
|
||||
FN_KW@[36; 38) "fn"
|
||||
WHITESPACE@[38; 39) " "
|
||||
NAME@[39; 42)
|
||||
IDENT@[39; 42) "foo"
|
||||
PARAM_LIST@[42; 44)
|
||||
L_PAREN@[42; 43) "("
|
||||
R_PAREN@[43; 44) ")"
|
||||
WHITESPACE@[44; 45) " "
|
||||
BLOCK_EXPR@[45; 227)
|
||||
BLOCK@[45; 227)
|
||||
L_CURLY@[45; 46) "{"
|
||||
WHITESPACE@[46; 51) "\n "
|
||||
EXPR_STMT@[51; 225)
|
||||
CALL_EXPR@[51; 224)
|
||||
PATH_EXPR@[51; 63)
|
||||
PATH@[51; 63)
|
||||
PATH_SEGMENT@[51; 63)
|
||||
NAME_REF@[51; 63)
|
||||
IDENT@[51; 63) "assert_float"
|
||||
ARG_LIST@[63; 224)
|
||||
L_PAREN@[63; 64) "("
|
||||
WHITESPACE@[64; 73) "\n "
|
||||
LITERAL@[73; 101)
|
||||
STRING@[73; 101) "\"1.797693134862315708 ..."
|
||||
COMMA@[101; 102) ","
|
||||
WHITESPACE@[102; 111) "\n "
|
||||
ATTR@[111; 148)
|
||||
POUND@[111; 112) "#"
|
||||
L_BRACK@[112; 113) "["
|
||||
PATH@[113; 118)
|
||||
PATH_SEGMENT@[113; 118)
|
||||
NAME_REF@[113; 118)
|
||||
IDENT@[113; 118) "allow"
|
||||
TOKEN_TREE@[118; 147)
|
||||
L_PAREN@[118; 119) "("
|
||||
IDENT@[119; 125) "clippy"
|
||||
COLON@[125; 126) ":"
|
||||
COLON@[126; 127) ":"
|
||||
IDENT@[127; 146) "excessive_precision"
|
||||
R_PAREN@[146; 147) ")"
|
||||
R_BRACK@[147; 148) "]"
|
||||
WHITESPACE@[148; 157) "\n "
|
||||
ATTR@[157; 176)
|
||||
POUND@[157; 158) "#"
|
||||
L_BRACK@[158; 159) "["
|
||||
PATH@[159; 164)
|
||||
PATH_SEGMENT@[159; 164)
|
||||
NAME_REF@[159; 164)
|
||||
IDENT@[159; 164) "allow"
|
||||
TOKEN_TREE@[164; 175)
|
||||
L_PAREN@[164; 165) "("
|
||||
IDENT@[165; 174) "dead_code"
|
||||
R_PAREN@[174; 175) ")"
|
||||
R_BRACK@[175; 176) "]"
|
||||
WHITESPACE@[176; 185) "\n "
|
||||
LITERAL@[185; 217)
|
||||
FLOAT_NUMBER@[185; 217) "1.797_693_134_862_315 ..."
|
||||
COMMA@[217; 218) ","
|
||||
WHITESPACE@[218; 223) "\n "
|
||||
R_PAREN@[223; 224) ")"
|
||||
SEMI@[224; 225) ";"
|
||||
WHITESPACE@[225; 226) "\n"
|
||||
R_CURLY@[226; 227) "}"
|
||||
WHITESPACE@[227; 228) "\n"
|
Loading…
Add table
Reference in a new issue