Optionally show fixes when using --features ecosystem_ci with cargo and --show-fixes at runtime (#4191)

* Generate fixes when using --show-fixes

Example command: `cargo run --bin ruff -- --no-cache --select F401
--show-source --show-fixes
crates/ruff/resources/test/fixtures/pyflakes/F401_9.py`

Before, `--show-fixes` was ignored:

```
crates/ruff/resources/test/fixtures/pyflakes/F401_9.py:4:22: F401 [*] `foo.baz` imported but unused
  |
4 | __all__ = ("bar",)
5 | from foo import bar, baz
  |                      ^^^ F401
  |
  = help: Remove unused import: `foo.baz`

Found 1 error.
[*] 1 potentially fixable with the --fix option.
```

After:

```
crates/ruff/resources/test/fixtures/pyflakes/F401_9.py:4:22: F401 [*] `foo.baz` imported but unused
  |
4 | __all__ = ("bar",)
5 | from foo import bar, baz
  |                      ^^^ F401
  |
  = help: Remove unused import: `foo.baz`

ℹ Suggested fix
1 1 | """Test: late-binding of `__all__`."""
2 2 |
3 3 | __all__ = ("bar",)
4   |-from foo import bar, baz
  4 |+from foo import bar

Found 1 error.
[*] 1 potentially fixable with the --fix option.
```

* Add `--format ecosystem-ci`

* cargo dev generate-all

* Put behind cargo feature

* Regenerate docs

* Don't test ecosystem_ci feature on CI

* Use top level flag instead

* Fix

* Simplify code based on #4191

* Remove old TODO comment
This commit is contained in:
konstin 2023-05-10 17:45:57 +02:00 committed by GitHub
parent 853d8354cb
commit 0096938789
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 36 additions and 6 deletions

1
.gitignore vendored
View file

@ -4,6 +4,7 @@ crates/ruff/resources/test/cpython
mkdocs.yml
.overrides
github_search.jsonl
ruff-old
###
# Rust.gitignore

View file

@ -83,3 +83,4 @@ default = []
schemars = ["dep:schemars"]
logical_lines = []
jupyter_notebook = []
ecosystem_ci = []

View file

@ -66,6 +66,7 @@ ureq = { version = "2.6.2", features = [] }
[features]
jupyter_notebook = ["ruff/jupyter_notebook"]
ecosystem_ci = ["ruff/ecosystem_ci"]
[package.metadata.maturin]
name = "ruff"

View file

@ -291,6 +291,10 @@ pub struct CheckArgs {
conflicts_with = "watch",
)]
pub show_settings: bool,
/// Dev-only argument to show fixes
#[cfg(feature = "ecosystem_ci")]
#[arg(long, hide = true)]
pub ecosystem_ci: bool,
}
#[derive(Debug, Clone, Copy, clap::ValueEnum)]

View file

@ -254,6 +254,8 @@ mod test {
LogLevel::Default,
FixMode::None,
Flags::SHOW_VIOLATIONS,
#[cfg(feature = "ecosystem_ci")]
false,
);
let mut writer: Vec<u8> = Vec::new();
// Mute the terminal color codes

View file

@ -123,6 +123,8 @@ quoting the executed command, along with the relevant file contents and `pyproje
}
fn check(args: CheckArgs, log_level: LogLevel) -> Result<ExitStatus> {
#[cfg(feature = "ecosystem_ci")]
let ecosystem_ci = args.ecosystem_ci;
let (cli, overrides) = args.partition();
// Construct the "default" settings. These are used when no `pyproject.toml`
@ -209,7 +211,14 @@ fn check(args: CheckArgs, log_level: LogLevel) -> Result<ExitStatus> {
return Ok(ExitStatus::Success);
}
let printer = Printer::new(format, log_level, autofix, printer_flags);
let printer = Printer::new(
format,
log_level,
autofix,
printer_flags,
#[cfg(feature = "ecosystem_ci")]
ecosystem_ci,
);
if cli.watch {
if format != SerializationFormat::Text {

View file

@ -70,6 +70,9 @@ pub(crate) struct Printer {
log_level: LogLevel,
autofix_level: flags::FixMode,
flags: Flags,
/// Dev-only argument to show fixes
#[cfg(feature = "ecosystem_ci")]
ecosystem_ci: bool,
}
impl Printer {
@ -78,12 +81,15 @@ impl Printer {
log_level: LogLevel,
autofix_level: flags::FixMode,
flags: Flags,
#[cfg(feature = "ecosystem_ci")] ecosystem_ci: bool,
) -> Self {
Self {
format,
log_level,
autofix_level,
flags,
#[cfg(feature = "ecosystem_ci")]
ecosystem_ci,
}
}
@ -179,8 +185,14 @@ impl Printer {
JunitEmitter::default().emit(writer, &diagnostics.messages, &context)?;
}
SerializationFormat::Text => {
#[cfg(feature = "ecosystem_ci")]
let show_fixes = self.ecosystem_ci && self.flags.contains(Flags::SHOW_FIXES);
#[cfg(not(feature = "ecosystem_ci"))]
let show_fixes = false;
TextEmitter::default()
.with_show_fix_status(show_fix_status(self.autofix_level))
.with_show_fix(show_fixes)
.with_show_source(self.flags.contains(Flags::SHOW_SOURCE))
.emit(writer, &diagnostics.messages, &context)?;

View file

@ -13,15 +13,15 @@
# ```
# From the project root:
# ```
# cargo build --target x86_64-unknown-linux-musl
# cargo build --target x86_64-unknown-linux-musl --features ecosystem_ci
# docker buildx build -f scripts/Dockerfile.ecosystem -t ruff-ecosystem-checker --load .
# docker run --rm ruff-ecosystem-checker
# docker run --rm -v ./target/x86_64-unknown-linux-musl/debug/ruff:/app/ruff-new -v ./ruff-old:/app/ruff-old ruff-ecosystem-checker
# ```
FROM python:3.11
RUN python -m venv .venv && .venv/bin/pip install ruff
RUN mkdir /app
WORKDIR /app
ADD scripts/check_ecosystem.py check_ecosystem.py
ADD github_search.jsonl github_search.jsonl
ADD target/x86_64-unknown-linux-musl/debug/ruff ruff-new
CMD ["python", "check_ecosystem.py", "--verbose", "--projects", "github_search.jsonl", "ruff-new", ".venv/bin/ruff"]
CMD ["python", "check_ecosystem.py", "--verbose", "--projects", "github_search.jsonl", "ruff-new", "ruff-old"]