PY-31442 Lexer can handle named unicode escapes inside f-strings

This commit is contained in:
Mikhail Golubev
2018-10-01 12:46:44 +03:00
parent 554c1c442f
commit 5691edb8b4
12 changed files with 555 additions and 418 deletions
@@ -0,0 +1 @@
s = f'\N{LATIN SMALL LETTER A{42}'
@@ -0,0 +1,17 @@
PyFile:FStringIncompleteNamedUnicodePrecedingFragment.py
PyAssignmentStatement
PyTargetExpression: s
PsiElement(Py:IDENTIFIER)('s')
PsiWhiteSpace(' ')
PsiElement(Py:EQ)('=')
PsiWhiteSpace(' ')
PyStringLiteralExpression: \N{LATIN SMALL LETTER A{42}
PyFormattedStringNode
PsiElement(Py:FSTRING_START)('f'')
PsiElement(Py:FSTRING_TEXT)('\N{LATIN SMALL LETTER A')
PyFStringFragment
PsiElement(Py:FSTRING_FRAGMENT_START)('{')
PyNumericLiteralExpression
PsiElement(Py:INTEGER_LITERAL)('42')
PsiElement(Py:FSTRING_FRAGMENT_END)('}')
PsiElement(Py:FSTRING_END)(''')
@@ -0,0 +1 @@
s = f'{42:\N{LATIN SMALL LETTER A}}'
@@ -0,0 +1,19 @@
PyFile:FStringNamedUnicodeEscapeInFormatPart.py
PyAssignmentStatement
PyTargetExpression: s
PsiElement(Py:IDENTIFIER)('s')
PsiWhiteSpace(' ')
PsiElement(Py:EQ)('=')
PsiWhiteSpace(' ')
PyStringLiteralExpression: {42:\N{LATIN SMALL LETTER A}}
PyFormattedStringNode
PsiElement(Py:FSTRING_START)('f'')
PyFStringFragment
PsiElement(Py:FSTRING_FRAGMENT_START)('{')
PyNumericLiteralExpression
PsiElement(Py:INTEGER_LITERAL)('42')
PyFStringFragmentFormatPart
PsiElement(Py:FSTRING_FRAGMENT_FORMAT_START)(':')
PsiElement(Py:FSTRING_TEXT)('\N{LATIN SMALL LETTER A}')
PsiElement(Py:FSTRING_FRAGMENT_END)('}')
PsiElement(Py:FSTRING_END)(''')
@@ -0,0 +1 @@
s = f'\N{LATIN SMALL LETTER A}'
@@ -0,0 +1,12 @@
PyFile:FStringNamedUnicodeEscapeInLiteralPart.py
PyAssignmentStatement
PyTargetExpression: s
PsiElement(Py:IDENTIFIER)('s')
PsiWhiteSpace(' ')
PsiElement(Py:EQ)('=')
PsiWhiteSpace(' ')
PyStringLiteralExpression:
PyFormattedStringNode
PsiElement(Py:FSTRING_START)('f'')
PsiElement(Py:FSTRING_TEXT)('\N{LATIN SMALL LETTER A}')
PsiElement(Py:FSTRING_END)(''')
@@ -0,0 +1 @@
s = f'{"\N{LATIN SMALL LETTER A}"}'
@@ -0,0 +1,16 @@
PyFile:FStringNamedUnicodeEscapeInStringLiteral.py
PyAssignmentStatement
PyTargetExpression: s
PsiElement(Py:IDENTIFIER)('s')
PsiWhiteSpace(' ')
PsiElement(Py:EQ)('=')
PsiWhiteSpace(' ')
PyStringLiteralExpression: {"\N{LATIN SMALL LETTER A}"}
PyFormattedStringNode
PsiElement(Py:FSTRING_START)('f'')
PyFStringFragment
PsiElement(Py:FSTRING_FRAGMENT_START)('{')
PyStringLiteralExpression:
PsiElement(Py:SINGLE_QUOTED_STRING)('"\N{LATIN SMALL LETTER A}"')
PsiElement(Py:FSTRING_FRAGMENT_END)('}')
PsiElement(Py:FSTRING_END)(''')