fix error message for match (#2649)

Fixes #2648.

Co-authored-by: Batuhan Taskaya <isidentical@gmail.com>
This commit is contained in:
Jelle Zijlstra 2021-11-30 18:39:39 -08:00 committed by GitHub
parent 5e2bb528e0
commit 0f7cf9187f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 32 additions and 2 deletions

View File

@ -15,6 +15,7 @@
times, like `match re.match()` (#2661) times, like `match re.match()` (#2661)
- Fix assignment to environment variables in Jupyter Notebooks (#2642) - Fix assignment to environment variables in Jupyter Notebooks (#2642)
- Add `flake8-simplify` and `flake8-comprehensions` plugins (#2653) - Add `flake8-simplify` and `flake8-comprehensions` plugins (#2653)
- Fix parser error location on invalid syntax in a `match` statement (#2649)
## 21.11b1 ## 21.11b1

View File

@ -75,8 +75,10 @@ def get_grammars(target_versions: Set[TargetVersion]) -> List[Grammar]:
# Python 3.10+ # Python 3.10+
grammars.append(pygram.python_grammar_soft_keywords) grammars.append(pygram.python_grammar_soft_keywords)
# If we have to parse both, try to parse async as a keyword first # If we have to parse both, try to parse async as a keyword first
if not supports_feature(target_versions, Feature.ASYNC_IDENTIFIERS): if not supports_feature(
# Python 3.7+ target_versions, Feature.ASYNC_IDENTIFIERS
) and not supports_feature(target_versions, Feature.PATTERN_MATCHING):
# Python 3.7-3.9
grammars.append( grammars.append(
pygram.python_grammar_no_print_statement_no_exec_statement_async_keywords pygram.python_grammar_no_print_statement_no_exec_statement_async_keywords
) )

View File

@ -0,0 +1,18 @@
# First match, no errors
match something:
case bla():
pass
# Problem on line 10
match invalid_case:
case valid_case:
pass
case a := b:
pass
case valid_case:
pass
# No problems either
match something:
case bla():
pass

View File

@ -200,6 +200,15 @@ def test_python_310(filename: str) -> None:
assert_format(source, expected, mode, minimum_version=(3, 10)) assert_format(source, expected, mode, minimum_version=(3, 10))
def test_patma_invalid() -> None:
source, expected = read_data("pattern_matching_invalid")
mode = black.Mode(target_versions={black.TargetVersion.PY310})
with pytest.raises(black.parsing.InvalidInput) as exc_info:
assert_format(source, expected, mode, minimum_version=(3, 10))
exc_info.match("Cannot parse: 10:11")
def test_docstring_no_string_normalization() -> None: def test_docstring_no_string_normalization() -> None:
"""Like test_docstring but with string normalization off.""" """Like test_docstring but with string normalization off."""
source, expected = read_data("docstring_no_string_normalization") source, expected = read_data("docstring_no_string_normalization")