Fix print() function on Python 2 (#754)

Fixes #752
This commit is contained in:
Andy Freeland 2019-03-14 16:42:54 -07:00 committed by Jelle Zijlstra
parent 026c81b834
commit d6db1c12a8
3 changed files with 26 additions and 2 deletions

View File

@ -726,13 +726,13 @@ def get_grammars(target_versions: Set[TargetVersion]) -> List[Grammar]:
if not target_versions:
return GRAMMARS
elif all(not version.is_python2() for version in target_versions):
# Python 2-compatible code, so don't try Python 3 grammar.
# Python 3-compatible code, so don't try Python 2 grammar
return [
pygram.python_grammar_no_print_statement_no_exec_statement,
pygram.python_grammar_no_print_statement,
]
else:
return [pygram.python_grammar]
return [pygram.python_grammar_no_print_statement, pygram.python_grammar]
def lib2to3_parse(src_txt: str, target_versions: Iterable[TargetVersion] = ()) -> Node:

View File

@ -0,0 +1,16 @@
#!/usr/bin/env python2
from __future__ import print_function
print('hello')
print(u'hello')
print(a, file=sys.stderr)
# output
#!/usr/bin/env python2
from __future__ import print_function
print("hello")
print(u"hello")
print(a, file=sys.stderr)

View File

@ -461,6 +461,14 @@ def test_python2(self) -> None:
# black.assert_equivalent(source, actual)
black.assert_stable(source, actual, black.FileMode())
@patch("black.dump_to_file", dump_to_stderr)
def test_python2_print_function(self) -> None:
source, expected = read_data("python2_print_function")
mode = black.FileMode(target_versions={black.TargetVersion.PY27})
actual = fs(source, mode=mode)
self.assertFormatEqual(expected, actual)
black.assert_stable(source, actual, mode)
@patch("black.dump_to_file", dump_to_stderr)
def test_python2_unicode_literals(self) -> None:
source, expected = read_data("python2_unicode_literals")