report missing expression in subscription (PY-8652)

This commit is contained in:
Dmitry Jemerov
2013-01-30 18:52:59 +01:00
parent 2da6abfa09
commit 38ed156b15
5 changed files with 24 additions and 2 deletions
@@ -325,7 +325,7 @@ public class ExpressionParsing extends Parsing {
parseSliceEnd(expr, sliceItemStart);
}
else {
parseSingleExpression(false, true);
boolean hadExpression = parseSingleExpression(false, true);
if (atToken(PyTokenTypes.COLON)) {
sliceOrTupleStart.drop();
parseSliceEnd(expr, sliceItemStart);
@@ -342,6 +342,9 @@ public class ExpressionParsing extends Parsing {
}
}
else {
if (!hadExpression) {
myBuilder.error("expression expected");
}
sliceOrTupleStart.drop();
sliceItemStart.drop();
checkMatches(PyTokenTypes.RBRACKET, message("PARSE.expected.rbracket"));
@@ -1,4 +1,4 @@
def test():
x = r"""\x""
r"""[<error descr="']' expected">\</error><error descr="Statement expected, found Py:BACKSLASH">t</error><error descr="End of statement expected">\</error><error descr="Statement expected, found Py:BACKSLASH">r</error><error descr="End of statement expected">\</error><error descr="Statement expected, found Py:BACKSLASH">v</error><error descr="End of statement expected">]</error><error descr="Statement expected, found Py:RBRACKET">"</error>""
r"""[<error descr="expression expected">\</error><error descr="Statement expected, found Py:BACKSLASH">t</error><error descr="End of statement expected">\</error><error descr="Statement expected, found Py:BACKSLASH">r</error><error descr="End of statement expected">\</error><error descr="Statement expected, found Py:BACKSLASH">v</error><error descr="End of statement expected">]</error><error descr="Statement expected, found Py:RBRACKET">"</error>""
"""
+1
View File
@@ -0,0 +1 @@
s = ''[]
+14
View File
@@ -0,0 +1,14 @@
PyFile:EmptySubscription.py
PyAssignmentStatement
PyTargetExpression: s
PsiElement(Py:IDENTIFIER)('s')
PsiWhiteSpace(' ')
PsiElement(Py:EQ)('=')
PsiWhiteSpace(' ')
PySubscriptionExpression
PyStringLiteralExpression:
PsiElement(Py:SINGLE_QUOTED_STRING)('''')
PsiElement(Py:LBRACKET)('[')
PsiErrorElement:expression expected
<empty list>
PsiElement(Py:RBRACKET)(']')
@@ -370,6 +370,10 @@ public class PythonParsingTest extends ParsingTestCase {
doTest();
}
public void testEmptySubscription() { // PY-8652
doTest();
}
public void doTest(LanguageLevel languageLevel) {
LanguageLevel prev = myLanguageLevel;
myLanguageLevel = languageLevel;