Merge Availability and AutofixKind (#3629)

This commit is contained in:
Jonathan Plasse 2023-03-20 17:45:33 +01:00 committed by GitHub
parent 7c0f17279c
commit fd39ec4bdd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
26 changed files with 70 additions and 72 deletions

View file

@ -22,7 +22,7 @@ use rustc_hash::FxHashMap;
use rustpython_parser::ast::{Expr, ExprKind, Stmt}; use rustpython_parser::ast::{Expr, ExprKind, Stmt};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ruff_diagnostics::{AutofixKind, Availability, Diagnostic, Fix, Violation}; use ruff_diagnostics::{AutofixKind, Diagnostic, Fix, Violation};
use ruff_macros::{derive_message_formats, violation}; use ruff_macros::{derive_message_formats, violation};
use ruff_python_ast::types::{Range, RefEquality}; use ruff_python_ast::types::{Range, RefEquality};
use ruff_python_ast::visitor::Visitor; use ruff_python_ast::visitor::Visitor;
@ -52,7 +52,7 @@ pub struct UnusedLoopControlVariable {
} }
impl Violation for UnusedLoopControlVariable { impl Violation for UnusedLoopControlVariable {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {

View file

@ -2,7 +2,7 @@ use log::error;
use rustpython_parser::ast::{Expr, ExprKind}; use rustpython_parser::ast::{Expr, ExprKind};
use ruff_diagnostics::Diagnostic; use ruff_diagnostics::Diagnostic;
use ruff_diagnostics::{AutofixKind, Availability, Violation}; use ruff_diagnostics::{AutofixKind, Violation};
use ruff_macros::{derive_message_formats, violation}; use ruff_macros::{derive_message_formats, violation};
use ruff_python_ast::types::Range; use ruff_python_ast::types::Range;
@ -44,7 +44,7 @@ pub struct UnnecessaryMap {
} }
impl Violation for UnnecessaryMap { impl Violation for UnnecessaryMap {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {

View file

@ -10,7 +10,7 @@ use rustpython_parser::ast::{
Unaryop, Unaryop,
}; };
use ruff_diagnostics::{AutofixKind, Availability, Diagnostic, Fix, Violation}; use ruff_diagnostics::{AutofixKind, Diagnostic, Fix, Violation};
use ruff_macros::{derive_message_formats, violation}; use ruff_macros::{derive_message_formats, violation};
use ruff_python_ast::helpers::{has_comments_in, unparse_stmt}; use ruff_python_ast::helpers::{has_comments_in, unparse_stmt};
use ruff_python_ast::source_code::{Locator, Stylist}; use ruff_python_ast::source_code::{Locator, Stylist};
@ -59,7 +59,7 @@ pub struct PytestCompositeAssertion {
} }
impl Violation for PytestCompositeAssertion { impl Violation for PytestCompositeAssertion {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {
@ -104,7 +104,7 @@ pub struct PytestUnittestAssertion {
} }
impl Violation for PytestUnittestAssertion { impl Violation for PytestUnittestAssertion {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {

View file

@ -2,7 +2,7 @@ use log::error;
use rustc_hash::FxHashSet; use rustc_hash::FxHashSet;
use rustpython_parser::ast::{Cmpop, Constant, Expr, ExprContext, ExprKind, Stmt, StmtKind}; use rustpython_parser::ast::{Cmpop, Constant, Expr, ExprContext, ExprKind, Stmt, StmtKind};
use ruff_diagnostics::{AutofixKind, Availability, Diagnostic, Fix, Violation}; use ruff_diagnostics::{AutofixKind, Diagnostic, Fix, Violation};
use ruff_macros::{derive_message_formats, violation}; use ruff_macros::{derive_message_formats, violation};
use ruff_python_ast::comparable::{ComparableConstant, ComparableExpr, ComparableStmt}; use ruff_python_ast::comparable::{ComparableConstant, ComparableExpr, ComparableStmt};
use ruff_python_ast::helpers::{ use ruff_python_ast::helpers::{
@ -40,7 +40,7 @@ pub struct CollapsibleIf {
} }
impl Violation for CollapsibleIf { impl Violation for CollapsibleIf {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {
@ -60,7 +60,7 @@ pub struct NeedlessBool {
} }
impl Violation for NeedlessBool { impl Violation for NeedlessBool {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {
@ -112,7 +112,7 @@ pub struct IfElseBlockInsteadOfIfExp {
} }
impl Violation for IfElseBlockInsteadOfIfExp { impl Violation for IfElseBlockInsteadOfIfExp {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {
@ -165,7 +165,7 @@ pub struct IfElseBlockInsteadOfDictGet {
} }
impl Violation for IfElseBlockInsteadOfDictGet { impl Violation for IfElseBlockInsteadOfDictGet {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {

View file

@ -2,7 +2,7 @@ use log::error;
use rustpython_parser::ast::{Located, Stmt, StmtKind, Withitem}; use rustpython_parser::ast::{Located, Stmt, StmtKind, Withitem};
use ruff_diagnostics::Diagnostic; use ruff_diagnostics::Diagnostic;
use ruff_diagnostics::{AutofixKind, Availability, Violation}; use ruff_diagnostics::{AutofixKind, Violation};
use ruff_macros::{derive_message_formats, violation}; use ruff_macros::{derive_message_formats, violation};
use ruff_python_ast::helpers::{first_colon_range, has_comments_in}; use ruff_python_ast::helpers::{first_colon_range, has_comments_in};
use ruff_python_ast::newlines::StrExt; use ruff_python_ast::newlines::StrExt;
@ -46,7 +46,7 @@ pub struct MultipleWithStatements {
} }
impl Violation for MultipleWithStatements { impl Violation for MultipleWithStatements {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {

View file

@ -2,7 +2,7 @@ use anyhow::Result;
use libcst_native::{Codegen, CodegenState, CompOp}; use libcst_native::{Codegen, CodegenState, CompOp};
use rustpython_parser::ast::{Cmpop, Expr, ExprKind, Unaryop}; use rustpython_parser::ast::{Cmpop, Expr, ExprKind, Unaryop};
use ruff_diagnostics::{AutofixKind, Availability, Diagnostic, Fix, Violation}; use ruff_diagnostics::{AutofixKind, Diagnostic, Fix, Violation};
use ruff_macros::{derive_message_formats, violation}; use ruff_macros::{derive_message_formats, violation};
use ruff_python_ast::source_code::{Locator, Stylist}; use ruff_python_ast::source_code::{Locator, Stylist};
use ruff_python_ast::types::Range; use ruff_python_ast::types::Range;
@ -18,7 +18,7 @@ pub struct YodaConditions {
} }
impl Violation for YodaConditions { impl Violation for YodaConditions {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {

View file

@ -2,7 +2,7 @@ use rustpython_parser::ast::{Stmt, StmtKind};
use schemars::JsonSchema; use schemars::JsonSchema;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ruff_diagnostics::{AutofixKind, Availability, Diagnostic, Fix, Violation}; use ruff_diagnostics::{AutofixKind, Diagnostic, Fix, Violation};
use ruff_macros::{derive_message_formats, violation, CacheKey}; use ruff_macros::{derive_message_formats, violation, CacheKey};
use ruff_python_ast::helpers::{create_stmt, from_relative_import, unparse_stmt}; use ruff_python_ast::helpers::{create_stmt, from_relative_import, unparse_stmt};
use ruff_python_ast::source_code::Stylist; use ruff_python_ast::source_code::Stylist;
@ -64,7 +64,7 @@ pub struct RelativeImports {
} }
impl Violation for RelativeImports { impl Violation for RelativeImports {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {

View file

@ -1,6 +1,6 @@
use rustpython_parser::ast::{Arguments, Expr, ExprKind, Location, Stmt, StmtKind}; use rustpython_parser::ast::{Arguments, Expr, ExprKind, Location, Stmt, StmtKind};
use ruff_diagnostics::{AutofixKind, Availability, Diagnostic, Fix, Violation}; use ruff_diagnostics::{AutofixKind, Diagnostic, Fix, Violation};
use ruff_macros::{derive_message_formats, violation}; use ruff_macros::{derive_message_formats, violation};
use ruff_python_ast::helpers::{match_leading_content, match_trailing_content, unparse_stmt}; use ruff_python_ast::helpers::{match_leading_content, match_trailing_content, unparse_stmt};
use ruff_python_ast::newlines::StrExt; use ruff_python_ast::newlines::StrExt;
@ -43,7 +43,7 @@ pub struct LambdaAssignment {
} }
impl Violation for LambdaAssignment { impl Violation for LambdaAssignment {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {

View file

@ -1,4 +1,4 @@
use ruff_diagnostics::{AutofixKind, Availability, Diagnostic, Fix, Violation}; use ruff_diagnostics::{AutofixKind, Diagnostic, Fix, Violation};
use ruff_macros::{derive_message_formats, violation}; use ruff_macros::{derive_message_formats, violation};
use ruff_python_ast::newlines::StrExt; use ruff_python_ast::newlines::StrExt;
use ruff_python_ast::types::Range; use ruff_python_ast::types::Range;
@ -17,7 +17,7 @@ fn fmt_blank_line_after_summary_autofix_msg(_: &BlankLineAfterSummary) -> String
"Insert single blank line".to_string() "Insert single blank line".to_string()
} }
impl Violation for BlankLineAfterSummary { impl Violation for BlankLineAfterSummary {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {

View file

@ -2,7 +2,7 @@ use itertools::Itertools;
use rustpython_parser::ast::Alias; use rustpython_parser::ast::Alias;
use ruff_diagnostics::Diagnostic; use ruff_diagnostics::Diagnostic;
use ruff_diagnostics::{AutofixKind, Availability, Violation}; use ruff_diagnostics::{AutofixKind, Violation};
use ruff_macros::{derive_message_formats, violation}; use ruff_macros::{derive_message_formats, violation};
use ruff_python_ast::types::Range; use ruff_python_ast::types::Range;
use ruff_python_stdlib::future::ALL_FEATURE_NAMES; use ruff_python_stdlib::future::ALL_FEATURE_NAMES;
@ -25,7 +25,7 @@ fn fmt_unused_import_autofix_msg(unused_import: &UnusedImport) -> String {
} }
} }
impl Violation for UnusedImport { impl Violation for UnusedImport {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {

View file

@ -3,7 +3,7 @@ use std::hash::{BuildHasherDefault, Hash};
use rustc_hash::{FxHashMap, FxHashSet}; use rustc_hash::{FxHashMap, FxHashSet};
use rustpython_parser::ast::{Expr, ExprKind}; use rustpython_parser::ast::{Expr, ExprKind};
use ruff_diagnostics::{AutofixKind, Availability, Diagnostic, Fix, Violation}; use ruff_diagnostics::{AutofixKind, Diagnostic, Fix, Violation};
use ruff_macros::{derive_message_formats, violation}; use ruff_macros::{derive_message_formats, violation};
use ruff_python_ast::comparable::{ComparableConstant, ComparableExpr}; use ruff_python_ast::comparable::{ComparableConstant, ComparableExpr};
use ruff_python_ast::helpers::unparse_expr; use ruff_python_ast::helpers::unparse_expr;
@ -19,7 +19,7 @@ pub struct MultiValueRepeatedKeyLiteral {
} }
impl Violation for MultiValueRepeatedKeyLiteral { impl Violation for MultiValueRepeatedKeyLiteral {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {
@ -45,7 +45,7 @@ pub struct MultiValueRepeatedKeyVariable {
} }
impl Violation for MultiValueRepeatedKeyVariable { impl Violation for MultiValueRepeatedKeyVariable {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {

View file

@ -1,6 +1,6 @@
use rustpython_parser::ast::{Alias, AliasData, Located, Stmt, StmtKind}; use rustpython_parser::ast::{Alias, AliasData, Located, Stmt, StmtKind};
use ruff_diagnostics::{AutofixKind, Availability, Diagnostic, Fix, Violation}; use ruff_diagnostics::{AutofixKind, Diagnostic, Fix, Violation};
use ruff_macros::{derive_message_formats, violation}; use ruff_macros::{derive_message_formats, violation};
use ruff_python_ast::helpers::{create_stmt, unparse_stmt}; use ruff_python_ast::helpers::{create_stmt, unparse_stmt};
use ruff_python_ast::types::Range; use ruff_python_ast::types::Range;
@ -16,7 +16,7 @@ pub struct ManualFromImport {
} }
impl Violation for ManualFromImport { impl Violation for ManualFromImport {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {

View file

@ -1,6 +1,6 @@
use rustpython_parser::ast::{Expr, ExprKind}; use rustpython_parser::ast::{Expr, ExprKind};
use ruff_diagnostics::{AutofixKind, Availability, Diagnostic, Fix, Violation}; use ruff_diagnostics::{AutofixKind, Diagnostic, Fix, Violation};
use ruff_macros::{derive_message_formats, violation}; use ruff_macros::{derive_message_formats, violation};
use ruff_python_ast::scope::BindingKind; use ruff_python_ast::scope::BindingKind;
use ruff_python_ast::types::Range; use ruff_python_ast::types::Range;
@ -14,7 +14,7 @@ pub struct SysExitAlias {
} }
impl Violation for SysExitAlias { impl Violation for SysExitAlias {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {

View file

@ -2,7 +2,7 @@ use anyhow::{bail, Result};
use log::debug; use log::debug;
use rustpython_parser::ast::{Constant, Expr, ExprContext, ExprKind, Keyword, Stmt, StmtKind}; use rustpython_parser::ast::{Constant, Expr, ExprContext, ExprKind, Keyword, Stmt, StmtKind};
use ruff_diagnostics::{AutofixKind, Availability, Diagnostic, Fix, Violation}; use ruff_diagnostics::{AutofixKind, Diagnostic, Fix, Violation};
use ruff_macros::{derive_message_formats, violation}; use ruff_macros::{derive_message_formats, violation};
use ruff_python_ast::helpers::{create_expr, create_stmt, unparse_stmt}; use ruff_python_ast::helpers::{create_expr, create_stmt, unparse_stmt};
use ruff_python_ast::source_code::Stylist; use ruff_python_ast::source_code::Stylist;
@ -20,7 +20,7 @@ pub struct ConvertNamedTupleFunctionalToClass {
} }
impl Violation for ConvertNamedTupleFunctionalToClass { impl Violation for ConvertNamedTupleFunctionalToClass {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {

View file

@ -2,7 +2,7 @@ use anyhow::{bail, Result};
use log::debug; use log::debug;
use rustpython_parser::ast::{Constant, Expr, ExprContext, ExprKind, Keyword, Stmt, StmtKind}; use rustpython_parser::ast::{Constant, Expr, ExprContext, ExprKind, Keyword, Stmt, StmtKind};
use ruff_diagnostics::{AutofixKind, Availability, Diagnostic, Fix, Violation}; use ruff_diagnostics::{AutofixKind, Diagnostic, Fix, Violation};
use ruff_macros::{derive_message_formats, violation}; use ruff_macros::{derive_message_formats, violation};
use ruff_python_ast::helpers::{create_expr, create_stmt, unparse_stmt}; use ruff_python_ast::helpers::{create_expr, create_stmt, unparse_stmt};
use ruff_python_ast::source_code::Stylist; use ruff_python_ast::source_code::Stylist;
@ -20,7 +20,7 @@ pub struct ConvertTypedDictFunctionalToClass {
} }
impl Violation for ConvertTypedDictFunctionalToClass { impl Violation for ConvertTypedDictFunctionalToClass {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {

View file

@ -1,6 +1,6 @@
use rustpython_parser::ast::Expr; use rustpython_parser::ast::Expr;
use ruff_diagnostics::{AutofixKind, Availability, Diagnostic, Fix, Violation}; use ruff_diagnostics::{AutofixKind, Diagnostic, Fix, Violation};
use ruff_macros::{derive_message_formats, violation}; use ruff_macros::{derive_message_formats, violation};
use ruff_python_ast::helpers::collect_call_path; use ruff_python_ast::helpers::collect_call_path;
use ruff_python_ast::types::Range; use ruff_python_ast::types::Range;
@ -14,7 +14,7 @@ pub struct DatetimeTimezoneUTC {
} }
impl Violation for DatetimeTimezoneUTC { impl Violation for DatetimeTimezoneUTC {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {

View file

@ -1,7 +1,7 @@
use itertools::Itertools; use itertools::Itertools;
use rustpython_parser::ast::{Alias, AliasData, Stmt}; use rustpython_parser::ast::{Alias, AliasData, Stmt};
use ruff_diagnostics::{AutofixKind, Availability, Diagnostic, Fix, Violation}; use ruff_diagnostics::{AutofixKind, Diagnostic, Fix, Violation};
use ruff_macros::{derive_message_formats, violation}; use ruff_macros::{derive_message_formats, violation};
use ruff_python_ast::source_code::{Locator, Stylist}; use ruff_python_ast::source_code::{Locator, Stylist};
use ruff_python_ast::types::Range; use ruff_python_ast::types::Range;
@ -42,7 +42,7 @@ pub struct DeprecatedImport {
} }
impl Violation for DeprecatedImport { impl Violation for DeprecatedImport {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {

View file

@ -1,6 +1,6 @@
use rustpython_parser::ast::Expr; use rustpython_parser::ast::Expr;
use ruff_diagnostics::{AutofixKind, Availability, Diagnostic, Fix, Violation}; use ruff_diagnostics::{AutofixKind, Diagnostic, Fix, Violation};
use ruff_macros::{derive_message_formats, violation}; use ruff_macros::{derive_message_formats, violation};
use ruff_python_ast::types::Range; use ruff_python_ast::types::Range;
@ -14,7 +14,7 @@ pub struct NonPEP585Annotation {
} }
impl Violation for NonPEP585Annotation { impl Violation for NonPEP585Annotation {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {

View file

@ -1,6 +1,6 @@
use rustpython_parser::ast::{Constant, Expr, ExprKind, Location, Operator}; use rustpython_parser::ast::{Constant, Expr, ExprKind, Location, Operator};
use ruff_diagnostics::{AutofixKind, Availability, Diagnostic, Fix, Violation}; use ruff_diagnostics::{AutofixKind, Diagnostic, Fix, Violation};
use ruff_macros::{derive_message_formats, violation}; use ruff_macros::{derive_message_formats, violation};
use ruff_python_ast::helpers::unparse_expr; use ruff_python_ast::helpers::unparse_expr;
use ruff_python_ast::types::Range; use ruff_python_ast::types::Range;
@ -14,7 +14,7 @@ pub struct NonPEP604Annotation {
} }
impl Violation for NonPEP604Annotation { impl Violation for NonPEP604Annotation {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {

View file

@ -1,6 +1,6 @@
use rustpython_parser::ast::{Expr, ExprContext, ExprKind, Operator}; use rustpython_parser::ast::{Expr, ExprContext, ExprKind, Operator};
use ruff_diagnostics::{AutofixKind, Availability, Diagnostic, Fix, Violation}; use ruff_diagnostics::{AutofixKind, Diagnostic, Fix, Violation};
use ruff_macros::{derive_message_formats, violation}; use ruff_macros::{derive_message_formats, violation};
use ruff_python_ast::helpers::{create_expr, has_comments, unparse_expr}; use ruff_python_ast::helpers::{create_expr, has_comments, unparse_expr};
use ruff_python_ast::types::Range; use ruff_python_ast::types::Range;
@ -15,7 +15,7 @@ pub struct CollectionLiteralConcatenation {
} }
impl Violation for CollectionLiteralConcatenation { impl Violation for CollectionLiteralConcatenation {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Sometimes)); const AUTOFIX: AutofixKind = AutofixKind::Sometimes;
#[derive_message_formats] #[derive_message_formats]
fn message(&self) -> String { fn message(&self) -> String {

View file

@ -4,7 +4,7 @@ use anyhow::Result;
use serde::Serialize; use serde::Serialize;
use ruff::registry::{Linter, Rule, RuleNamespace}; use ruff::registry::{Linter, Rule, RuleNamespace};
use ruff_diagnostics::Availability; use ruff_diagnostics::AutofixKind;
use crate::args::HelpFormat; use crate::args::HelpFormat;
@ -32,11 +32,9 @@ pub fn rule(rule: Rule, format: HelpFormat) -> Result<()> {
output.push('\n'); output.push('\n');
output.push('\n'); output.push('\n');
if let Some(autofix) = rule.autofixable() { let autofix = rule.autofixable();
output.push_str(match autofix.available { if matches!(autofix, AutofixKind::Always | AutofixKind::Sometimes) {
Availability::Sometimes => "Autofix is sometimes available.", output.push_str(&autofix.to_string());
Availability::Always => "Autofix is always available.",
});
output.push('\n'); output.push('\n');
output.push('\n'); output.push('\n');
} }

View file

@ -10,7 +10,7 @@ use strum::IntoEnumIterator;
use ruff::registry::{Linter, Rule, RuleNamespace}; use ruff::registry::{Linter, Rule, RuleNamespace};
use ruff::settings::options::Options; use ruff::settings::options::Options;
use ruff_diagnostics::Availability; use ruff_diagnostics::AutofixKind;
use crate::ROOT_DIR; use crate::ROOT_DIR;
@ -36,11 +36,9 @@ pub fn main(args: &Args) -> Result<()> {
output.push('\n'); output.push('\n');
} }
if let Some(autofix) = rule.autofixable() { let autofix = rule.autofixable();
output.push_str(match autofix.available { if matches!(autofix, AutofixKind::Always | AutofixKind::Sometimes) {
Availability::Sometimes => "Autofix is sometimes available.", output.push_str(&autofix.to_string());
Availability::Always => "Autofix is always available.",
});
output.push('\n'); output.push('\n');
output.push('\n'); output.push('\n');
} }

View file

@ -2,6 +2,7 @@
use itertools::Itertools; use itertools::Itertools;
use ruff::registry::{Linter, Rule, RuleNamespace, UpstreamCategory}; use ruff::registry::{Linter, Rule, RuleNamespace, UpstreamCategory};
use ruff_diagnostics::AutofixKind;
use strum::IntoEnumIterator; use strum::IntoEnumIterator;
const FIX_SYMBOL: &str = "🛠"; const FIX_SYMBOL: &str = "🛠";
@ -13,8 +14,8 @@ fn generate_table(table_out: &mut String, rules: impl IntoIterator<Item = Rule>,
table_out.push('\n'); table_out.push('\n');
for rule in rules { for rule in rules {
let fix_token = match rule.autofixable() { let fix_token = match rule.autofixable() {
None => "", AutofixKind::None => "",
Some(_) => FIX_SYMBOL, AutofixKind::Always | AutofixKind::Sometimes => FIX_SYMBOL,
}; };
let rule_name = rule.as_ref(); let rule_name = rule.as_ref();

View file

@ -1,6 +1,6 @@
pub use diagnostic::{Diagnostic, DiagnosticKind}; pub use diagnostic::{Diagnostic, DiagnosticKind};
pub use fix::Fix; pub use fix::Fix;
pub use violation::{AlwaysAutofixableViolation, AutofixKind, Availability, Violation}; pub use violation::{AlwaysAutofixableViolation, AutofixKind, Violation};
mod diagnostic; mod diagnostic;
mod fix; mod fix;

View file

@ -1,24 +1,25 @@
use std::fmt::Debug; use std::fmt::{Debug, Display};
pub enum Availability { pub enum AutofixKind {
Sometimes, Sometimes,
Always, Always,
None,
} }
pub struct AutofixKind { impl Display for AutofixKind {
pub available: Availability, fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
} match self {
AutofixKind::Sometimes => write!(f, "Autofix is sometimes available."),
impl AutofixKind { AutofixKind::Always => write!(f, "Autofix is always available."),
pub const fn new(available: Availability) -> Self { AutofixKind::None => write!(f, "Autofix is not available."),
Self { available } }
} }
} }
pub trait Violation: Debug + PartialEq + Eq { pub trait Violation: Debug + PartialEq + Eq {
/// `None` in the case an autofix is never available or otherwise Some /// `None` in the case an autofix is never available or otherwise Some
/// [`AutofixKind`] describing the available autofix. /// [`AutofixKind`] describing the available autofix.
const AUTOFIX: Option<AutofixKind> = None; const AUTOFIX: AutofixKind = AutofixKind::None;
/// The message used to describe the violation. /// The message used to describe the violation.
fn message(&self) -> String; fn message(&self) -> String;
@ -60,7 +61,7 @@ pub trait AlwaysAutofixableViolation: Debug + PartialEq + Eq {
/// A blanket implementation. /// A blanket implementation.
impl<VA: AlwaysAutofixableViolation> Violation for VA { impl<VA: AlwaysAutofixableViolation> Violation for VA {
const AUTOFIX: Option<AutofixKind> = Some(AutofixKind::new(Availability::Always)); const AUTOFIX: AutofixKind = AutofixKind::Always;
fn message(&self) -> String { fn message(&self) -> String {
<Self as AlwaysAutofixableViolation>::message(self) <Self as AlwaysAutofixableViolation>::message(self)

View file

@ -58,7 +58,7 @@ pub fn register_rules(input: &Input) -> proc_macro2::TokenStream {
} }
/// Returns the autofix status of this rule. /// Returns the autofix status of this rule.
pub const fn autofixable(&self) -> Option<ruff_diagnostics::AutofixKind> { pub const fn autofixable(&self) -> ruff_diagnostics::AutofixKind {
match self { #rule_autofixable_match_arms } match self { #rule_autofixable_match_arms }
} }
} }