diff --git a/crates/proc_macro_srv/src/abis/abi_1_47/rustc_server.rs b/crates/proc_macro_srv/src/abis/abi_1_47/rustc_server.rs index a77433a551..d3d021d808 100644 --- a/crates/proc_macro_srv/src/abis/abi_1_47/rustc_server.rs +++ b/crates/proc_macro_srv/src/abis/abi_1_47/rustc_server.rs @@ -423,19 +423,20 @@ impl server::Group for Rustc { group.delimiter.map(|it| it.id).unwrap_or_else(tt::TokenId::unspecified) } - fn set_span(&mut self, _group: &mut Self::Group, _span: Self::Span) { - // FIXME handle span + fn set_span(&mut self, group: &mut Self::Group, span: Self::Span) { + if let Some(delim) = &mut group.delimiter { + delim.id = span; + } } - fn span_open(&mut self, _group: &Self::Group) -> Self::Span { - // FIXME handle span - // MySpan(self.span_interner.intern(&MySpanData(group.span_open()))) - tt::TokenId::unspecified() + fn span_open(&mut self, group: &Self::Group) -> Self::Span { + // FIXME we only store one `TokenId` for the delimiters + group.delimiter.map(|it| it.id).unwrap_or_else(tt::TokenId::unspecified) } - fn span_close(&mut self, _group: &Self::Group) -> Self::Span { - // FIXME handle span - tt::TokenId::unspecified() + fn span_close(&mut self, group: &Self::Group) -> Self::Span { + // FIXME we only store one `TokenId` for the delimiters + group.delimiter.map(|it| it.id).unwrap_or_else(tt::TokenId::unspecified) } } @@ -453,13 +454,11 @@ impl server::Punct for Rustc { fn spacing(&mut self, punct: Self::Punct) -> bridge::Spacing { spacing_to_external(punct.spacing) } - fn span(&mut self, _punct: Self::Punct) -> Self::Span { - // FIXME handle span - tt::TokenId::unspecified() + fn span(&mut self, punct: Self::Punct) -> Self::Span { + punct.id } - fn with_span(&mut self, punct: Self::Punct, _span: Self::Span) -> Self::Punct { - // FIXME handle span - punct + fn with_span(&mut self, punct: Self::Punct, span: Self::Span) -> Self::Punct { + tt::Punct { id: span, ..punct } } } @@ -473,13 +472,13 @@ impl server::Ident for Rustc { ) } - fn span(&mut self, _ident: Self::Ident) -> Self::Span { - // FIXME handle span - tt::TokenId::unspecified() + fn span(&mut self, ident: Self::Ident) -> Self::Span { + self.ident_interner.get(ident.0).0.id } - fn with_span(&mut self, ident: Self::Ident, _span: Self::Span) -> Self::Ident { - // FIXME handle span - ident + fn with_span(&mut self, ident: Self::Ident, span: Self::Span) -> Self::Ident { + let data = self.ident_interner.get(ident.0); + let new = IdentData(tt::Ident { id: span, ..data.0.clone() }); + IdentId(self.ident_interner.intern(&new)) } } diff --git a/crates/proc_macro_srv/src/abis/abi_1_55/rustc_server.rs b/crates/proc_macro_srv/src/abis/abi_1_55/rustc_server.rs index 498fa7ea2d..f8626c5f62 100644 --- a/crates/proc_macro_srv/src/abis/abi_1_55/rustc_server.rs +++ b/crates/proc_macro_srv/src/abis/abi_1_55/rustc_server.rs @@ -423,19 +423,20 @@ impl server::Group for Rustc { group.delimiter.map(|it| it.id).unwrap_or_else(tt::TokenId::unspecified) } - fn set_span(&mut self, _group: &mut Self::Group, _span: Self::Span) { - // FIXME handle span + fn set_span(&mut self, group: &mut Self::Group, span: Self::Span) { + if let Some(delim) = &mut group.delimiter { + delim.id = span; + } } - fn span_open(&mut self, _group: &Self::Group) -> Self::Span { - // FIXME handle span - // MySpan(self.span_interner.intern(&MySpanData(group.span_open()))) - tt::TokenId::unspecified() + fn span_open(&mut self, group: &Self::Group) -> Self::Span { + // FIXME we only store one `TokenId` for the delimiters + group.delimiter.map(|it| it.id).unwrap_or_else(tt::TokenId::unspecified) } - fn span_close(&mut self, _group: &Self::Group) -> Self::Span { - // FIXME handle span - tt::TokenId::unspecified() + fn span_close(&mut self, group: &Self::Group) -> Self::Span { + // FIXME we only store one `TokenId` for the delimiters + group.delimiter.map(|it| it.id).unwrap_or_else(tt::TokenId::unspecified) } } @@ -453,13 +454,11 @@ impl server::Punct for Rustc { fn spacing(&mut self, punct: Self::Punct) -> bridge::Spacing { spacing_to_external(punct.spacing) } - fn span(&mut self, _punct: Self::Punct) -> Self::Span { - // FIXME handle span - tt::TokenId::unspecified() + fn span(&mut self, punct: Self::Punct) -> Self::Span { + punct.id } - fn with_span(&mut self, punct: Self::Punct, _span: Self::Span) -> Self::Punct { - // FIXME handle span - punct + fn with_span(&mut self, punct: Self::Punct, span: Self::Span) -> Self::Punct { + tt::Punct { id: span, ..punct } } } @@ -473,13 +472,13 @@ impl server::Ident for Rustc { ) } - fn span(&mut self, _ident: Self::Ident) -> Self::Span { - // FIXME handle span - tt::TokenId::unspecified() + fn span(&mut self, ident: Self::Ident) -> Self::Span { + self.ident_interner.get(ident.0).0.id } - fn with_span(&mut self, ident: Self::Ident, _span: Self::Span) -> Self::Ident { - // FIXME handle span - ident + fn with_span(&mut self, ident: Self::Ident, span: Self::Span) -> Self::Ident { + let data = self.ident_interner.get(ident.0); + let new = IdentData(tt::Ident { id: span, ..data.0.clone() }); + IdentId(self.ident_interner.intern(&new)) } }