mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 11:31:15 +00:00
Merge #631
631: Support universal function call syntax in function calls r=matklad a=DJMcNab Fix #596 Co-authored-by: DJMcNab <36049421+djmcnab@users.noreply.github.com> Co-authored-by: Daniel McNab <36049421+djmcnab@users.noreply.github.com>
This commit is contained in:
commit
b308375b82
@ -305,6 +305,8 @@ fn postfix_expr(
|
|||||||
// fn foo() {
|
// fn foo() {
|
||||||
// let _ = f();
|
// let _ = f();
|
||||||
// let _ = f()(1)(1, 2,);
|
// let _ = f()(1)(1, 2,);
|
||||||
|
// let _ = f(<Foo>::func());
|
||||||
|
// f(<Foo as Trait>::func());
|
||||||
// }
|
// }
|
||||||
fn call_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker {
|
fn call_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker {
|
||||||
assert!(p.at(L_PAREN));
|
assert!(p.at(L_PAREN));
|
||||||
|
@ -36,7 +36,8 @@ pub(crate) fn literal(p: &mut Parser) -> Option<CompletedMarker> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// E.g. for after the break in `if break {}`, this should not match
|
// E.g. for after the break in `if break {}`, this should not match
|
||||||
pub(super) const ATOM_EXPR_FIRST: TokenSet = LITERAL_FIRST.union(token_set![
|
pub(super) const ATOM_EXPR_FIRST: TokenSet =
|
||||||
|
LITERAL_FIRST.union(paths::PATH_FIRST).union(token_set![
|
||||||
L_PAREN,
|
L_PAREN,
|
||||||
L_CURLY,
|
L_CURLY,
|
||||||
L_BRACK,
|
L_BRACK,
|
||||||
@ -47,15 +48,10 @@ pub(super) const ATOM_EXPR_FIRST: TokenSet = LITERAL_FIRST.union(token_set![
|
|||||||
MATCH_KW,
|
MATCH_KW,
|
||||||
UNSAFE_KW,
|
UNSAFE_KW,
|
||||||
RETURN_KW,
|
RETURN_KW,
|
||||||
IDENT,
|
|
||||||
SELF_KW,
|
|
||||||
SUPER_KW,
|
|
||||||
CRATE_KW,
|
|
||||||
COLONCOLON,
|
|
||||||
BREAK_KW,
|
BREAK_KW,
|
||||||
CONTINUE_KW,
|
CONTINUE_KW,
|
||||||
LIFETIME,
|
LIFETIME,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const EXPR_RECOVERY_SET: TokenSet = token_set![LET_KW];
|
const EXPR_RECOVERY_SET: TokenSet = token_set![LET_KW];
|
||||||
|
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
fn foo() {
|
fn foo() {
|
||||||
let _ = f();
|
let _ = f();
|
||||||
let _ = f()(1)(1, 2,);
|
let _ = f()(1)(1, 2,);
|
||||||
|
let _ = f(<Foo>::func());
|
||||||
|
f(<Foo as Trait>::func());
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
SOURCE_FILE@[0; 57)
|
SOURCE_FILE@[0; 118)
|
||||||
FN_DEF@[0; 56)
|
FN_DEF@[0; 117)
|
||||||
FN_KW@[0; 2)
|
FN_KW@[0; 2)
|
||||||
WHITESPACE@[2; 3)
|
WHITESPACE@[2; 3)
|
||||||
NAME@[3; 6)
|
NAME@[3; 6)
|
||||||
@ -8,7 +8,7 @@ SOURCE_FILE@[0; 57)
|
|||||||
L_PAREN@[6; 7)
|
L_PAREN@[6; 7)
|
||||||
R_PAREN@[7; 8)
|
R_PAREN@[7; 8)
|
||||||
WHITESPACE@[8; 9)
|
WHITESPACE@[8; 9)
|
||||||
BLOCK@[9; 56)
|
BLOCK@[9; 117)
|
||||||
L_CURLY@[9; 10)
|
L_CURLY@[9; 10)
|
||||||
WHITESPACE@[10; 15)
|
WHITESPACE@[10; 15)
|
||||||
LET_STMT@[15; 27)
|
LET_STMT@[15; 27)
|
||||||
@ -65,6 +65,83 @@ SOURCE_FILE@[0; 57)
|
|||||||
COMMA@[51; 52)
|
COMMA@[51; 52)
|
||||||
R_PAREN@[52; 53)
|
R_PAREN@[52; 53)
|
||||||
SEMI@[53; 54)
|
SEMI@[53; 54)
|
||||||
WHITESPACE@[54; 55)
|
WHITESPACE@[54; 59)
|
||||||
R_CURLY@[55; 56)
|
LET_STMT@[59; 84)
|
||||||
WHITESPACE@[56; 57)
|
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…
x
Reference in New Issue
Block a user