diff --git a/compiler/rustc_ast_pretty/src/pprust/mod.rs b/compiler/rustc_ast_pretty/src/pprust/mod.rs index 976725b308e..e74f38dd89c 100644 --- a/compiler/rustc_ast_pretty/src/pprust/mod.rs +++ b/compiler/rustc_ast_pretty/src/pprust/mod.rs @@ -8,17 +8,19 @@ use rustc_ast as ast; use rustc_ast::token::{Nonterminal, Token, TokenKind}; use rustc_ast::tokenstream::{TokenStream, TokenTree}; +use std::borrow::Cow; + pub fn nonterminal_to_string(nt: &Nonterminal) -> String { State::new().nonterminal_to_string(nt) } /// Print the token kind precisely, without converting `$crate` into its respective crate name. -pub fn token_kind_to_string(tok: &TokenKind) -> String { +pub fn token_kind_to_string(tok: &TokenKind) -> Cow<'static, str> { State::new().token_kind_to_string(tok) } /// Print the token precisely, without converting `$crate` into its respective crate name. -pub fn token_to_string(token: &Token) -> String { +pub fn token_to_string(token: &Token) -> Cow<'static, str> { State::new().token_to_string(token) } diff --git a/compiler/rustc_ast_pretty/src/pprust/state.rs b/compiler/rustc_ast_pretty/src/pprust/state.rs index b09c668273a..26a7096781f 100644 --- a/compiler/rustc_ast_pretty/src/pprust/state.rs +++ b/compiler/rustc_ast_pretty/src/pprust/state.rs @@ -658,7 +658,7 @@ pub trait PrintState<'a>: std::ops::Deref + std::ops::Dere } /// Print the token kind precisely, without converting `$crate` into its respective crate name. - fn token_kind_to_string(&self, tok: &TokenKind) -> String { + fn token_kind_to_string(&self, tok: &TokenKind) -> Cow<'static, str> { self.token_kind_to_string_ext(tok, None) } @@ -666,72 +666,72 @@ pub trait PrintState<'a>: std::ops::Deref + std::ops::Dere &self, tok: &TokenKind, convert_dollar_crate: Option, - ) -> String { + ) -> Cow<'static, str> { match *tok { - token::Eq => "=".to_string(), - token::Lt => "<".to_string(), - token::Le => "<=".to_string(), - token::EqEq => "==".to_string(), - token::Ne => "!=".to_string(), - token::Ge => ">=".to_string(), - token::Gt => ">".to_string(), - token::Not => "!".to_string(), - token::Tilde => "~".to_string(), - token::OrOr => "||".to_string(), - token::AndAnd => "&&".to_string(), - token::BinOp(op) => binop_to_string(op).to_string(), - token::BinOpEq(op) => format!("{}=", binop_to_string(op)), + token::Eq => "=".into(), + token::Lt => "<".into(), + token::Le => "<=".into(), + token::EqEq => "==".into(), + token::Ne => "!=".into(), + token::Ge => ">=".into(), + token::Gt => ">".into(), + token::Not => "!".into(), + token::Tilde => "~".into(), + token::OrOr => "||".into(), + token::AndAnd => "&&".into(), + token::BinOp(op) => binop_to_string(op).into(), + token::BinOpEq(op) => format!("{}=", binop_to_string(op)).into(), /* Structural symbols */ - token::At => "@".to_string(), - token::Dot => ".".to_string(), - token::DotDot => "..".to_string(), - token::DotDotDot => "...".to_string(), - token::DotDotEq => "..=".to_string(), - token::Comma => ",".to_string(), - token::Semi => ";".to_string(), - token::Colon => ":".to_string(), - token::ModSep => "::".to_string(), - token::RArrow => "->".to_string(), - token::LArrow => "<-".to_string(), - token::FatArrow => "=>".to_string(), - token::OpenDelim(token::Paren) => "(".to_string(), - token::CloseDelim(token::Paren) => ")".to_string(), - token::OpenDelim(token::Bracket) => "[".to_string(), - token::CloseDelim(token::Bracket) => "]".to_string(), - token::OpenDelim(token::Brace) => "{".to_string(), - token::CloseDelim(token::Brace) => "}".to_string(), - token::OpenDelim(token::NoDelim) | token::CloseDelim(token::NoDelim) => "".to_string(), - token::Pound => "#".to_string(), - token::Dollar => "$".to_string(), - token::Question => "?".to_string(), - token::SingleQuote => "'".to_string(), + token::At => "@".into(), + token::Dot => ".".into(), + token::DotDot => "..".into(), + token::DotDotDot => "...".into(), + token::DotDotEq => "..=".into(), + token::Comma => ",".into(), + token::Semi => ";".into(), + token::Colon => ":".into(), + token::ModSep => "::".into(), + token::RArrow => "->".into(), + token::LArrow => "<-".into(), + token::FatArrow => "=>".into(), + token::OpenDelim(token::Paren) => "(".into(), + token::CloseDelim(token::Paren) => ")".into(), + token::OpenDelim(token::Bracket) => "[".into(), + token::CloseDelim(token::Bracket) => "]".into(), + token::OpenDelim(token::Brace) => "{".into(), + token::CloseDelim(token::Brace) => "}".into(), + token::OpenDelim(token::NoDelim) | token::CloseDelim(token::NoDelim) => "".into(), + token::Pound => "#".into(), + token::Dollar => "$".into(), + token::Question => "?".into(), + token::SingleQuote => "'".into(), /* Literals */ - token::Literal(lit) => literal_to_string(lit), + token::Literal(lit) => literal_to_string(lit).into(), /* Name components */ token::Ident(s, is_raw) => { - IdentPrinter::new(s, is_raw, convert_dollar_crate).to_string() + IdentPrinter::new(s, is_raw, convert_dollar_crate).to_string().into() } - token::Lifetime(s) => s.to_string(), + token::Lifetime(s) => s.to_string().into(), /* Other */ token::DocComment(comment_kind, attr_style, data) => { - doc_comment_to_string(comment_kind, attr_style, data) + doc_comment_to_string(comment_kind, attr_style, data).into() } - token::Eof => "".to_string(), + token::Eof => "".into(), - token::Interpolated(ref nt) => self.nonterminal_to_string(nt), + token::Interpolated(ref nt) => self.nonterminal_to_string(nt).into(), } } /// Print the token precisely, without converting `$crate` into its respective crate name. - fn token_to_string(&self, token: &Token) -> String { + fn token_to_string(&self, token: &Token) -> Cow<'static, str> { self.token_to_string_ext(token, false) } - fn token_to_string_ext(&self, token: &Token, convert_dollar_crate: bool) -> String { + fn token_to_string_ext(&self, token: &Token, convert_dollar_crate: bool) -> Cow<'static, str> { let convert_dollar_crate = convert_dollar_crate.then_some(token.span); self.token_kind_to_string_ext(&token.kind, convert_dollar_crate) } diff --git a/compiler/rustc_expand/src/mbe/macro_rules.rs b/compiler/rustc_expand/src/mbe/macro_rules.rs index 9aee86c9e57..abc8fd18fd7 100644 --- a/compiler/rustc_expand/src/mbe/macro_rules.rs +++ b/compiler/rustc_expand/src/mbe/macro_rules.rs @@ -1221,7 +1221,7 @@ fn is_in_follow(tok: &mbe::TokenTree, kind: NonterminalKind) -> IsInFollow { fn quoted_tt_to_string(tt: &mbe::TokenTree) -> String { match *tt { - mbe::TokenTree::Token(ref token) => pprust::token_to_string(&token), + mbe::TokenTree::Token(ref token) => pprust::token_to_string(&token).into(), mbe::TokenTree::MetaVar(_, name) => format!("${}", name), mbe::TokenTree::MetaVarDecl(_, name, Some(kind)) => format!("${}:{}", name, kind), mbe::TokenTree::MetaVarDecl(_, name, None) => format!("${}:", name), diff --git a/compiler/rustc_parse/src/parser/expr.rs b/compiler/rustc_parse/src/parser/expr.rs index 6259eff5a1a..7952b475dc2 100644 --- a/compiler/rustc_parse/src/parser/expr.rs +++ b/compiler/rustc_parse/src/parser/expr.rs @@ -1528,7 +1528,7 @@ impl<'a> Parser<'a> { .span_suggestion( token.span, "must have an integer part", - pprust::token_to_string(token), + pprust::token_to_string(token).into(), Applicability::MachineApplicable, ) .emit(); diff --git a/compiler/rustc_parse/src/parser/mod.rs b/compiler/rustc_parse/src/parser/mod.rs index 51d4e007b59..04ad323e51a 100644 --- a/compiler/rustc_parse/src/parser/mod.rs +++ b/compiler/rustc_parse/src/parser/mod.rs @@ -806,7 +806,7 @@ impl<'a> Parser<'a> { .span_suggestion_short( sp, &format!("missing `{}`", token_str), - token_str, + token_str.into(), Applicability::MaybeIncorrect, ) .emit();