From d5d257e86ba5cbd1a38f0f60c7016f0e26e5c339 Mon Sep 17 00:00:00 2001 From: mahiro72 Date: Sun, 14 Dec 2025 03:45:46 +0900 Subject: [PATCH 1/2] fix; PT010; allow match and check keyword arguments --- .../src/rules/flake8_pytest_style/rules/raises.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/crates/ruff_linter/src/rules/flake8_pytest_style/rules/raises.rs b/crates/ruff_linter/src/rules/flake8_pytest_style/rules/raises.rs index 04c9a8c372..d11adaeea1 100644 --- a/crates/ruff_linter/src/rules/flake8_pytest_style/rules/raises.rs +++ b/crates/ruff_linter/src/rules/flake8_pytest_style/rules/raises.rs @@ -126,6 +126,9 @@ impl Violation for PytestRaisesTooBroad { /// `pytest.raises` expects to receive an expected exception as its first /// argument. If omitted, the `pytest.raises` call will fail at runtime. /// +/// Note: As of pytest 8.4.0, calls with only `match` or `check` keyword +/// arguments (without an exception class) are also valid. +/// /// ## Example /// ```python /// import pytest @@ -181,6 +184,8 @@ pub(crate) fn raises_call(checker: &Checker, call: &ast::ExprCall) { .arguments .find_argument("expected_exception", 0) .is_none() + && call.arguments.find_keyword("match").is_none() + && call.arguments.find_keyword("check").is_none() { checker.report_diagnostic(PytestRaisesWithoutException, call.func.range()); } From d6821ac525eeac4ae2b34c6d1e497e41ca5c36b3 Mon Sep 17 00:00:00 2001 From: mahiro72 Date: Sun, 14 Dec 2025 03:46:08 +0900 Subject: [PATCH 2/2] add; mactch and check keyword arguments test --- .../test/fixtures/flake8_pytest_style/PT010.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/crates/ruff_linter/resources/test/fixtures/flake8_pytest_style/PT010.py b/crates/ruff_linter/resources/test/fixtures/flake8_pytest_style/PT010.py index e6cc58cbc3..4191976043 100644 --- a/crates/ruff_linter/resources/test/fixtures/flake8_pytest_style/PT010.py +++ b/crates/ruff_linter/resources/test/fixtures/flake8_pytest_style/PT010.py @@ -9,3 +9,15 @@ def test_ok(): def test_error(): with pytest.raises(UnicodeError): pass + +def test_match_only(): + with pytest.raises(match="some error message"): + pass + +def test_check_only(): + with pytest.raises(check=lambda e: True): + pass + +def test_match_and_check(): + with pytest.raises(match="some error message", check=lambda e: True): + pass