PY-31442 Better reporting of mismatched/missing closing quotes

This commit is contained in:
Mikhail Golubev
2018-09-04 12:35:41 +03:00
parent 0d0ea521c8
commit 76e672e243
28 changed files with 42 additions and 38 deletions

View File

@@ -137,12 +137,16 @@ public class ExpressionParsing extends Parsing {
}
// Can be the end of an enclosing f-string, so leave it in the stream
else {
builder.mark().error("Expected " + openingQuotes);
builder.mark().error(openingQuotes + " expected");
}
break;
}
else if (atToken(PyTokenTypes.STATEMENT_BREAK)) {
builder.mark().error(openingQuotes + " expected");
break;
}
else {
builder.mark().error("Unexpected f-string token");
builder.error("unexpected f-string token");
break;
}
}

View File

@@ -17,7 +17,7 @@ PyFile:FStringTerminatedByLineBreakInExpression.py
PsiElement(Py:PLUS)('+')
PsiErrorElement:expression expected
<empty list>
PsiErrorElement:Unexpected f-string token
PsiErrorElement:' expected
<empty list>
PsiWhiteSpace('\n')
PyExpressionStatement

View File

@@ -23,7 +23,7 @@ PyFile:FStringTerminatedByLineBreakInExpressionInFormatPart.py
PsiElement(Py:PLUS)('+')
PsiErrorElement:expression expected
<empty list>
PsiErrorElement:Unexpected f-string token
PsiErrorElement:' expected
<empty list>
PsiWhiteSpace('\n')
PyExpressionStatement

View File

@@ -18,7 +18,7 @@ PyFile:FStringTerminatedByLineBreakInFormatPart.py
PsiElement(Py:FSTRING_TEXT)('bar')
PsiErrorElement:} expected
<empty list>
PsiErrorElement:Unexpected f-string token
PsiErrorElement:' expected
<empty list>
PsiWhiteSpace('\n')
PyExpressionStatement

View File

@@ -9,7 +9,7 @@ PyFile:FStringTerminatedByLineBreakInLiteralPart.py
PyFormattedStringNode
PsiElement(Py:FSTRING_START)('f'')
PsiElement(Py:FSTRING_TEXT)('foo')
PsiErrorElement:Unexpected f-string token
PsiErrorElement:' expected
<empty list>
PsiWhiteSpace('\n')
PyExpressionStatement

View File

@@ -22,9 +22,9 @@ PyFile:FStringTerminatedByLineBreakInNestedExpression.py
PsiElement(Py:PLUS)('+')
PsiErrorElement:expression expected
<empty list>
PsiErrorElement:Unexpected f-string token
PsiErrorElement:' expected
<empty list>
PsiErrorElement:Unexpected f-string token
PsiErrorElement:" expected
<empty list>
PsiWhiteSpace('\n')
PyExpressionStatement

View File

@@ -28,9 +28,9 @@ PyFile:FStringTerminatedByLineBreakInNestedExpressionInFormatPart.py
PsiElement(Py:PLUS)('+')
PsiErrorElement:expression expected
<empty list>
PsiErrorElement:Unexpected f-string token
PsiErrorElement:' expected
<empty list>
PsiErrorElement:Unexpected f-string token
PsiErrorElement:" expected
<empty list>
PsiWhiteSpace('\n')
PyExpressionStatement

View File

@@ -23,9 +23,9 @@ PyFile:FStringTerminatedByLineBreakInNestedFormatPart.py
PsiElement(Py:FSTRING_TEXT)('bar')
PsiErrorElement:} expected
<empty list>
PsiErrorElement:Unexpected f-string token
PsiErrorElement:' expected
<empty list>
PsiErrorElement:Unexpected f-string token
PsiErrorElement:" expected
<empty list>
PsiWhiteSpace('\n')
PyExpressionStatement

View File

@@ -14,11 +14,11 @@ PyFile:FStringTerminatedByLineBreakInNestedLiteralPart.py
PyFormattedStringNode
PsiElement(Py:FSTRING_START)('f'')
PsiElement(Py:FSTRING_TEXT)('foo')
PsiErrorElement:Unexpected f-string token
PsiErrorElement:' expected
<empty list>
PsiErrorElement:type conversion, : or } expected
<empty list>
PsiErrorElement:Unexpected f-string token
PsiErrorElement:" expected
<empty list>
PsiWhiteSpace('\n')
PyExpressionStatement

View File

@@ -14,7 +14,7 @@ PyFile:FStringTerminatedByLineBreakInStringLiteral.py
PsiElement(Py:TRIPLE_QUOTED_STRING)('"""')
PsiErrorElement:type conversion, : or } expected
<empty list>
PsiErrorElement:Unexpected f-string token
PsiErrorElement:' expected
<empty list>
PsiWhiteSpace('\n')
PyExpressionStatement

View File

@@ -20,7 +20,7 @@ PyFile:FStringTerminatedByLineBreakInStringLiteralInFormatPart.py
PsiElement(Py:TRIPLE_QUOTED_STRING)('"""')
PsiErrorElement:type conversion, : or } expected
<empty list>
PsiErrorElement:Unexpected f-string token
PsiErrorElement:' expected
<empty list>
PsiWhiteSpace('\n')
PyExpressionStatement

View File

@@ -21,7 +21,7 @@ PyFile:FStringTerminatedByQuoteInNestedFormatPart.py
PsiElement(Py:FSTRING_FRAGMENT_FORMAT_START)(':')
PsiErrorElement:} expected
<empty list>
PsiErrorElement:Expected "
PsiErrorElement:" expected
<empty list>
PsiElement(Py:FSTRING_END)(''')
PsiErrorElement:End of statement expected

View File

@@ -15,7 +15,7 @@ PyFile:FStringTerminatedByQuoteInNestedLiteralPart.py
PyFormattedStringNode
PsiElement(Py:FSTRING_START)('f"')
PsiElement(Py:FSTRING_TEXT)('baz')
PsiErrorElement:Expected "
PsiErrorElement:" expected
<empty list>
PsiErrorElement:type conversion, : or } expected
<empty list>

View File

@@ -14,7 +14,7 @@ PyFile:FStringTerminatedByQuoteInsideFStringLiteral.py
PyStringLiteralExpression:
PyFormattedStringNode
PsiElement(Py:FSTRING_START)('f"')
PsiErrorElement:Expected "
PsiErrorElement:" expected
<empty list>
PsiErrorElement:type conversion, : or } expected
<empty list>

View File

@@ -19,7 +19,7 @@ PyFile:FStringTerminatedByQuoteInsideFStringLiteralInFormatPart.py
PyStringLiteralExpression:
PyFormattedStringNode
PsiElement(Py:FSTRING_START)('f"')
PsiErrorElement:Expected "
PsiErrorElement:" expected
<empty list>
PsiErrorElement:type conversion, : or } expected
<empty list>

View File

@@ -18,11 +18,11 @@ PyFile:FStringTerminatedByQuoteInsideNestedFStringLiteral.py
PyStringLiteralExpression:
PyFormattedStringNode
PsiElement(Py:FSTRING_START)('f"')
PsiErrorElement:Expected "
PsiErrorElement:" expected
<empty list>
PsiErrorElement:type conversion, : or } expected
<empty list>
PsiErrorElement:Expected """
PsiErrorElement:""" expected
<empty list>
PsiElement(Py:FSTRING_END)(''')
PsiElement(Py:SINGLE_QUOTED_STRING)('"}"')

View File

@@ -24,11 +24,11 @@ PyFile:FStringTerminatedByQuoteInsideNestedFStringLiteralInFormatPart.py
PyStringLiteralExpression:
PyFormattedStringNode
PsiElement(Py:FSTRING_START)('f"')
PsiErrorElement:Expected "
PsiErrorElement:" expected
<empty list>
PsiErrorElement:type conversion, : or } expected
<empty list>
PsiErrorElement:Expected """
PsiErrorElement:""" expected
<empty list>
PsiElement(Py:FSTRING_END)(''')
PsiElement(Py:SINGLE_QUOTED_STRING)('"}}"')

View File

@@ -19,7 +19,7 @@ PyFile:FStringTerminatedByQuoteInsideNestedStringLiteral.py
PsiElement(Py:SINGLE_QUOTED_STRING)('"')
PsiErrorElement:type conversion, : or } expected
<empty list>
PsiErrorElement:Expected """
PsiErrorElement:""" expected
<empty list>
PsiElement(Py:FSTRING_END)(''')
PsiElement(Py:SINGLE_QUOTED_STRING)('"}"')

View File

@@ -25,7 +25,7 @@ PyFile:FStringTerminatedByQuoteInsideNestedStringLiteralInFormatPart.py
PsiElement(Py:SINGLE_QUOTED_STRING)('"')
PsiErrorElement:type conversion, : or } expected
<empty list>
PsiErrorElement:Expected """
PsiErrorElement:""" expected
<empty list>
PsiElement(Py:FSTRING_END)(''')
PsiElement(Py:SINGLE_QUOTED_STRING)('"}}"')

View File

@@ -19,7 +19,7 @@ PyFile:FStringTerminatedByQuoteOfNestedFStringLiteral.py
PsiElement(Py:IDENTIFIER)('f')
PsiErrorElement:type conversion, : or } expected
<empty list>
PsiErrorElement:Expected "
PsiErrorElement:" expected
<empty list>
PsiElement(Py:FSTRING_END)(''')
PsiErrorElement:End of statement expected

View File

@@ -25,7 +25,7 @@ PyFile:FStringTerminatedByQuoteOfNestedFStringLiteralInFormatPart.py
PsiElement(Py:IDENTIFIER)('f')
PsiErrorElement:type conversion, : or } expected
<empty list>
PsiErrorElement:Expected "
PsiErrorElement:" expected
<empty list>
PsiElement(Py:FSTRING_END)(''')
PsiErrorElement:End of statement expected

View File

@@ -19,7 +19,7 @@ PyFile:FStringTerminatedByQuoteOfNestedStringLiteral.py
<empty list>
PsiErrorElement:type conversion, : or } expected
<empty list>
PsiErrorElement:Expected "
PsiErrorElement:" expected
<empty list>
PsiElement(Py:FSTRING_END)(''')
PsiErrorElement:End of statement expected

View File

@@ -25,7 +25,7 @@ PyFile:FStringTerminatedByQuoteOfNestedStringLiteralInFormatPart.py
<empty list>
PsiErrorElement:type conversion, : or } expected
<empty list>
PsiErrorElement:Expected "
PsiErrorElement:" expected
<empty list>
PsiElement(Py:FSTRING_END)(''')
PsiErrorElement:End of statement expected

View File

@@ -14,7 +14,7 @@ PyFile:SingleLineFStringContainsCommentInsideExpression.py
PsiElement(Py:INTEGER_LITERAL)('42')
PsiErrorElement:type conversion, : or } expected
<empty list>
PsiErrorElement:Unexpected f-string token
PsiErrorElement:' expected
<empty list>
PsiWhiteSpace(' ')
PsiComment(Py:END_OF_LINE_COMMENT)('# comment}'')

View File

@@ -14,6 +14,6 @@ PyFile:SingleLineFStringContainsCommentInsteadOfExpression.py
<empty list>
PsiErrorElement:type conversion, : or } expected
<empty list>
PsiErrorElement:Unexpected f-string token
PsiErrorElement:' expected
<empty list>
PsiComment(Py:END_OF_LINE_COMMENT)('# comment}'')

View File

@@ -22,9 +22,9 @@ PyFile:SingleQuotedFStringInsideMultilineFStringTerminatedByLineBreakInExpressio
PsiElement(Py:PLUS)('+')
PsiErrorElement:expression expected
<empty list>
PsiErrorElement:Unexpected f-string token
PsiErrorElement:' expected
<empty list>
PsiErrorElement:Unexpected f-string token
PsiErrorElement:""" expected
<empty list>
PsiWhiteSpace(' \n')
PyExpressionStatement

View File

@@ -24,9 +24,9 @@ PyFile:SingleQuotedFStringInsideMultilineFStringTerminatedByLineBreakInExpressio
PsiElement(Py:PLUS)('+')
PsiErrorElement:expression expected
<empty list>
PsiErrorElement:Unexpected f-string token
PsiErrorElement:' expected
<empty list>
PsiErrorElement:Unexpected f-string token
PsiErrorElement:""" expected
<empty list>
PsiWhiteSpace(' \n')
PyExpressionStatement

View File

@@ -14,11 +14,11 @@ PyFile:SingleQuotedFStringInsideMultilineFStringTerminatedByLineBreakInText.py
PyFormattedStringNode
PsiElement(Py:FSTRING_START)('f'')
PsiElement(Py:FSTRING_TEXT)('foo')
PsiErrorElement:Unexpected f-string token
PsiErrorElement:' expected
<empty list>
PsiErrorElement:type conversion, : or } expected
<empty list>
PsiErrorElement:Unexpected f-string token
PsiErrorElement:""" expected
<empty list>
PsiWhiteSpace('\n')
PyExpressionStatement