mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-27 12:25:05 +00:00
better self-types
This commit is contained in:
parent
cf7d4a2a24
commit
dc40f1298a
8 changed files with 67 additions and 45 deletions
|
@ -208,7 +208,7 @@ fn extern_crate_item(p: &mut Parser) {
|
||||||
assert!(p.at(CRATE_KW));
|
assert!(p.at(CRATE_KW));
|
||||||
p.bump();
|
p.bump();
|
||||||
name(p);
|
name(p);
|
||||||
alias(p);
|
opt_alias(p);
|
||||||
p.expect(SEMI);
|
p.expect(SEMI);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ fn use_tree(p: &mut Parser) {
|
||||||
paths::use_path(p);
|
paths::use_path(p);
|
||||||
match p.current() {
|
match p.current() {
|
||||||
AS_KW => {
|
AS_KW => {
|
||||||
alias(p);
|
opt_alias(p);
|
||||||
}
|
}
|
||||||
COLONCOLON => {
|
COLONCOLON => {
|
||||||
p.bump();
|
p.bump();
|
||||||
|
|
|
@ -92,14 +92,14 @@ fn opt_visibility(p: &mut Parser) {
|
||||||
_ => (),
|
_ => (),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn alias(p: &mut Parser) -> bool {
|
|
||||||
|
fn opt_alias(p: &mut Parser) {
|
||||||
if p.at(AS_KW) {
|
if p.at(AS_KW) {
|
||||||
let alias = p.start();
|
let m = p.start();
|
||||||
p.bump();
|
p.bump();
|
||||||
name(p);
|
name(p);
|
||||||
alias.complete(p, ALIAS);
|
m.complete(p, ALIAS);
|
||||||
}
|
}
|
||||||
true //FIXME: return false if three are errors
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn abi(p: &mut Parser) {
|
fn abi(p: &mut Parser) {
|
||||||
|
|
|
@ -92,16 +92,18 @@ fn value_parameter(p: &mut Parser, flavor: Flavor) {
|
||||||
// fn b(&self,) {}
|
// fn b(&self,) {}
|
||||||
// fn c(&'a self,) {}
|
// fn c(&'a self,) {}
|
||||||
// fn d(&'a mut self, x: i32) {}
|
// fn d(&'a mut self, x: i32) {}
|
||||||
|
// fn e(mut self) {}
|
||||||
// }
|
// }
|
||||||
fn self_param(p: &mut Parser) {
|
fn self_param(p: &mut Parser) {
|
||||||
let m;
|
let m;
|
||||||
if p.at(SELF_KW) {
|
if p.at(SELF_KW) || p.at(MUT_KW) && p.nth(1) == SELF_KW {
|
||||||
m = p.start();
|
m = p.start();
|
||||||
p.bump();
|
p.eat(MUT_KW);
|
||||||
|
p.eat(SELF_KW);
|
||||||
// test arb_self_types
|
// test arb_self_types
|
||||||
// impl S {
|
// impl S {
|
||||||
// fn a(self: &Self) {}
|
// fn a(self: &Self) {}
|
||||||
// fn b(self: Box<Self>) {}
|
// fn b(mut self: Box<Self>) {}
|
||||||
// }
|
// }
|
||||||
if p.at(COLON) {
|
if p.at(COLON) {
|
||||||
types::ascription(p);
|
types::ascription(p);
|
||||||
|
|
|
@ -3,4 +3,5 @@ impl S {
|
||||||
fn b(&self,) {}
|
fn b(&self,) {}
|
||||||
fn c(&'a self,) {}
|
fn c(&'a self,) {}
|
||||||
fn d(&'a mut self, x: i32) {}
|
fn d(&'a mut self, x: i32) {}
|
||||||
|
fn e(mut self) {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
FILE@[0; 106)
|
FILE@[0; 128)
|
||||||
IMPL_ITEM@[0; 105)
|
IMPL_ITEM@[0; 127)
|
||||||
IMPL_KW@[0; 4)
|
IMPL_KW@[0; 4)
|
||||||
WHITESPACE@[4; 5)
|
WHITESPACE@[4; 5)
|
||||||
PATH_TYPE@[5; 6)
|
PATH_TYPE@[5; 6)
|
||||||
|
@ -93,6 +93,23 @@ FILE@[0; 106)
|
||||||
BLOCK_EXPR@[101; 103)
|
BLOCK_EXPR@[101; 103)
|
||||||
L_CURLY@[101; 102)
|
L_CURLY@[101; 102)
|
||||||
R_CURLY@[102; 103)
|
R_CURLY@[102; 103)
|
||||||
WHITESPACE@[103; 104)
|
WHITESPACE@[103; 108)
|
||||||
R_CURLY@[104; 105)
|
FN_DEF@[108; 125)
|
||||||
WHITESPACE@[105; 106)
|
FN_KW@[108; 110)
|
||||||
|
WHITESPACE@[110; 111)
|
||||||
|
NAME@[111; 112)
|
||||||
|
IDENT@[111; 112) "e"
|
||||||
|
PARAM_LIST@[112; 122)
|
||||||
|
L_PAREN@[112; 113)
|
||||||
|
SELF_PARAM@[113; 121)
|
||||||
|
MUT_KW@[113; 116)
|
||||||
|
WHITESPACE@[116; 117)
|
||||||
|
SELF_KW@[117; 121)
|
||||||
|
R_PAREN@[121; 122)
|
||||||
|
WHITESPACE@[122; 123)
|
||||||
|
BLOCK_EXPR@[123; 125)
|
||||||
|
L_CURLY@[123; 124)
|
||||||
|
R_CURLY@[124; 125)
|
||||||
|
WHITESPACE@[125; 126)
|
||||||
|
R_CURLY@[126; 127)
|
||||||
|
WHITESPACE@[127; 128)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
impl S {
|
impl S {
|
||||||
fn a(self: &Self) {}
|
fn a(self: &Self) {}
|
||||||
fn b(self: Box<Self>) {}
|
fn b(mut self: Box<Self>) {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
FILE@[0; 65)
|
FILE@[0; 69)
|
||||||
IMPL_ITEM@[0; 64)
|
IMPL_ITEM@[0; 68)
|
||||||
IMPL_KW@[0; 4)
|
IMPL_KW@[0; 4)
|
||||||
WHITESPACE@[4; 5)
|
WHITESPACE@[4; 5)
|
||||||
PATH_TYPE@[5; 6)
|
PATH_TYPE@[5; 6)
|
||||||
|
@ -34,36 +34,38 @@ FILE@[0; 65)
|
||||||
L_CURLY@[31; 32)
|
L_CURLY@[31; 32)
|
||||||
R_CURLY@[32; 33)
|
R_CURLY@[32; 33)
|
||||||
WHITESPACE@[33; 38)
|
WHITESPACE@[33; 38)
|
||||||
FN_DEF@[38; 62)
|
FN_DEF@[38; 66)
|
||||||
FN_KW@[38; 40)
|
FN_KW@[38; 40)
|
||||||
WHITESPACE@[40; 41)
|
WHITESPACE@[40; 41)
|
||||||
NAME@[41; 42)
|
NAME@[41; 42)
|
||||||
IDENT@[41; 42) "b"
|
IDENT@[41; 42) "b"
|
||||||
PARAM_LIST@[42; 59)
|
PARAM_LIST@[42; 63)
|
||||||
L_PAREN@[42; 43)
|
L_PAREN@[42; 43)
|
||||||
SELF_PARAM@[43; 58)
|
SELF_PARAM@[43; 62)
|
||||||
SELF_KW@[43; 47)
|
MUT_KW@[43; 46)
|
||||||
COLON@[47; 48)
|
WHITESPACE@[46; 47)
|
||||||
WHITESPACE@[48; 49)
|
SELF_KW@[47; 51)
|
||||||
PATH_TYPE@[49; 58)
|
COLON@[51; 52)
|
||||||
PATH@[49; 58)
|
WHITESPACE@[52; 53)
|
||||||
PATH_SEGMENT@[49; 58)
|
PATH_TYPE@[53; 62)
|
||||||
NAME_REF@[49; 52)
|
PATH@[53; 62)
|
||||||
IDENT@[49; 52) "Box"
|
PATH_SEGMENT@[53; 62)
|
||||||
TYPE_ARG_LIST@[52; 58)
|
NAME_REF@[53; 56)
|
||||||
L_ANGLE@[52; 53)
|
IDENT@[53; 56) "Box"
|
||||||
TYPE_ARG@[53; 57)
|
TYPE_ARG_LIST@[56; 62)
|
||||||
PATH_TYPE@[53; 57)
|
L_ANGLE@[56; 57)
|
||||||
PATH@[53; 57)
|
TYPE_ARG@[57; 61)
|
||||||
PATH_SEGMENT@[53; 57)
|
PATH_TYPE@[57; 61)
|
||||||
NAME_REF@[53; 57)
|
PATH@[57; 61)
|
||||||
IDENT@[53; 57) "Self"
|
PATH_SEGMENT@[57; 61)
|
||||||
R_ANGLE@[57; 58)
|
NAME_REF@[57; 61)
|
||||||
R_PAREN@[58; 59)
|
IDENT@[57; 61) "Self"
|
||||||
WHITESPACE@[59; 60)
|
R_ANGLE@[61; 62)
|
||||||
BLOCK_EXPR@[60; 62)
|
R_PAREN@[62; 63)
|
||||||
L_CURLY@[60; 61)
|
WHITESPACE@[63; 64)
|
||||||
R_CURLY@[61; 62)
|
BLOCK_EXPR@[64; 66)
|
||||||
WHITESPACE@[62; 63)
|
L_CURLY@[64; 65)
|
||||||
R_CURLY@[63; 64)
|
R_CURLY@[65; 66)
|
||||||
WHITESPACE@[64; 65)
|
WHITESPACE@[66; 67)
|
||||||
|
R_CURLY@[67; 68)
|
||||||
|
WHITESPACE@[68; 69)
|
||||||
|
|
Loading…
Reference in a new issue