| #!/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") |