Skip to content

Commit

Permalink
Replace same length equal line with dash line in D407 (#5383)
Browse files Browse the repository at this point in the history
## Summary

Replace same length equal line with dash line in D407

Do we want to update the message and autofix title to reflect this
change?

## Test Plan

Added test cases for:
- Equal line length == dash line length
- Equal line length != dash line length

fixes: #5378
  • Loading branch information
dhruvmanila authored Jun 27, 2023
1 parent ff0d0ab commit 962479d
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 5 deletions.
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 | """


0 comments on commit 962479d

Please sign in to comment.