diff --git a/src/librustdoc/html/highlight.rs b/src/librustdoc/html/highlight.rs
index 29b4889a6abbd..e728da67dc2f5 100644
--- a/src/librustdoc/html/highlight.rs
+++ b/src/librustdoc/html/highlight.rs
@@ -879,7 +879,9 @@ impl<'src> Classifier<'src> {
| TokenKind::UnknownPrefix
| TokenKind::InvalidPrefix
| TokenKind::InvalidIdent => Class::Ident(self.new_span(before, text)),
- TokenKind::Lifetime { .. } => Class::Lifetime,
+ TokenKind::Lifetime { .. }
+ | TokenKind::RawLifetime
+ | TokenKind::UnknownPrefixLifetime => Class::Lifetime,
TokenKind::Eof => panic!("Eof in advance"),
};
// Anything that didn't return above is the simple case where we the
diff --git a/src/tools/rust-analyzer/crates/parser/src/lexed_str.rs b/src/tools/rust-analyzer/crates/parser/src/lexed_str.rs
index ff924830ae017..3590486bd29ee 100644
--- a/src/tools/rust-analyzer/crates/parser/src/lexed_str.rs
+++ b/src/tools/rust-analyzer/crates/parser/src/lexed_str.rs
@@ -198,6 +198,13 @@ impl<'a> Converter<'a> {
}
LIFETIME_IDENT
}
+ rustc_lexer::TokenKind::UnknownPrefixLifetime => {
+ err = "Unknown lifetime prefix";
+ LIFETIME_IDENT
+ }
+ rustc_lexer::TokenKind::RawLifetime => {
+ LIFETIME_IDENT
+ }
rustc_lexer::TokenKind::Semi => T![;],
rustc_lexer::TokenKind::Comma => T![,],
diff --git a/src/tools/rustfmt/src/expr.rs b/src/tools/rustfmt/src/expr.rs
index 6ba5217bc920d..75c75c523b08a 100644
--- a/src/tools/rustfmt/src/expr.rs
+++ b/src/tools/rustfmt/src/expr.rs
@@ -462,7 +462,7 @@ fn rewrite_empty_block(
return None;
}
- let label_str = rewrite_label(label);
+ let label_str = rewrite_label(context, label);
if attrs.map_or(false, |a| !inner_attributes(a).is_empty()) {
return None;
}
@@ -527,7 +527,7 @@ fn rewrite_single_line_block(
if let Some(block_expr) = stmt::Stmt::from_simple_block(context, block, attrs) {
let expr_shape = shape.offset_left(last_line_width(prefix))?;
let expr_str = block_expr.rewrite(context, expr_shape)?;
- let label_str = rewrite_label(label);
+ let label_str = rewrite_label(context, label);
let result = format!("{prefix}{label_str}{{ {expr_str} }}");
if result.len() <= shape.width && !result.contains('\n') {
return Some(result);
@@ -562,7 +562,7 @@ pub(crate) fn rewrite_block_with_visitor(
}
let inner_attrs = attrs.map(inner_attributes);
- let label_str = rewrite_label(label);
+ let label_str = rewrite_label(context, label);
visitor.visit_block(block, inner_attrs.as_deref(), has_braces);
let visitor_context = visitor.get_context();
context
@@ -939,7 +939,7 @@ impl<'a> ControlFlow<'a> {
fresh_shape
};
- let label_string = rewrite_label(self.label);
+ let label_string = rewrite_label(context, self.label);
// 1 = space after keyword.
let offset = self.keyword.len() + label_string.len() + 1;
@@ -1168,9 +1168,9 @@ impl<'a> Rewrite for ControlFlow<'a> {
}
}
-fn rewrite_label(opt_label: Option) -> Cow<'static, str> {
+fn rewrite_label(context: &RewriteContext<'_>, opt_label: Option) -> Cow<'static, str> {
match opt_label {
- Some(label) => Cow::from(format!("{}: ", label.ident)),
+ Some(label) => Cow::from(format!("{}: ", context.snippet(label.ident.span))),
None => Cow::from(""),
}
}
diff --git a/src/tools/rustfmt/src/macros.rs b/src/tools/rustfmt/src/macros.rs
index b14b74a493814..524fc666faeef 100644
--- a/src/tools/rustfmt/src/macros.rs
+++ b/src/tools/rustfmt/src/macros.rs
@@ -1074,7 +1074,7 @@ fn force_space_before(tok: &TokenKind) -> bool {
fn ident_like(tok: &Token) -> bool {
matches!(
tok.kind,
- TokenKind::Ident(..) | TokenKind::Literal(..) | TokenKind::Lifetime(_)
+ TokenKind::Ident(..) | TokenKind::Literal(..) | TokenKind::Lifetime(..)
)
}
@@ -1099,7 +1099,9 @@ fn next_space(tok: &TokenKind) -> SpaceState {
| TokenKind::OpenDelim(_)
| TokenKind::CloseDelim(_) => SpaceState::Never,
- TokenKind::Literal(..) | TokenKind::Ident(..) | TokenKind::Lifetime(_) => SpaceState::Ident,
+ TokenKind::Literal(..) | TokenKind::Ident(..) | TokenKind::Lifetime(..) => {
+ SpaceState::Ident
+ }
_ => SpaceState::Always,
}
diff --git a/src/tools/rustfmt/src/types.rs b/src/tools/rustfmt/src/types.rs
index 875c61113c528..7730aa467ce3a 100644
--- a/src/tools/rustfmt/src/types.rs
+++ b/src/tools/rustfmt/src/types.rs
@@ -548,7 +548,7 @@ impl Rewrite for ast::AnonConst {
impl Rewrite for ast::Lifetime {
fn rewrite(&self, context: &RewriteContext<'_>, _: Shape) -> Option {
- Some(rewrite_ident(context, self.ident).to_owned())
+ Some(context.snippet(self.ident.span).to_owned())
}
}