rust-analyzer/crates
bors 6a0ddd34d4 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.
2023-04-21 10:47:27 +00:00
..
base-db ⬆️ rust-analyzer 2023-02-13 13:55:14 +02:00
cfg ⬆️ rust-analyzer 2023-02-13 13:55:14 +02:00
flycheck ⬆️ rust-analyzer 2023-03-13 10:42:24 +02:00
hir Add signature help for record struct patterns 2023-03-14 21:55:03 +01:00
hir-def ⬆️ rust-analyzer 2023-03-20 08:31:01 +02:00
hir-expand fix: Fix ast::IfExpr child accessors 2023-03-15 14:34:31 +01:00
hir-ty Add regression test 2023-03-19 16:58:10 +09:00
ide Add signature help for tuple struct patterns 2023-03-15 10:17:30 +01:00
ide-assists internal: Prioritize remove-dbg assist over inline-macro 2023-03-15 14:19:50 +01:00
ide-completion Auto merge of #13789 - feniljain:fix_enum_completion, r=Veykril 2023-03-18 07:06:27 +00:00
ide-db Add signature help for record struct patterns 2023-03-14 21:55:03 +01:00
ide-diagnostics do not offer fixit for macro expansions and refactor the code 2023-03-15 09:12:40 +08:00
ide-ssr ⬆️ rust-analyzer 2023-03-13 10:42:24 +02:00
intern ⬆️ rust-analyzer 2023-02-13 13:55:14 +02:00
limit ⬆️ rust-analyzer 2023-02-13 13:55:14 +02:00
mbe ⬆️ rust-analyzer 2023-02-20 10:14:12 +02:00
parser Add signature help for tuple struct patterns 2023-03-15 10:17:30 +01:00
paths ⬆️ rust-analyzer 2023-02-13 13:55:14 +02:00
proc-macro-api ⬆️ rust-analyzer 2023-02-20 10:14:12 +02:00
proc-macro-srv Renamed to byte_range and changed Range generics [skip ci] 2023-03-11 12:15:19 +01:00
proc-macro-srv-cli ⬆️ rust-analyzer 2023-02-13 13:55:14 +02:00
proc-macro-test ⬆️ rust-analyzer 2023-02-13 13:55:14 +02:00
profile ⬆️ rust-analyzer 2023-02-13 13:55:14 +02:00
project-model Report sysroot and rustc crate loading errors 2023-03-15 11:35:34 +01:00
rust-analyzer Auto merge of #14359 - Veykril:opt-out-retry, r=Veykril 2023-03-15 11:44:29 +00:00
sourcegen ⬆️ rust-analyzer 2023-02-13 13:55:14 +02:00
stdx ⬆️ rust-analyzer 2023-02-20 10:14:12 +02:00
syntax fix: Fix ast::IfExpr child accessors 2023-03-15 14:34:31 +01:00
test-utils lint incoherent inherent impls 2023-03-14 19:20:44 +01:00
text-edit ⬆️ rust-analyzer 2023-02-13 13:55:14 +02:00
toolchain ⬆️ rust-analyzer 2023-03-13 10:42:24 +02:00
tt ⬆️ rust-analyzer 2023-02-13 13:55:14 +02:00
vfs ⬆️ rust-analyzer 2023-02-13 13:55:14 +02:00
vfs-notify ⬆️ rust-analyzer 2023-02-13 13:55:14 +02:00