Fix bytes/fstring mixing when using iter_errors, fixes #57.

This commit is contained in:
Dave Halter
2019-02-06 01:28:47 +01:00
parent 076e296497
commit 0d37ff865c
2 changed files with 12 additions and 1 deletions

View File

@@ -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):

View File

@@ -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