I am on Linux, created a Python 3.9 venv, installed ruff in the venv, wrote this code:
def process_data(data: list[int]) -> str:
match data:
case []:
return "No data"
case [first, *_] if (average := lambda: sum(data) / len(data)) and average() > 50:
return f"Data average is high: {average():.2f}, starting with {first}"
case _:
return f"Processed {len(data)} items."
The match
syntax is not available in Python 3.9, so running ruff check
, I would expect an error. I have tried to set project.requires-python
and ruff.target-version
but the latter seems to be used only for the formatter according to the docs. What am I missing?
Ruff doesn't support that (yet?).
There's an open issue for precisely this problem.
Our parser doesn't take into account the Python version aka target-version setting while parsing the source code. This means that we would allow having a match statement when the target Python version is 3.9 or lower. We want to signal this to the user.