redo grammar selection, add test (#765)
This commit is contained in:
parent
2410213857
commit
ba64fc757c
22
black.py
22
black.py
@ -715,24 +715,20 @@ def decode_bytes(src: bytes) -> Tuple[FileContent, Encoding, NewLine]:
|
|||||||
return tiow.read(), encoding, newline
|
return tiow.read(), encoding, newline
|
||||||
|
|
||||||
|
|
||||||
GRAMMARS = [
|
def get_grammars(target_versions: Set[TargetVersion]) -> List[Grammar]:
|
||||||
|
if not target_versions:
|
||||||
|
# No target_version specified, so try all grammars.
|
||||||
|
return [
|
||||||
pygram.python_grammar_no_print_statement_no_exec_statement,
|
pygram.python_grammar_no_print_statement_no_exec_statement,
|
||||||
pygram.python_grammar_no_print_statement,
|
pygram.python_grammar_no_print_statement,
|
||||||
pygram.python_grammar,
|
pygram.python_grammar,
|
||||||
]
|
]
|
||||||
|
elif all(version.is_python2() for version in target_versions):
|
||||||
|
# Python 2-only code, so try Python 2 grammars.
|
||||||
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 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_no_print_statement, pygram.python_grammar]
|
return [pygram.python_grammar_no_print_statement, pygram.python_grammar]
|
||||||
|
else:
|
||||||
|
# Python 3-compatible code, so only try Python 3 grammar.
|
||||||
|
return [pygram.python_grammar_no_print_statement_no_exec_statement]
|
||||||
|
|
||||||
|
|
||||||
def lib2to3_parse(src_txt: str, target_versions: Iterable[TargetVersion] = ()) -> Node:
|
def lib2to3_parse(src_txt: str, target_versions: Iterable[TargetVersion] = ()) -> Node:
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
from click.testing import CliRunner
|
from click.testing import CliRunner
|
||||||
|
|
||||||
import black
|
import black
|
||||||
from black import Feature
|
from black import Feature, TargetVersion
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import blackd
|
import blackd
|
||||||
@ -464,7 +464,7 @@ def test_python2(self) -> None:
|
|||||||
@patch("black.dump_to_file", dump_to_stderr)
|
@patch("black.dump_to_file", dump_to_stderr)
|
||||||
def test_python2_print_function(self) -> None:
|
def test_python2_print_function(self) -> None:
|
||||||
source, expected = read_data("python2_print_function")
|
source, expected = read_data("python2_print_function")
|
||||||
mode = black.FileMode(target_versions={black.TargetVersion.PY27})
|
mode = black.FileMode(target_versions={TargetVersion.PY27})
|
||||||
actual = fs(source, mode=mode)
|
actual = fs(source, mode=mode)
|
||||||
self.assertFormatEqual(expected, actual)
|
self.assertFormatEqual(expected, actual)
|
||||||
black.assert_stable(source, actual, mode)
|
black.assert_stable(source, actual, mode)
|
||||||
@ -828,6 +828,31 @@ def err(msg: str, **kwargs: Any) -> None:
|
|||||||
"2 files would fail to reformat.",
|
"2 files would fail to reformat.",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_lib2to3_parse(self) -> None:
|
||||||
|
with self.assertRaises(black.InvalidInput):
|
||||||
|
black.lib2to3_parse("invalid syntax")
|
||||||
|
|
||||||
|
straddling = "x + y"
|
||||||
|
black.lib2to3_parse(straddling)
|
||||||
|
black.lib2to3_parse(straddling, {TargetVersion.PY27})
|
||||||
|
black.lib2to3_parse(straddling, {TargetVersion.PY36})
|
||||||
|
black.lib2to3_parse(straddling, {TargetVersion.PY27, TargetVersion.PY36})
|
||||||
|
|
||||||
|
py2_only = "print x"
|
||||||
|
black.lib2to3_parse(py2_only)
|
||||||
|
black.lib2to3_parse(py2_only, {TargetVersion.PY27})
|
||||||
|
with self.assertRaises(black.InvalidInput):
|
||||||
|
black.lib2to3_parse(py2_only, {TargetVersion.PY36})
|
||||||
|
with self.assertRaises(black.InvalidInput):
|
||||||
|
black.lib2to3_parse(py2_only, {TargetVersion.PY27, TargetVersion.PY36})
|
||||||
|
|
||||||
|
py3_only = "exec(x, end=y)"
|
||||||
|
black.lib2to3_parse(py3_only)
|
||||||
|
with self.assertRaises(black.InvalidInput):
|
||||||
|
black.lib2to3_parse(py3_only, {TargetVersion.PY27})
|
||||||
|
black.lib2to3_parse(py3_only, {TargetVersion.PY36})
|
||||||
|
black.lib2to3_parse(py3_only, {TargetVersion.PY27, TargetVersion.PY36})
|
||||||
|
|
||||||
def test_get_features_used(self) -> None:
|
def test_get_features_used(self) -> None:
|
||||||
node = black.lib2to3_parse("def f(*, arg): ...\n")
|
node = black.lib2to3_parse("def f(*, arg): ...\n")
|
||||||
self.assertEqual(black.get_features_used(node), set())
|
self.assertEqual(black.get_features_used(node), set())
|
||||||
|
Loading…
Reference in New Issue
Block a user