Skip to content

Commit e4ca952

Browse files
bors[bot]Veykril
andauthored
Merge #10633
10633: fix: Implement most proc_macro span handling for other ABIs r=Veykril a=Veykril Follow up to #10378 bors r+ Co-authored-by: Lukas Wirth <[email protected]>
2 parents aa04d3e + d2b8ca9 commit e4ca952

File tree

2 files changed

+40
-42
lines changed

2 files changed

+40
-42
lines changed

crates/proc_macro_srv/src/abis/abi_1_47/rustc_server.rs

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -423,19 +423,20 @@ impl server::Group for Rustc {
423423
group.delimiter.map(|it| it.id).unwrap_or_else(tt::TokenId::unspecified)
424424
}
425425

426-
fn set_span(&mut self, _group: &mut Self::Group, _span: Self::Span) {
427-
// FIXME handle span
426+
fn set_span(&mut self, group: &mut Self::Group, span: Self::Span) {
427+
if let Some(delim) = &mut group.delimiter {
428+
delim.id = span;
429+
}
428430
}
429431

430-
fn span_open(&mut self, _group: &Self::Group) -> Self::Span {
431-
// FIXME handle span
432-
// MySpan(self.span_interner.intern(&MySpanData(group.span_open())))
433-
tt::TokenId::unspecified()
432+
fn span_open(&mut self, group: &Self::Group) -> Self::Span {
433+
// FIXME we only store one `TokenId` for the delimiters
434+
group.delimiter.map(|it| it.id).unwrap_or_else(tt::TokenId::unspecified)
434435
}
435436

436-
fn span_close(&mut self, _group: &Self::Group) -> Self::Span {
437-
// FIXME handle span
438-
tt::TokenId::unspecified()
437+
fn span_close(&mut self, group: &Self::Group) -> Self::Span {
438+
// FIXME we only store one `TokenId` for the delimiters
439+
group.delimiter.map(|it| it.id).unwrap_or_else(tt::TokenId::unspecified)
439440
}
440441
}
441442

@@ -453,13 +454,11 @@ impl server::Punct for Rustc {
453454
fn spacing(&mut self, punct: Self::Punct) -> bridge::Spacing {
454455
spacing_to_external(punct.spacing)
455456
}
456-
fn span(&mut self, _punct: Self::Punct) -> Self::Span {
457-
// FIXME handle span
458-
tt::TokenId::unspecified()
457+
fn span(&mut self, punct: Self::Punct) -> Self::Span {
458+
punct.id
459459
}
460-
fn with_span(&mut self, punct: Self::Punct, _span: Self::Span) -> Self::Punct {
461-
// FIXME handle span
462-
punct
460+
fn with_span(&mut self, punct: Self::Punct, span: Self::Span) -> Self::Punct {
461+
tt::Punct { id: span, ..punct }
463462
}
464463
}
465464

@@ -473,13 +472,13 @@ impl server::Ident for Rustc {
473472
)
474473
}
475474

476-
fn span(&mut self, _ident: Self::Ident) -> Self::Span {
477-
// FIXME handle span
478-
tt::TokenId::unspecified()
475+
fn span(&mut self, ident: Self::Ident) -> Self::Span {
476+
self.ident_interner.get(ident.0).0.id
479477
}
480-
fn with_span(&mut self, ident: Self::Ident, _span: Self::Span) -> Self::Ident {
481-
// FIXME handle span
482-
ident
478+
fn with_span(&mut self, ident: Self::Ident, span: Self::Span) -> Self::Ident {
479+
let data = self.ident_interner.get(ident.0);
480+
let new = IdentData(tt::Ident { id: span, ..data.0.clone() });
481+
IdentId(self.ident_interner.intern(&new))
483482
}
484483
}
485484

crates/proc_macro_srv/src/abis/abi_1_55/rustc_server.rs

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -423,19 +423,20 @@ impl server::Group for Rustc {
423423
group.delimiter.map(|it| it.id).unwrap_or_else(tt::TokenId::unspecified)
424424
}
425425

426-
fn set_span(&mut self, _group: &mut Self::Group, _span: Self::Span) {
427-
// FIXME handle span
426+
fn set_span(&mut self, group: &mut Self::Group, span: Self::Span) {
427+
if let Some(delim) = &mut group.delimiter {
428+
delim.id = span;
429+
}
428430
}
429431

430-
fn span_open(&mut self, _group: &Self::Group) -> Self::Span {
431-
// FIXME handle span
432-
// MySpan(self.span_interner.intern(&MySpanData(group.span_open())))
433-
tt::TokenId::unspecified()
432+
fn span_open(&mut self, group: &Self::Group) -> Self::Span {
433+
// FIXME we only store one `TokenId` for the delimiters
434+
group.delimiter.map(|it| it.id).unwrap_or_else(tt::TokenId::unspecified)
434435
}
435436

436-
fn span_close(&mut self, _group: &Self::Group) -> Self::Span {
437-
// FIXME handle span
438-
tt::TokenId::unspecified()
437+
fn span_close(&mut self, group: &Self::Group) -> Self::Span {
438+
// FIXME we only store one `TokenId` for the delimiters
439+
group.delimiter.map(|it| it.id).unwrap_or_else(tt::TokenId::unspecified)
439440
}
440441
}
441442

@@ -453,13 +454,11 @@ impl server::Punct for Rustc {
453454
fn spacing(&mut self, punct: Self::Punct) -> bridge::Spacing {
454455
spacing_to_external(punct.spacing)
455456
}
456-
fn span(&mut self, _punct: Self::Punct) -> Self::Span {
457-
// FIXME handle span
458-
tt::TokenId::unspecified()
457+
fn span(&mut self, punct: Self::Punct) -> Self::Span {
458+
punct.id
459459
}
460-
fn with_span(&mut self, punct: Self::Punct, _span: Self::Span) -> Self::Punct {
461-
// FIXME handle span
462-
punct
460+
fn with_span(&mut self, punct: Self::Punct, span: Self::Span) -> Self::Punct {
461+
tt::Punct { id: span, ..punct }
463462
}
464463
}
465464

@@ -473,13 +472,13 @@ impl server::Ident for Rustc {
473472
)
474473
}
475474

476-
fn span(&mut self, _ident: Self::Ident) -> Self::Span {
477-
// FIXME handle span
478-
tt::TokenId::unspecified()
475+
fn span(&mut self, ident: Self::Ident) -> Self::Span {
476+
self.ident_interner.get(ident.0).0.id
479477
}
480-
fn with_span(&mut self, ident: Self::Ident, _span: Self::Span) -> Self::Ident {
481-
// FIXME handle span
482-
ident
478+
fn with_span(&mut self, ident: Self::Ident, span: Self::Span) -> Self::Ident {
479+
let data = self.ident_interner.get(ident.0);
480+
let new = IdentData(tt::Ident { id: span, ..data.0.clone() });
481+
IdentId(self.ident_interner.intern(&new))
483482
}
484483
}
485484

0 commit comments

Comments
 (0)