mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-29 18:23:49 +00:00
Support universal function call syntax in function calls
This commit is contained in:
parent
abb9bfe44d
commit
4899e7be76
@ -305,6 +305,8 @@ fn postfix_expr(
|
||||
// fn foo() {
|
||||
// let _ = f();
|
||||
// let _ = f()(1)(1, 2,);
|
||||
// let _ = f(<Foo>::func());
|
||||
// f(<Foo as Trait>::func());
|
||||
// }
|
||||
fn call_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker {
|
||||
assert!(p.at(L_PAREN));
|
||||
|
@ -40,6 +40,7 @@ pub(super) const ATOM_EXPR_FIRST: TokenSet = LITERAL_FIRST.union(token_set![
|
||||
L_PAREN,
|
||||
L_CURLY,
|
||||
L_BRACK,
|
||||
L_ANGLE, // Universal function call syntax
|
||||
PIPE,
|
||||
MOVE_KW,
|
||||
IF_KW,
|
||||
|
@ -1,4 +1,6 @@
|
||||
fn foo() {
|
||||
let _ = f();
|
||||
let _ = f()(1)(1, 2,);
|
||||
let _ = f(<Foo>::func());
|
||||
f(<Foo as Trait>::func());
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
SOURCE_FILE@[0; 57)
|
||||
FN_DEF@[0; 56)
|
||||
SOURCE_FILE@[0; 118)
|
||||
FN_DEF@[0; 117)
|
||||
FN_KW@[0; 2)
|
||||
WHITESPACE@[2; 3)
|
||||
NAME@[3; 6)
|
||||
@ -8,7 +8,7 @@ SOURCE_FILE@[0; 57)
|
||||
L_PAREN@[6; 7)
|
||||
R_PAREN@[7; 8)
|
||||
WHITESPACE@[8; 9)
|
||||
BLOCK@[9; 56)
|
||||
BLOCK@[9; 117)
|
||||
L_CURLY@[9; 10)
|
||||
WHITESPACE@[10; 15)
|
||||
LET_STMT@[15; 27)
|
||||
@ -65,6 +65,83 @@ SOURCE_FILE@[0; 57)
|
||||
COMMA@[51; 52)
|
||||
R_PAREN@[52; 53)
|
||||
SEMI@[53; 54)
|
||||
WHITESPACE@[54; 55)
|
||||
R_CURLY@[55; 56)
|
||||
WHITESPACE@[56; 57)
|
||||
WHITESPACE@[54; 59)
|
||||
LET_STMT@[59; 84)
|
||||
LET_KW@[59; 62)
|
||||
WHITESPACE@[62; 63)
|
||||
PLACEHOLDER_PAT@[63; 64)
|
||||
UNDERSCORE@[63; 64)
|
||||
WHITESPACE@[64; 65)
|
||||
EQ@[65; 66)
|
||||
WHITESPACE@[66; 67)
|
||||
CALL_EXPR@[67; 83)
|
||||
PATH_EXPR@[67; 68)
|
||||
PATH@[67; 68)
|
||||
PATH_SEGMENT@[67; 68)
|
||||
NAME_REF@[67; 68)
|
||||
IDENT@[67; 68) "f"
|
||||
ARG_LIST@[68; 83)
|
||||
L_PAREN@[68; 69)
|
||||
CALL_EXPR@[69; 82)
|
||||
PATH_EXPR@[69; 80)
|
||||
PATH@[69; 80)
|
||||
PATH@[69; 74)
|
||||
PATH_SEGMENT@[69; 74)
|
||||
L_ANGLE@[69; 70)
|
||||
PATH_TYPE@[70; 73)
|
||||
PATH@[70; 73)
|
||||
PATH_SEGMENT@[70; 73)
|
||||
NAME_REF@[70; 73)
|
||||
IDENT@[70; 73) "Foo"
|
||||
R_ANGLE@[73; 74)
|
||||
COLONCOLON@[74; 76)
|
||||
PATH_SEGMENT@[76; 80)
|
||||
NAME_REF@[76; 80)
|
||||
IDENT@[76; 80) "func"
|
||||
ARG_LIST@[80; 82)
|
||||
L_PAREN@[80; 81)
|
||||
R_PAREN@[81; 82)
|
||||
R_PAREN@[82; 83)
|
||||
SEMI@[83; 84)
|
||||
WHITESPACE@[84; 89)
|
||||
EXPR_STMT@[89; 115)
|
||||
CALL_EXPR@[89; 114)
|
||||
PATH_EXPR@[89; 90)
|
||||
PATH@[89; 90)
|
||||
PATH_SEGMENT@[89; 90)
|
||||
NAME_REF@[89; 90)
|
||||
IDENT@[89; 90) "f"
|
||||
ARG_LIST@[90; 114)
|
||||
L_PAREN@[90; 91)
|
||||
CALL_EXPR@[91; 113)
|
||||
PATH_EXPR@[91; 111)
|
||||
PATH@[91; 111)
|
||||
PATH@[91; 105)
|
||||
PATH_SEGMENT@[91; 105)
|
||||
L_ANGLE@[91; 92)
|
||||
PATH_TYPE@[92; 95)
|
||||
PATH@[92; 95)
|
||||
PATH_SEGMENT@[92; 95)
|
||||
NAME_REF@[92; 95)
|
||||
IDENT@[92; 95) "Foo"
|
||||
WHITESPACE@[95; 96)
|
||||
AS_KW@[96; 98)
|
||||
WHITESPACE@[98; 99)
|
||||
PATH_TYPE@[99; 104)
|
||||
PATH@[99; 104)
|
||||
PATH_SEGMENT@[99; 104)
|
||||
NAME_REF@[99; 104)
|
||||
IDENT@[99; 104) "Trait"
|
||||
R_ANGLE@[104; 105)
|
||||
COLONCOLON@[105; 107)
|
||||
PATH_SEGMENT@[107; 111)
|
||||
NAME_REF@[107; 111)
|
||||
IDENT@[107; 111) "func"
|
||||
ARG_LIST@[111; 113)
|
||||
L_PAREN@[111; 112)
|
||||
R_PAREN@[112; 113)
|
||||
R_PAREN@[113; 114)
|
||||
SEMI@[114; 115)
|
||||
WHITESPACE@[115; 116)
|
||||
R_CURLY@[116; 117)
|
||||
WHITESPACE@[117; 118)
|
||||
|
15
crates/ra_syntax/tests/data/parser/ok/0042_ufcs_call_list.rs
Normal file
15
crates/ra_syntax/tests/data/parser/ok/0042_ufcs_call_list.rs
Normal file
@ -0,0 +1,15 @@
|
||||
// https://github.com/rust-analyzer/rust-analyzer/issues/596
|
||||
|
||||
struct Foo;
|
||||
|
||||
impl Foo {
|
||||
fn bar() -> bool {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
|
||||
fn baz(_: bool) {}
|
||||
|
||||
fn main() {
|
||||
baz(<Foo>::bar())
|
||||
}
|
123
crates/ra_syntax/tests/data/parser/ok/0042_ufcs_call_list.txt
Normal file
123
crates/ra_syntax/tests/data/parser/ok/0042_ufcs_call_list.txt
Normal file
@ -0,0 +1,123 @@
|
||||
SOURCE_FILE@[0; 199)
|
||||
COMMENT@[0; 60)
|
||||
WHITESPACE@[60; 62)
|
||||
STRUCT_DEF@[62; 73)
|
||||
STRUCT_KW@[62; 68)
|
||||
WHITESPACE@[68; 69)
|
||||
NAME@[69; 72)
|
||||
IDENT@[69; 72) "Foo"
|
||||
SEMI@[72; 73)
|
||||
WHITESPACE@[73; 75)
|
||||
IMPL_BLOCK@[75; 141)
|
||||
IMPL_KW@[75; 79)
|
||||
WHITESPACE@[79; 80)
|
||||
PATH_TYPE@[80; 83)
|
||||
PATH@[80; 83)
|
||||
PATH_SEGMENT@[80; 83)
|
||||
NAME_REF@[80; 83)
|
||||
IDENT@[80; 83) "Foo"
|
||||
WHITESPACE@[83; 84)
|
||||
ITEM_LIST@[84; 141)
|
||||
L_CURLY@[84; 85)
|
||||
WHITESPACE@[85; 90)
|
||||
FN_DEF@[90; 139)
|
||||
FN_KW@[90; 92)
|
||||
WHITESPACE@[92; 93)
|
||||
NAME@[93; 96)
|
||||
IDENT@[93; 96) "bar"
|
||||
PARAM_LIST@[96; 98)
|
||||
L_PAREN@[96; 97)
|
||||
R_PAREN@[97; 98)
|
||||
WHITESPACE@[98; 99)
|
||||
RET_TYPE@[99; 106)
|
||||
THIN_ARROW@[99; 101)
|
||||
WHITESPACE@[101; 102)
|
||||
PATH_TYPE@[102; 106)
|
||||
PATH@[102; 106)
|
||||
PATH_SEGMENT@[102; 106)
|
||||
NAME_REF@[102; 106)
|
||||
IDENT@[102; 106) "bool"
|
||||
WHITESPACE@[106; 107)
|
||||
BLOCK@[107; 139)
|
||||
L_CURLY@[107; 108)
|
||||
WHITESPACE@[108; 117)
|
||||
MACRO_CALL@[117; 133)
|
||||
PATH@[117; 130)
|
||||
PATH_SEGMENT@[117; 130)
|
||||
NAME_REF@[117; 130)
|
||||
IDENT@[117; 130) "unimplemented"
|
||||
EXCL@[130; 131)
|
||||
TOKEN_TREE@[131; 133)
|
||||
L_PAREN@[131; 132)
|
||||
R_PAREN@[132; 133)
|
||||
WHITESPACE@[133; 138)
|
||||
R_CURLY@[138; 139)
|
||||
WHITESPACE@[139; 140)
|
||||
R_CURLY@[140; 141)
|
||||
WHITESPACE@[141; 143)
|
||||
FN_DEF@[143; 161)
|
||||
FN_KW@[143; 145)
|
||||
WHITESPACE@[145; 146)
|
||||
NAME@[146; 149)
|
||||
IDENT@[146; 149) "baz"
|
||||
PARAM_LIST@[149; 158)
|
||||
L_PAREN@[149; 150)
|
||||
PARAM@[150; 157)
|
||||
PLACEHOLDER_PAT@[150; 151)
|
||||
UNDERSCORE@[150; 151)
|
||||
COLON@[151; 152)
|
||||
WHITESPACE@[152; 153)
|
||||
PATH_TYPE@[153; 157)
|
||||
PATH@[153; 157)
|
||||
PATH_SEGMENT@[153; 157)
|
||||
NAME_REF@[153; 157)
|
||||
IDENT@[153; 157) "bool"
|
||||
R_PAREN@[157; 158)
|
||||
WHITESPACE@[158; 159)
|
||||
BLOCK@[159; 161)
|
||||
L_CURLY@[159; 160)
|
||||
R_CURLY@[160; 161)
|
||||
WHITESPACE@[161; 163)
|
||||
FN_DEF@[163; 198)
|
||||
FN_KW@[163; 165)
|
||||
WHITESPACE@[165; 166)
|
||||
NAME@[166; 170)
|
||||
IDENT@[166; 170) "main"
|
||||
PARAM_LIST@[170; 172)
|
||||
L_PAREN@[170; 171)
|
||||
R_PAREN@[171; 172)
|
||||
WHITESPACE@[172; 173)
|
||||
BLOCK@[173; 198)
|
||||
L_CURLY@[173; 174)
|
||||
WHITESPACE@[174; 179)
|
||||
CALL_EXPR@[179; 196)
|
||||
PATH_EXPR@[179; 182)
|
||||
PATH@[179; 182)
|
||||
PATH_SEGMENT@[179; 182)
|
||||
NAME_REF@[179; 182)
|
||||
IDENT@[179; 182) "baz"
|
||||
ARG_LIST@[182; 196)
|
||||
L_PAREN@[182; 183)
|
||||
CALL_EXPR@[183; 195)
|
||||
PATH_EXPR@[183; 193)
|
||||
PATH@[183; 193)
|
||||
PATH@[183; 188)
|
||||
PATH_SEGMENT@[183; 188)
|
||||
L_ANGLE@[183; 184)
|
||||
PATH_TYPE@[184; 187)
|
||||
PATH@[184; 187)
|
||||
PATH_SEGMENT@[184; 187)
|
||||
NAME_REF@[184; 187)
|
||||
IDENT@[184; 187) "Foo"
|
||||
R_ANGLE@[187; 188)
|
||||
COLONCOLON@[188; 190)
|
||||
PATH_SEGMENT@[190; 193)
|
||||
NAME_REF@[190; 193)
|
||||
IDENT@[190; 193) "bar"
|
||||
ARG_LIST@[193; 195)
|
||||
L_PAREN@[193; 194)
|
||||
R_PAREN@[194; 195)
|
||||
R_PAREN@[195; 196)
|
||||
WHITESPACE@[196; 197)
|
||||
R_CURLY@[197; 198)
|
||||
WHITESPACE@[198; 199)
|
Loading…
Reference in New Issue
Block a user