Operator precedence for '@' (PY-15390)

This commit is contained in:
Andrey Vlasovskikh
2015-03-24 18:30:08 +03:00
parent 2a3a64e3d0
commit 9f555474a7
3 changed files with 63 additions and 1 deletions
@@ -453,7 +453,7 @@ public class PyReplaceExpressionUtil implements PyElementTypes {
else if (expr instanceof PyBinaryExpression) {
final IElementType opType = getOperationType(expr);
if (opType == EXP) priority = 3;
if (opType == MULT || opType == DIV || opType == PERC || opType == FLOORDIV) priority = 4;
if (opType == MULT || opType == AT || opType == DIV || opType == PERC || opType == FLOORDIV) priority = 4;
if (opType == PLUS || opType == MINUS) priority = 5;
if (opType == LTLT || opType == GTGT) priority = 6;
if (opType == AND) priority = 7;
@@ -0,0 +1,57 @@
(y @ z)[::-5]
(y @ z)[5]
(y @ z)(5)
(y @ z).foo
-(y @ z)
+(y @ z)
~(y @ z)
5 ** (y @ z)
(y @ z) ** 5
5 * y @ z
y @ z * 5
5 / (y @ z)
y @ z / 5
5 // (y @ z)
y @ z // 5
5 + y @ z
y @ z + 5
y @ z - 5
5 - y @ z
5 >> y @ z
y @ z << 5
5 & y @ z
y @ z & 5
5 ^ y @ z
y @ z ^ 5
5 | y @ z
y @ z | 5
() in y @ z
y @ z in ()
5 is y @ z
y @ z is 5
5 < y @ z
y @ z < 5
not y @ z
5 and y @ z
y @ z and 5
5 or y @ z
y @ z or 5
y @ z if y @ z else y @ z
@@ -145,6 +145,11 @@ public class PyInlineLocalTest extends PyTestCase {
checkOperatorPrecedence("x = 10 if True else 2", "conditional");
}
// PY-15390
public void testMatMulPrecedence() throws Exception {
checkOperatorPrecedence("x = y @ z", "matrixMultiplication");
}
private void checkOperatorPrecedence(@NotNull final String firstLine, @NotNull String resultPrefix) throws Exception {
myFixture.configureByFile("/refactoring/inlinelocal/operatorPrecedence/template.py");
WriteCommandAction.runWriteCommandAction(myFixture.getProject(), new Runnable() {