From c7d0d269813e0749c87f1a77d25499e42ea2749b Mon Sep 17 00:00:00 2001 From: messense Date: Mon, 16 Jan 2023 01:49:42 +0800 Subject: [PATCH] Update add plugin/rule scripts (#1889) Adjusted some file locations and changed to use [`pathlib`](https://docs.python.org/3/library/pathlib.html) instead of `os.path`. --- scripts/add_plugin.py | 28 ++++++++++++++-------------- scripts/add_rule.py | 23 +++++++++++------------ 2 files changed, 25 insertions(+), 26 deletions(-) diff --git a/scripts/add_plugin.py b/scripts/add_plugin.py index 541d5813ee..e2916f7489 100644 --- a/scripts/add_plugin.py +++ b/scripts/add_plugin.py @@ -10,8 +10,9 @@ Example usage: import argparse import os +from pathlib import Path -ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +ROOT_DIR = Path(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) def dir_name(plugin: str) -> str: @@ -25,15 +26,16 @@ def pascal_case(plugin: str) -> str: def main(*, plugin: str, url: str) -> None: # Create the test fixture folder. os.makedirs( - os.path.join(ROOT_DIR, f"resources/test/fixtures/{dir_name(plugin)}"), + ROOT_DIR / "resources/test/fixtures" / dir_name(plugin), exist_ok=True, ) # Create the Rust module. - os.makedirs(os.path.join(ROOT_DIR, f"src/{dir_name(plugin)}"), exist_ok=True) - with open(os.path.join(ROOT_DIR, f"src/{dir_name(plugin)}/rules.rs"), "w+") as fp: + rust_module = ROOT_DIR / "src/rules" / dir_name(plugin) + os.makedirs(rust_module, exist_ok=True) + with open(rust_module / "rules.rs", "w+") as fp: fp.write("use crate::checkers::ast::Checker;\n") - with open(os.path.join(ROOT_DIR, f"src/{dir_name(plugin)}/mod.rs"), "w+") as fp: + with open(rust_module / "mod.rs", "w+") as fp: fp.write("pub(crate) mod rules;\n") fp.write("\n") fp.write( @@ -65,15 +67,14 @@ mod tests { % dir_name(plugin) ) - # Add the plugin to `lib.rs`. - with open(os.path.join(ROOT_DIR, "src/lib.rs"), "a") as fp: - fp.write(f"mod {dir_name(plugin)};") + # Add the plugin to `rules/mod.rs`. + with open(ROOT_DIR / "src/rules/mod.rs", "a") as fp: + fp.write(f"pub mod {dir_name(plugin)};") # Add the relevant sections to `src/registry.rs`. - with open(os.path.join(ROOT_DIR, "src/registry.rs")) as fp: - content = fp.read() + content = (ROOT_DIR / "src/registry.rs").read_text() - with open(os.path.join(ROOT_DIR, "src/registry.rs"), "w") as fp: + with open(ROOT_DIR / "src/registry.rs", "w") as fp: for line in content.splitlines(): if line.strip() == "// Ruff": indent = line.split("// Ruff")[0] @@ -108,10 +109,9 @@ mod tests { fp.write("\n") # Add the relevant section to `src/violations.rs`. - with open(os.path.join(ROOT_DIR, "src/violations.rs")) as fp: - content = fp.read() + content = (ROOT_DIR / "src/violations.rs").read_text() - with open(os.path.join(ROOT_DIR, "src/violations.rs"), "w") as fp: + with open(ROOT_DIR / "src/violations.rs", "w") as fp: for line in content.splitlines(): if line.strip() == "// Ruff": indent = line.split("// Ruff")[0] diff --git a/scripts/add_rule.py b/scripts/add_rule.py index 78d90b326d..d6a901806d 100644 --- a/scripts/add_rule.py +++ b/scripts/add_rule.py @@ -11,8 +11,9 @@ Example usage: import argparse import os +from pathlib import Path -ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +ROOT_DIR = Path(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) def dir_name(origin: str) -> str: @@ -32,16 +33,16 @@ def snake_case(name: str) -> str: def main(*, name: str, code: str, origin: str) -> None: # Create a test fixture. with open( - os.path.join(ROOT_DIR, f"resources/test/fixtures/{dir_name(origin)}/{code}.py"), + ROOT_DIR / "resources/test/fixtures" / dir_name(origin) / f"{code}.py", "a", ): pass # Add the relevant `#testcase` macro. - with open(os.path.join(ROOT_DIR, f"src/{dir_name(origin)}/mod.rs")) as fp: - content = fp.read() + mod_rs = ROOT_DIR / "src/rules" / dir_name(origin) / "mod.rs" + content = mod_rs.read_text() - with open(os.path.join(ROOT_DIR, f"src/{dir_name(origin)}/mod.rs"), "w") as fp: + with open(mod_rs, "w") as fp: for line in content.splitlines(): if line.strip() == "fn rules(rule_code: RuleCode, path: &Path) -> Result<()> {": indent = line.split("fn rules(rule_code: RuleCode, path: &Path) -> Result<()> {")[0] @@ -52,7 +53,7 @@ def main(*, name: str, code: str, origin: str) -> None: fp.write("\n") # Add the relevant rule function. - with open(os.path.join(ROOT_DIR, f"src/{dir_name(origin)}/rules.rs"), "a") as fp: + with open(ROOT_DIR / "src/rules" / dir_name(origin) / "rules.rs", "a") as fp: fp.write( f""" /// {code} @@ -62,10 +63,9 @@ pub fn {snake_case(name)}(checker: &mut Checker) {{}} fp.write("\n") # Add the relevant struct to `src/violations.rs`. - with open(os.path.join(ROOT_DIR, "src/violations.rs")) as fp: - content = fp.read() + content = (ROOT_DIR / "src/violations.rs").read_text() - with open(os.path.join(ROOT_DIR, "src/violations.rs"), "w") as fp: + with open(ROOT_DIR / "src/violations.rs", "w") as fp: for line in content.splitlines(): fp.write(line) fp.write("\n") @@ -90,12 +90,11 @@ impl Violation for %s { fp.write("\n") # Add the relevant code-to-violation pair to `src/registry.rs`. - with open(os.path.join(ROOT_DIR, "src/registry.rs")) as fp: - content = fp.read() + content = (ROOT_DIR / "src/registry.rs").read_text() seen_macro = False has_written = False - with open(os.path.join(ROOT_DIR, "src/registry.rs"), "w") as fp: + with open(ROOT_DIR / "src/registry.rs", "w") as fp: for line in content.splitlines(): fp.write(line) fp.write("\n")