[`pycodestyle`] autofix useless semicolons (#3001)

This commit is contained in:
Simon Brugman 2023-02-18 00:52:42 +01:00 committed by GitHub
parent db7f16e276
commit 9e45424ed6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 49 additions and 9 deletions

View File

@ -117,7 +117,7 @@ pub fn check_tokens(
// E701, E702, E703
if enforce_compound_statements {
diagnostics.extend(
pycodestyle::rules::compound_statements(tokens)
pycodestyle::rules::compound_statements(tokens, settings, autofix)
.into_iter()
.filter(|diagnostic| settings.rules.enabled(diagnostic.kind.rule())),
);

View File

@ -3,8 +3,10 @@ use rustpython_parser::lexer::{LexResult, Tok};
use ruff_macros::{define_violation, derive_message_formats};
use crate::ast::types::Range;
use crate::registry::Diagnostic;
use crate::violation::Violation;
use crate::fix::Fix;
use crate::registry::{Diagnostic, Rule};
use crate::settings::{flags, Settings};
use crate::violation::{AlwaysAutofixableViolation, Violation};
define_violation!(
pub struct MultipleStatementsOnOneLineColon;
@ -29,14 +31,22 @@ impl Violation for MultipleStatementsOnOneLineSemicolon {
define_violation!(
pub struct UselessSemicolon;
);
impl Violation for UselessSemicolon {
impl AlwaysAutofixableViolation for UselessSemicolon {
#[derive_message_formats]
fn message(&self) -> String {
format!("Statement ends with an unnecessary semicolon")
}
fn autofix_title(&self) -> String {
format!("Remove unnecessary semicolon")
}
}
pub fn compound_statements(lxr: &[LexResult]) -> Vec<Diagnostic> {
pub fn compound_statements(
lxr: &[LexResult],
settings: &Settings,
autofix: flags::Autofix,
) -> Vec<Diagnostic> {
let mut diagnostics = vec![];
// Track the last seen instance of a variety of tokens.
@ -92,7 +102,13 @@ pub fn compound_statements(lxr: &[LexResult]) -> Vec<Diagnostic> {
match tok {
Tok::Newline => {
if let Some((start, end)) = semi {
diagnostics.push(Diagnostic::new(UselessSemicolon, Range::new(start, end)));
let mut diagnostic = Diagnostic::new(UselessSemicolon, Range::new(start, end));
if matches!(autofix, flags::Autofix::Enabled)
&& settings.rules.should_fix(&Rule::UselessSemicolon)
{
diagnostic.amend(Fix::deletion(start, end));
};
diagnostics.push(diagnostic);
}
// Reset.

View File

@ -10,7 +10,15 @@ expression: diagnostics
end_location:
row: 10
column: 13
fix: ~
fix:
content:
- ""
location:
row: 10
column: 12
end_location:
row: 10
column: 13
parent: ~
- kind:
UselessSemicolon: ~
@ -20,7 +28,15 @@ expression: diagnostics
end_location:
row: 12
column: 23
fix: ~
fix:
content:
- ""
location:
row: 12
column: 22
end_location:
row: 12
column: 23
parent: ~
- kind:
UselessSemicolon: ~
@ -30,6 +46,14 @@ expression: diagnostics
end_location:
row: 25
column: 14
fix: ~
fix:
content:
- ""
location:
row: 25
column: 13
end_location:
row: 25
column: 14
parent: ~