1
Fork 0
rust/compiler/rustc_expand/src
bors 1151ea6006 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
..
mbe Spelling - compiler 2023-04-17 16:09:18 -04:00
mut_visit rustc_ast: Turn MutVisitor::token_visiting_enabled into a constant 2021-10-18 00:23:24 +03:00
parse various: translation resources from cg backend 2023-02-22 09:15:54 +00:00
tokenstream Remove TokenStreamBuilder. 2022-10-05 12:42:54 +11:00
base.rs Separate find_*_stability. 2023-03-23 19:52:27 +00:00
build.rs Rename ast::Static to ast::StaticItem to match ast::ConstItem 2023-04-04 15:34:40 +00:00
config.rs Fix some clippy::complexity 2023-04-09 23:22:14 +02:00
errors.rs rustc_expand: make proc-macro derive error translatable 2023-03-04 07:54:29 +02:00
expand.rs rustc_interface: Add a new query pre_configure 2023-03-23 14:22:48 +04:00
lib.rs Add rustc_fluent_macro to decouple fluent from rustc_macros 2023-04-18 18:56:22 +00:00
mbe.rs Move macro_rules diagnostics to diagnostics module 2022-11-20 13:06:44 +01:00
module.rs Use ThinVec in a few more AST types. 2023-02-21 11:51:56 +11:00
placeholders.rs Split MacArgs in two. 2022-11-22 09:04:15 +11:00
proc_macro.rs Remove an unnecessary use of with_session_globals. 2023-03-31 15:34:00 +11:00
proc_macro_server.rs Fixed bad formating 2023-04-19 13:04:01 +02:00
tests.rs Spelling - compiler 2023-04-17 16:09:18 -04:00