From a8ee994ae0fc986056b4d32c5797ab448ae5a812 Mon Sep 17 00:00:00 2001 From: Jean Mertz Date: Sat, 16 Mar 2019 22:08:50 +0100 Subject: support remainder assignment operator --- crates/ra_parser/src/grammar/expressions.rs | 1 + .../data/parser/ok/0048_compound_assignment.rs | 17 ++ .../data/parser/ok/0048_compound_assignment.txt | 200 +++++++++++++++++++++ 3 files changed, 218 insertions(+) create mode 100644 crates/ra_syntax/tests/data/parser/ok/0048_compound_assignment.rs create mode 100644 crates/ra_syntax/tests/data/parser/ok/0048_compound_assignment.txt (limited to 'crates') diff --git a/crates/ra_parser/src/grammar/expressions.rs b/crates/ra_parser/src/grammar/expressions.rs index 70c71a8e1..0df57afa7 100644 --- a/crates/ra_parser/src/grammar/expressions.rs +++ b/crates/ra_parser/src/grammar/expressions.rs @@ -155,6 +155,7 @@ fn current_op(p: &Parser) -> (u8, Op) { (PLUS, EQ) => return (1, Op::Composite(PLUSEQ, 2)), (MINUS, EQ) => return (1, Op::Composite(MINUSEQ, 2)), (STAR, EQ) => return (1, Op::Composite(STAREQ, 2)), + (PERCENT, EQ) => return (1, Op::Composite(PERCENTEQ, 2)), (SLASH, EQ) => return (1, Op::Composite(SLASHEQ, 2)), (PIPE, EQ) => return (1, Op::Composite(PIPEEQ, 2)), (AMP, EQ) => return (1, Op::Composite(AMPEQ, 2)), diff --git a/crates/ra_syntax/tests/data/parser/ok/0048_compound_assignment.rs b/crates/ra_syntax/tests/data/parser/ok/0048_compound_assignment.rs new file mode 100644 index 000000000..871720a49 --- /dev/null +++ b/crates/ra_syntax/tests/data/parser/ok/0048_compound_assignment.rs @@ -0,0 +1,17 @@ +// https://github.com/rust-analyzer/rust-analyzer/pull/983 + +fn compound_assignment() { + let mut a = 0; + a += 1; + a -= 2; + a *= 3; + a %= 4; + a /= 5; + a |= 6; + a &= 7; + a ^= 8; + a <= 9; + a >= 10; + a >>= 11; + a <<= 12; +} diff --git a/crates/ra_syntax/tests/data/parser/ok/0048_compound_assignment.txt b/crates/ra_syntax/tests/data/parser/ok/0048_compound_assignment.txt new file mode 100644 index 000000000..c5ff06823 --- /dev/null +++ b/crates/ra_syntax/tests/data/parser/ok/0048_compound_assignment.txt @@ -0,0 +1,200 @@ +SOURCE_FILE@[0; 257) + COMMENT@[0; 58) + WHITESPACE@[58; 60) + FN_DEF@[60; 256) + FN_KW@[60; 62) + WHITESPACE@[62; 63) + NAME@[63; 82) + IDENT@[63; 82) "compound_assignment" + PARAM_LIST@[82; 84) + L_PAREN@[82; 83) + R_PAREN@[83; 84) + WHITESPACE@[84; 85) + BLOCK@[85; 256) + L_CURLY@[85; 86) + WHITESPACE@[86; 91) + LET_STMT@[91; 105) + LET_KW@[91; 94) + WHITESPACE@[94; 95) + BIND_PAT@[95; 100) + MUT_KW@[95; 98) + WHITESPACE@[98; 99) + NAME@[99; 100) + IDENT@[99; 100) "a" + WHITESPACE@[100; 101) + EQ@[101; 102) + WHITESPACE@[102; 103) + LITERAL@[103; 104) + INT_NUMBER@[103; 104) "0" + SEMI@[104; 105) + WHITESPACE@[105; 110) + EXPR_STMT@[110; 117) + BIN_EXPR@[110; 116) + PATH_EXPR@[110; 111) + PATH@[110; 111) + PATH_SEGMENT@[110; 111) + NAME_REF@[110; 111) + IDENT@[110; 111) "a" + WHITESPACE@[111; 112) + PLUSEQ@[112; 114) + WHITESPACE@[114; 115) + LITERAL@[115; 116) + INT_NUMBER@[115; 116) "1" + SEMI@[116; 117) + WHITESPACE@[117; 122) + EXPR_STMT@[122; 129) + BIN_EXPR@[122; 128) + PATH_EXPR@[122; 123) + PATH@[122; 123) + PATH_SEGMENT@[122; 123) + NAME_REF@[122; 123) + IDENT@[122; 123) "a" + WHITESPACE@[123; 124) + MINUSEQ@[124; 126) + WHITESPACE@[126; 127) + LITERAL@[127; 128) + INT_NUMBER@[127; 128) "2" + SEMI@[128; 129) + WHITESPACE@[129; 134) + EXPR_STMT@[134; 141) + BIN_EXPR@[134; 140) + PATH_EXPR@[134; 135) + PATH@[134; 135) + PATH_SEGMENT@[134; 135) + NAME_REF@[134; 135) + IDENT@[134; 135) "a" + WHITESPACE@[135; 136) + STAREQ@[136; 138) + WHITESPACE@[138; 139) + LITERAL@[139; 140) + INT_NUMBER@[139; 140) "3" + SEMI@[140; 141) + WHITESPACE@[141; 146) + EXPR_STMT@[146; 153) + BIN_EXPR@[146; 152) + PATH_EXPR@[146; 147) + PATH@[146; 147) + PATH_SEGMENT@[146; 147) + NAME_REF@[146; 147) + IDENT@[146; 147) "a" + WHITESPACE@[147; 148) + PERCENTEQ@[148; 150) + WHITESPACE@[150; 151) + LITERAL@[151; 152) + INT_NUMBER@[151; 152) "4" + SEMI@[152; 153) + WHITESPACE@[153; 158) + EXPR_STMT@[158; 165) + BIN_EXPR@[158; 164) + PATH_EXPR@[158; 159) + PATH@[158; 159) + PATH_SEGMENT@[158; 159) + NAME_REF@[158; 159) + IDENT@[158; 159) "a" + WHITESPACE@[159; 160) + SLASHEQ@[160; 162) + WHITESPACE@[162; 163) + LITERAL@[163; 164) + INT_NUMBER@[163; 164) "5" + SEMI@[164; 165) + WHITESPACE@[165; 170) + EXPR_STMT@[170; 177) + BIN_EXPR@[170; 176) + PATH_EXPR@[170; 171) + PATH@[170; 171) + PATH_SEGMENT@[170; 171) + NAME_REF@[170; 171) + IDENT@[170; 171) "a" + WHITESPACE@[171; 172) + PIPEEQ@[172; 174) + WHITESPACE@[174; 175) + LITERAL@[175; 176) + INT_NUMBER@[175; 176) "6" + SEMI@[176; 177) + WHITESPACE@[177; 182) + EXPR_STMT@[182; 189) + BIN_EXPR@[182; 188) + PATH_EXPR@[182; 183) + PATH@[182; 183) + PATH_SEGMENT@[182; 183) + NAME_REF@[182; 183) + IDENT@[182; 183) "a" + WHITESPACE@[183; 184) + AMPEQ@[184; 186) + WHITESPACE@[186; 187) + LITERAL@[187; 188) + INT_NUMBER@[187; 188) "7" + SEMI@[188; 189) + WHITESPACE@[189; 194) + EXPR_STMT@[194; 201) + BIN_EXPR@[194; 200) + PATH_EXPR@[194; 195) + PATH@[194; 195) + PATH_SEGMENT@[194; 195) + NAME_REF@[194; 195) + IDENT@[194; 195) "a" + WHITESPACE@[195; 196) + CARETEQ@[196; 198) + WHITESPACE@[198; 199) + LITERAL@[199; 200) + INT_NUMBER@[199; 200) "8" + SEMI@[200; 201) + WHITESPACE@[201; 206) + EXPR_STMT@[206; 213) + BIN_EXPR@[206; 212) + PATH_EXPR@[206; 207) + PATH@[206; 207) + PATH_SEGMENT@[206; 207) + NAME_REF@[206; 207) + IDENT@[206; 207) "a" + WHITESPACE@[207; 208) + LTEQ@[208; 210) + WHITESPACE@[210; 211) + LITERAL@[211; 212) + INT_NUMBER@[211; 212) "9" + SEMI@[212; 213) + WHITESPACE@[213; 218) + EXPR_STMT@[218; 226) + BIN_EXPR@[218; 225) + PATH_EXPR@[218; 219) + PATH@[218; 219) + PATH_SEGMENT@[218; 219) + NAME_REF@[218; 219) + IDENT@[218; 219) "a" + WHITESPACE@[219; 220) + GTEQ@[220; 222) + WHITESPACE@[222; 223) + LITERAL@[223; 225) + INT_NUMBER@[223; 225) "10" + SEMI@[225; 226) + WHITESPACE@[226; 231) + EXPR_STMT@[231; 240) + BIN_EXPR@[231; 239) + PATH_EXPR@[231; 232) + PATH@[231; 232) + PATH_SEGMENT@[231; 232) + NAME_REF@[231; 232) + IDENT@[231; 232) "a" + WHITESPACE@[232; 233) + SHREQ@[233; 236) + WHITESPACE@[236; 237) + LITERAL@[237; 239) + INT_NUMBER@[237; 239) "11" + SEMI@[239; 240) + WHITESPACE@[240; 245) + EXPR_STMT@[245; 254) + BIN_EXPR@[245; 253) + PATH_EXPR@[245; 246) + PATH@[245; 246) + PATH_SEGMENT@[245; 246) + NAME_REF@[245; 246) + IDENT@[245; 246) "a" + WHITESPACE@[246; 247) + SHLEQ@[247; 250) + WHITESPACE@[250; 251) + LITERAL@[251; 253) + INT_NUMBER@[251; 253) "12" + SEMI@[253; 254) + WHITESPACE@[254; 255) + R_CURLY@[255; 256) + WHITESPACE@[256; 257) -- cgit v1.2.3