ruff/crates/ruff_annotate_snippets
Brent Westbrook b324ae1be3
Hide empty snippets for full-file diagnostics (#19653)
Summary
--

This is the other commit I wanted to spin off from #19415, currently
stacked on #19644.

This PR suppresses blank snippets for empty ranges at the very beginning
of a file, and for empty ranges in non-existent files. Ruff includes
empty ranges for IO errors, for example.


f4e93b6335/crates/ruff_linter/src/message/text.rs (L100-L110)

The diagnostics now look like this (new snapshot test):

```
error[test-diagnostic]: main diagnostic message
--> example.py:1:1                             
```

Instead of [^*]

```
error[test-diagnostic]: main diagnostic message
--> example.py:1:1
 |
 |
```

Test Plan
--

A new `ruff_db` test showing the expected output format

[^*]: This doesn't correspond precisely to the example in the PR because
of some details of the diagnostic builder helper methods in `ruff_db`,
but you can see another example in the current version of the summary in
#19415.
2025-08-05 11:20:31 -04:00
..
examples crates: vendor annotate-snippets crate 2025-01-15 13:37:52 -05:00
src Hide empty snippets for full-file diagnostics (#19653) 2025-08-05 11:20:31 -04:00
tests [ty] Add regression test for leading tab mis-alignment in diagnostic rendering (#18965) 2025-06-26 16:27:26 +00:00
Cargo.toml crates: vendor annotate-snippets crate 2025-01-15 13:37:52 -05:00
LICENSE-APACHE crates: vendor annotate-snippets crate 2025-01-15 13:37:52 -05:00
LICENSE-MIT crates: vendor annotate-snippets crate 2025-01-15 13:37:52 -05:00
README.md crates: vendor annotate-snippets crate 2025-01-15 13:37:52 -05:00

This is a fork of the annotate-snippets crate. The principle motivation for this fork, at the time of writing, is issue #167. Specifically, we wanted to upgrade our version of annotate-snippets, but do so without changing our diagnostic message format.

This copy of annotate-snippets is basically identical to upstream, but with an extra Level::None variant that permits skipping over a new non-optional header emitted by annotate-snippets.

More generally, it seems plausible that we may want to tweak other aspects of the output format in the future, so it might make sense to stick with our own copy so that we can be masters of our own destiny.