mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-29 13:25:17 +00:00
Handle io errors gracefully (#5611)
## Summary It can happen that we can't read a file (a python file, a jupyter notebook or pyproject.toml), which needs to be handled and handled consistently for all file types. Instead of using `Err` or `error!`, we emit E602 with the io error as message and continue. This PR makes sure we handle all three cases consistently, emit E602. I'm not convinced that it should be possible to disable io errors, but we now handle the regular case consistently and at least print warning consistently. I went with `warn!` but i can change them all to `error!`, too. It also checks the error case when a pyproject.toml is not readable. The error message is not very helpful, but it's now a bit clearer that actually ruff itself failed instead vs this being a diagnostic. ## Examples This is how an Err of `run` looks now:  With an unreadable file and `IOError` disabled:  (we lint zero files but count files before linting not during so we exit 0) I'm not sure if it should (or if we should take a different path with manual ExitStatus), but this currently also triggers when `files` is empty:  ## Test Plan Unix only: Create a temporary directory with files with permissions `000` (not readable by the owner) and run on that directory. Since this breaks the assumptions of most of the test code (single file, `ruff` instead of `ruff_cli`), the test code is rather cumbersome and looks a bit misplaced; i'm happy about suggestions to fit it in closer with the other tests or streamline it in other ways. I added another test for when the entire directory is not readable.
This commit is contained in:
parent
029fe05a5f
commit
92f471a666
13 changed files with 250 additions and 37 deletions
|
@ -429,7 +429,7 @@ fn main() -> ExitCode {
|
|||
if let Err(e) = run() {
|
||||
eprintln!("💥 Minimizer failed");
|
||||
for cause in e.chain() {
|
||||
eprintln!(" Caused by: {cause}");
|
||||
eprintln!(" Cause: {cause}");
|
||||
}
|
||||
ExitCode::FAILURE
|
||||
} else {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue