From c6161c5732669fee3be572e309852eefc49b35e4 Mon Sep 17 00:00:00 2001 From: Mara Bos Date: Wed, 16 Apr 2025 10:12:10 +0200 Subject: [PATCH] Change proc_macro::Span::byte_range -> byte_offset. This is more consistent with Span::line and Span::column. --- compiler/rustc_expand/src/proc_macro_server.rs | 10 ++++------ library/proc_macro/src/bridge/mod.rs | 8 ++------ library/proc_macro/src/lib.rs | 16 +++++++++------- .../src/server_impl/rust_analyzer_span.rs | 10 +++++----- .../proc-macro-srv/src/server_impl/token_id.rs | 9 +++++---- 5 files changed, 25 insertions(+), 28 deletions(-) diff --git a/compiler/rustc_expand/src/proc_macro_server.rs b/compiler/rustc_expand/src/proc_macro_server.rs index 4edaf68c89ae2..fd3c7ed153e73 100644 --- a/compiler/rustc_expand/src/proc_macro_server.rs +++ b/compiler/rustc_expand/src/proc_macro_server.rs @@ -1,4 +1,4 @@ -use std::ops::{Bound, Range}; +use std::ops::Bound; use ast::token::IdentIsRaw; use pm::bridge::{ @@ -704,14 +704,12 @@ impl server::Span for Rustc<'_, '_> { span.source_callsite() } - fn byte_range(&mut self, span: Self::Span) -> Range { + fn byte_offset(&mut self, span: Self::Span) -> usize { let source_map = self.psess().source_map(); - let relative_start_pos = source_map.lookup_byte_offset(span.lo()).pos; - let relative_end_pos = source_map.lookup_byte_offset(span.hi()).pos; - - Range { start: relative_start_pos.0 as usize, end: relative_end_pos.0 as usize } + source_map.lookup_byte_offset(span.lo()).pos.0 as usize } + fn start(&mut self, span: Self::Span) -> Self::Span { span.shrink_to_lo() } diff --git a/library/proc_macro/src/bridge/mod.rs b/library/proc_macro/src/bridge/mod.rs index 75d82d7465404..7a4a9719f6ae7 100644 --- a/library/proc_macro/src/bridge/mod.rs +++ b/library/proc_macro/src/bridge/mod.rs @@ -12,7 +12,7 @@ #![allow(wasm_c_abi)] use std::hash::Hash; -use std::ops::{Bound, Range}; +use std::ops::Bound; use std::sync::Once; use std::{fmt, marker, mem, panic, thread}; @@ -85,7 +85,7 @@ macro_rules! with_api { fn debug($self: $S::Span) -> String; fn parent($self: $S::Span) -> Option<$S::Span>; fn source($self: $S::Span) -> $S::Span; - fn byte_range($self: $S::Span) -> Range; + fn byte_offset($self: $S::Span) -> usize; fn start($self: $S::Span) -> $S::Span; fn end($self: $S::Span) -> $S::Span; fn line($self: $S::Span) -> usize; @@ -534,7 +534,3 @@ pub struct ExpnGlobals { compound_traits!( struct ExpnGlobals { def_site, call_site, mixed_site } ); - -compound_traits!( - struct Range { start, end } -); diff --git a/library/proc_macro/src/lib.rs b/library/proc_macro/src/lib.rs index c46dcebedcab8..2df5711d4b12f 100644 --- a/library/proc_macro/src/lib.rs +++ b/library/proc_macro/src/lib.rs @@ -45,7 +45,7 @@ mod escape; mod to_tokens; use std::ffi::CStr; -use std::ops::{Range, RangeBounds}; +use std::ops::RangeBounds; use std::path::PathBuf; use std::str::FromStr; use std::{error, fmt}; @@ -506,12 +506,6 @@ impl Span { Span(self.0.source()) } - /// Returns the span's byte position range in the source file. - #[unstable(feature = "proc_macro_span", issue = "54725")] - pub fn byte_range(&self) -> Range { - self.0.byte_range() - } - /// Creates an empty span pointing to directly before this span. #[unstable(feature = "proc_macro_span", issue = "54725")] pub fn start(&self) -> Span { @@ -540,6 +534,14 @@ impl Span { self.0.column() } + /// The span's byte position in the source file. + /// + /// To obtain the byte position of the end of the span, use `span.end().byte_offset()`. + #[unstable(feature = "proc_macro_span", issue = "54725")] + pub fn byte_offset(&self) -> usize { + self.0.byte_offset() + } + /// The path to the source file in which this span occurs, for display purposes. /// /// This might not correspond to a valid file system path. diff --git a/src/tools/rust-analyzer/crates/proc-macro-srv/src/server_impl/rust_analyzer_span.rs b/src/tools/rust-analyzer/crates/proc-macro-srv/src/server_impl/rust_analyzer_span.rs index 80f6d85a3d05c..9d7b6b4f3da69 100644 --- a/src/tools/rust-analyzer/crates/proc-macro-srv/src/server_impl/rust_analyzer_span.rs +++ b/src/tools/rust-analyzer/crates/proc-macro-srv/src/server_impl/rust_analyzer_span.rs @@ -6,7 +6,7 @@ //! change their representation to be compatible with rust-analyzer's. use std::{ collections::{HashMap, HashSet}, - ops::{Bound, Range}, + ops::Bound, }; use intern::Symbol; @@ -281,10 +281,6 @@ impl server::Span for RaSpanServer { // FIXME requires db, returns the top level call site span } - fn byte_range(&mut self, span: Self::Span) -> Range { - // FIXME requires db to resolve the ast id, THIS IS NOT INCREMENTAL - Range { start: span.range.start().into(), end: span.range.end().into() } - } fn join(&mut self, first: Self::Span, second: Self::Span) -> Option { // We can't modify the span range for fixup spans, those are meaningful to fixup, so just // prefer the non-fixup span. @@ -386,6 +382,10 @@ impl server::Span for RaSpanServer { // FIXME requires db to resolve line index, THIS IS NOT INCREMENTAL 1 } + fn byte_offset(&mut self, span: Self::Span) -> usize { + // FIXME requires db to resolve the ast id, THIS IS NOT INCREMENTAL + span.range.start().into() + } } impl server::Symbol for RaSpanServer { diff --git a/src/tools/rust-analyzer/crates/proc-macro-srv/src/server_impl/token_id.rs b/src/tools/rust-analyzer/crates/proc-macro-srv/src/server_impl/token_id.rs index 4d7c7c46766b0..5e45fe8ca68f2 100644 --- a/src/tools/rust-analyzer/crates/proc-macro-srv/src/server_impl/token_id.rs +++ b/src/tools/rust-analyzer/crates/proc-macro-srv/src/server_impl/token_id.rs @@ -1,6 +1,6 @@ //! proc-macro server backend based on [`proc_macro_api::msg::TokenId`] as the backing span. //! This backend is rather inflexible, used by RustRover and older rust-analyzer versions. -use std::ops::{Bound, Range}; +use std::ops::Bound; use intern::Symbol; use proc_macro::bridge::{self, server}; @@ -250,9 +250,6 @@ impl server::Span for TokenIdServer { fn source(&mut self, span: Self::Span) -> Self::Span { span } - fn byte_range(&mut self, _span: Self::Span) -> Range { - Range { start: 0, end: 0 } - } fn join(&mut self, first: Self::Span, _second: Self::Span) -> Option { // Just return the first span again, because some macros will unwrap the result. Some(first) @@ -285,6 +282,10 @@ impl server::Span for TokenIdServer { fn column(&mut self, _span: Self::Span) -> usize { 1 } + + fn byte_offset(&mut self, _span: Self::Span) -> usize { + 0 + } } impl server::Symbol for TokenIdServer {