Skip to content

Commit 6df8082

Browse files
committed
Auto merge of rust-lang#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.
2 parents dbf04a5 + e89d7df commit 6df8082

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

Diff for: crates/proc-macro-srv/src/abis/abi_sysroot/ra_server.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use token_stream::TokenStreamBuilder;
2020
mod symbol;
2121
pub use symbol::*;
2222

23-
use std::ops::Bound;
23+
use std::ops::{Bound, Range};
2424

2525
use crate::tt;
2626

@@ -298,6 +298,10 @@ impl server::Span for RustAnalyzer {
298298
// FIXME handle span
299299
span
300300
}
301+
fn byte_range(&mut self, _span: Self::Span) -> Range<usize> {
302+
// FIXME handle span
303+
Range { start: 0, end: 0 }
304+
}
301305
fn start(&mut self, _span: Self::Span) -> LineColumn {
302306
// FIXME handle span
303307
LineColumn { line: 0, column: 0 }

0 commit comments

Comments
 (0)