mirror of
https://github.com/davidhalter/parso.git
synced 2025-12-07 21:34:32 +08:00
Fix bytes/fstring mixing when using iter_errors, fixes #57.
This commit is contained in:
@@ -570,11 +570,14 @@ class _BytesAndStringMix(SyntaxRule):
|
|||||||
message = "cannot mix bytes and nonbytes literals"
|
message = "cannot mix bytes and nonbytes literals"
|
||||||
|
|
||||||
def _is_bytes_literal(self, string):
|
def _is_bytes_literal(self, string):
|
||||||
|
if string.type == 'fstring':
|
||||||
|
return False
|
||||||
return 'b' in string.string_prefix.lower()
|
return 'b' in string.string_prefix.lower()
|
||||||
|
|
||||||
def is_issue(self, node):
|
def is_issue(self, node):
|
||||||
first = node.children[0]
|
first = node.children[0]
|
||||||
if first.type == 'string' and self._normalizer.version >= (3, 0):
|
# In Python 2 it's allowed to mix bytes and unicode.
|
||||||
|
if self._normalizer.version >= (3, 0):
|
||||||
first_is_bytes = self._is_bytes_literal(first)
|
first_is_bytes = self._is_bytes_literal(first)
|
||||||
for string in node.children[1:]:
|
for string in node.children[1:]:
|
||||||
if first_is_bytes != self._is_bytes_literal(string):
|
if first_is_bytes != self._is_bytes_literal(string):
|
||||||
|
|||||||
@@ -285,6 +285,14 @@ if sys.version_info >= (3,):
|
|||||||
'b"ä"',
|
'b"ä"',
|
||||||
# combining strings and unicode is allowed in Python 2.
|
# combining strings and unicode is allowed in Python 2.
|
||||||
'"s" b""',
|
'"s" b""',
|
||||||
|
'"s" b"" ""',
|
||||||
|
'b"" "" b"" ""',
|
||||||
|
]
|
||||||
|
if sys.version_info >= (3, 6):
|
||||||
|
FAILING_EXAMPLES += [
|
||||||
|
# Same as above, but for f-strings.
|
||||||
|
'f"s" b""',
|
||||||
|
'b"s" f""',
|
||||||
]
|
]
|
||||||
if sys.version_info >= (2, 7):
|
if sys.version_info >= (2, 7):
|
||||||
# This is something that raises a different error in 2.6 than in the other
|
# This is something that raises a different error in 2.6 than in the other
|
||||||
|
|||||||
Reference in New Issue
Block a user