mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-30 13:51:16 +00:00
[flake8-errmsg
] Exclude typing.cast
from EM101
(#19656)
## Summary Fixes #19596
This commit is contained in:
parent
06cd249a9b
commit
dce25da19a
4 changed files with 100 additions and 71 deletions
|
@ -88,3 +88,25 @@ def f_multi_line_string2():
|
||||||
example="example"
|
example="example"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def raise_typing_cast_exception():
|
||||||
|
import typing
|
||||||
|
raise typing.cast("Exception", None)
|
||||||
|
|
||||||
|
|
||||||
|
def f_typing_cast_excluded():
|
||||||
|
from typing import cast
|
||||||
|
raise cast(RuntimeError, "This should not trigger EM101")
|
||||||
|
|
||||||
|
|
||||||
|
def f_typing_cast_excluded_import():
|
||||||
|
import typing
|
||||||
|
raise typing.cast(RuntimeError, "This should not trigger EM101")
|
||||||
|
|
||||||
|
|
||||||
|
def f_typing_cast_excluded_aliased():
|
||||||
|
from typing import cast as my_cast
|
||||||
|
raise my_cast(RuntimeError, "This should not trigger EM101")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -182,11 +182,19 @@ impl Violation for DotFormatInException {
|
||||||
|
|
||||||
/// EM101, EM102, EM103
|
/// EM101, EM102, EM103
|
||||||
pub(crate) fn string_in_exception(checker: &Checker, stmt: &Stmt, exc: &Expr) {
|
pub(crate) fn string_in_exception(checker: &Checker, stmt: &Stmt, exc: &Expr) {
|
||||||
if let Expr::Call(ast::ExprCall {
|
let Expr::Call(ast::ExprCall {
|
||||||
|
func,
|
||||||
arguments: Arguments { args, .. },
|
arguments: Arguments { args, .. },
|
||||||
..
|
..
|
||||||
}) = exc
|
}) = exc
|
||||||
{
|
else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
if checker.semantic().match_typing_expr(func, "cast") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(first) = args.first() {
|
if let Some(first) = args.first() {
|
||||||
match first {
|
match first {
|
||||||
// Check for string literals.
|
// Check for string literals.
|
||||||
|
@ -195,9 +203,7 @@ pub(crate) fn string_in_exception(checker: &Checker, stmt: &Stmt, exc: &Expr) {
|
||||||
if string.len() >= checker.settings().flake8_errmsg.max_string_length {
|
if string.len() >= checker.settings().flake8_errmsg.max_string_length {
|
||||||
let mut diagnostic =
|
let mut diagnostic =
|
||||||
checker.report_diagnostic(RawStringInException, first.range());
|
checker.report_diagnostic(RawStringInException, first.range());
|
||||||
if let Some(indentation) =
|
if let Some(indentation) = whitespace::indentation(checker.source(), stmt) {
|
||||||
whitespace::indentation(checker.source(), stmt)
|
|
||||||
{
|
|
||||||
diagnostic.set_fix(generate_fix(
|
diagnostic.set_fix(generate_fix(
|
||||||
stmt,
|
stmt,
|
||||||
first,
|
first,
|
||||||
|
@ -217,9 +223,7 @@ pub(crate) fn string_in_exception(checker: &Checker, stmt: &Stmt, exc: &Expr) {
|
||||||
{
|
{
|
||||||
let mut diagnostic =
|
let mut diagnostic =
|
||||||
checker.report_diagnostic(RawStringInException, first.range());
|
checker.report_diagnostic(RawStringInException, first.range());
|
||||||
if let Some(indentation) =
|
if let Some(indentation) = whitespace::indentation(checker.source(), stmt) {
|
||||||
whitespace::indentation(checker.source(), stmt)
|
|
||||||
{
|
|
||||||
diagnostic.set_fix(generate_fix(
|
diagnostic.set_fix(generate_fix(
|
||||||
stmt,
|
stmt,
|
||||||
first,
|
first,
|
||||||
|
@ -250,9 +254,7 @@ pub(crate) fn string_in_exception(checker: &Checker, stmt: &Stmt, exc: &Expr) {
|
||||||
// Check for .format() calls.
|
// Check for .format() calls.
|
||||||
Expr::Call(ast::ExprCall { func, .. }) => {
|
Expr::Call(ast::ExprCall { func, .. }) => {
|
||||||
if checker.is_rule_enabled(Rule::DotFormatInException) {
|
if checker.is_rule_enabled(Rule::DotFormatInException) {
|
||||||
if let Expr::Attribute(ast::ExprAttribute { value, attr, .. }) =
|
if let Expr::Attribute(ast::ExprAttribute { value, attr, .. }) = func.as_ref() {
|
||||||
func.as_ref()
|
|
||||||
{
|
|
||||||
if attr == "format" && value.is_literal_expr() {
|
if attr == "format" && value.is_literal_expr() {
|
||||||
let mut diagnostic =
|
let mut diagnostic =
|
||||||
checker.report_diagnostic(DotFormatInException, first.range());
|
checker.report_diagnostic(DotFormatInException, first.range());
|
||||||
|
@ -274,7 +276,6 @@ pub(crate) fn string_in_exception(checker: &Checker, stmt: &Stmt, exc: &Expr) {
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Generate the [`Fix`] for EM001, EM002, and EM003 violations.
|
/// Generate the [`Fix`] for EM001, EM002, and EM003 violations.
|
||||||
|
|
|
@ -278,3 +278,6 @@ EM.py:84:9: EM103 [*] Exception must not use a `.format()` string directly, assi
|
||||||
91 |+ raise RuntimeError(
|
91 |+ raise RuntimeError(
|
||||||
92 |+ msg
|
92 |+ msg
|
||||||
93 |+ )
|
93 |+ )
|
||||||
|
91 94 |
|
||||||
|
92 95 |
|
||||||
|
93 96 | def raise_typing_cast_exception():
|
||||||
|
|
|
@ -343,3 +343,6 @@ EM.py:84:9: EM103 [*] Exception must not use a `.format()` string directly, assi
|
||||||
91 |+ raise RuntimeError(
|
91 |+ raise RuntimeError(
|
||||||
92 |+ msg
|
92 |+ msg
|
||||||
93 |+ )
|
93 |+ )
|
||||||
|
91 94 |
|
||||||
|
92 95 |
|
||||||
|
93 96 | def raise_typing_cast_exception():
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue