diff --git a/src/lib_wasm.rs b/src/lib_wasm.rs index eb9055fb1789b..11e57cdea8b45 100644 --- a/src/lib_wasm.rs +++ b/src/lib_wasm.rs @@ -7,7 +7,7 @@ use wasm_bindgen::prelude::*; use crate::directives; use crate::linter::check_path; -use crate::registry::{RuleCode, RuleCodePrefix}; +use crate::registry::RuleCode; use crate::rules::{ flake8_annotations, flake8_bandit, flake8_bugbear, flake8_errmsg, flake8_import_conventions, flake8_pytest_style, flake8_quotes, flake8_tidy_imports, flake8_unused_arguments, isort, @@ -16,8 +16,7 @@ use crate::rules::{ use crate::rustpython_helpers::tokenize; use crate::settings::configuration::Configuration; use crate::settings::options::Options; -use crate::settings::types::PythonVersion; -use crate::settings::{flags, Settings}; +use crate::settings::{defaults, flags, Settings}; use crate::source_code::{Indexer, Locator, Stylist}; const VERSION: &str = env!("CARGO_PKG_VERSION"); @@ -87,14 +86,14 @@ pub fn defaultSettings() -> Result { // Propagate defaults. allowed_confusables: Some(Vec::default()), builtins: Some(Vec::default()), - dummy_variable_rgx: Some("^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$".to_string()), + dummy_variable_rgx: Some(defaults::DUMMY_VARIABLE_RGX.as_str().to_string()), extend_ignore: Some(Vec::default()), extend_select: Some(Vec::default()), external: Some(Vec::default()), ignore: Some(Vec::default()), - line_length: Some(88), - select: Some(vec![RuleCodePrefix::E, RuleCodePrefix::F]), - target_version: Some(PythonVersion::default()), + line_length: Some(defaults::LINE_LENGTH), + select: Some(defaults::PREFIXES.to_vec()), + target_version: Some(defaults::TARGET_VERSION), // Ignore a bunch of options that don't make sense in a single-file editor. cache_dir: None, exclude: None, diff --git a/src/settings/defaults.rs b/src/settings/defaults.rs index 5ad16437cde51..ec21323fd4e12 100644 --- a/src/settings/defaults.rs +++ b/src/settings/defaults.rs @@ -1,9 +1,10 @@ +use once_cell::sync::Lazy; use path_absolutize::path_dedot; use regex::Regex; use rustc_hash::FxHashSet; use super::hashable::{HashableGlobSet, HashableHashSet}; -use super::types::PythonVersion; +use super::types::{FilePattern, PythonVersion}; use super::Settings; use crate::registry::RuleCodePrefix; use crate::rules::{ @@ -12,32 +13,62 @@ use crate::rules::{ mccabe, pep8_naming, pycodestyle, pydocstyle, pyupgrade, }; +pub const PREFIXES: &[RuleCodePrefix] = &[RuleCodePrefix::E, RuleCodePrefix::F]; + +pub const TARGET_VERSION: PythonVersion = PythonVersion::Py310; + +pub const LINE_LENGTH: usize = 88; + +pub const TASK_TAGS: &[&str] = &["TODO", "FIXME", "XXX"]; + +pub static DUMMY_VARIABLE_RGX: Lazy = + Lazy::new(|| Regex::new("^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$").unwrap()); + +pub static EXCLUDE: Lazy> = Lazy::new(|| { + vec![ + FilePattern::Builtin(".bzr"), + FilePattern::Builtin(".direnv"), + FilePattern::Builtin(".eggs"), + FilePattern::Builtin(".git"), + FilePattern::Builtin(".hg"), + FilePattern::Builtin(".mypy_cache"), + FilePattern::Builtin(".nox"), + FilePattern::Builtin(".pants.d"), + FilePattern::Builtin(".ruff_cache"), + FilePattern::Builtin(".svn"), + FilePattern::Builtin(".tox"), + FilePattern::Builtin(".venv"), + FilePattern::Builtin("__pypackages__"), + FilePattern::Builtin("_build"), + FilePattern::Builtin("buck-out"), + FilePattern::Builtin("build"), + FilePattern::Builtin("dist"), + FilePattern::Builtin("node_modules"), + FilePattern::Builtin("venv"), + ] +}); + impl Default for Settings { fn default() -> Self { Self { - rules: [&RuleCodePrefix::E, &RuleCodePrefix::F] - .into_iter() - .flat_map(RuleCodePrefix::codes) - .into(), + rules: PREFIXES.iter().flat_map(RuleCodePrefix::codes).into(), allowed_confusables: FxHashSet::from_iter([]).into(), builtins: vec![], - dummy_variable_rgx: Regex::new("^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$") - .unwrap() - .into(), - exclude: HashableGlobSet::empty(), + dummy_variable_rgx: DUMMY_VARIABLE_RGX.clone().into(), + exclude: HashableGlobSet::new(EXCLUDE.clone()).unwrap(), extend_exclude: HashableGlobSet::empty(), external: HashableHashSet::default(), force_exclude: false, ignore_init_module_imports: false, - line_length: 88, + line_length: LINE_LENGTH, namespace_packages: vec![], per_file_ignores: vec![], required_version: None, respect_gitignore: true, show_source: false, src: vec![path_dedot::CWD.clone()], - target_version: PythonVersion::Py310, - task_tags: vec!["TODO".to_string(), "FIXME".to_string(), "XXX".to_string()], + target_version: TARGET_VERSION, + task_tags: TASK_TAGS.iter().map(ToString::to_string).collect(), typing_modules: vec![], flake8_annotations: flake8_annotations::settings::Settings::default(), flake8_bandit: flake8_bandit::settings::Settings::default(), diff --git a/src/settings/mod.rs b/src/settings/mod.rs index c14668b9478f3..f639b95d57be2 100644 --- a/src/settings/mod.rs +++ b/src/settings/mod.rs @@ -9,8 +9,6 @@ use anyhow::{anyhow, Result}; use colored::Colorize; use globset::Glob; use itertools::Either::{Left, Right}; -use once_cell::sync::Lazy; -use regex::Regex; use rustc_hash::FxHashSet; use self::hashable::{HashableGlobMatcher, HashableGlobSet, HashableHashSet, HashableRegex}; @@ -23,13 +21,11 @@ use crate::rules::{ mccabe, pep8_naming, pycodestyle, pydocstyle, pyupgrade, }; use crate::settings::configuration::Configuration; -use crate::settings::types::{ - FilePattern, PerFileIgnore, PythonVersion, SerializationFormat, Version, -}; +use crate::settings::types::{PerFileIgnore, PythonVersion, SerializationFormat, Version}; use crate::warn_user_once; pub mod configuration; -mod defaults; +pub mod defaults; pub mod flags; pub mod hashable; pub mod options; @@ -124,33 +120,6 @@ pub struct Settings { pub pyupgrade: pyupgrade::settings::Settings, } -static DEFAULT_EXCLUDE: Lazy> = Lazy::new(|| { - vec![ - FilePattern::Builtin(".bzr"), - FilePattern::Builtin(".direnv"), - FilePattern::Builtin(".eggs"), - FilePattern::Builtin(".git"), - FilePattern::Builtin(".hg"), - FilePattern::Builtin(".mypy_cache"), - FilePattern::Builtin(".nox"), - FilePattern::Builtin(".pants.d"), - FilePattern::Builtin(".ruff_cache"), - FilePattern::Builtin(".svn"), - FilePattern::Builtin(".tox"), - FilePattern::Builtin(".venv"), - FilePattern::Builtin("__pypackages__"), - FilePattern::Builtin("_build"), - FilePattern::Builtin("buck-out"), - FilePattern::Builtin("build"), - FilePattern::Builtin("dist"), - FilePattern::Builtin("node_modules"), - FilePattern::Builtin("venv"), - ] -}); - -static DEFAULT_DUMMY_VARIABLE_RGX: Lazy = - Lazy::new(|| Regex::new("^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$").unwrap()); - impl Settings { pub fn from_configuration(config: Configuration, project_root: &Path) -> Result { Ok(Self { @@ -171,10 +140,10 @@ impl Settings { builtins: config.builtins.unwrap_or_default(), dummy_variable_rgx: config .dummy_variable_rgx - .unwrap_or_else(|| DEFAULT_DUMMY_VARIABLE_RGX.clone()) + .unwrap_or_else(|| defaults::DUMMY_VARIABLE_RGX.clone()) .into(), exclude: HashableGlobSet::new( - config.exclude.unwrap_or_else(|| DEFAULT_EXCLUDE.clone()), + config.exclude.unwrap_or_else(|| defaults::EXCLUDE.clone()), )?, extend_exclude: HashableGlobSet::new(config.extend_exclude)?, external: FxHashSet::from_iter(config.external.unwrap_or_default()).into(), @@ -182,7 +151,7 @@ impl Settings { force_exclude: config.force_exclude.unwrap_or(false), ignore_init_module_imports: config.ignore_init_module_imports.unwrap_or_default(), - line_length: config.line_length.unwrap_or(88), + line_length: config.line_length.unwrap_or(defaults::LINE_LENGTH), namespace_packages: config.namespace_packages.unwrap_or_default(), per_file_ignores: resolve_per_file_ignores( config.per_file_ignores.unwrap_or_default(), @@ -193,9 +162,12 @@ impl Settings { src: config .src .unwrap_or_else(|| vec![project_root.to_path_buf()]), - target_version: config.target_version.unwrap_or_default(), + target_version: config.target_version.unwrap_or(defaults::TARGET_VERSION), task_tags: config.task_tags.unwrap_or_else(|| { - vec!["TODO".to_string(), "FIXME".to_string(), "XXX".to_string()] + defaults::TASK_TAGS + .iter() + .map(ToString::to_string) + .collect() }), typing_modules: config.typing_modules.unwrap_or_default(), // Plugins @@ -280,7 +252,7 @@ fn build_rule_table( for code in validate_enabled(resolve_codes( [RuleCodeSpec { - select: &select.unwrap_or_else(|| vec![RuleCodePrefix::E, RuleCodePrefix::F]), + select: &select.unwrap_or_else(|| defaults::PREFIXES.to_vec()), ignore: &ignore.unwrap_or_default(), }] .into_iter() diff --git a/src/settings/types.rs b/src/settings/types.rs index 829b79fd69c14..9816e0f5ce0bc 100644 --- a/src/settings/types.rs +++ b/src/settings/types.rs @@ -30,12 +30,6 @@ pub enum PythonVersion { Py311, } -impl Default for PythonVersion { - fn default() -> Self { - Self::Py310 - } -} - impl FromStr for PythonVersion { type Err = anyhow::Error;