diff --git a/crates/ruff/Cargo.toml b/crates/ruff/Cargo.toml index df5636659ae8b..3a22437a2f806 100644 --- a/crates/ruff/Cargo.toml +++ b/crates/ruff/Cargo.toml @@ -81,6 +81,5 @@ colored = { workspace = true, features = ["no-color"] } [features] default = [] schemars = ["dep:schemars"] -logical_lines = [] jupyter_notebook = [] ecosystem_ci = [] diff --git a/crates/ruff/src/checkers/logical_lines.rs b/crates/ruff/src/checkers/logical_lines.rs index 81fada3f46e8c..8d9ba1dd5d3f3 100644 --- a/crates/ruff/src/checkers/logical_lines.rs +++ b/crates/ruff/src/checkers/logical_lines.rs @@ -38,19 +38,11 @@ pub(crate) fn check_logical_lines( ) -> Vec { let mut context = LogicalLinesContext::new(settings); - #[cfg(feature = "logical_lines")] let should_fix_missing_whitespace = settings.rules.should_fix(Rule::MissingWhitespace); - #[cfg(not(feature = "logical_lines"))] - let should_fix_missing_whitespace = false; - - #[cfg(feature = "logical_lines")] let should_fix_whitespace_before_parameters = settings.rules.should_fix(Rule::WhitespaceBeforeParameters); - #[cfg(not(feature = "logical_lines"))] - let should_fix_whitespace_before_parameters = false; - let mut prev_line = None; let mut prev_indent_level = None; let indent_char = stylist.indentation().as_char(); diff --git a/crates/ruff/src/checkers/mod.rs b/crates/ruff/src/checkers/mod.rs index 7f3d268c13e12..5178e7e6647ec 100644 --- a/crates/ruff/src/checkers/mod.rs +++ b/crates/ruff/src/checkers/mod.rs @@ -1,7 +1,6 @@ pub(crate) mod ast; pub(crate) mod filesystem; pub(crate) mod imports; -#[cfg(feature = "logical_lines")] pub(crate) mod logical_lines; pub(crate) mod noqa; pub(crate) mod physical_lines; diff --git a/crates/ruff/src/codes.rs b/crates/ruff/src/codes.rs index 7fdb3fb5e19da..87111d8276707 100644 --- a/crates/ruff/src/codes.rs +++ b/crates/ruff/src/codes.rs @@ -34,67 +34,36 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option { Some(match (linter, code) { // pycodestyle errors (Pycodestyle, "E101") => Rule::MixedSpacesAndTabs, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E111") => Rule::IndentationWithInvalidMultiple, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E112") => Rule::NoIndentedBlock, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E113") => Rule::UnexpectedIndentation, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E114") => Rule::IndentationWithInvalidMultipleComment, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E115") => Rule::NoIndentedBlockComment, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E116") => Rule::UnexpectedIndentationComment, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E117") => Rule::OverIndented, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E201") => Rule::WhitespaceAfterOpenBracket, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E202") => Rule::WhitespaceBeforeCloseBracket, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E203") => Rule::WhitespaceBeforePunctuation, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E211") => Rule::WhitespaceBeforeParameters, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E221") => Rule::MultipleSpacesBeforeOperator, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E222") => Rule::MultipleSpacesAfterOperator, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E223") => Rule::TabBeforeOperator, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E224") => Rule::TabAfterOperator, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E225") => Rule::MissingWhitespaceAroundOperator, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E226") => Rule::MissingWhitespaceAroundArithmeticOperator, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E227") => Rule::MissingWhitespaceAroundBitwiseOrShiftOperator, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E228") => Rule::MissingWhitespaceAroundModuloOperator, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E231") => Rule::MissingWhitespace, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E251") => Rule::UnexpectedSpacesAroundKeywordParameterEquals, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E252") => Rule::MissingWhitespaceAroundParameterEquals, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E261") => Rule::TooFewSpacesBeforeInlineComment, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E262") => Rule::NoSpaceAfterInlineComment, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E265") => Rule::NoSpaceAfterBlockComment, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E266") => Rule::MultipleLeadingHashesForBlockComment, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E271") => Rule::MultipleSpacesAfterKeyword, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E272") => Rule::MultipleSpacesBeforeKeyword, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E273") => Rule::TabAfterKeyword, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E274") => Rule::TabBeforeKeyword, - #[cfg(feature = "logical_lines")] (Pycodestyle, "E275") => Rule::MissingWhitespaceAfterKeyword, (Pycodestyle, "E401") => Rule::MultipleImportsOnOneLine, (Pycodestyle, "E402") => Rule::ModuleImportNotAtTopOfFile, diff --git a/crates/ruff/src/linter.rs b/crates/ruff/src/linter.rs index 50b308cefdfae..88a6c7decefaa 100644 --- a/crates/ruff/src/linter.rs +++ b/crates/ruff/src/linter.rs @@ -116,7 +116,6 @@ pub fn check_path( .iter_enabled() .any(|rule_code| rule_code.lint_source().is_logical_lines()) { - #[cfg(feature = "logical_lines")] diagnostics.extend(crate::checkers::logical_lines::check_logical_lines( &tokens, locator, stylist, settings, )); diff --git a/crates/ruff/src/registry.rs b/crates/ruff/src/registry.rs index 01fd3e21ace7d..9c371e243fb2e 100644 --- a/crates/ruff/src/registry.rs +++ b/crates/ruff/src/registry.rs @@ -14,67 +14,36 @@ pub use rule_set::{RuleSet, RuleSetIterator}; ruff_macros::register_rules!( // pycodestyle errors rules::pycodestyle::rules::MixedSpacesAndTabs, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::IndentationWithInvalidMultiple, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::NoIndentedBlock, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::UnexpectedIndentation, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::IndentationWithInvalidMultipleComment, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::NoIndentedBlockComment, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::UnexpectedIndentationComment, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::OverIndented, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::WhitespaceAfterOpenBracket, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::WhitespaceBeforeCloseBracket, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::WhitespaceBeforePunctuation, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::MultipleSpacesBeforeOperator, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::MultipleSpacesAfterOperator, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::TabBeforeOperator, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::TabAfterOperator, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::TooFewSpacesBeforeInlineComment, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::NoSpaceAfterInlineComment, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::NoSpaceAfterBlockComment, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::MultipleLeadingHashesForBlockComment, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::MultipleSpacesAfterKeyword, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::MissingWhitespace, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::MissingWhitespaceAfterKeyword, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::MultipleSpacesBeforeKeyword, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::MissingWhitespaceAroundOperator, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::MissingWhitespaceAroundArithmeticOperator, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::MissingWhitespaceAroundBitwiseOrShiftOperator, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::MissingWhitespaceAroundModuloOperator, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::TabAfterKeyword, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::UnexpectedSpacesAroundKeywordParameterEquals, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::MissingWhitespaceAroundParameterEquals, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::WhitespaceBeforeParameters, - #[cfg(feature = "logical_lines")] rules::pycodestyle::rules::logical_lines::TabBeforeKeyword, rules::pycodestyle::rules::MultipleImportsOnOneLine, rules::pycodestyle::rules::ModuleImportNotAtTopOfFile, @@ -974,7 +943,6 @@ impl Rule { Rule::IOError => LintSource::Io, Rule::UnsortedImports | Rule::MissingRequiredImport => LintSource::Imports, Rule::ImplicitNamespacePackage | Rule::InvalidModuleName => LintSource::Filesystem, - #[cfg(feature = "logical_lines")] Rule::IndentationWithInvalidMultiple | Rule::IndentationWithInvalidMultipleComment | Rule::MissingWhitespace diff --git a/crates/ruff/src/rule_selector.rs b/crates/ruff/src/rule_selector.rs index 7c8e7903c84c7..f6ea3de4e14e9 100644 --- a/crates/ruff/src/rule_selector.rs +++ b/crates/ruff/src/rule_selector.rs @@ -196,15 +196,16 @@ pub(crate) const fn prefix_to_selector(prefix: RuleCodePrefix) -> RuleSelector { #[cfg(feature = "schemars")] mod schema { - use crate::registry::RuleNamespace; - use crate::rule_selector::{Linter, Rule, RuleCodePrefix}; - use crate::RuleSelector; use itertools::Itertools; + use schemars::JsonSchema; use schemars::_serde_json::Value; use schemars::schema::{InstanceType, Schema, SchemaObject}; - use schemars::JsonSchema; use strum::IntoEnumIterator; + use crate::registry::RuleNamespace; + use crate::rule_selector::{Linter, RuleCodePrefix}; + use crate::RuleSelector; + impl JsonSchema for RuleSelector { fn schema_name() -> String { "RuleSelector".to_string() @@ -228,20 +229,6 @@ mod schema { .into_iter() .chain( RuleCodePrefix::iter() - .filter(|p| { - // Once logical lines are active by default, please remove this. - // This is here because generate-all output otherwise depends on - // the feature sets which makes the test running with - // `--all-features` fail - !Rule::from_code(&format!( - "{}{}", - p.linter().common_prefix(), - p.short_code() - )) - .unwrap() - .lint_source() - .is_logical_lines() - }) .map(|p| { let prefix = p.linter().common_prefix(); let code = p.short_code(); diff --git a/crates/ruff/src/rules/pycodestyle/mod.rs b/crates/ruff/src/rules/pycodestyle/mod.rs index 43f1d9162af60..50cb780ad92cb 100644 --- a/crates/ruff/src/rules/pycodestyle/mod.rs +++ b/crates/ruff/src/rules/pycodestyle/mod.rs @@ -67,7 +67,6 @@ mod tests { Ok(()) } - #[cfg(feature = "logical_lines")] #[test_case(Rule::IndentationWithInvalidMultiple, Path::new("E11.py"))] #[test_case(Rule::IndentationWithInvalidMultipleComment, Path::new("E11.py"))] #[test_case(Rule::MultipleLeadingHashesForBlockComment, Path::new("E26.py"))] diff --git a/crates/ruff/src/rules/pycodestyle/rules/mod.rs b/crates/ruff/src/rules/pycodestyle/rules/mod.rs index 6209c41cf3c6f..2d43de0186898 100644 --- a/crates/ruff/src/rules/pycodestyle/rules/mod.rs +++ b/crates/ruff/src/rules/pycodestyle/rules/mod.rs @@ -41,7 +41,6 @@ mod invalid_escape_sequence; mod lambda_assignment; mod line_too_long; mod literal_comparisons; -#[cfg(feature = "logical_lines")] pub(crate) mod logical_lines; mod missing_newline_at_end_of_file; mod mixed_spaces_and_tabs; diff --git a/crates/ruff_benchmark/Cargo.toml b/crates/ruff_benchmark/Cargo.toml index 2585eeb7f6f5c..3e738d518c451 100644 --- a/crates/ruff_benchmark/Cargo.toml +++ b/crates/ruff_benchmark/Cargo.toml @@ -38,6 +38,3 @@ mimalloc = "0.1.34" [target.'cfg(all(not(target_os = "windows"), not(target_os = "openbsd"), any(target_arch = "x86_64", target_arch = "aarch64", target_arch = "powerpc64")))'.dev-dependencies] tikv-jemallocator = "0.5.0" - -[features] -logical_lines = [ "ruff/logical_lines" ] diff --git a/ruff.schema.json b/ruff.schema.json index 30ca80dbd566f..eff80201f27f3 100644 --- a/ruff.schema.json +++ b/ruff.schema.json @@ -1688,6 +1688,46 @@ "E1", "E10", "E101", + "E11", + "E111", + "E112", + "E113", + "E114", + "E115", + "E116", + "E117", + "E2", + "E20", + "E201", + "E202", + "E203", + "E21", + "E211", + "E22", + "E221", + "E222", + "E223", + "E224", + "E225", + "E226", + "E227", + "E228", + "E23", + "E231", + "E25", + "E251", + "E252", + "E26", + "E261", + "E262", + "E265", + "E266", + "E27", + "E271", + "E272", + "E273", + "E274", + "E275", "E4", "E40", "E401", diff --git a/scripts/check_docs_formatted.py b/scripts/check_docs_formatted.py index b6e5c0d213ac6..34068a2e8038f 100755 --- a/scripts/check_docs_formatted.py +++ b/scripts/check_docs_formatted.py @@ -28,22 +28,44 @@ "bad-quotes-inline-string", "bad-quotes-multiline-string", "explicit-string-concatenation", + "indentation-with-invalid-multiple", "line-too-long", "missing-trailing-comma", "multi-line-implicit-string-concatenation", + "multiple-leading-hashes-for-block-comment", + "multiple-spaces-after-keyword", + "multiple-spaces-after-operator", + "multiple-spaces-before-keyword", + "multiple-spaces-before-operator", "multiple-statements-on-one-line-colon", "multiple-statements-on-one-line-semicolon", + "no-indented-block-comment", + "no-space-after-block-comment", + "no-space-after-inline-comment", + "over-indented", "prohibited-trailing-comma", + "too-few-spaces-before-inline-comment", "trailing-comma-on-bare-tuple", + "unexpected-indentation-comment", "useless-semicolon", + "whitespace-after-open-bracket", + "whitespace-before-close-bracket", + "whitespace-before-punctuation", ] # For some docs, black is unable to parse the example code. KNOWN_PARSE_ERRORS = [ "blank-line-with-whitespace", + "indentation-with-invalid-multiple-comment", "missing-newline-at-end-of-file", "mixed-spaces-and-tabs", + "no-indented-block", + "tab-after-keyword", + "tab-after-operator", + "tab-before-keyword", + "tab-before-operator", "trailing-whitespace", + "unexpected-indentation", ] diff --git a/scripts/pyproject.toml b/scripts/pyproject.toml index 00da49b526cc0..706183e4f70c9 100644 --- a/scripts/pyproject.toml +++ b/scripts/pyproject.toml @@ -17,6 +17,7 @@ ignore = [ "G", # flake8-logging "T", # flake8-print "FBT", # flake8-boolean-trap + "E203", ] [tool.ruff.pydocstyle]