mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-11-15 17:28:09 +00:00
full precedence
This commit is contained in:
parent
498098a5d9
commit
8908e51aea
18 changed files with 358 additions and 346 deletions
|
@ -43,6 +43,10 @@ Grammar(
|
|||
["-=", "MINUSEQ"],
|
||||
["&&", "AMPAMP"],
|
||||
["||", "PIPEPIPE"],
|
||||
["<<", "SHL"],
|
||||
[">>", "SHR"],
|
||||
["<<=", "SHLEQ"],
|
||||
[">>=", "SHREQ"],
|
||||
],
|
||||
keywords: [
|
||||
"use",
|
||||
|
@ -168,6 +172,7 @@ Grammar(
|
|||
"REF_EXPR",
|
||||
"DEREF_EXPR",
|
||||
"NOT_EXPR",
|
||||
"NEG_EXPR",
|
||||
|
||||
"RANGE_EXPR", // just weird
|
||||
"BIN_EXPR",
|
||||
|
|
|
@ -3,7 +3,7 @@ mod atom;
|
|||
use super::*;
|
||||
pub(super) use self::atom::literal;
|
||||
|
||||
const EXPR_FIRST: TokenSet = UNARY_EXPR_FIRST;
|
||||
const EXPR_FIRST: TokenSet = LHS_FIRST;
|
||||
|
||||
pub(super) fn expr(p: &mut Parser) {
|
||||
let r = Restrictions { forbid_structs: false };
|
||||
|
@ -38,26 +38,6 @@ enum Op {
|
|||
Composite(SyntaxKind, u8),
|
||||
}
|
||||
|
||||
// test expr_binding_power
|
||||
// fn foo() {
|
||||
// 1 + 2 * 3 == 1 * 2 + 3;
|
||||
// *x = 1 + 1;
|
||||
// }
|
||||
|
||||
// test range_binding_power
|
||||
// fn foo() {
|
||||
// .. 1 + 1;
|
||||
// .. z = 2;
|
||||
// x = false .. 1 == 1;
|
||||
// }
|
||||
|
||||
// test compound_ops
|
||||
// fn foo() {
|
||||
// x += 1;
|
||||
// 1 + 1 <= 2 * 3;
|
||||
// z -= 3 >= 0;
|
||||
// true || true && false;
|
||||
// }
|
||||
fn current_op(p: &Parser) -> (u8, Op) {
|
||||
if p.at_compound2(PLUS, EQ) {
|
||||
return (1, Op::Composite(PLUSEQ, 2));
|
||||
|
@ -65,6 +45,12 @@ fn current_op(p: &Parser) -> (u8, Op) {
|
|||
if p.at_compound2(MINUS, EQ) {
|
||||
return (1, Op::Composite(MINUSEQ, 2));
|
||||
}
|
||||
if p.at_compound3(L_ANGLE, L_ANGLE, EQ) {
|
||||
return (1, Op::Composite(SHLEQ, 3));
|
||||
}
|
||||
if p.at_compound3(R_ANGLE, R_ANGLE, EQ) {
|
||||
return (1, Op::Composite(SHREQ, 3));
|
||||
}
|
||||
if p.at_compound2(PIPE, PIPE) {
|
||||
return (3, Op::Composite(PIPEPIPE, 2));
|
||||
}
|
||||
|
@ -77,13 +63,22 @@ fn current_op(p: &Parser) -> (u8, Op) {
|
|||
if p.at_compound2(R_ANGLE, EQ) {
|
||||
return (5, Op::Composite(GTEQ, 2));
|
||||
}
|
||||
if p.at_compound2(L_ANGLE, L_ANGLE) {
|
||||
return (9, Op::Composite(SHL, 2));
|
||||
}
|
||||
if p.at_compound2(R_ANGLE, R_ANGLE) {
|
||||
return (9, Op::Composite(SHR, 2));
|
||||
}
|
||||
|
||||
let bp = match p.current() {
|
||||
EQ => 1,
|
||||
DOTDOT => 2,
|
||||
EQEQ | NEQ => 5,
|
||||
MINUS | PLUS => 6,
|
||||
STAR | SLASH => 7,
|
||||
PIPE => 6,
|
||||
CARET => 7,
|
||||
AMP => 8,
|
||||
MINUS | PLUS => 10,
|
||||
STAR | SLASH | PERCENT => 11,
|
||||
_ => 0,
|
||||
};
|
||||
(bp, Op::Simple)
|
||||
|
@ -107,13 +102,13 @@ fn expr_bp(p: &mut Parser, r: Restrictions, bp: u8) {
|
|||
p.bump_compound(kind, n);
|
||||
}
|
||||
}
|
||||
lhs = bin_expr(p, r, lhs, op_bp);
|
||||
lhs = bin_expr(p, r, lhs, op_bp + 1);
|
||||
}
|
||||
}
|
||||
|
||||
const UNARY_EXPR_FIRST: TokenSet =
|
||||
const LHS_FIRST: TokenSet =
|
||||
token_set_union![
|
||||
token_set![AMP, STAR, EXCL],
|
||||
token_set![AMP, STAR, EXCL, DOTDOT, MINUS],
|
||||
atom::ATOM_EXPR_FIRST,
|
||||
];
|
||||
|
||||
|
@ -149,6 +144,15 @@ fn lhs(p: &mut Parser, r: Restrictions) -> Option<CompletedMarker> {
|
|||
p.bump();
|
||||
NOT_EXPR
|
||||
}
|
||||
// test neg_expr
|
||||
// fn foo() {
|
||||
// --1;
|
||||
// }
|
||||
MINUS => {
|
||||
m = p.start();
|
||||
p.bump();
|
||||
NEG_EXPR
|
||||
}
|
||||
DOTDOT => {
|
||||
m = p.start();
|
||||
p.bump();
|
||||
|
|
|
@ -62,6 +62,10 @@ impl<'t> Parser<'t> {
|
|||
self.0.at_compound2(c1, c2)
|
||||
}
|
||||
|
||||
pub(crate) fn at_compound3(&self, c1: SyntaxKind, c2: SyntaxKind, c3: SyntaxKind) -> bool {
|
||||
self.0.at_compound3(c1, c2, c3)
|
||||
}
|
||||
|
||||
/// Checks if the current token is contextual keyword with text `t`.
|
||||
pub(crate) fn at_contextual_kw(&self, t: &str) -> bool {
|
||||
self.0.at_kw(t)
|
||||
|
|
|
@ -70,6 +70,12 @@ impl<'t> ParserImpl<'t> {
|
|||
&& self.inp.start(self.pos + 1) == self.inp.start(self.pos) + self.inp.len(self.pos)
|
||||
}
|
||||
|
||||
pub(super) fn at_compound3(&self, c1: SyntaxKind, c2: SyntaxKind, c3: SyntaxKind) -> bool {
|
||||
self.inp.kind(self.pos) == c1 && self.inp.kind(self.pos + 1) == c2 && self.inp.kind(self.pos + 2) == c3
|
||||
&& self.inp.start(self.pos + 1) == self.inp.start(self.pos) + self.inp.len(self.pos)
|
||||
&& self.inp.start(self.pos + 2) == self.inp.start(self.pos + 1) + self.inp.len(self.pos + 1)
|
||||
}
|
||||
|
||||
pub(super) fn nth(&self, n: u32) -> SyntaxKind {
|
||||
self.inp.kind(self.pos + n)
|
||||
}
|
||||
|
|
|
@ -46,6 +46,10 @@ pub enum SyntaxKind {
|
|||
MINUSEQ,
|
||||
AMPAMP,
|
||||
PIPEPIPE,
|
||||
SHL,
|
||||
SHR,
|
||||
SHLEQ,
|
||||
SHREQ,
|
||||
USE_KW,
|
||||
FN_KW,
|
||||
STRUCT_KW,
|
||||
|
@ -154,6 +158,7 @@ pub enum SyntaxKind {
|
|||
REF_EXPR,
|
||||
DEREF_EXPR,
|
||||
NOT_EXPR,
|
||||
NEG_EXPR,
|
||||
RANGE_EXPR,
|
||||
BIN_EXPR,
|
||||
EXTERN_BLOCK_EXPR,
|
||||
|
@ -280,6 +285,10 @@ impl SyntaxKind {
|
|||
MINUSEQ => &SyntaxInfo { name: "MINUSEQ" },
|
||||
AMPAMP => &SyntaxInfo { name: "AMPAMP" },
|
||||
PIPEPIPE => &SyntaxInfo { name: "PIPEPIPE" },
|
||||
SHL => &SyntaxInfo { name: "SHL" },
|
||||
SHR => &SyntaxInfo { name: "SHR" },
|
||||
SHLEQ => &SyntaxInfo { name: "SHLEQ" },
|
||||
SHREQ => &SyntaxInfo { name: "SHREQ" },
|
||||
USE_KW => &SyntaxInfo { name: "USE_KW" },
|
||||
FN_KW => &SyntaxInfo { name: "FN_KW" },
|
||||
STRUCT_KW => &SyntaxInfo { name: "STRUCT_KW" },
|
||||
|
@ -388,6 +397,7 @@ impl SyntaxKind {
|
|||
REF_EXPR => &SyntaxInfo { name: "REF_EXPR" },
|
||||
DEREF_EXPR => &SyntaxInfo { name: "DEREF_EXPR" },
|
||||
NOT_EXPR => &SyntaxInfo { name: "NOT_EXPR" },
|
||||
NEG_EXPR => &SyntaxInfo { name: "NEG_EXPR" },
|
||||
RANGE_EXPR => &SyntaxInfo { name: "RANGE_EXPR" },
|
||||
BIN_EXPR => &SyntaxInfo { name: "BIN_EXPR" },
|
||||
EXTERN_BLOCK_EXPR => &SyntaxInfo { name: "EXTERN_BLOCK_EXPR" },
|
||||
|
@ -534,6 +544,10 @@ impl SyntaxKind {
|
|||
MINUSEQ => "-=",
|
||||
AMPAMP => "&&",
|
||||
PIPEPIPE => "||",
|
||||
SHL => "<<",
|
||||
SHR => ">>",
|
||||
SHLEQ => "<<=",
|
||||
SHREQ => ">>=",
|
||||
|
||||
USE_KW => "use",
|
||||
FN_KW => "fn",
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
fn foo() {
|
||||
1 + 2 * 3 == 1 * 2 + 3;
|
||||
*x = 1 + 1;
|
||||
}
|
|
@ -1,72 +0,0 @@
|
|||
FILE@[0; 57)
|
||||
FN_ITEM@[0; 56)
|
||||
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_EXPR@[9; 56)
|
||||
L_CURLY@[9; 10)
|
||||
WHITESPACE@[10; 15)
|
||||
EXPR_STMT@[15; 38)
|
||||
BIN_EXPR@[15; 37)
|
||||
BIN_EXPR@[15; 24)
|
||||
LITERAL@[15; 16)
|
||||
INT_NUMBER@[15; 16) "1"
|
||||
WHITESPACE@[16; 17)
|
||||
PLUS@[17; 18)
|
||||
WHITESPACE@[18; 19)
|
||||
BIN_EXPR@[19; 24)
|
||||
LITERAL@[19; 20)
|
||||
INT_NUMBER@[19; 20) "2"
|
||||
WHITESPACE@[20; 21)
|
||||
STAR@[21; 22)
|
||||
WHITESPACE@[22; 23)
|
||||
LITERAL@[23; 24)
|
||||
INT_NUMBER@[23; 24) "3"
|
||||
WHITESPACE@[24; 25)
|
||||
EQEQ@[25; 27)
|
||||
WHITESPACE@[27; 28)
|
||||
BIN_EXPR@[28; 37)
|
||||
BIN_EXPR@[28; 33)
|
||||
LITERAL@[28; 29)
|
||||
INT_NUMBER@[28; 29) "1"
|
||||
WHITESPACE@[29; 30)
|
||||
STAR@[30; 31)
|
||||
WHITESPACE@[31; 32)
|
||||
LITERAL@[32; 33)
|
||||
INT_NUMBER@[32; 33) "2"
|
||||
WHITESPACE@[33; 34)
|
||||
PLUS@[34; 35)
|
||||
WHITESPACE@[35; 36)
|
||||
LITERAL@[36; 37)
|
||||
INT_NUMBER@[36; 37) "3"
|
||||
SEMI@[37; 38)
|
||||
WHITESPACE@[38; 43)
|
||||
EXPR_STMT@[43; 54)
|
||||
BIN_EXPR@[43; 53)
|
||||
DEREF_EXPR@[43; 45)
|
||||
STAR@[43; 44)
|
||||
PATH_EXPR@[44; 45)
|
||||
PATH@[44; 45)
|
||||
PATH_SEGMENT@[44; 45)
|
||||
NAME_REF@[44; 45)
|
||||
IDENT@[44; 45) "x"
|
||||
WHITESPACE@[45; 46)
|
||||
EQ@[46; 47)
|
||||
WHITESPACE@[47; 48)
|
||||
BIN_EXPR@[48; 53)
|
||||
LITERAL@[48; 49)
|
||||
INT_NUMBER@[48; 49) "1"
|
||||
WHITESPACE@[49; 50)
|
||||
PLUS@[50; 51)
|
||||
WHITESPACE@[51; 52)
|
||||
LITERAL@[52; 53)
|
||||
INT_NUMBER@[52; 53) "1"
|
||||
SEMI@[53; 54)
|
||||
WHITESPACE@[54; 55)
|
||||
R_CURLY@[55; 56)
|
||||
WHITESPACE@[56; 57)
|
|
@ -1,72 +0,0 @@
|
|||
FILE@[0; 62)
|
||||
FN_ITEM@[0; 62)
|
||||
FN_KW@[0; 2)
|
||||
NAME@[2; 6)
|
||||
WHITESPACE@[2; 3)
|
||||
IDENT@[3; 6) "foo"
|
||||
PARAM_LIST@[6; 9)
|
||||
L_PAREN@[6; 7)
|
||||
R_PAREN@[7; 8)
|
||||
WHITESPACE@[8; 9)
|
||||
BLOCK_EXPR@[9; 62)
|
||||
L_CURLY@[9; 10)
|
||||
EXPR_STMT@[10; 27)
|
||||
BIN_EXPR@[10; 21)
|
||||
PATH_EXPR@[10; 17)
|
||||
PATH@[10; 17)
|
||||
PATH_SEGMENT@[10; 17)
|
||||
NAME_REF@[10; 17)
|
||||
WHITESPACE@[10; 15)
|
||||
IDENT@[15; 16) "x"
|
||||
WHITESPACE@[16; 17)
|
||||
PLUSEQ@[17; 19)
|
||||
LITERAL@[19; 21)
|
||||
WHITESPACE@[19; 20)
|
||||
INT_NUMBER@[20; 21) "1"
|
||||
SEMI@[21; 22)
|
||||
WHITESPACE@[22; 27)
|
||||
EXPR_STMT@[27; 47)
|
||||
BIN_EXPR@[27; 41)
|
||||
BIN_EXPR@[27; 33)
|
||||
LITERAL@[27; 29)
|
||||
INT_NUMBER@[27; 28) "1"
|
||||
WHITESPACE@[28; 29)
|
||||
PLUS@[29; 30)
|
||||
LITERAL@[30; 33)
|
||||
WHITESPACE@[30; 31)
|
||||
INT_NUMBER@[31; 32) "1"
|
||||
WHITESPACE@[32; 33)
|
||||
LTEQ@[33; 35)
|
||||
BIN_EXPR@[35; 41)
|
||||
LITERAL@[35; 38)
|
||||
WHITESPACE@[35; 36)
|
||||
INT_NUMBER@[36; 37) "2"
|
||||
WHITESPACE@[37; 38)
|
||||
STAR@[38; 39)
|
||||
LITERAL@[39; 41)
|
||||
WHITESPACE@[39; 40)
|
||||
INT_NUMBER@[40; 41) "3"
|
||||
SEMI@[41; 42)
|
||||
WHITESPACE@[42; 47)
|
||||
EXPR_STMT@[47; 60)
|
||||
BIN_EXPR@[47; 58)
|
||||
PATH_EXPR@[47; 49)
|
||||
PATH@[47; 49)
|
||||
PATH_SEGMENT@[47; 49)
|
||||
NAME_REF@[47; 49)
|
||||
IDENT@[47; 48) "z"
|
||||
WHITESPACE@[48; 49)
|
||||
MINUSEQ@[49; 51)
|
||||
BIN_EXPR@[51; 58)
|
||||
LITERAL@[51; 54)
|
||||
WHITESPACE@[51; 52)
|
||||
INT_NUMBER@[52; 53) "3"
|
||||
WHITESPACE@[53; 54)
|
||||
GTEQ@[54; 56)
|
||||
LITERAL@[56; 58)
|
||||
WHITESPACE@[56; 57)
|
||||
INT_NUMBER@[57; 58) "0"
|
||||
SEMI@[58; 59)
|
||||
WHITESPACE@[59; 60)
|
||||
R_CURLY@[60; 61)
|
||||
WHITESPACE@[61; 62)
|
|
@ -1,5 +0,0 @@
|
|||
fn foo() {
|
||||
.. 1 + 1;
|
||||
.. z = 2;
|
||||
x = false .. 1 == 1;
|
||||
}
|
|
@ -1,72 +0,0 @@
|
|||
FILE@[0; 66)
|
||||
FN_ITEM@[0; 65)
|
||||
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_EXPR@[9; 65)
|
||||
L_CURLY@[9; 10)
|
||||
WHITESPACE@[10; 15)
|
||||
EXPR_STMT@[15; 24)
|
||||
RANGE_EXPR@[15; 23)
|
||||
DOTDOT@[15; 17)
|
||||
WHITESPACE@[17; 18)
|
||||
BIN_EXPR@[18; 23)
|
||||
LITERAL@[18; 19)
|
||||
INT_NUMBER@[18; 19) "1"
|
||||
WHITESPACE@[19; 20)
|
||||
PLUS@[20; 21)
|
||||
WHITESPACE@[21; 22)
|
||||
LITERAL@[22; 23)
|
||||
INT_NUMBER@[22; 23) "1"
|
||||
SEMI@[23; 24)
|
||||
WHITESPACE@[24; 29)
|
||||
EXPR_STMT@[29; 38)
|
||||
BIN_EXPR@[29; 37)
|
||||
RANGE_EXPR@[29; 33)
|
||||
DOTDOT@[29; 31)
|
||||
WHITESPACE@[31; 32)
|
||||
PATH_EXPR@[32; 33)
|
||||
PATH@[32; 33)
|
||||
PATH_SEGMENT@[32; 33)
|
||||
NAME_REF@[32; 33)
|
||||
IDENT@[32; 33) "z"
|
||||
WHITESPACE@[33; 34)
|
||||
EQ@[34; 35)
|
||||
WHITESPACE@[35; 36)
|
||||
LITERAL@[36; 37)
|
||||
INT_NUMBER@[36; 37) "2"
|
||||
SEMI@[37; 38)
|
||||
WHITESPACE@[38; 43)
|
||||
EXPR_STMT@[43; 63)
|
||||
BIN_EXPR@[43; 62)
|
||||
PATH_EXPR@[43; 44)
|
||||
PATH@[43; 44)
|
||||
PATH_SEGMENT@[43; 44)
|
||||
NAME_REF@[43; 44)
|
||||
IDENT@[43; 44) "x"
|
||||
WHITESPACE@[44; 45)
|
||||
EQ@[45; 46)
|
||||
WHITESPACE@[46; 47)
|
||||
BIN_EXPR@[47; 62)
|
||||
LITERAL@[47; 52)
|
||||
FALSE_KW@[47; 52)
|
||||
WHITESPACE@[52; 53)
|
||||
DOTDOT@[53; 55)
|
||||
WHITESPACE@[55; 56)
|
||||
BIN_EXPR@[56; 62)
|
||||
LITERAL@[56; 57)
|
||||
INT_NUMBER@[56; 57) "1"
|
||||
WHITESPACE@[57; 58)
|
||||
EQEQ@[58; 60)
|
||||
WHITESPACE@[60; 61)
|
||||
LITERAL@[61; 62)
|
||||
INT_NUMBER@[61; 62) "1"
|
||||
SEMI@[62; 63)
|
||||
WHITESPACE@[63; 64)
|
||||
R_CURLY@[64; 65)
|
||||
WHITESPACE@[65; 66)
|
|
@ -1,6 +0,0 @@
|
|||
fn foo() {
|
||||
x += 1;
|
||||
1 + 1 <= 2 * 3;
|
||||
z -= 3 >= 0;
|
||||
true || true && false;
|
||||
}
|
|
@ -1,89 +0,0 @@
|
|||
FILE@[0; 89)
|
||||
FN_ITEM@[0; 88)
|
||||
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_EXPR@[9; 88)
|
||||
L_CURLY@[9; 10)
|
||||
WHITESPACE@[10; 15)
|
||||
EXPR_STMT@[15; 22)
|
||||
BIN_EXPR@[15; 21)
|
||||
PATH_EXPR@[15; 16)
|
||||
PATH@[15; 16)
|
||||
PATH_SEGMENT@[15; 16)
|
||||
NAME_REF@[15; 16)
|
||||
IDENT@[15; 16) "x"
|
||||
WHITESPACE@[16; 17)
|
||||
PLUSEQ@[17; 19)
|
||||
WHITESPACE@[19; 20)
|
||||
LITERAL@[20; 21)
|
||||
INT_NUMBER@[20; 21) "1"
|
||||
SEMI@[21; 22)
|
||||
WHITESPACE@[22; 27)
|
||||
EXPR_STMT@[27; 42)
|
||||
BIN_EXPR@[27; 41)
|
||||
BIN_EXPR@[27; 32)
|
||||
LITERAL@[27; 28)
|
||||
INT_NUMBER@[27; 28) "1"
|
||||
WHITESPACE@[28; 29)
|
||||
PLUS@[29; 30)
|
||||
WHITESPACE@[30; 31)
|
||||
LITERAL@[31; 32)
|
||||
INT_NUMBER@[31; 32) "1"
|
||||
WHITESPACE@[32; 33)
|
||||
LTEQ@[33; 35)
|
||||
WHITESPACE@[35; 36)
|
||||
BIN_EXPR@[36; 41)
|
||||
LITERAL@[36; 37)
|
||||
INT_NUMBER@[36; 37) "2"
|
||||
WHITESPACE@[37; 38)
|
||||
STAR@[38; 39)
|
||||
WHITESPACE@[39; 40)
|
||||
LITERAL@[40; 41)
|
||||
INT_NUMBER@[40; 41) "3"
|
||||
SEMI@[41; 42)
|
||||
WHITESPACE@[42; 47)
|
||||
EXPR_STMT@[47; 59)
|
||||
BIN_EXPR@[47; 58)
|
||||
PATH_EXPR@[47; 48)
|
||||
PATH@[47; 48)
|
||||
PATH_SEGMENT@[47; 48)
|
||||
NAME_REF@[47; 48)
|
||||
IDENT@[47; 48) "z"
|
||||
WHITESPACE@[48; 49)
|
||||
MINUSEQ@[49; 51)
|
||||
WHITESPACE@[51; 52)
|
||||
BIN_EXPR@[52; 58)
|
||||
LITERAL@[52; 53)
|
||||
INT_NUMBER@[52; 53) "3"
|
||||
WHITESPACE@[53; 54)
|
||||
GTEQ@[54; 56)
|
||||
WHITESPACE@[56; 57)
|
||||
LITERAL@[57; 58)
|
||||
INT_NUMBER@[57; 58) "0"
|
||||
SEMI@[58; 59)
|
||||
WHITESPACE@[59; 64)
|
||||
EXPR_STMT@[64; 86)
|
||||
BIN_EXPR@[64; 85)
|
||||
LITERAL@[64; 68)
|
||||
TRUE_KW@[64; 68)
|
||||
WHITESPACE@[68; 69)
|
||||
PIPEPIPE@[69; 71)
|
||||
WHITESPACE@[71; 72)
|
||||
BIN_EXPR@[72; 85)
|
||||
LITERAL@[72; 76)
|
||||
TRUE_KW@[72; 76)
|
||||
WHITESPACE@[76; 77)
|
||||
AMPAMP@[77; 79)
|
||||
WHITESPACE@[79; 80)
|
||||
LITERAL@[80; 85)
|
||||
FALSE_KW@[80; 85)
|
||||
SEMI@[85; 86)
|
||||
WHITESPACE@[86; 87)
|
||||
R_CURLY@[87; 88)
|
||||
WHITESPACE@[88; 89)
|
3
tests/data/parser/inline/0085_neg_expr.rs
Normal file
3
tests/data/parser/inline/0085_neg_expr.rs
Normal file
|
@ -0,0 +1,3 @@
|
|||
fn foo() {
|
||||
--1;
|
||||
}
|
24
tests/data/parser/inline/0085_neg_expr.txt
Normal file
24
tests/data/parser/inline/0085_neg_expr.txt
Normal file
|
@ -0,0 +1,24 @@
|
|||
FILE@[0; 22)
|
||||
FN_ITEM@[0; 21)
|
||||
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_EXPR@[9; 21)
|
||||
L_CURLY@[9; 10)
|
||||
WHITESPACE@[10; 15)
|
||||
EXPR_STMT@[15; 19)
|
||||
NEG_EXPR@[15; 18)
|
||||
MINUS@[15; 16)
|
||||
NEG_EXPR@[16; 18)
|
||||
MINUS@[16; 17)
|
||||
LITERAL@[17; 18)
|
||||
INT_NUMBER@[17; 18) "1"
|
||||
SEMI@[18; 19)
|
||||
WHITESPACE@[19; 20)
|
||||
R_CURLY@[20; 21)
|
||||
WHITESPACE@[21; 22)
|
14
tests/data/parser/ok/0028_operator_binding_power.rs
Normal file
14
tests/data/parser/ok/0028_operator_binding_power.rs
Normal file
|
@ -0,0 +1,14 @@
|
|||
fn binding_power() {
|
||||
let x = 1 + 2 * 3 % 4 - 5 / 6;
|
||||
1 + 2 * 3;
|
||||
1 << 2 + 3;
|
||||
1 & 2 >> 3;
|
||||
1 ^ 2 & 3;
|
||||
1 | 2 ^ 3;
|
||||
1 == 2 | 3;
|
||||
1 && 2 == 3;
|
||||
//1 || 2 && 2;
|
||||
//1 .. 2 || 3;
|
||||
//1 = 2 .. 3;
|
||||
//---&*1 - --2 * 9;
|
||||
}
|
185
tests/data/parser/ok/0028_operator_binding_power.txt
Normal file
185
tests/data/parser/ok/0028_operator_binding_power.txt
Normal file
|
@ -0,0 +1,185 @@
|
|||
FILE@[0; 248)
|
||||
FN_ITEM@[0; 247)
|
||||
FN_KW@[0; 2)
|
||||
WHITESPACE@[2; 3)
|
||||
NAME@[3; 16)
|
||||
IDENT@[3; 16) "binding_power"
|
||||
PARAM_LIST@[16; 18)
|
||||
L_PAREN@[16; 17)
|
||||
R_PAREN@[17; 18)
|
||||
WHITESPACE@[18; 19)
|
||||
BLOCK_EXPR@[19; 247)
|
||||
L_CURLY@[19; 20)
|
||||
WHITESPACE@[20; 25)
|
||||
LET_STMT@[25; 55)
|
||||
LET_KW@[25; 28)
|
||||
WHITESPACE@[28; 29)
|
||||
BIND_PAT@[29; 30)
|
||||
NAME@[29; 30)
|
||||
IDENT@[29; 30) "x"
|
||||
WHITESPACE@[30; 31)
|
||||
EQ@[31; 32)
|
||||
WHITESPACE@[32; 33)
|
||||
BIN_EXPR@[33; 54)
|
||||
BIN_EXPR@[33; 46)
|
||||
LITERAL@[33; 34)
|
||||
INT_NUMBER@[33; 34) "1"
|
||||
WHITESPACE@[34; 35)
|
||||
PLUS@[35; 36)
|
||||
WHITESPACE@[36; 37)
|
||||
BIN_EXPR@[37; 46)
|
||||
BIN_EXPR@[37; 42)
|
||||
LITERAL@[37; 38)
|
||||
INT_NUMBER@[37; 38) "2"
|
||||
WHITESPACE@[38; 39)
|
||||
STAR@[39; 40)
|
||||
WHITESPACE@[40; 41)
|
||||
LITERAL@[41; 42)
|
||||
INT_NUMBER@[41; 42) "3"
|
||||
WHITESPACE@[42; 43)
|
||||
PERCENT@[43; 44)
|
||||
WHITESPACE@[44; 45)
|
||||
LITERAL@[45; 46)
|
||||
INT_NUMBER@[45; 46) "4"
|
||||
WHITESPACE@[46; 47)
|
||||
MINUS@[47; 48)
|
||||
WHITESPACE@[48; 49)
|
||||
BIN_EXPR@[49; 54)
|
||||
LITERAL@[49; 50)
|
||||
INT_NUMBER@[49; 50) "5"
|
||||
WHITESPACE@[50; 51)
|
||||
SLASH@[51; 52)
|
||||
WHITESPACE@[52; 53)
|
||||
LITERAL@[53; 54)
|
||||
INT_NUMBER@[53; 54) "6"
|
||||
SEMI@[54; 55)
|
||||
WHITESPACE@[55; 60)
|
||||
EXPR_STMT@[60; 70)
|
||||
BIN_EXPR@[60; 69)
|
||||
LITERAL@[60; 61)
|
||||
INT_NUMBER@[60; 61) "1"
|
||||
WHITESPACE@[61; 62)
|
||||
PLUS@[62; 63)
|
||||
WHITESPACE@[63; 64)
|
||||
BIN_EXPR@[64; 69)
|
||||
LITERAL@[64; 65)
|
||||
INT_NUMBER@[64; 65) "2"
|
||||
WHITESPACE@[65; 66)
|
||||
STAR@[66; 67)
|
||||
WHITESPACE@[67; 68)
|
||||
LITERAL@[68; 69)
|
||||
INT_NUMBER@[68; 69) "3"
|
||||
SEMI@[69; 70)
|
||||
WHITESPACE@[70; 75)
|
||||
EXPR_STMT@[75; 86)
|
||||
BIN_EXPR@[75; 85)
|
||||
LITERAL@[75; 76)
|
||||
INT_NUMBER@[75; 76) "1"
|
||||
WHITESPACE@[76; 77)
|
||||
SHL@[77; 79)
|
||||
WHITESPACE@[79; 80)
|
||||
BIN_EXPR@[80; 85)
|
||||
LITERAL@[80; 81)
|
||||
INT_NUMBER@[80; 81) "2"
|
||||
WHITESPACE@[81; 82)
|
||||
PLUS@[82; 83)
|
||||
WHITESPACE@[83; 84)
|
||||
LITERAL@[84; 85)
|
||||
INT_NUMBER@[84; 85) "3"
|
||||
SEMI@[85; 86)
|
||||
WHITESPACE@[86; 91)
|
||||
EXPR_STMT@[91; 102)
|
||||
BIN_EXPR@[91; 101)
|
||||
LITERAL@[91; 92)
|
||||
INT_NUMBER@[91; 92) "1"
|
||||
WHITESPACE@[92; 93)
|
||||
AMP@[93; 94)
|
||||
WHITESPACE@[94; 95)
|
||||
BIN_EXPR@[95; 101)
|
||||
LITERAL@[95; 96)
|
||||
INT_NUMBER@[95; 96) "2"
|
||||
WHITESPACE@[96; 97)
|
||||
SHR@[97; 99)
|
||||
WHITESPACE@[99; 100)
|
||||
LITERAL@[100; 101)
|
||||
INT_NUMBER@[100; 101) "3"
|
||||
SEMI@[101; 102)
|
||||
WHITESPACE@[102; 107)
|
||||
EXPR_STMT@[107; 117)
|
||||
BIN_EXPR@[107; 116)
|
||||
LITERAL@[107; 108)
|
||||
INT_NUMBER@[107; 108) "1"
|
||||
WHITESPACE@[108; 109)
|
||||
CARET@[109; 110)
|
||||
WHITESPACE@[110; 111)
|
||||
BIN_EXPR@[111; 116)
|
||||
LITERAL@[111; 112)
|
||||
INT_NUMBER@[111; 112) "2"
|
||||
WHITESPACE@[112; 113)
|
||||
AMP@[113; 114)
|
||||
WHITESPACE@[114; 115)
|
||||
LITERAL@[115; 116)
|
||||
INT_NUMBER@[115; 116) "3"
|
||||
SEMI@[116; 117)
|
||||
WHITESPACE@[117; 122)
|
||||
EXPR_STMT@[122; 132)
|
||||
BIN_EXPR@[122; 131)
|
||||
LITERAL@[122; 123)
|
||||
INT_NUMBER@[122; 123) "1"
|
||||
WHITESPACE@[123; 124)
|
||||
PIPE@[124; 125)
|
||||
WHITESPACE@[125; 126)
|
||||
BIN_EXPR@[126; 131)
|
||||
LITERAL@[126; 127)
|
||||
INT_NUMBER@[126; 127) "2"
|
||||
WHITESPACE@[127; 128)
|
||||
CARET@[128; 129)
|
||||
WHITESPACE@[129; 130)
|
||||
LITERAL@[130; 131)
|
||||
INT_NUMBER@[130; 131) "3"
|
||||
SEMI@[131; 132)
|
||||
WHITESPACE@[132; 137)
|
||||
EXPR_STMT@[137; 148)
|
||||
BIN_EXPR@[137; 147)
|
||||
LITERAL@[137; 138)
|
||||
INT_NUMBER@[137; 138) "1"
|
||||
WHITESPACE@[138; 139)
|
||||
EQEQ@[139; 141)
|
||||
WHITESPACE@[141; 142)
|
||||
BIN_EXPR@[142; 147)
|
||||
LITERAL@[142; 143)
|
||||
INT_NUMBER@[142; 143) "2"
|
||||
WHITESPACE@[143; 144)
|
||||
PIPE@[144; 145)
|
||||
WHITESPACE@[145; 146)
|
||||
LITERAL@[146; 147)
|
||||
INT_NUMBER@[146; 147) "3"
|
||||
SEMI@[147; 148)
|
||||
WHITESPACE@[148; 153)
|
||||
EXPR_STMT@[153; 165)
|
||||
BIN_EXPR@[153; 164)
|
||||
LITERAL@[153; 154)
|
||||
INT_NUMBER@[153; 154) "1"
|
||||
WHITESPACE@[154; 155)
|
||||
AMPAMP@[155; 157)
|
||||
WHITESPACE@[157; 158)
|
||||
BIN_EXPR@[158; 164)
|
||||
LITERAL@[158; 159)
|
||||
INT_NUMBER@[158; 159) "2"
|
||||
WHITESPACE@[159; 160)
|
||||
EQEQ@[160; 162)
|
||||
WHITESPACE@[162; 163)
|
||||
LITERAL@[163; 164)
|
||||
INT_NUMBER@[163; 164) "3"
|
||||
SEMI@[164; 165)
|
||||
WHITESPACE@[165; 170)
|
||||
COMMENT@[170; 184)
|
||||
WHITESPACE@[184; 189)
|
||||
COMMENT@[189; 203)
|
||||
WHITESPACE@[203; 208)
|
||||
COMMENT@[208; 221)
|
||||
WHITESPACE@[221; 226)
|
||||
COMMENT@[226; 245)
|
||||
WHITESPACE@[245; 246)
|
||||
R_CURLY@[246; 247)
|
||||
WHITESPACE@[247; 248)
|
5
tests/data/parser/ok/0029_range_forms.rs
Normal file
5
tests/data/parser/ok/0029_range_forms.rs
Normal file
|
@ -0,0 +1,5 @@
|
|||
fn foo() {
|
||||
..1 + 1;
|
||||
..z = 2;
|
||||
x = false..1 == 1;
|
||||
}
|
68
tests/data/parser/ok/0029_range_forms.txt
Normal file
68
tests/data/parser/ok/0029_range_forms.txt
Normal file
|
@ -0,0 +1,68 @@
|
|||
FILE@[0; 62)
|
||||
FN_ITEM@[0; 61)
|
||||
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_EXPR@[9; 61)
|
||||
L_CURLY@[9; 10)
|
||||
WHITESPACE@[10; 15)
|
||||
EXPR_STMT@[15; 23)
|
||||
RANGE_EXPR@[15; 22)
|
||||
DOTDOT@[15; 17)
|
||||
BIN_EXPR@[17; 22)
|
||||
LITERAL@[17; 18)
|
||||
INT_NUMBER@[17; 18) "1"
|
||||
WHITESPACE@[18; 19)
|
||||
PLUS@[19; 20)
|
||||
WHITESPACE@[20; 21)
|
||||
LITERAL@[21; 22)
|
||||
INT_NUMBER@[21; 22) "1"
|
||||
SEMI@[22; 23)
|
||||
WHITESPACE@[23; 28)
|
||||
EXPR_STMT@[28; 36)
|
||||
BIN_EXPR@[28; 35)
|
||||
RANGE_EXPR@[28; 31)
|
||||
DOTDOT@[28; 30)
|
||||
PATH_EXPR@[30; 31)
|
||||
PATH@[30; 31)
|
||||
PATH_SEGMENT@[30; 31)
|
||||
NAME_REF@[30; 31)
|
||||
IDENT@[30; 31) "z"
|
||||
WHITESPACE@[31; 32)
|
||||
EQ@[32; 33)
|
||||
WHITESPACE@[33; 34)
|
||||
LITERAL@[34; 35)
|
||||
INT_NUMBER@[34; 35) "2"
|
||||
SEMI@[35; 36)
|
||||
WHITESPACE@[36; 41)
|
||||
EXPR_STMT@[41; 59)
|
||||
BIN_EXPR@[41; 58)
|
||||
PATH_EXPR@[41; 42)
|
||||
PATH@[41; 42)
|
||||
PATH_SEGMENT@[41; 42)
|
||||
NAME_REF@[41; 42)
|
||||
IDENT@[41; 42) "x"
|
||||
WHITESPACE@[42; 43)
|
||||
EQ@[43; 44)
|
||||
WHITESPACE@[44; 45)
|
||||
BIN_EXPR@[45; 58)
|
||||
LITERAL@[45; 50)
|
||||
FALSE_KW@[45; 50)
|
||||
DOTDOT@[50; 52)
|
||||
BIN_EXPR@[52; 58)
|
||||
LITERAL@[52; 53)
|
||||
INT_NUMBER@[52; 53) "1"
|
||||
WHITESPACE@[53; 54)
|
||||
EQEQ@[54; 56)
|
||||
WHITESPACE@[56; 57)
|
||||
LITERAL@[57; 58)
|
||||
INT_NUMBER@[57; 58) "1"
|
||||
SEMI@[58; 59)
|
||||
WHITESPACE@[59; 60)
|
||||
R_CURLY@[60; 61)
|
||||
WHITESPACE@[61; 62)
|
Loading…
Reference in a new issue