diff --git a/crates/flake8_to_ruff/src/converter.rs b/crates/flake8_to_ruff/src/converter.rs index 63a5c9dfd7..650e055125 100644 --- a/crates/flake8_to_ruff/src/converter.rs +++ b/crates/flake8_to_ruff/src/converter.rs @@ -16,36 +16,38 @@ pub fn convert(config: HashMap>>) -> Resu // Parse each supported option. let mut options: Options = Default::default(); for (key, value) in flake8 { - match key.as_str() { - "line-length" | "line_length" => match value.clone().unwrap().parse::() { - Ok(line_length) => options.line_length = Some(line_length), - Err(e) => eprintln!("Unable to parse '{key}' property: {e}"), - }, - "select" => { - options.select = Some(parser::parse_prefix_codes(value.as_ref().unwrap())); - } - "extend-select" | "extend_select" => { - options.extend_select = parser::parse_prefix_codes(value.as_ref().unwrap()); - } - "ignore" => { - options.ignore = parser::parse_prefix_codes(value.as_ref().unwrap()); - } - "extend-ignore" | "extend_ignore" => { - options.extend_ignore = parser::parse_prefix_codes(value.as_ref().unwrap()); - } - "exclude" => { - options.exclude = Some(parser::parse_strings(value.as_ref().unwrap())); - } - "extend-exclude" | "extend_exclude" => { - options.extend_exclude = parser::parse_strings(value.as_ref().unwrap()); - } - "per-file-ignores" | "per_file_ignores" => { - match parser::parse_files_to_codes_mapping(value.as_ref().unwrap()) { - Ok(per_file_ignores) => options.per_file_ignores = per_file_ignores, + if let Some(value) = value { + match key.as_str() { + "line-length" | "line_length" => match value.clone().parse::() { + Ok(line_length) => options.line_length = Some(line_length), Err(e) => eprintln!("Unable to parse '{key}' property: {e}"), + }, + "select" => { + options.select = Some(parser::parse_prefix_codes(value.as_ref())); } + "extend-select" | "extend_select" => { + options.extend_select = Some(parser::parse_prefix_codes(value.as_ref())); + } + "ignore" => { + options.ignore = Some(parser::parse_prefix_codes(value.as_ref())); + } + "extend-ignore" | "extend_ignore" => { + options.extend_ignore = Some(parser::parse_prefix_codes(value.as_ref())); + } + "exclude" => { + options.exclude = Some(parser::parse_strings(value.as_ref())); + } + "extend-exclude" | "extend_exclude" => { + options.extend_exclude = Some(parser::parse_strings(value.as_ref())); + } + "per-file-ignores" | "per_file_ignores" => { + match parser::parse_files_to_codes_mapping(value.as_ref()) { + Ok(per_file_ignores) => options.per_file_ignores = Some(per_file_ignores), + Err(e) => eprintln!("Unable to parse '{key}' property: {e}"), + } + } + _ => eprintln!("Skipping unsupported property: {key}"), } - _ => eprintln!("Skipping unsupported property: {key}"), } } diff --git a/src/settings/configuration.rs b/src/settings/configuration.rs index 273fa86867..3f280227cf 100644 --- a/src/settings/configuration.rs +++ b/src/settings/configuration.rs @@ -80,18 +80,20 @@ impl Configuration { .unwrap_or_else(|| DEFAULT_EXCLUDE.clone()), extend_exclude: options .extend_exclude + .unwrap_or_default() .iter() .map(|path| FilePattern::from_user(path, project_root)) .collect(), - extend_ignore: options.extend_ignore, + extend_ignore: options.extend_ignore.unwrap_or_default(), select: options .select .unwrap_or_else(|| vec![CheckCodePrefix::E, CheckCodePrefix::F]), - extend_select: options.extend_select, - ignore: options.ignore, + extend_select: options.extend_select.unwrap_or_default(), + ignore: options.ignore.unwrap_or_default(), line_length: options.line_length.unwrap_or(88), per_file_ignores: options .per_file_ignores + .unwrap_or_default() .into_iter() .map(|pair| PerFileIgnore::new(pair, project_root)) .collect(), diff --git a/src/settings/options.rs b/src/settings/options.rs index bb00bfdc80..1ef93d8677 100644 --- a/src/settings/options.rs +++ b/src/settings/options.rs @@ -11,17 +11,12 @@ use crate::{flake8_quotes, pep8_naming}; pub struct Options { pub line_length: Option, pub exclude: Option>, - #[serde(default)] - pub extend_exclude: Vec, + pub extend_exclude: Option>, pub select: Option>, - #[serde(default)] - pub extend_select: Vec, - #[serde(default)] - pub ignore: Vec, - #[serde(default)] - pub extend_ignore: Vec, - #[serde(default)] - pub per_file_ignores: Vec, + pub extend_select: Option>, + pub ignore: Option>, + pub extend_ignore: Option>, + pub per_file_ignores: Option>, pub dummy_variable_rgx: Option, pub target_version: Option, // Plugins diff --git a/src/settings/pyproject.rs b/src/settings/pyproject.rs index 417e8f5bcb..cb8d172e9e 100644 --- a/src/settings/pyproject.rs +++ b/src/settings/pyproject.rs @@ -134,12 +134,12 @@ mod tests { ruff: Some(Options { line_length: None, exclude: None, - extend_exclude: vec![], + extend_exclude: None, select: None, - extend_select: vec![], - ignore: vec![], - extend_ignore: vec![], - per_file_ignores: vec![], + extend_select: None, + ignore: None, + extend_ignore: None, + per_file_ignores: None, dummy_variable_rgx: None, target_version: None, flake8_quotes: None, @@ -161,12 +161,12 @@ line-length = 79 ruff: Some(Options { line_length: Some(79), exclude: None, - extend_exclude: vec![], + extend_exclude: None, select: None, - extend_select: vec![], - ignore: vec![], - extend_ignore: vec![], - per_file_ignores: vec![], + extend_select: None, + ignore: None, + extend_ignore: None, + per_file_ignores: None, dummy_variable_rgx: None, target_version: None, flake8_quotes: None, @@ -188,12 +188,12 @@ exclude = ["foo.py"] ruff: Some(Options { line_length: None, exclude: Some(vec!["foo.py".to_string()]), - extend_exclude: vec![], + extend_exclude: None, select: None, - extend_select: vec![], - ignore: vec![], - extend_ignore: vec![], - per_file_ignores: vec![], + extend_select: None, + ignore: None, + extend_ignore: None, + per_file_ignores: None, dummy_variable_rgx: None, target_version: None, flake8_quotes: None, @@ -215,12 +215,12 @@ select = ["E501"] ruff: Some(Options { line_length: None, exclude: None, - extend_exclude: vec![], + extend_exclude: None, select: Some(vec![CheckCodePrefix::E501]), - extend_select: vec![], - ignore: vec![], - extend_ignore: vec![], - per_file_ignores: vec![], + extend_select: None, + ignore: None, + extend_ignore: None, + per_file_ignores: None, dummy_variable_rgx: None, target_version: None, flake8_quotes: None, @@ -243,12 +243,12 @@ ignore = ["E501"] ruff: Some(Options { line_length: None, exclude: None, - extend_exclude: vec![], + extend_exclude: None, select: None, - extend_select: vec![CheckCodePrefix::M001], - ignore: vec![CheckCodePrefix::E501], - extend_ignore: vec![], - per_file_ignores: vec![], + extend_select: Some(vec![CheckCodePrefix::M001]), + ignore: Some(vec![CheckCodePrefix::E501]), + extend_ignore: None, + per_file_ignores: None, dummy_variable_rgx: None, target_version: None, flake8_quotes: None, @@ -310,19 +310,19 @@ other-attribute = 1 Options { line_length: Some(88), exclude: None, - extend_exclude: vec![ + extend_exclude: Some(vec![ "excluded.py".to_string(), "migrations".to_string(), "directory/also_excluded.py".to_string(), - ], + ]), select: None, - extend_select: vec![], - ignore: vec![], - extend_ignore: vec![], - per_file_ignores: vec![StrCheckCodePair { + extend_select: None, + ignore: None, + extend_ignore: None, + per_file_ignores: Some(vec![StrCheckCodePair { pattern: "__init__.py".to_string(), code: CheckCodePrefix::F401 - }], + }]), dummy_variable_rgx: None, target_version: None, flake8_quotes: Some(flake8_quotes::settings::Options {