mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-17 17:10:34 +00:00
[pylint
] Implement invalid-bytes-returned
(E0308
) (#10959)
Add pylint rule invalid-bytes-returned (PLE0308) See https://github.com/astral-sh/ruff/issues/970 for rules Test Plan: `cargo test`
This commit is contained in:
parent
06b3e376ac
commit
1480d72643
10 changed files with 239 additions and 29 deletions
|
@ -1,6 +1,6 @@
|
|||
use ruff_python_ast::helpers::map_callable;
|
||||
use ruff_python_ast::name::{QualifiedName, UnqualifiedName};
|
||||
use ruff_python_ast::Decorator;
|
||||
use ruff_python_ast::{Decorator, Expr, Stmt, StmtExpr, StmtFunctionDef, StmtRaise};
|
||||
|
||||
use crate::model::SemanticModel;
|
||||
use crate::scope::{Scope, ScopeKind};
|
||||
|
@ -128,3 +128,29 @@ fn is_class_method(
|
|||
|
||||
false
|
||||
}
|
||||
|
||||
/// Returns `true` if a function has an empty body, and is therefore a stub.
|
||||
///
|
||||
/// A function body is considered to be empty if it contains only `pass` statements, `...` literals,
|
||||
/// `NotImplementedError` raises, or string literal statements (docstrings).
|
||||
pub fn is_stub(function_def: &StmtFunctionDef, semantic: &SemanticModel) -> bool {
|
||||
function_def.body.iter().all(|stmt| match stmt {
|
||||
Stmt::Pass(_) => true,
|
||||
Stmt::Expr(StmtExpr { value, range: _ }) => {
|
||||
matches!(
|
||||
value.as_ref(),
|
||||
Expr::StringLiteral(_) | Expr::EllipsisLiteral(_)
|
||||
)
|
||||
}
|
||||
Stmt::Raise(StmtRaise {
|
||||
range: _,
|
||||
exc: exception,
|
||||
cause: _,
|
||||
}) => exception.as_ref().is_some_and(|exc| {
|
||||
semantic
|
||||
.resolve_builtin_symbol(map_callable(exc))
|
||||
.is_some_and(|name| matches!(name, "NotImplementedError" | "NotImplemented"))
|
||||
}),
|
||||
_ => false,
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue