Skip to content
This repository was archived by the owner on Oct 6, 2024. It is now read-only.

Commit 181e987

Browse files
committed
Track Span on every segment
1 parent 0cdc3d5 commit 181e987

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

src/segment.rs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use proc_macro::{token_stream, Delimiter, Ident, Span, TokenTree};
33
use std::iter::Peekable;
44

55
pub(crate) enum Segment {
6-
String(String),
6+
String(LitStr),
77
Apostrophe(Span),
88
Env(LitStr),
99
Modifier(Colon, Ident),
@@ -89,7 +89,10 @@ pub(crate) fn parse(tokens: &mut Peekable<token_stream::IntoIter>) -> Result<Vec
8989
));
9090
}
9191
} else {
92-
segments.push(Segment::String(fragment));
92+
segments.push(Segment::String(LitStr {
93+
value: fragment,
94+
span: ident.span(),
95+
}));
9396
}
9497
}
9598
TokenTree::Literal(lit) => {
@@ -101,10 +104,16 @@ pub(crate) fn parse(tokens: &mut Peekable<token_stream::IntoIter>) -> Result<Vec
101104
.replace('"', "")
102105
.replace('\'', "")
103106
.replace('-', "_");
104-
segments.push(Segment::String(lit_string));
107+
segments.push(Segment::String(LitStr {
108+
value: lit_string,
109+
span: lit.span(),
110+
}));
105111
}
106112
TokenTree::Punct(punct) => match punct.as_char() {
107-
'_' => segments.push(Segment::String("_".to_owned())),
113+
'_' => segments.push(Segment::String(LitStr {
114+
value: "_".to_owned(),
115+
span: punct.span(),
116+
})),
108117
'\'' => segments.push(Segment::Apostrophe(punct.span())),
109118
':' => {
110119
let colon_span = punct.span();
@@ -144,7 +153,7 @@ pub(crate) fn paste(segments: &[Segment]) -> Result<String> {
144153
for segment in segments {
145154
match segment {
146155
Segment::String(segment) => {
147-
evaluated.push(segment.clone());
156+
evaluated.push(segment.value.clone());
148157
}
149158
Segment::Apostrophe(span) => {
150159
if is_lifetime {

0 commit comments

Comments
 (0)