about summary refs log tree commit diff
path: root/compiler/rustc_parse/src/parser
diff options
context:
space:
mode:
authorXiretza <xiretza@xiretza.xyz>2022-09-22 18:39:17 +0200
committerXiretza <xiretza@xiretza.xyz>2022-09-27 20:29:19 +0200
commitd7c64574e03f1d44c0a9e200b7dbeba98c50d8b3 (patch)
tree8919fb00645f33b14da43004f27e50a70b65de78 /compiler/rustc_parse/src/parser
parent37fdcb4b364aeb8164a21a39dac984eb1e772872 (diff)
downloadrust-d7c64574e03f1d44c0a9e200b7dbeba98c50d8b3.tar.gz
rust-d7c64574e03f1d44c0a9e200b7dbeba98c50d8b3.zip
Implement IntoDiagnosticArg for rustc_ast::token::Token(Kind)
Diffstat (limited to 'compiler/rustc_parse/src/parser')
-rw-r--r--compiler/rustc_parse/src/parser/attr.rs4
-rw-r--r--compiler/rustc_parse/src/parser/diagnostics.rs6
-rw-r--r--compiler/rustc_parse/src/parser/expr.rs3
-rw-r--r--compiler/rustc_parse/src/parser/mod.rs41
4 files changed, 22 insertions, 32 deletions
diff --git a/compiler/rustc_parse/src/parser/attr.rs b/compiler/rustc_parse/src/parser/attr.rs
index ee3f7dbbc39..58be348883c 100644
--- a/compiler/rustc_parse/src/parser/attr.rs
+++ b/compiler/rustc_parse/src/parser/attr.rs
@@ -4,7 +4,6 @@ use super::{AttrWrapper, Capturing, FnParseMode, ForceCollect, Parser, PathStyle
 use rustc_ast as ast;
 use rustc_ast::attr;
 use rustc_ast::token::{self, Delimiter, Nonterminal};
-use rustc_ast_pretty::pprust;
 use rustc_errors::{error_code, fluent, Diagnostic, IntoDiagnostic, PResult};
 use rustc_span::{sym, BytePos, Span};
 use std::convert::TryInto;
@@ -414,8 +413,7 @@ impl<'a> Parser<'a> {
             Err(err) => err.cancel(),
         }
 
-        let token = pprust::token_to_string(&self.token).to_string();
-        Err(InvalidMetaItem { span: self.token.span, token }
+        Err(InvalidMetaItem { span: self.token.span, token: self.token.clone() }
             .into_diagnostic(&self.sess.span_diagnostic))
     }
 }
diff --git a/compiler/rustc_parse/src/parser/diagnostics.rs b/compiler/rustc_parse/src/parser/diagnostics.rs
index 5df94331d7b..b512f26335f 100644
--- a/compiler/rustc_parse/src/parser/diagnostics.rs
+++ b/compiler/rustc_parse/src/parser/diagnostics.rs
@@ -326,7 +326,7 @@ impl<'a> Parser<'a> {
 
         let err = ExpectedIdentifier {
             span: self.token.span,
-            token_descr: super::token_descr_struct(&self.token),
+            token: self.token.clone(),
             suggest_raw,
             suggest_remove_comma,
         };
@@ -426,7 +426,7 @@ impl<'a> Parser<'a> {
                 //   let y = 42;
                 self.sess.emit_err(ExpectedSemi {
                     span: self.token.span,
-                    token_descr: super::token_descr_struct(&self.token),
+                    token: self.token.clone(),
                     unexpected_token_label: None,
                     sugg: ExpectedSemiSugg::ChangeToSemi(self.token.span),
                 });
@@ -451,7 +451,7 @@ impl<'a> Parser<'a> {
                 let span = self.prev_token.span.shrink_to_hi();
                 self.sess.emit_err(ExpectedSemi {
                     span,
-                    token_descr: super::token_descr_struct(&self.token),
+                    token: self.token.clone(),
                     unexpected_token_label: Some(self.token.span),
                     sugg: ExpectedSemiSugg::AddSemi(span),
                 });
diff --git a/compiler/rustc_parse/src/parser/expr.rs b/compiler/rustc_parse/src/parser/expr.rs
index 02cee75a0f5..8b328e593ae 100644
--- a/compiler/rustc_parse/src/parser/expr.rs
+++ b/compiler/rustc_parse/src/parser/expr.rs
@@ -430,8 +430,7 @@ impl<'a> Parser<'a> {
     fn error_found_expr_would_be_stmt(&self, lhs: &Expr) {
         self.sess.emit_err(FoundExprWouldBeStmt {
             span: self.token.span,
-            // FIXME(#100717)
-            token: pprust::token_to_string(&self.token).to_string(),
+            token: self.token.clone(),
             suggestion: ExprParenthesesNeeded::surrounding(lhs.span),
         });
     }
diff --git a/compiler/rustc_parse/src/parser/mod.rs b/compiler/rustc_parse/src/parser/mod.rs
index a1a224e8524..2aebaf7c3af 100644
--- a/compiler/rustc_parse/src/parser/mod.rs
+++ b/compiler/rustc_parse/src/parser/mod.rs
@@ -411,40 +411,33 @@ pub enum FollowedByType {
 }
 
 #[derive(Clone, Copy, PartialEq, Eq)]
-pub enum TokenDescriptionKind {
+pub enum TokenDescription {
     ReservedIdentifier,
     Keyword,
     ReservedKeyword,
     DocComment,
 }
 
-#[derive(Clone, PartialEq, Eq)]
-pub struct TokenDescription {
-    pub kind: Option<TokenDescriptionKind>,
-    pub name: String,
-}
-
-pub(super) fn token_descr_struct(token: &Token) -> TokenDescription {
-    let kind = match token.kind {
-        _ if token.is_special_ident() => Some(TokenDescriptionKind::ReservedIdentifier),
-        _ if token.is_used_keyword() => Some(TokenDescriptionKind::Keyword),
-        _ if token.is_unused_keyword() => Some(TokenDescriptionKind::ReservedKeyword),
-        token::DocComment(..) => Some(TokenDescriptionKind::DocComment),
-        _ => None,
-    };
-    let name = pprust::token_to_string(token).to_string();
-
-    TokenDescription { kind, name }
+impl TokenDescription {
+    pub fn from_token(token: &Token) -> Option<Self> {
+        match token.kind {
+            _ if token.is_special_ident() => Some(TokenDescription::ReservedIdentifier),
+            _ if token.is_used_keyword() => Some(TokenDescription::Keyword),
+            _ if token.is_unused_keyword() => Some(TokenDescription::ReservedKeyword),
+            token::DocComment(..) => Some(TokenDescription::DocComment),
+            _ => None,
+        }
+    }
 }
 
 pub(super) fn token_descr(token: &Token) -> String {
-    let TokenDescription { kind, name } = token_descr_struct(token);
+    let name = pprust::token_to_string(token).to_string();
 
-    let kind = kind.map(|kind| match kind {
-        TokenDescriptionKind::ReservedIdentifier => "reserved identifier",
-        TokenDescriptionKind::Keyword => "keyword",
-        TokenDescriptionKind::ReservedKeyword => "reserved keyword",
-        TokenDescriptionKind::DocComment => "doc comment",
+    let kind = TokenDescription::from_token(token).map(|kind| match kind {
+        TokenDescription::ReservedIdentifier => "reserved identifier",
+        TokenDescription::Keyword => "keyword",
+        TokenDescription::ReservedKeyword => "reserved keyword",
+        TokenDescription::DocComment => "doc comment",
     });
 
     if let Some(kind) = kind { format!("{} `{}`", kind, name) } else { format!("`{}`", name) }