blob: af627cf82ceb3a9c2054bb5b2f092e23cbee5986 [file] [log] [blame]
#!/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")