diff options
| author | bors <bors@rust-lang.org> | 2023-04-21 10:47:27 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-04-21 10:47:27 +0000 |
| commit | 6df808215bec7d33d0553c12759453db236fee1e (patch) | |
| tree | 423cd2b2d0837bded8da014c316b66ebf61cb9cd /compiler/rustc_interface/src/errors.rs | |
| parent | dbf04a5ee29101afbd1db665369bb1d21224efb5 (diff) | |
| parent | e89d7dfe39c10aefcee285b8012d8ae68ad44830 (diff) | |
| download | rust-6df808215bec7d33d0553c12759453db236fee1e.tar.gz rust-6df808215bec7d33d0553c12759453db236fee1e.zip | |
Auto merge of #109002 - michaelvanstraten:master, r=petrochenkov
Added byte position range for `proc_macro::Span`
Currently, the [`Debug`](https://doc.rust-lang.org/beta/proc_macro/struct.Span.html#impl-Debug-for-Span) implementation for [`proc_macro::Span`](https://doc.rust-lang.org/beta/proc_macro/struct.Span.html#) calls the debug function implemented in the trait implementation of `server::Span` for the type `Rustc` in the `rustc-expand` crate.
The current implementation, of the referenced function, looks something like this:
```rust
fn debug(&mut self, span: Self::Span) -> String {
if self.ecx.ecfg.span_debug {
format!("{:?}", span)
} else {
format!("{:?} bytes({}..{})", span.ctxt(), span.lo().0, span.hi().0)
}
}
```
It returns the byte position of the [`Span`](https://doc.rust-lang.org/beta/proc_macro/struct.Span.html#) as an interpolated string.
Because this is currently the only way to get a spans position in the file, I might lead someone, who is interested in this information, to parsing this interpolated string back into a range of bytes, which I think is a very non-rusty way.
The proposed `position()`, method implemented in this PR, gives the ability to directly get this info.
It returns a [`std::ops::Range`](https://doc.rust-lang.org/std/ops/struct.Range.html#) wrapping the lowest and highest byte of the [`Span`](https://doc.rust-lang.org/beta/proc_macro/struct.Span.html#).
I put it behind the `proc_macro_span` feature flag because many of the other functions that have a similar footprint also are annotated with it, I don't actually know if this is right.
It would be great if somebody could take a look at this, thank you very much in advanced.
Diffstat (limited to 'compiler/rustc_interface/src/errors.rs')
0 files changed, 0 insertions, 0 deletions
