Skip to content

Commit ab32672

Browse files
committed
Distinguish raw and non-raw lifetime/label
1 parent 4282fa6 commit ab32672

File tree

6 files changed

+31
-4
lines changed

6 files changed

+31
-4
lines changed

src/combination.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ pub enum CoarseTokenData {
5757
LifetimeOrLabel {
5858
name: Charseq,
5959
},
60+
RawLifetimeOrLabel {
61+
name: Charseq,
62+
},
6063
ByteLiteral {
6164
represented_byte: u8,
6265
suffix: Charseq,
@@ -327,6 +330,9 @@ impl TryFrom<FineTokenData> for CoarseTokenData {
327330
FineTokenData::LifetimeOrLabel { name } => {
328331
Ok(CoarseTokenData::LifetimeOrLabel { name })
329332
}
333+
FineTokenData::RawLifetimeOrLabel { name } => {
334+
Ok(CoarseTokenData::RawLifetimeOrLabel { name })
335+
}
330336
FineTokenData::ByteLiteral {
331337
represented_byte,
332338
suffix,

src/lex_via_rustc.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ pub enum RustcTokenData {
7878
identifier: String,
7979
},
8080
Lifetime {
81+
style: RustcIdentIsRaw,
8182
/// This includes the leading '
8283
symbol: String,
8384
},
@@ -133,7 +134,7 @@ pub enum RustcDocCommentStyle {
133134
Outer,
134135
}
135136

136-
/// Whether an identifier was written in raw form.
137+
/// Whether an identifier or lifetime/label was written in raw form.
137138
pub enum RustcIdentIsRaw {
138139
No,
139140
Yes,
@@ -398,7 +399,8 @@ fn token_from_ast_token(
398399
style: style.into(),
399400
identifier: symbol.to_string(),
400401
},
401-
TokenKind::Lifetime(symbol, _is_raw) => RustcTokenData::Lifetime {
402+
TokenKind::Lifetime(symbol, style) => RustcTokenData::Lifetime {
403+
style: style.into(),
402404
symbol: symbol.to_string(),
403405
},
404406
TokenKind::Literal(rustc_ast::token::Lit {

src/lexlucid/pretokenisation.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ pub enum PretokenData {
5858
LifetimeOrLabel {
5959
name: Charseq,
6060
},
61+
RawLifetimeOrLabel {
62+
name: Charseq,
63+
},
6164
SingleQuoteLiteral {
6265
prefix: Charseq,
6366
literal_content: Charseq,

src/lexlucid/pretokenisation/pretokenisation_rules.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ fn make_named_rules() -> BTreeMap<RuleName, Rule> {
189189
// Lifetime or label
190190
(RuleName::RawLifetimeOrLabel2021,
191191
Rule::new_regex(
192-
|cp| PretokenData::LifetimeOrLabel {
192+
|cp| PretokenData::RawLifetimeOrLabel {
193193
name: cp["name"].into(),
194194
}, r##"\A
195195
' r \#

src/lexlucid/reprocessing.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ pub enum FineTokenData {
5353
LifetimeOrLabel {
5454
name: Charseq,
5555
},
56+
RawLifetimeOrLabel {
57+
name: Charseq,
58+
},
5659
CharacterLiteral {
5760
represented_character: char,
5861
suffix: Charseq,
@@ -158,6 +161,9 @@ pub fn reprocess(pretoken: &Pretoken) -> Result<FineToken, Error> {
158161
PretokenData::LifetimeOrLabel { name } => {
159162
FineTokenData::LifetimeOrLabel { name: name.clone() }
160163
}
164+
PretokenData::RawLifetimeOrLabel { name } => {
165+
FineTokenData::RawLifetimeOrLabel { name: name.clone() }
166+
}
161167
PretokenData::SingleQuoteLiteral {
162168
prefix,
163169
literal_content,

src/regular_tokens.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ pub enum RegularTokenData {
6767
LifetimeOrLabel {
6868
/// This includes the leading '
6969
symbol: Charseq,
70+
style: IdentifierStyle,
7071
},
7172
ByteLiteral {
7273
represented_byte: u8,
@@ -158,8 +159,12 @@ pub fn regularise_from_rustc(tokens: impl IntoIterator<Item = RustcToken>) -> Ve
158159
represented_identifier: identifier.into(),
159160
style: style.into(),
160161
},
161-
RustcTokenData::Lifetime { symbol: name } => RegularTokenData::LifetimeOrLabel {
162+
RustcTokenData::Lifetime {
163+
style,
164+
symbol: name,
165+
} => RegularTokenData::LifetimeOrLabel {
162166
symbol: name.into(),
167+
style: style.into(),
163168
},
164169
RustcTokenData::Lit { literal_data } => regularise_rustc_literal(literal_data)
165170
.expect("rustc token represented an error"),
@@ -296,6 +301,11 @@ fn from_coarse_token(token: CoarseToken) -> RegularTokenData {
296301
},
297302
CoarseTokenData::LifetimeOrLabel { name } => RegularTokenData::LifetimeOrLabel {
298303
symbol: once('\'').chain(name.iter().copied()).collect(),
304+
style: IdentifierStyle::NonRaw,
305+
},
306+
CoarseTokenData::RawLifetimeOrLabel { name } => RegularTokenData::LifetimeOrLabel {
307+
symbol: once('\'').chain(name.iter().copied()).collect(),
308+
style: IdentifierStyle::Raw,
299309
},
300310
CoarseTokenData::CharacterLiteral {
301311
represented_character,

0 commit comments

Comments
 (0)