mirror of
https://github.com/astral-sh/ruff.git
synced 2025-12-23 09:19:39 +00:00
[flake8-pytest-style] Allow match and check keyword arguments without an expected exception type (PT010) (#21964)
## Summary <!-- What's the purpose of the change? What does it do, and why? --> Updates PT010(`pytest-raises-without-exception`) to recognize `match` and `check` keyword arguments as valid alternatives to specifying an exception class. As of pytest 8.4.0, `pytest.raises()` can be called with only `match` or `check` keyword arguments without an expected exception. Fixes #18653 ## Test Plan <!-- How was it tested? --> - Added test cases for `match`-only, `check`-only, and both arguments. - `cargo test -p ruff_linter -- "pytestraiseswithoutexception"` passes
This commit is contained in:
parent
56539db520
commit
10748b2fdb
2 changed files with 17 additions and 0 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -125,6 +125,9 @@ impl Violation for PytestRaisesTooBroad {
|
|||
/// ## Why is this bad?
|
||||
/// `pytest.raises` expects to receive an expected exception as its first
|
||||
/// argument. If omitted, the `pytest.raises` call will fail at runtime.
|
||||
/// The rule will also accept calls without an expected exception but with
|
||||
/// `match` and/or `check` keyword arguments, which are also valid after
|
||||
/// pytest version 8.4.0.
|
||||
///
|
||||
/// ## Example
|
||||
/// ```python
|
||||
|
|
@ -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());
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue