Skip to content

Commit

Permalink
Ignore DOC errors for stub functions (#12651)
Browse files Browse the repository at this point in the history
## Summary

Closes #12650.
  • Loading branch information
charliermarsh committed Aug 3, 2024
1 parent 341a25e commit 733341a
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,14 @@ def bar(self) -> str:
num (int): A number
"""
print('test')


# See: https://github.com/astral-sh/ruff/issues/12650
class C:
def foo(self) -> int:
"""Calculate x.
Returns:
x
"""
raise NotImplementedError
30 changes: 16 additions & 14 deletions crates/ruff_linter/src/rules/pydoclint/rules/check_docstring.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ use ruff_python_ast::helpers::map_callable;
use ruff_python_ast::name::QualifiedName;
use ruff_python_ast::visitor::Visitor;
use ruff_python_ast::{self as ast, visitor, Expr, Stmt};
use ruff_python_semantic::{Definition, MemberKind, SemanticModel};
use ruff_python_semantic::analyze::function_type;
use ruff_python_semantic::{Definition, SemanticModel};
use ruff_text_size::{Ranged, TextRange};

use crate::checkers::ast::Checker;
Expand Down Expand Up @@ -656,15 +657,14 @@ pub(crate) fn check_docstring(
convention: Option<Convention>,
) {
let mut diagnostics = Vec::new();
let Definition::Member(member) = definition else {

// Only check function docstrings.
let Some(function_def) = definition.as_function_def() else {
return;
};

// Only check function docstrings.
if matches!(
member.kind,
MemberKind::Class(_) | MemberKind::NestedClass(_)
) {
// Ignore stubs.
if function_type::is_stub(function_def, checker.semantic()) {
return;
}

Expand All @@ -681,17 +681,19 @@ pub(crate) fn check_docstring(

let body_entries = {
let mut visitor = BodyVisitor::new(checker.semantic());
visitor.visit_body(member.body());
visitor.visit_body(&function_def.body);
visitor.finish()
};

// DOC201
if checker.enabled(Rule::DocstringMissingReturns) && docstring_sections.returns.is_none() {
let extra_property_decorators = checker.settings.pydocstyle.property_decorators();
if !definition.is_property(extra_property_decorators, checker.semantic()) {
if let Some(body_return) = body_entries.returns.first() {
let diagnostic = Diagnostic::new(DocstringMissingReturns, body_return.range());
diagnostics.push(diagnostic);
if checker.enabled(Rule::DocstringMissingReturns) {
if docstring_sections.returns.is_none() {
let extra_property_decorators = checker.settings.pydocstyle.property_decorators();
if !definition.is_property(extra_property_decorators, checker.semantic()) {
if let Some(body_return) = body_entries.returns.first() {
let diagnostic = Diagnostic::new(DocstringMissingReturns, body_return.range());
diagnostics.push(diagnostic);
}
}
}
}
Expand Down

0 comments on commit 733341a

Please sign in to comment.