Files
ruff/crates/ruff_linter
Brent Westbrook e938ce160e fill in missing metadata with a script
```py
import json
import re
import subprocess
import sys
from dataclasses import dataclass

def to_camelcase(s):
    return "".join(item.title() for item in s.split("-"))

@dataclass
class Rule:
    name: str
    code: str
    file: str
    line: int

rules = [
    Rule(
        name=rule["name"],
        code=rule["code"],
        file=rule["source_location"]["file"],
        line=rule["source_location"]["line"],
    )
    for rule in json.loads(
        subprocess.run(
            ["uvx", "ruff@latest", "rule", "--all", "--output-format=json"],
            text=True,
            capture_output=True,
        ).stdout
    )
]
name_to_rule = {to_camelcase(rule.name).lower(): rule for rule in rules}

error_re = re.compile(
    r"Expected fix for rule (?P<rule>[a-zA-z0-9]+) to be at least (?:Safe|Unsafe|DisplayOnly) but got (?P<safety>:Safe|Unsafe|DisplayOnly)"
)

to_fix = {}
for line in sys.stdin:
    print(line)
    m = error_re.fullmatch(line.strip())
    if not m:
        raise ValueError(line)

    match m["safety"]:
        case "Safe":
            safety = "safe"
        case "Unsafe":
            safety = "unsafe"
        case "DisplayOnly":
            safety = "display-only"
        case s:
            raise ValueError(s)

    to_fix[m["rule"]] = safety

for name, safety in to_fix.items():
    rule = name_to_rule[name.lower()]
    with open(rule.file) as f:
        lines = f.readlines()
        lines[rule.line] = re.sub(
            r'(, safety = "[^"]+")*\)\]$', f', safety = "{safety}")]', lines[rule.line]
        )
    with open(rule.file, "w") as f:
        f.writelines(lines)

print(f"fixed {len(to_fix)} rules")
```
2025-12-18 18:13:06 -05:00
..
2025-12-18 13:08:17 -06:00