mirror of
https://github.com/astral-sh/ruff.git
synced 2025-12-04 09:42:47 +00:00
Add links to ecosystem check result (#5631)
## Summary Add links for ecosystem check result. This is useful for developers to quickly check the added/removed violations with a single click. There are a few downsides of this approach: * Syntax highlighting is not available for the output * Content length is increased because of the additional anchor tags ## Test Plan `python scripts/check_ecosystem.py ./target/debug/ruff ../ruff-test/target/debug/ruff` <details><summary>Example Output:</summary> ℹ️ ecosystem check **detected changes**. (+6, -0, 0 error(s)) <details><summary>airflow (+1, -0)</summary> <p> <pre> + <a href='https://github.com/apache/airflow/blob/main/dev/breeze/src/airflow_breeze/commands/release_management_commands.py#L654'>dev/breeze/src/airflow_breeze/commands/release_management_commands.py:654:25:</a> PERF401 Use a list comprehension to create a transformed list </pre> </p> </details> <details><summary>bokeh (+3, -0)</summary> <p> <pre> + <a href='https://github.com/bokeh/bokeh/blob/branch-3.2/src/bokeh/model/model.py#L315'>src/bokeh/model/model.py:315:17:</a> PERF401 Use a list comprehension to create a transformed list + <a href='https://github.com/bokeh/bokeh/blob/branch-3.2/src/bokeh/resources.py#L470'>src/bokeh/resources.py:470:25:</a> PERF401 Use a list comprehension to create a transformed list + <a href='https://github.com/bokeh/bokeh/blob/branch-3.2/src/bokeh/sphinxext/bokeh_sampledata_xref.py#L134'>src/bokeh/sphinxext/bokeh_sampledata_xref.py:134:17:</a> PERF401 Use a list comprehension to create a transformed list </pre> </p> </details> <details><summary>zulip (+2, -0)</summary> <p> <pre> + <a href='https://github.com/zulip/zulip/blob/main/zerver/actions/create_user.py#L197'>zerver/actions/create_user.py:197:17:</a> PERF401 Use a list comprehension to create a transformed list + <a href='https://github.com/zulip/zulip/blob/main/zerver/lib/markdown/__init__.py#L2412'>zerver/lib/markdown/__init__.py:2412:13:</a> PERF401 Use a list comprehension to create a transformed list </pre> </p> </details> </details> --------- Co-authored-by: konsti <konstin@mailbox.org>
This commit is contained in:
parent
c9d7c0d7d5
commit
52b22ceb6e
1 changed files with 30 additions and 5 deletions
|
|
@ -82,6 +82,17 @@ class Repository(NamedTuple):
|
||||||
|
|
||||||
yield Path(checkout_dir)
|
yield Path(checkout_dir)
|
||||||
|
|
||||||
|
def url_for(self: Self, path: str, lnum: int | None = None) -> str:
|
||||||
|
"""Return the GitHub URL for the given path and line number, if given."""
|
||||||
|
# Default to main branch
|
||||||
|
url = (
|
||||||
|
f"https://github.com/{self.org}/{self.repo}"
|
||||||
|
f"/blob/{self.ref or 'main'}/{path}"
|
||||||
|
)
|
||||||
|
if lnum:
|
||||||
|
url += f"#L{lnum}"
|
||||||
|
return url
|
||||||
|
|
||||||
|
|
||||||
REPOSITORIES: list[Repository] = [
|
REPOSITORIES: list[Repository] = [
|
||||||
Repository("apache", "airflow", "main", select="ALL"),
|
Repository("apache", "airflow", "main", select="ALL"),
|
||||||
|
|
@ -272,6 +283,11 @@ def read_projects_jsonl(projects_jsonl: Path) -> dict[tuple[str, str], Repositor
|
||||||
return repositories
|
return repositories
|
||||||
|
|
||||||
|
|
||||||
|
DIFF_LINE_RE = re.compile(
|
||||||
|
r"^(?P<pre>[+-]) (?P<inner>(?P<path>[^:]+):(?P<lnum>\d+):\d+:) (?P<post>.*)$",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
T = TypeVar("T")
|
T = TypeVar("T")
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -352,18 +368,27 @@ async def main(
|
||||||
print("<p>")
|
print("<p>")
|
||||||
print()
|
print()
|
||||||
|
|
||||||
diff_str = "\n".join(diff)
|
repo = repositories[(org, repo)]
|
||||||
|
diff_lines = list(diff)
|
||||||
|
|
||||||
print("```diff")
|
print("<pre>")
|
||||||
print(diff_str)
|
for line in diff_lines:
|
||||||
print("```")
|
match = DIFF_LINE_RE.match(line)
|
||||||
|
if match is None:
|
||||||
|
print(line)
|
||||||
|
continue
|
||||||
|
|
||||||
|
pre, inner, path, lnum, post = match.groups()
|
||||||
|
url = repo.url_for(path, int(lnum))
|
||||||
|
print(f"{pre} <a href='{url}'>{inner}</a> {post}")
|
||||||
|
print("</pre>")
|
||||||
|
|
||||||
print()
|
print()
|
||||||
print("</p>")
|
print("</p>")
|
||||||
print("</details>")
|
print("</details>")
|
||||||
|
|
||||||
# Count rule changes
|
# Count rule changes
|
||||||
for line in diff_str.splitlines():
|
for line in diff_lines:
|
||||||
# Find rule change for current line or construction
|
# Find rule change for current line or construction
|
||||||
# + <rule>/<path>:<line>:<column>: <rule_code> <message>
|
# + <rule>/<path>:<line>:<column>: <rule_code> <message>
|
||||||
matches = re.search(r": ([A-Z]{1,4}[0-9]{3,4})", line)
|
matches = re.search(r": ([A-Z]{1,4}[0-9]{3,4})", line)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue