mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-29 05:14:52 +00:00
Rewrite ecosystem checks and add ruff format
reports (#8223)
Closes #7239 - Refactors `scripts/check_ecosystem.py` into a new Python project at `python/ruff-ecosystem` - Includes [documentation](https://github.com/astral-sh/ruff/blob/zanie/ecosystem-format/python/ruff-ecosystem/README.md) now - Provides a `ruff-ecosystem` CLI - Fixes bug where `ruff check` report included "fixable" summary line - Adds truncation to `ruff check` reports - Otherwise we often won't see the `ruff format` reports - The truncation uses some very simple heuristics and could be improved in the future - Identifies diagnostic changes that occur just because a violation's fix available changes - We still show the diff for the line because it's could matter _where_ this changes, but we could improve this - Similarly, we could improve detection of diagnostic changes where just the message changes - Adds support for JSON ecosystem check output - I added this primarily for development purposes - If there are no changes, only errors while processing projects, we display a different summary message - When caching repositories, we now checkout the requested ref - Adds `ruff format` reports, which format with the baseline then the use `format --diff` to generate a report - Runs all CI jobs when the CI workflow is changed ## Known problems - Since we must format the project to get a baseline, the permalink line numbers do not exactly correspond to the correct range - This looks... hard. I tried using `git diff` and some wonky hunk matching to recover the original line numbers but it doesn't seem worth it. I think we should probably commit the formatted changes to a fork or something if we want great results here. Consequently, I've just used the start line instead of a range for now. - I don't love the comment structure — it'd be nice, perhaps, to have separate headings for the linter and formatter. - However, the `pr-comment` workflow is an absolute pain to change because it runs _separately_ from this pull request so I if I want to make edits to it I can only test it via manual workflow dispatch. - Lines are not printed "as we go" which means they're all held in memory, presumably this would be a problem for large-scale ecosystem checks - We are encountering a hard limit with the maximum comment length supported by GitHub. We will need to move the bulk of the report elsewhere. ## Future work - Update `ruff-ecosystem` to support non-default projects and `check_ecosystem_all.py` behavior - Remove existing ecosystem check scripts - Add preview mode toggle (#8076) - Add a toggle for truncation - Add hints for quick reproduction of runs locally - Consider parsing JSON output of Ruff instead of using regex to parse the text output - Links to project repositories should use the commit hash we checked against - When caching repositories, we should pull the latest changes for the ref - Sort check diffs by path and rule code only (changes in messages should not change order) - Update check diffs to distinguish between new violations and changes in messages - Add "fix" diffs - Remove existing formatter similarity reports - On release pull request, compare to the previous tag instead --------- Co-authored-by: konsti <konstin@mailbox.org>
This commit is contained in:
parent
5f26411577
commit
fc94857a20
14 changed files with 1555 additions and 8 deletions
44
python/ruff-ecosystem/ruff_ecosystem/markdown.py
Normal file
44
python/ruff-ecosystem/ruff_ecosystem/markdown.py
Normal file
|
@ -0,0 +1,44 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ruff_ecosystem.projects import Project
|
||||
|
||||
|
||||
def markdown_project_section(
|
||||
title: str, content: str | list[str], options: object, project: Project
|
||||
) -> list[str]:
|
||||
return markdown_details(
|
||||
summary=f'<a href="{project.repo.url}">{project.repo.fullname}</a> ({title})',
|
||||
# Show the command used for the check
|
||||
preface="<pre>ruff " + " ".join(options.to_cli_args()) + "</pre>",
|
||||
content=content,
|
||||
)
|
||||
|
||||
|
||||
def markdown_plus_minus(added: int, removed: int) -> str:
|
||||
# TODO(zanieb): GitHub does not support coloring with <span> it seems like the only
|
||||
# way is to use LateX `${\text{\color{green}+10 \color{red}-10}}$` but
|
||||
# it renders so ugly it's not worth doing yet
|
||||
return f"+{added} -{removed}"
|
||||
|
||||
|
||||
def markdown_details(summary: str, preface: str, content: str | list[str]):
|
||||
lines = []
|
||||
lines.append(f"<details><summary>{summary}</summary>")
|
||||
lines.append("<p>")
|
||||
lines.append(preface)
|
||||
lines.append("</p>")
|
||||
lines.append("<p>")
|
||||
lines.append("")
|
||||
|
||||
if isinstance(content, str):
|
||||
lines.append(content)
|
||||
else:
|
||||
lines.extend(content)
|
||||
|
||||
lines.append("")
|
||||
lines.append("</p>")
|
||||
lines.append("</details>")
|
||||
return lines
|
Loading…
Add table
Add a link
Reference in a new issue