Skip to content

Commit

Permalink
refactor: Declare defaults once in settings::defaults
Browse files Browse the repository at this point in the history
  • Loading branch information
not-my-profile authored and charliermarsh committed Jan 17, 2023
1 parent aa812de commit 30e133f
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 64 deletions.
13 changes: 6 additions & 7 deletions src/lib_wasm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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");
Expand Down Expand Up @@ -87,14 +86,14 @@ pub fn defaultSettings() -> Result<JsValue, JsValue> {
// 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,
Expand Down
55 changes: 43 additions & 12 deletions src/settings/defaults.rs
Original file line number Diff line number Diff line change
@@ -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::{
Expand All @@ -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<Regex> =
Lazy::new(|| Regex::new("^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$").unwrap());

pub static EXCLUDE: Lazy<Vec<FilePattern>> = 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(),
Expand Down
50 changes: 11 additions & 39 deletions src/settings/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand All @@ -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;
Expand Down Expand Up @@ -124,33 +120,6 @@ pub struct Settings {
pub pyupgrade: pyupgrade::settings::Settings,
}

static DEFAULT_EXCLUDE: Lazy<Vec<FilePattern>> = 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<Regex> =
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<Self> {
Ok(Self {
Expand All @@ -171,18 +140,18 @@ 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(),

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(),
Expand All @@ -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
Expand Down Expand Up @@ -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()
Expand Down
6 changes: 0 additions & 6 deletions src/settings/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down

0 comments on commit 30e133f

Please sign in to comment.