mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-09 21:28:04 +00:00
![]() <!-- Thank you for contributing to Ruff/ty! To help us out with reviewing, please consider the following: - Does this pull request include a summary of the change? (See below.) - Does this pull request include a descriptive title? (Please prefix with `[ty]` for ty pull requests.) - Does this pull request include references to any relevant issues? --> ## Summary <!-- What's the purpose of the change? What does it do, and why? --> From @ntBre https://github.com/astral-sh/ruff/pull/18906#discussion_r2162843366 : > This could be a good target for a follow-up PR, but we could fold these `if checker.is_rule_enabled { checker.report_diagnostic` checks into calls to `checker.report_diagnostic_if_enabled`. I didn't notice these when adding that method. > > Also, the docs on `Checker::report_diagnostic_if_enabled` and `LintContext::report_diagnostic_if_enabled` are outdated now that the `Rule` conversion is basically free 😅 > > No pressure to take on this refactor, just an idea if you're interested! This PR folds those calls. I also updated the doc comments by copying from `report_diagnostic`. Note: It seems odd to me that the doc comment for `Checker` says `Diagnostic` while `LintContext` says `OldDiagnostic`, not sure if that needs a bigger docs change to fix the inconsistency. <details> <summary>Python script to do the changes</summary> This script assumes it is placed in the top level `ruff` directory (ie next to `.git`/`crates`/`README.md`) ```py import re from copy import copy from pathlib import Path ruff_crates = Path(__file__).parent / "crates" for path in ruff_crates.rglob("**/*.rs"): with path.open(encoding="utf-8", newline="") as f: original_content = f.read() if "is_rule_enabled" not in original_content or "report_diagnostic" not in original_content: continue original_content_position = 0 changed_content = "" for match in re.finditer(r"(?m)(?:^[ \n]*|(?<=(?P<else>else )))if[ \n]+checker[ \n]*\.is_rule_enabled\([ \n]*Rule::\w+[ \n]*\)[ \n]*{[ \n]*checker\.report_diagnostic\(", original_content): # Content between last match and start of this one is unchanged changed_content += original_content[original_content_position:match.start()] # If this was an else if, a { needs to be added at the start if match.group("else"): changed_content += "{" # This will result in bad formatting, but the precommit cargo format will handle it changed_content += "checker.report_diagnostic_if_enabled(" # Depth tracking would fail if a string/comment included a { or }, but unlikely given the context depth = 1 position = match.end() while depth > 0: if original_content[position] == "{": depth += 1 if original_content[position] == "}": depth -= 1 position += 1 # pos - 1 is the closing } changed_content += original_content[match.end():position - 1] # If this was an else if, a } needs to be added at the end if match.group("else"): changed_content += "}" # Skip the closing } original_content_position = position if original_content[original_content_position] == "\n": # If the } is followed by a \n, also skip it for better formatting original_content_position += 1 # Add remaining content between last match and file end changed_content += original_content[original_content_position:] with path.open("w", encoding="utf-8", newline="") as f: f.write(changed_content) ``` </details> ## Test Plan <!-- How was it tested? --> N/A, no tests/functionality affected. |
||
---|---|---|
.. | ||
resources | ||
src | ||
Cargo.toml |