scripts: Add helper scripts for ruff baseline excludes
Add simple scripts to convert ruff check and ruff format output to toml exclude sections. These sections can be used to ignore baseline violations for an existing codebase. Signed-off-by: Pieter De Gendt <pieter.degendt@basalte.be>
This commit is contained in:
parent
05c6517fc9
commit
4db97b5bb6
2 changed files with 60 additions and 0 deletions
18
scripts/ruff/gen_format_exclude.py
Executable file
18
scripts/ruff/gen_format_exclude.py
Executable file
|
@ -0,0 +1,18 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
# Copyright (c) 2024 Basalte bv
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import sys
|
||||
|
||||
# A very simple script to convert ruff format output to toml
|
||||
# For example:
|
||||
# ruff format --check | ./scripts/ruff/gen_format_exclude.py >> .ruff-excludes.toml
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.stdout.write("[format]\n")
|
||||
sys.stdout.write("exclude = [\n")
|
||||
for line in sys.stdin:
|
||||
if line.startswith("Would reformat: "):
|
||||
sys.stdout.write(f' "./{line[16:-1]}",\n')
|
||||
sys.stdout.write("]\n")
|
42
scripts/ruff/gen_lint_exclude.py
Executable file
42
scripts/ruff/gen_lint_exclude.py
Executable file
|
@ -0,0 +1,42 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
# Copyright (c) 2024 Basalte bv
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path, PurePosixPath
|
||||
|
||||
# A very simple script to convert ruff lint output from json to toml
|
||||
# For example:
|
||||
# ruff check --output-format=json | ./scripts/ruff/gen_lint_exclude.py >> .ruff-excludes.toml
|
||||
|
||||
|
||||
class RuffRule:
|
||||
def __init__(self, code: str, url: str) -> None:
|
||||
self.code = code
|
||||
self.url = url
|
||||
|
||||
def __eq__(self, other: object) -> bool:
|
||||
if not isinstance(other, type(self)):
|
||||
return NotImplemented
|
||||
return self.code.__eq__(other.code)
|
||||
|
||||
def __hash__(self) -> int:
|
||||
return self.code.__hash__()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
violations = json.load(sys.stdin)
|
||||
sys.stdout.write("[lint.per-file-ignores]\n")
|
||||
|
||||
rules: dict[str, set[RuffRule]] = {}
|
||||
for v in violations:
|
||||
rules.setdefault(v["filename"], set()).add(RuffRule(v["code"], v["url"]))
|
||||
|
||||
for f, rs in rules.items():
|
||||
path = PurePosixPath(f)
|
||||
sys.stdout.write(f'"./{path.relative_to(Path.cwd())}" = [\n')
|
||||
for r in sorted(rs, key=lambda x: x.code):
|
||||
sys.stdout.write(f' "{r.code}",\t# {r.url}\n'.expandtabs())
|
||||
sys.stdout.write("]\n")
|
Loading…
Add table
Add a link
Reference in a new issue