summaryrefslogtreecommitdiffstats
path: root/third_party/rust/serde_derive/src/internals/respan.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/serde_derive/src/internals/respan.rs')
-rw-r--r--third_party/rust/serde_derive/src/internals/respan.rs16
1 files changed, 16 insertions, 0 deletions
diff --git a/third_party/rust/serde_derive/src/internals/respan.rs b/third_party/rust/serde_derive/src/internals/respan.rs
new file mode 100644
index 0000000000..dcec7017b3
--- /dev/null
+++ b/third_party/rust/serde_derive/src/internals/respan.rs
@@ -0,0 +1,16 @@
+use proc_macro2::{Group, Span, TokenStream, TokenTree};
+
+pub(crate) fn respan(stream: TokenStream, span: Span) -> TokenStream {
+ stream
+ .into_iter()
+ .map(|token| respan_token(token, span))
+ .collect()
+}
+
+fn respan_token(mut token: TokenTree, span: Span) -> TokenTree {
+ if let TokenTree::Group(g) = &mut token {
+ *g = Group::new(g.delimiter(), respan(g.stream(), span));
+ }
+ token.set_span(span);
+ token
+}