Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace same length equal line with dash line in D407 #5383

Merged
merged 3 commits into from
Jun 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions crates/ruff/resources/test/fixtures/pydocstyle/sections.py
Original file line number Diff line number Diff line change
Expand Up @@ -513,3 +513,19 @@ def implicit_string_concatenation():
A value of some sort.

""""Extra content"


def replace_equals_with_dash():
"""Equal length equals should be replaced with dashes.

Parameters
==========
"""


def replace_equals_with_dash2():
"""Here, the length of equals is not the same.

Parameters
===========
"""
27 changes: 22 additions & 5 deletions crates/ruff/src/rules/pydocstyle/rules/sections.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ use ruff_python_ast::docstrings::{clean_space, leading_space};
use ruff_python_ast::identifier::Identifier;
use ruff_python_semantic::analyze::visibility::is_staticmethod;
use ruff_python_semantic::{Definition, Member, MemberKind};
use ruff_python_whitespace::NewlineWithTrailingNewline;
use ruff_python_whitespace::{NewlineWithTrailingNewline, PythonWhitespace};
use ruff_textwrap::dedent;

use crate::checkers::ast::Checker;
Expand Down Expand Up @@ -488,6 +488,10 @@ fn blanks_and_section_underline(
}
}
} else {
let equal_line_found = non_blank_line
.chars()
.all(|char| char.is_whitespace() || char == '=');

if checker.enabled(Rule::DashedUnderlineAfterSection) {
let mut diagnostic = Diagnostic::new(
DashedUnderlineAfterSection {
Expand All @@ -503,10 +507,23 @@ fn blanks_and_section_underline(
clean_space(docstring.indentation),
"-".repeat(context.section_name().len()),
);
diagnostic.set_fix(Fix::automatic(Edit::insertion(
content,
context.summary_range().end(),
)));
if equal_line_found
&& non_blank_line.trim_whitespace().len() == context.section_name().len()
{
// If an existing underline is an equal sign line of the appropriate length,
// replace it with a dashed line.
diagnostic.set_fix(Fix::automatic(Edit::replacement(
content,
context.summary_range().end(),
non_blank_line.end(),
)));
} else {
// Otherwise, insert a dashed line after the section header.
diagnostic.set_fix(Fix::automatic(Edit::insertion(
content,
context.summary_range().end(),
)));
}
}
checker.diagnostics.push(diagnostic);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -453,4 +453,48 @@ sections.py:499:9: D407 [*] Missing dashed underline after section ("Args")
505 506 |
506 507 | """

sections.py:519:5: D407 [*] Missing dashed underline after section ("Parameters")
|
518 | def replace_equals_with_dash():
519 | """Equal length equals should be replaced with dashes.
| _____^
520 | |
521 | | Parameters
522 | | ==========
523 | | """
| |_______^ D407
|
= help: Add dashed line under "Parameters"

ℹ Fix
519 519 | """Equal length equals should be replaced with dashes.
520 520 |
521 521 | Parameters
522 |- ==========
522 |+ ----------
523 523 | """
524 524 |
525 525 |

sections.py:527:5: D407 [*] Missing dashed underline after section ("Parameters")
|
526 | def replace_equals_with_dash2():
527 | """Here, the length of equals is not the same.
| _____^
528 | |
529 | | Parameters
530 | | ===========
531 | | """
| |_______^ D407
|
= help: Add dashed line under "Parameters"

ℹ Fix
527 527 | """Here, the length of equals is not the same.
528 528 |
529 529 | Parameters
530 |+ ----------
530 531 | ===========
531 532 | """