blob: af627cf82ceb3a9c2054bb5b2f092e23cbee5986 [file] [log] [blame]
Pieter De Gendt4db97b52024-11-07 21:09:05 +01001#!/usr/bin/env python3
2
3# Copyright (c) 2024 Basalte bv
4# SPDX-License-Identifier: Apache-2.0
5
6import json
7import sys
8from pathlib import Path, PurePosixPath
9
10# A very simple script to convert ruff lint output from json to toml
11# For example:
12# ruff check --output-format=json | ./scripts/ruff/gen_lint_exclude.py >> .ruff-excludes.toml
13
14
15class RuffRule:
16 def __init__(self, code: str, url: str) -> None:
17 self.code = code
18 self.url = url
19
20 def __eq__(self, other: object) -> bool:
21 if not isinstance(other, type(self)):
22 return NotImplemented
23 return self.code.__eq__(other.code)
24
25 def __hash__(self) -> int:
26 return self.code.__hash__()
27
28
29if __name__ == "__main__":
30 violations = json.load(sys.stdin)
31 sys.stdout.write("[lint.per-file-ignores]\n")
32
33 rules: dict[str, set[RuffRule]] = {}
34 for v in violations:
35 rules.setdefault(v["filename"], set()).add(RuffRule(v["code"], v["url"]))
36
37 for f, rs in rules.items():
38 path = PurePosixPath(f)
39 sys.stdout.write(f'"./{path.relative_to(Path.cwd())}" = [\n')
40 for r in sorted(rs, key=lambda x: x.code):
41 sys.stdout.write(f' "{r.code}",\t# {r.url}\n'.expandtabs())
42 sys.stdout.write("]\n")