rustc_ast: Harmonize delimiter naming with proc_macro::Delimiter
This commit is contained in:
parent
0e7915d11f
commit
2733ec1be3
41 changed files with 433 additions and 426 deletions
|
@ -23,7 +23,7 @@ pub use GenericArgs::*;
|
|||
pub use UnsafeSource::*;
|
||||
|
||||
use crate::ptr::P;
|
||||
use crate::token::{self, CommentKind, DelimToken, Token};
|
||||
use crate::token::{self, CommentKind, Delimiter, Token};
|
||||
use crate::tokenstream::{DelimSpan, LazyTokenStream, TokenStream, TokenTree};
|
||||
|
||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
||||
|
@ -1542,7 +1542,7 @@ pub enum MacArgs {
|
|||
}
|
||||
|
||||
impl MacArgs {
|
||||
pub fn delim(&self) -> Option<DelimToken> {
|
||||
pub fn delim(&self) -> Option<Delimiter> {
|
||||
match self {
|
||||
MacArgs::Delimited(_, delim, _) => Some(delim.to_token()),
|
||||
MacArgs::Empty | MacArgs::Eq(..) => None,
|
||||
|
@ -1582,20 +1582,20 @@ pub enum MacDelimiter {
|
|||
}
|
||||
|
||||
impl MacDelimiter {
|
||||
pub fn to_token(self) -> DelimToken {
|
||||
pub fn to_token(self) -> Delimiter {
|
||||
match self {
|
||||
MacDelimiter::Parenthesis => DelimToken::Paren,
|
||||
MacDelimiter::Bracket => DelimToken::Bracket,
|
||||
MacDelimiter::Brace => DelimToken::Brace,
|
||||
MacDelimiter::Parenthesis => Delimiter::Parenthesis,
|
||||
MacDelimiter::Bracket => Delimiter::Bracket,
|
||||
MacDelimiter::Brace => Delimiter::Brace,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn from_token(delim: DelimToken) -> Option<MacDelimiter> {
|
||||
pub fn from_token(delim: Delimiter) -> Option<MacDelimiter> {
|
||||
match delim {
|
||||
token::Paren => Some(MacDelimiter::Parenthesis),
|
||||
token::Bracket => Some(MacDelimiter::Bracket),
|
||||
token::Brace => Some(MacDelimiter::Brace),
|
||||
token::NoDelim => None,
|
||||
Delimiter::Parenthesis => Some(MacDelimiter::Parenthesis),
|
||||
Delimiter::Bracket => Some(MacDelimiter::Bracket),
|
||||
Delimiter::Brace => Some(MacDelimiter::Brace),
|
||||
Delimiter::Invisible => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ use crate::ast::{AttrId, AttrItem, AttrKind, AttrStyle, Attribute};
|
|||
use crate::ast::{Lit, LitKind};
|
||||
use crate::ast::{MacArgs, MacDelimiter, MetaItem, MetaItemKind, NestedMetaItem};
|
||||
use crate::ast::{Path, PathSegment};
|
||||
use crate::token::{self, CommentKind, Token};
|
||||
use crate::token::{self, CommentKind, Delimiter, Token};
|
||||
use crate::tokenstream::{AttrAnnotatedTokenStream, AttrAnnotatedTokenTree};
|
||||
use crate::tokenstream::{DelimSpan, Spacing, TokenTree, TreeAndSpacing};
|
||||
use crate::tokenstream::{LazyTokenStream, TokenStream};
|
||||
|
@ -513,7 +513,7 @@ impl MetaItemKind {
|
|||
vec![
|
||||
TokenTree::Delimited(
|
||||
DelimSpan::from_single(span),
|
||||
token::Paren,
|
||||
Delimiter::Parenthesis,
|
||||
TokenStream::new(tokens),
|
||||
)
|
||||
.into(),
|
||||
|
@ -540,7 +540,7 @@ impl MetaItemKind {
|
|||
tokens: &mut impl Iterator<Item = TokenTree>,
|
||||
) -> Option<MetaItemKind> {
|
||||
match tokens.next() {
|
||||
Some(TokenTree::Delimited(_, token::NoDelim, inner_tokens)) => {
|
||||
Some(TokenTree::Delimited(_, Delimiter::Invisible, inner_tokens)) => {
|
||||
MetaItemKind::name_value_from_tokens(&mut inner_tokens.trees())
|
||||
}
|
||||
Some(TokenTree::Token(token)) => {
|
||||
|
@ -565,7 +565,7 @@ impl MetaItemKind {
|
|||
tokens: &mut iter::Peekable<impl Iterator<Item = TokenTree>>,
|
||||
) -> Option<MetaItemKind> {
|
||||
match tokens.peek() {
|
||||
Some(TokenTree::Delimited(_, token::Paren, inner_tokens)) => {
|
||||
Some(TokenTree::Delimited(_, Delimiter::Parenthesis, inner_tokens)) => {
|
||||
let inner_tokens = inner_tokens.clone();
|
||||
tokens.next();
|
||||
MetaItemKind::list_from_tokens(inner_tokens)
|
||||
|
@ -606,7 +606,7 @@ impl NestedMetaItem {
|
|||
tokens.next();
|
||||
return Some(NestedMetaItem::Literal(lit));
|
||||
}
|
||||
Some(TokenTree::Delimited(_, token::NoDelim, inner_tokens)) => {
|
||||
Some(TokenTree::Delimited(_, Delimiter::Invisible, inner_tokens)) => {
|
||||
let inner_tokens = inner_tokens.clone();
|
||||
tokens.next();
|
||||
return NestedMetaItem::from_tokens(&mut inner_tokens.into_trees().peekable());
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
pub use BinOpToken::*;
|
||||
pub use DelimToken::*;
|
||||
pub use LitKind::*;
|
||||
pub use Nonterminal::*;
|
||||
pub use TokenKind::*;
|
||||
|
@ -37,18 +36,26 @@ pub enum BinOpToken {
|
|||
Shr,
|
||||
}
|
||||
|
||||
/// A delimiter token.
|
||||
#[derive(Clone, PartialEq, Eq, Encodable, Decodable, Hash, Debug, Copy)]
|
||||
#[derive(HashStable_Generic)]
|
||||
pub enum DelimToken {
|
||||
/// A round parenthesis (i.e., `(` or `)`).
|
||||
Paren,
|
||||
/// A square bracket (i.e., `[` or `]`).
|
||||
Bracket,
|
||||
/// A curly brace (i.e., `{` or `}`).
|
||||
/// Describes how a sequence of token trees is delimited.
|
||||
/// Cannot use `proc_macro::Delimiter` directly because this
|
||||
/// structure should implement some additional traits.
|
||||
/// The `None` variant is also renamed to `Invisible` to be
|
||||
/// less confusing and better convey the semantics.
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
||||
#[derive(Encodable, Decodable, Hash, HashStable_Generic)]
|
||||
pub enum Delimiter {
|
||||
/// `( ... )`
|
||||
Parenthesis,
|
||||
/// `{ ... }`
|
||||
Brace,
|
||||
/// An empty delimiter.
|
||||
NoDelim,
|
||||
/// `[ ... ]`
|
||||
Bracket,
|
||||
/// `Ø ... Ø`
|
||||
/// An invisible delimiter, that may, for example, appear around tokens coming from a
|
||||
/// "macro variable" `$var`. It is important to preserve operator priorities in cases like
|
||||
/// `$var * 3` where `$var` is `1 + 2`.
|
||||
/// Invisible delimiters might not survive roundtrip of a token stream through a string.
|
||||
Invisible,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, PartialEq, Encodable, Decodable, Debug, HashStable_Generic)]
|
||||
|
@ -212,9 +219,9 @@ pub enum TokenKind {
|
|||
/// Used by proc macros for representing lifetimes, not generated by lexer right now.
|
||||
SingleQuote,
|
||||
/// An opening delimiter (e.g., `{`).
|
||||
OpenDelim(DelimToken),
|
||||
OpenDelim(Delimiter),
|
||||
/// A closing delimiter (e.g., `}`).
|
||||
CloseDelim(DelimToken),
|
||||
CloseDelim(Delimiter),
|
||||
|
||||
/* Literals */
|
||||
Literal(Lit),
|
||||
|
@ -387,8 +394,8 @@ impl Token {
|
|||
match self.uninterpolate().kind {
|
||||
Ident(name, is_raw) =>
|
||||
ident_can_begin_type(name, self.span, is_raw), // type name or keyword
|
||||
OpenDelim(Paren) | // tuple
|
||||
OpenDelim(Bracket) | // array
|
||||
OpenDelim(Delimiter::Parenthesis) | // tuple
|
||||
OpenDelim(Delimiter::Bracket) | // array
|
||||
Not | // never
|
||||
BinOp(Star) | // raw pointer
|
||||
BinOp(And) | // reference
|
||||
|
@ -405,7 +412,7 @@ impl Token {
|
|||
/// Returns `true` if the token can appear at the start of a const param.
|
||||
pub fn can_begin_const_arg(&self) -> bool {
|
||||
match self.kind {
|
||||
OpenDelim(Brace) => true,
|
||||
OpenDelim(Delimiter::Brace) => true,
|
||||
Interpolated(ref nt) => matches!(**nt, NtExpr(..) | NtBlock(..) | NtLiteral(..)),
|
||||
_ => self.can_begin_literal_maybe_minus(),
|
||||
}
|
||||
|
@ -417,7 +424,7 @@ impl Token {
|
|||
|| self.is_lifetime()
|
||||
|| self.is_keyword(kw::For)
|
||||
|| self == &Question
|
||||
|| self == &OpenDelim(Paren)
|
||||
|| self == &OpenDelim(Delimiter::Parenthesis)
|
||||
}
|
||||
|
||||
/// Returns `true` if the token is any literal.
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
//! and a borrowed `TokenStream` is sufficient to build an owned `TokenStream` without taking
|
||||
//! ownership of the original.
|
||||
|
||||
use crate::token::{self, DelimToken, Token, TokenKind};
|
||||
use crate::token::{self, Delimiter, Token, TokenKind};
|
||||
use crate::AttrVec;
|
||||
|
||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
||||
|
@ -42,7 +42,7 @@ pub enum TokenTree {
|
|||
/// A single token.
|
||||
Token(Token),
|
||||
/// A delimited sequence of token trees.
|
||||
Delimited(DelimSpan, DelimToken, TokenStream),
|
||||
Delimited(DelimSpan, Delimiter, TokenStream),
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone)]
|
||||
|
@ -57,7 +57,7 @@ fn _dummy()
|
|||
where
|
||||
Token: Send + Sync,
|
||||
DelimSpan: Send + Sync,
|
||||
DelimToken: Send + Sync,
|
||||
Delimiter: Send + Sync,
|
||||
TokenStream: Send + Sync,
|
||||
{
|
||||
}
|
||||
|
@ -175,7 +175,7 @@ pub struct AttrAnnotatedTokenStream(pub Lrc<Vec<(AttrAnnotatedTokenTree, Spacing
|
|||
#[derive(Clone, Debug, Encodable, Decodable)]
|
||||
pub enum AttrAnnotatedTokenTree {
|
||||
Token(Token),
|
||||
Delimited(DelimSpan, DelimToken, AttrAnnotatedTokenStream),
|
||||
Delimited(DelimSpan, Delimiter, AttrAnnotatedTokenStream),
|
||||
/// Stores the attributes for an attribute target,
|
||||
/// along with the tokens for that attribute target.
|
||||
/// See `AttributesData` for more information
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue