From c62cd04d1f413bdd5920e20b01f37d58732f1117 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Fri, 22 Mar 2024 14:24:28 -0400 Subject: [PATCH] Add tests --- ...ow_settings__display_default_settings.snap | 6 +- .../src/rules/flake8_copyright/mod.rs | 134 ++++++++++++++++++ .../src/rules/flake8_copyright/settings.rs | 3 +- ...8_copyright__tests__notice_with_comma.snap | 4 + ...id_author_with_comma_invalid_no_space.snap | 10 ++ ...alid_author_with_comma_invalid_spaces.snap | 10 ++ ...__valid_author_with_comma_valid_space.snap | 4 + ...yright__tests__valid_author_with_dash.snap | 4 + ..._valid_author_with_dash_invalid_space.snap | 10 ++ ...valid_author_with_dash_invalid_spaces.snap | 10 ++ crates/ruff_workspace/src/options.rs | 6 +- ruff.schema.json | 2 +- 12 files changed, 192 insertions(+), 11 deletions(-) create mode 100644 crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__notice_with_comma.snap create mode 100644 crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_comma_invalid_no_space.snap create mode 100644 crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_comma_invalid_spaces.snap create mode 100644 crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_comma_valid_space.snap create mode 100644 crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_dash.snap create mode 100644 crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_dash_invalid_space.snap create mode 100644 crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_dash_invalid_spaces.snap diff --git a/crates/ruff/tests/snapshots/show_settings__display_default_settings.snap b/crates/ruff/tests/snapshots/show_settings__display_default_settings.snap index 5603e9020b17b..1c0402e16305b 100644 --- a/crates/ruff/tests/snapshots/show_settings__display_default_settings.snap +++ b/crates/ruff/tests/snapshots/show_settings__display_default_settings.snap @@ -231,11 +231,7 @@ linter.flake8_bandit.check_typed_exception = false linter.flake8_bugbear.extend_immutable_calls = [] linter.flake8_builtins.builtins_ignorelist = [] linter.flake8_comprehensions.allow_dict_calls_with_keyword_arguments = false -<<<<<<< HEAD:crates/ruff_cli/tests/snapshots/show_settings__display_default_settings.snap -linter.flake8_copyright.notice_rgx = (?i)Copyright\s+(\(C\)\s+)?\d{4}([-,]\d{4})* -======= -linter.flake8_copyright.notice_rgx = (?i)Copyright\s+((?:\(C\)|©)\s+)?\d{4}(-\d{4})* ->>>>>>> main:crates/ruff/tests/snapshots/show_settings__display_default_settings.snap +linter.flake8_copyright.notice_rgx = (?i)Copyright\s+((?:\(C\)|©)\s+)?\d{4}((-|,\s)\d{4})* linter.flake8_copyright.author = none linter.flake8_copyright.min_file_size = 0 linter.flake8_errmsg.max_string_length = 0 diff --git a/crates/ruff_linter/src/rules/flake8_copyright/mod.rs b/crates/ruff_linter/src/rules/flake8_copyright/mod.rs index 7b760f72bf427..1d9c1ad2d415b 100644 --- a/crates/ruff_linter/src/rules/flake8_copyright/mod.rs +++ b/crates/ruff_linter/src/rules/flake8_copyright/mod.rs @@ -71,6 +71,20 @@ import os r" # Copyright (C) 2021-2023 +import os +" + .trim(), + &settings::LinterSettings::for_rules(vec![Rule::MissingCopyrightNotice]), + ); + assert_messages!(diagnostics); + } + + #[test] + fn notice_with_comma() { + let diagnostics = test_snippet( + r" +# Copyright (C) 2021, 2022 + import os " .trim(), @@ -85,6 +99,126 @@ import os r" # Copyright (C) 2023 Ruff +import os +" + .trim(), + &settings::LinterSettings { + flake8_copyright: super::settings::Settings { + author: Some("Ruff".to_string()), + ..super::settings::Settings::default() + }, + ..settings::LinterSettings::for_rules(vec![Rule::MissingCopyrightNotice]) + }, + ); + assert_messages!(diagnostics); + } + + #[test] + fn valid_author_with_dash() { + let diagnostics = test_snippet( + r" +# Copyright (C) 2022-2023 Ruff + +import os +" + .trim(), + &settings::LinterSettings { + flake8_copyright: super::settings::Settings { + author: Some("Ruff".to_string()), + ..super::settings::Settings::default() + }, + ..settings::LinterSettings::for_rules(vec![Rule::MissingCopyrightNotice]) + }, + ); + assert_messages!(diagnostics); + } + + #[test] + fn valid_author_with_dash_invalid_space() { + let diagnostics = test_snippet( + r" +# Copyright (C) 2022- 2023 Ruff + +import os +" + .trim(), + &settings::LinterSettings { + flake8_copyright: super::settings::Settings { + author: Some("Ruff".to_string()), + ..super::settings::Settings::default() + }, + ..settings::LinterSettings::for_rules(vec![Rule::MissingCopyrightNotice]) + }, + ); + assert_messages!(diagnostics); + } + + #[test] + fn valid_author_with_dash_invalid_spaces() { + let diagnostics = test_snippet( + r" +# Copyright (C) 2022 - 2023 Ruff + +import os +" + .trim(), + &settings::LinterSettings { + flake8_copyright: super::settings::Settings { + author: Some("Ruff".to_string()), + ..super::settings::Settings::default() + }, + ..settings::LinterSettings::for_rules(vec![Rule::MissingCopyrightNotice]) + }, + ); + assert_messages!(diagnostics); + } + + #[test] + fn valid_author_with_comma_invalid_no_space() { + let diagnostics = test_snippet( + r" +# Copyright (C) 2022,2023 Ruff + +import os +" + .trim(), + &settings::LinterSettings { + flake8_copyright: super::settings::Settings { + author: Some("Ruff".to_string()), + ..super::settings::Settings::default() + }, + ..settings::LinterSettings::for_rules(vec![Rule::MissingCopyrightNotice]) + }, + ); + assert_messages!(diagnostics); + } + + #[test] + fn valid_author_with_comma_invalid_spaces() { + let diagnostics = test_snippet( + r" +# Copyright (C) 2022 , 2023 Ruff + +import os +" + .trim(), + &settings::LinterSettings { + flake8_copyright: super::settings::Settings { + author: Some("Ruff".to_string()), + ..super::settings::Settings::default() + }, + ..settings::LinterSettings::for_rules(vec![Rule::MissingCopyrightNotice]) + }, + ); + assert_messages!(diagnostics); + } + + #[test] + fn valid_author_with_comma_valid_space() { + let diagnostics = test_snippet( + r" +# Copyright (C) 2022, 2023 Ruff + import os " .trim(), diff --git a/crates/ruff_linter/src/rules/flake8_copyright/settings.rs b/crates/ruff_linter/src/rules/flake8_copyright/settings.rs index 4e37f4fb0a04e..b62c221c769fa 100644 --- a/crates/ruff_linter/src/rules/flake8_copyright/settings.rs +++ b/crates/ruff_linter/src/rules/flake8_copyright/settings.rs @@ -15,8 +15,7 @@ pub struct Settings { } pub static COPYRIGHT: Lazy = - // Lazy::new(|| Regex::new(r"(?i)Copyright\s+(\(C\)\s+)?\d{4}([-,]\d{4})*").unwrap()); - Lazy::new(|| Regex::new(r"(?i)Copyright\s+((?:\(C\)|©)\s+)?\d{4}(-\d{4})*").unwrap()); + Lazy::new(|| Regex::new(r"(?i)Copyright\s+((?:\(C\)|©)\s+)?\d{4}((-|,\s)\d{4})*").unwrap()); impl Default for Settings { fn default() -> Self { diff --git a/crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__notice_with_comma.snap b/crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__notice_with_comma.snap new file mode 100644 index 0000000000000..314ed9c4f967d --- /dev/null +++ b/crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__notice_with_comma.snap @@ -0,0 +1,4 @@ +--- +source: crates/ruff_linter/src/rules/flake8_copyright/mod.rs +--- + diff --git a/crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_comma_invalid_no_space.snap b/crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_comma_invalid_no_space.snap new file mode 100644 index 0000000000000..f863134fdeffa --- /dev/null +++ b/crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_comma_invalid_no_space.snap @@ -0,0 +1,10 @@ +--- +source: crates/ruff_linter/src/rules/flake8_copyright/mod.rs +--- +:1:1: CPY001 Missing copyright notice at top of file + | +1 | # Copyright (C) 2022,2023 Ruff + | CPY001 +2 | +3 | import os + | diff --git a/crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_comma_invalid_spaces.snap b/crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_comma_invalid_spaces.snap new file mode 100644 index 0000000000000..4f23985e3cf82 --- /dev/null +++ b/crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_comma_invalid_spaces.snap @@ -0,0 +1,10 @@ +--- +source: crates/ruff_linter/src/rules/flake8_copyright/mod.rs +--- +:1:1: CPY001 Missing copyright notice at top of file + | +1 | # Copyright (C) 2022 , 2023 Ruff + | CPY001 +2 | +3 | import os + | diff --git a/crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_comma_valid_space.snap b/crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_comma_valid_space.snap new file mode 100644 index 0000000000000..314ed9c4f967d --- /dev/null +++ b/crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_comma_valid_space.snap @@ -0,0 +1,4 @@ +--- +source: crates/ruff_linter/src/rules/flake8_copyright/mod.rs +--- + diff --git a/crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_dash.snap b/crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_dash.snap new file mode 100644 index 0000000000000..314ed9c4f967d --- /dev/null +++ b/crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_dash.snap @@ -0,0 +1,4 @@ +--- +source: crates/ruff_linter/src/rules/flake8_copyright/mod.rs +--- + diff --git a/crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_dash_invalid_space.snap b/crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_dash_invalid_space.snap new file mode 100644 index 0000000000000..ad45336ac5c66 --- /dev/null +++ b/crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_dash_invalid_space.snap @@ -0,0 +1,10 @@ +--- +source: crates/ruff_linter/src/rules/flake8_copyright/mod.rs +--- +:1:1: CPY001 Missing copyright notice at top of file + | +1 | # Copyright (C) 2022- 2023 Ruff + | CPY001 +2 | +3 | import os + | diff --git a/crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_dash_invalid_spaces.snap b/crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_dash_invalid_spaces.snap new file mode 100644 index 0000000000000..353f1a5c87773 --- /dev/null +++ b/crates/ruff_linter/src/rules/flake8_copyright/snapshots/ruff_linter__rules__flake8_copyright__tests__valid_author_with_dash_invalid_spaces.snap @@ -0,0 +1,10 @@ +--- +source: crates/ruff_linter/src/rules/flake8_copyright/mod.rs +--- +:1:1: CPY001 Missing copyright notice at top of file + | +1 | # Copyright (C) 2022 - 2023 Ruff + | CPY001 +2 | +3 | import os + | diff --git a/crates/ruff_workspace/src/options.rs b/crates/ruff_workspace/src/options.rs index e5ed561e926c7..6e673baa16a76 100644 --- a/crates/ruff_workspace/src/options.rs +++ b/crates/ruff_workspace/src/options.rs @@ -1131,15 +1131,15 @@ impl Flake8ComprehensionsOptions { pub struct Flake8CopyrightOptions { /// The regular expression used to match the copyright notice, compiled /// with the [`regex`](https://docs.rs/regex/latest/regex/) crate. - /// Defaults to `(?i)Copyright\s+((?:\(C\)|©)\s+)?\d{4}([-,]\d{4})*`, which matches + /// Defaults to `(?i)Copyright\s+((?:\(C\)|©)\s+)?\d{4}((-|,\s)\d{4})*`, which matches /// the following: /// - `Copyright 2023` /// - `Copyright (C) 2023` /// - `Copyright 2021-2023` /// - `Copyright (C) 2021-2023` - /// - `Copyright (C) 2021,2023` + /// - `Copyright (C) 2021, 2023` #[option( - default = r#"(?i)Copyright\s+((?:\(C\)|©)\s+)?\d{4}([-,]\d{4})*"#, + default = r#"(?i)Copyright\s+((?:\(C\)|©)\s+)?\d{4}((-|,\s)\d{4})*"#, value_type = "str", example = r#"notice-rgx = "(?i)Copyright \\(C\\) \\d{4}""# )] diff --git a/ruff.schema.json b/ruff.schema.json index b3e88111c7f73..0d5ae5a283eae 100644 --- a/ruff.schema.json +++ b/ruff.schema.json @@ -959,7 +959,7 @@ "minimum": 0.0 }, "notice-rgx": { - "description": "The regular expression used to match the copyright notice, compiled with the [`regex`](https://docs.rs/regex/latest/regex/) crate.\n\nDefaults to `(?i)Copyright\\s+((?:\\(C\\)|©)\\s+)?\\d{4}(-\\d{4})*`, which matches the following: - `Copyright 2023` - `Copyright (C) 2023` - `Copyright 2021-2023` - `Copyright (C) 2021-2023`", + "description": "The regular expression used to match the copyright notice, compiled with the [`regex`](https://docs.rs/regex/latest/regex/) crate. Defaults to `(?i)Copyright\\s+((?:\\(C\\)|©)\\s+)?\\d{4}((-|,\\s)\\d{4})*`, which matches the following: - `Copyright 2023` - `Copyright (C) 2023` - `Copyright 2021-2023` - `Copyright (C) 2021-2023` - `Copyright (C) 2021, 2023`", "type": [ "string", "null"