Remove MacDelimiter
.
It's the same as `Delimiter`, minus the `Invisible` variant. I'm generally in favour of using types to make impossible states unrepresentable, but this one feels very low-value, and the conversions between the two types are annoying and confusing. Look at the change in `src/tools/rustfmt/src/expr.rs` for an example: the old code converted from `MacDelimiter` to `Delimiter` and back again, for no good reason. This suggests the author was confused about the types.
This commit is contained in:
parent
ba294a816b
commit
d75ee2a6bc
13 changed files with 37 additions and 67 deletions
|
@ -14,7 +14,7 @@
|
||||||
//! - [`Generics`], [`GenericParam`], [`WhereClause`]: Metadata associated with generic parameters.
|
//! - [`Generics`], [`GenericParam`], [`WhereClause`]: Metadata associated with generic parameters.
|
||||||
//! - [`EnumDef`] and [`Variant`]: Enum declaration.
|
//! - [`EnumDef`] and [`Variant`]: Enum declaration.
|
||||||
//! - [`MetaItemLit`] and [`LitKind`]: Literal expressions.
|
//! - [`MetaItemLit`] and [`LitKind`]: Literal expressions.
|
||||||
//! - [`MacroDef`], [`MacStmtStyle`], [`MacCall`], [`MacDelimiter`]: Macro definition and invocation.
|
//! - [`MacroDef`], [`MacStmtStyle`], [`MacCall`]: Macro definition and invocation.
|
||||||
//! - [`Attribute`]: Metadata associated with item.
|
//! - [`Attribute`]: Metadata associated with item.
|
||||||
//! - [`UnOp`], [`BinOp`], and [`BinOpKind`]: Unary and binary operators.
|
//! - [`UnOp`], [`BinOp`], and [`BinOpKind`]: Unary and binary operators.
|
||||||
|
|
||||||
|
@ -1693,7 +1693,7 @@ where
|
||||||
#[derive(Clone, Encodable, Decodable, Debug)]
|
#[derive(Clone, Encodable, Decodable, Debug)]
|
||||||
pub struct DelimArgs {
|
pub struct DelimArgs {
|
||||||
pub dspan: DelimSpan,
|
pub dspan: DelimSpan,
|
||||||
pub delim: MacDelimiter,
|
pub delim: Delimiter, // Note: `Delimiter::Invisible` never occurs
|
||||||
pub tokens: TokenStream,
|
pub tokens: TokenStream,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1701,7 +1701,7 @@ impl DelimArgs {
|
||||||
/// Whether a macro with these arguments needs a semicolon
|
/// Whether a macro with these arguments needs a semicolon
|
||||||
/// when used as a standalone item or statement.
|
/// when used as a standalone item or statement.
|
||||||
pub fn need_semicolon(&self) -> bool {
|
pub fn need_semicolon(&self) -> bool {
|
||||||
!matches!(self, DelimArgs { delim: MacDelimiter::Brace, .. })
|
!matches!(self, DelimArgs { delim: Delimiter::Brace, .. })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1717,32 +1717,6 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, PartialEq, Eq, Encodable, Decodable, Debug, HashStable_Generic)]
|
|
||||||
pub enum MacDelimiter {
|
|
||||||
Parenthesis,
|
|
||||||
Bracket,
|
|
||||||
Brace,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl MacDelimiter {
|
|
||||||
pub fn to_token(self) -> Delimiter {
|
|
||||||
match self {
|
|
||||||
MacDelimiter::Parenthesis => Delimiter::Parenthesis,
|
|
||||||
MacDelimiter::Bracket => Delimiter::Bracket,
|
|
||||||
MacDelimiter::Brace => Delimiter::Brace,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn from_token(delim: Delimiter) -> Option<MacDelimiter> {
|
|
||||||
match delim {
|
|
||||||
Delimiter::Parenthesis => Some(MacDelimiter::Parenthesis),
|
|
||||||
Delimiter::Bracket => Some(MacDelimiter::Bracket),
|
|
||||||
Delimiter::Brace => Some(MacDelimiter::Brace),
|
|
||||||
Delimiter::Invisible => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Represents a macro definition.
|
/// Represents a macro definition.
|
||||||
#[derive(Clone, Encodable, Decodable, Debug, HashStable_Generic)]
|
#[derive(Clone, Encodable, Decodable, Debug, HashStable_Generic)]
|
||||||
pub struct MacroDef {
|
pub struct MacroDef {
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
use crate::ast::{AttrArgs, AttrArgsEq, AttrId, AttrItem, AttrKind, AttrStyle, AttrVec, Attribute};
|
use crate::ast::{AttrArgs, AttrArgsEq, AttrId, AttrItem, AttrKind, AttrStyle, AttrVec, Attribute};
|
||||||
use crate::ast::{DelimArgs, Expr, ExprKind, LitKind, MetaItemLit};
|
use crate::ast::{DelimArgs, Expr, ExprKind, LitKind, MetaItemLit};
|
||||||
use crate::ast::{MacDelimiter, MetaItem, MetaItemKind, NestedMetaItem, NormalAttr};
|
use crate::ast::{MetaItem, MetaItemKind, NestedMetaItem, NormalAttr};
|
||||||
use crate::ast::{Path, PathSegment, DUMMY_NODE_ID};
|
use crate::ast::{Path, PathSegment, DUMMY_NODE_ID};
|
||||||
use crate::ptr::P;
|
use crate::ptr::P;
|
||||||
use crate::token::{self, CommentKind, Delimiter, Token};
|
use crate::token::{self, CommentKind, Delimiter, Token};
|
||||||
|
@ -196,7 +196,7 @@ impl AttrItem {
|
||||||
|
|
||||||
fn meta_item_list(&self) -> Option<ThinVec<NestedMetaItem>> {
|
fn meta_item_list(&self) -> Option<ThinVec<NestedMetaItem>> {
|
||||||
match &self.args {
|
match &self.args {
|
||||||
AttrArgs::Delimited(args) if args.delim == MacDelimiter::Parenthesis => {
|
AttrArgs::Delimited(args) if args.delim == Delimiter::Parenthesis => {
|
||||||
MetaItemKind::list_from_tokens(args.tokens.clone())
|
MetaItemKind::list_from_tokens(args.tokens.clone())
|
||||||
}
|
}
|
||||||
AttrArgs::Delimited(_) | AttrArgs::Eq(..) | AttrArgs::Empty => None,
|
AttrArgs::Delimited(_) | AttrArgs::Eq(..) | AttrArgs::Empty => None,
|
||||||
|
@ -402,11 +402,9 @@ impl MetaItemKind {
|
||||||
fn from_attr_args(args: &AttrArgs) -> Option<MetaItemKind> {
|
fn from_attr_args(args: &AttrArgs) -> Option<MetaItemKind> {
|
||||||
match args {
|
match args {
|
||||||
AttrArgs::Empty => Some(MetaItemKind::Word),
|
AttrArgs::Empty => Some(MetaItemKind::Word),
|
||||||
AttrArgs::Delimited(DelimArgs {
|
AttrArgs::Delimited(DelimArgs { dspan: _, delim: Delimiter::Parenthesis, tokens }) => {
|
||||||
dspan: _,
|
MetaItemKind::list_from_tokens(tokens.clone()).map(MetaItemKind::List)
|
||||||
delim: MacDelimiter::Parenthesis,
|
}
|
||||||
tokens,
|
|
||||||
}) => MetaItemKind::list_from_tokens(tokens.clone()).map(MetaItemKind::List),
|
|
||||||
AttrArgs::Delimited(..) => None,
|
AttrArgs::Delimited(..) => None,
|
||||||
AttrArgs::Eq(_, AttrArgsEq::Ast(expr)) => match expr.kind {
|
AttrArgs::Eq(_, AttrArgsEq::Ast(expr)) => match expr.kind {
|
||||||
ExprKind::Lit(token_lit) => {
|
ExprKind::Lit(token_lit) => {
|
||||||
|
@ -578,7 +576,7 @@ pub fn mk_attr_nested_word(
|
||||||
let path = Path::from_ident(outer_ident);
|
let path = Path::from_ident(outer_ident);
|
||||||
let attr_args = AttrArgs::Delimited(DelimArgs {
|
let attr_args = AttrArgs::Delimited(DelimArgs {
|
||||||
dspan: DelimSpan::from_single(span),
|
dspan: DelimSpan::from_single(span),
|
||||||
delim: MacDelimiter::Parenthesis,
|
delim: Delimiter::Parenthesis,
|
||||||
tokens: inner_tokens,
|
tokens: inner_tokens,
|
||||||
});
|
});
|
||||||
mk_attr(g, style, path, attr_args, span)
|
mk_attr(g, style, path, attr_args, span)
|
||||||
|
|
|
@ -476,7 +476,7 @@ pub trait PrintState<'a>: std::ops::Deref<Target = pp::Printer> + std::ops::Dere
|
||||||
Some(MacHeader::Path(&item.path)),
|
Some(MacHeader::Path(&item.path)),
|
||||||
false,
|
false,
|
||||||
None,
|
None,
|
||||||
delim.to_token(),
|
*delim,
|
||||||
tokens,
|
tokens,
|
||||||
true,
|
true,
|
||||||
span,
|
span,
|
||||||
|
@ -640,7 +640,7 @@ pub trait PrintState<'a>: std::ops::Deref<Target = pp::Printer> + std::ops::Dere
|
||||||
Some(MacHeader::Keyword(kw)),
|
Some(MacHeader::Keyword(kw)),
|
||||||
has_bang,
|
has_bang,
|
||||||
Some(*ident),
|
Some(*ident),
|
||||||
macro_def.body.delim.to_token(),
|
macro_def.body.delim,
|
||||||
¯o_def.body.tokens.clone(),
|
¯o_def.body.tokens.clone(),
|
||||||
true,
|
true,
|
||||||
sp,
|
sp,
|
||||||
|
@ -1240,7 +1240,7 @@ impl<'a> State<'a> {
|
||||||
Some(MacHeader::Path(&m.path)),
|
Some(MacHeader::Path(&m.path)),
|
||||||
true,
|
true,
|
||||||
None,
|
None,
|
||||||
m.args.delim.to_token(),
|
m.args.delim,
|
||||||
&m.args.tokens.clone(),
|
&m.args.tokens.clone(),
|
||||||
true,
|
true,
|
||||||
m.span(),
|
m.span(),
|
||||||
|
|
|
@ -4,8 +4,9 @@ use crate::edition_panic::use_panic_2021;
|
||||||
use crate::errors;
|
use crate::errors;
|
||||||
use rustc_ast::ptr::P;
|
use rustc_ast::ptr::P;
|
||||||
use rustc_ast::token;
|
use rustc_ast::token;
|
||||||
|
use rustc_ast::token::Delimiter;
|
||||||
use rustc_ast::tokenstream::{DelimSpan, TokenStream};
|
use rustc_ast::tokenstream::{DelimSpan, TokenStream};
|
||||||
use rustc_ast::{DelimArgs, Expr, ExprKind, MacCall, MacDelimiter, Path, PathSegment, UnOp};
|
use rustc_ast::{DelimArgs, Expr, ExprKind, MacCall, Path, PathSegment, UnOp};
|
||||||
use rustc_ast_pretty::pprust;
|
use rustc_ast_pretty::pprust;
|
||||||
use rustc_errors::PResult;
|
use rustc_errors::PResult;
|
||||||
use rustc_expand::base::{DummyResult, ExtCtxt, MacEager, MacResult};
|
use rustc_expand::base::{DummyResult, ExtCtxt, MacEager, MacResult};
|
||||||
|
@ -58,7 +59,7 @@ pub fn expand_assert<'cx>(
|
||||||
path: panic_path(),
|
path: panic_path(),
|
||||||
args: P(DelimArgs {
|
args: P(DelimArgs {
|
||||||
dspan: DelimSpan::from_single(call_site_span),
|
dspan: DelimSpan::from_single(call_site_span),
|
||||||
delim: MacDelimiter::Parenthesis,
|
delim: Delimiter::Parenthesis,
|
||||||
tokens,
|
tokens,
|
||||||
}),
|
}),
|
||||||
})),
|
})),
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
use rustc_ast::{
|
use rustc_ast::{
|
||||||
ptr::P,
|
ptr::P,
|
||||||
token,
|
token,
|
||||||
|
token::Delimiter,
|
||||||
tokenstream::{DelimSpan, TokenStream, TokenTree},
|
tokenstream::{DelimSpan, TokenStream, TokenTree},
|
||||||
BinOpKind, BorrowKind, DelimArgs, Expr, ExprKind, ItemKind, MacCall, MacDelimiter, MethodCall,
|
BinOpKind, BorrowKind, DelimArgs, Expr, ExprKind, ItemKind, MacCall, MethodCall, Mutability,
|
||||||
Mutability, Path, PathSegment, Stmt, StructRest, UnOp, UseTree, UseTreeKind, DUMMY_NODE_ID,
|
Path, PathSegment, Stmt, StructRest, UnOp, UseTree, UseTreeKind, DUMMY_NODE_ID,
|
||||||
};
|
};
|
||||||
use rustc_ast_pretty::pprust;
|
use rustc_ast_pretty::pprust;
|
||||||
use rustc_data_structures::fx::FxHashSet;
|
use rustc_data_structures::fx::FxHashSet;
|
||||||
|
@ -179,7 +180,7 @@ impl<'cx, 'a> Context<'cx, 'a> {
|
||||||
path: panic_path,
|
path: panic_path,
|
||||||
args: P(DelimArgs {
|
args: P(DelimArgs {
|
||||||
dspan: DelimSpan::from_single(self.span),
|
dspan: DelimSpan::from_single(self.span),
|
||||||
delim: MacDelimiter::Parenthesis,
|
delim: Delimiter::Parenthesis,
|
||||||
tokens: initial.into_iter().chain(captures).collect::<TokenStream>(),
|
tokens: initial.into_iter().chain(captures).collect::<TokenStream>(),
|
||||||
}),
|
}),
|
||||||
})),
|
})),
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
use rustc_ast::ptr::P;
|
use rustc_ast::ptr::P;
|
||||||
|
use rustc_ast::token::Delimiter;
|
||||||
use rustc_ast::tokenstream::{DelimSpan, TokenStream};
|
use rustc_ast::tokenstream::{DelimSpan, TokenStream};
|
||||||
use rustc_ast::*;
|
use rustc_ast::*;
|
||||||
use rustc_expand::base::*;
|
use rustc_expand::base::*;
|
||||||
|
@ -60,7 +61,7 @@ fn expand<'cx>(
|
||||||
},
|
},
|
||||||
args: P(DelimArgs {
|
args: P(DelimArgs {
|
||||||
dspan: DelimSpan::from_single(sp),
|
dspan: DelimSpan::from_single(sp),
|
||||||
delim: MacDelimiter::Parenthesis,
|
delim: Delimiter::Parenthesis,
|
||||||
tokens: tts,
|
tokens: tts,
|
||||||
}),
|
}),
|
||||||
})),
|
})),
|
||||||
|
|
|
@ -2,6 +2,7 @@ use crate::expand::{AstFragment, AstFragmentKind};
|
||||||
use rustc_ast as ast;
|
use rustc_ast as ast;
|
||||||
use rustc_ast::mut_visit::*;
|
use rustc_ast::mut_visit::*;
|
||||||
use rustc_ast::ptr::P;
|
use rustc_ast::ptr::P;
|
||||||
|
use rustc_ast::token::Delimiter;
|
||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::FxHashMap;
|
||||||
use rustc_span::source_map::DUMMY_SP;
|
use rustc_span::source_map::DUMMY_SP;
|
||||||
use rustc_span::symbol::Ident;
|
use rustc_span::symbol::Ident;
|
||||||
|
@ -18,7 +19,7 @@ pub fn placeholder(
|
||||||
path: ast::Path { span: DUMMY_SP, segments: ThinVec::new(), tokens: None },
|
path: ast::Path { span: DUMMY_SP, segments: ThinVec::new(), tokens: None },
|
||||||
args: P(ast::DelimArgs {
|
args: P(ast::DelimArgs {
|
||||||
dspan: ast::tokenstream::DelimSpan::dummy(),
|
dspan: ast::tokenstream::DelimSpan::dummy(),
|
||||||
delim: ast::MacDelimiter::Parenthesis,
|
delim: Delimiter::Parenthesis,
|
||||||
tokens: ast::tokenstream::TokenStream::new(Vec::new()),
|
tokens: ast::tokenstream::TokenStream::new(Vec::new()),
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
|
|
@ -2599,7 +2599,7 @@ impl<'a> Parser<'a> {
|
||||||
|
|
||||||
// Recover from missing expression in `for` loop
|
// Recover from missing expression in `for` loop
|
||||||
if matches!(expr.kind, ExprKind::Block(..))
|
if matches!(expr.kind, ExprKind::Block(..))
|
||||||
&& !matches!(self.token.kind, token::OpenDelim(token::Delimiter::Brace))
|
&& !matches!(self.token.kind, token::OpenDelim(Delimiter::Brace))
|
||||||
&& self.may_recover()
|
&& self.may_recover()
|
||||||
{
|
{
|
||||||
self.sess
|
self.sess
|
||||||
|
|
|
@ -9,12 +9,12 @@ use rustc_ast::ptr::P;
|
||||||
use rustc_ast::token::{self, Delimiter, TokenKind};
|
use rustc_ast::token::{self, Delimiter, TokenKind};
|
||||||
use rustc_ast::tokenstream::{DelimSpan, TokenStream, TokenTree};
|
use rustc_ast::tokenstream::{DelimSpan, TokenStream, TokenTree};
|
||||||
use rustc_ast::util::case::Case;
|
use rustc_ast::util::case::Case;
|
||||||
|
use rustc_ast::MacCall;
|
||||||
use rustc_ast::{self as ast, AttrVec, Attribute, DUMMY_NODE_ID};
|
use rustc_ast::{self as ast, AttrVec, Attribute, DUMMY_NODE_ID};
|
||||||
use rustc_ast::{Async, Const, Defaultness, IsAuto, Mutability, Unsafe, UseTree, UseTreeKind};
|
use rustc_ast::{Async, Const, Defaultness, IsAuto, Mutability, Unsafe, UseTree, UseTreeKind};
|
||||||
use rustc_ast::{BindingAnnotation, Block, FnDecl, FnSig, Param, SelfKind};
|
use rustc_ast::{BindingAnnotation, Block, FnDecl, FnSig, Param, SelfKind};
|
||||||
use rustc_ast::{EnumDef, FieldDef, Generics, TraitRef, Ty, TyKind, Variant, VariantData};
|
use rustc_ast::{EnumDef, FieldDef, Generics, TraitRef, Ty, TyKind, Variant, VariantData};
|
||||||
use rustc_ast::{FnHeader, ForeignItem, Path, PathSegment, Visibility, VisibilityKind};
|
use rustc_ast::{FnHeader, ForeignItem, Path, PathSegment, Visibility, VisibilityKind};
|
||||||
use rustc_ast::{MacCall, MacDelimiter};
|
|
||||||
use rustc_ast_pretty::pprust;
|
use rustc_ast_pretty::pprust;
|
||||||
use rustc_errors::{
|
use rustc_errors::{
|
||||||
struct_span_err, Applicability, DiagnosticBuilder, ErrorGuaranteed, IntoDiagnostic, PResult,
|
struct_span_err, Applicability, DiagnosticBuilder, ErrorGuaranteed, IntoDiagnostic, PResult,
|
||||||
|
@ -1968,7 +1968,7 @@ impl<'a> Parser<'a> {
|
||||||
let arrow = TokenTree::token_alone(token::FatArrow, pspan.between(bspan)); // `=>`
|
let arrow = TokenTree::token_alone(token::FatArrow, pspan.between(bspan)); // `=>`
|
||||||
let tokens = TokenStream::new(vec![params, arrow, body]);
|
let tokens = TokenStream::new(vec![params, arrow, body]);
|
||||||
let dspan = DelimSpan::from_pair(pspan.shrink_to_lo(), bspan.shrink_to_hi());
|
let dspan = DelimSpan::from_pair(pspan.shrink_to_lo(), bspan.shrink_to_hi());
|
||||||
P(DelimArgs { dspan, delim: MacDelimiter::Brace, tokens })
|
P(DelimArgs { dspan, delim: Delimiter::Brace, tokens })
|
||||||
} else {
|
} else {
|
||||||
return self.unexpected();
|
return self.unexpected();
|
||||||
};
|
};
|
||||||
|
|
|
@ -25,7 +25,7 @@ use rustc_ast::util::case::Case;
|
||||||
use rustc_ast::AttrId;
|
use rustc_ast::AttrId;
|
||||||
use rustc_ast::DUMMY_NODE_ID;
|
use rustc_ast::DUMMY_NODE_ID;
|
||||||
use rustc_ast::{self as ast, AnonConst, Const, DelimArgs, Extern};
|
use rustc_ast::{self as ast, AnonConst, Const, DelimArgs, Extern};
|
||||||
use rustc_ast::{Async, AttrArgs, AttrArgsEq, Expr, ExprKind, MacDelimiter, Mutability, StrLit};
|
use rustc_ast::{Async, AttrArgs, AttrArgsEq, Expr, ExprKind, Mutability, StrLit};
|
||||||
use rustc_ast::{HasAttrs, HasTokens, Unsafe, Visibility, VisibilityKind};
|
use rustc_ast::{HasAttrs, HasTokens, Unsafe, Visibility, VisibilityKind};
|
||||||
use rustc_ast_pretty::pprust;
|
use rustc_ast_pretty::pprust;
|
||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::FxHashMap;
|
||||||
|
@ -1216,12 +1216,10 @@ impl<'a> Parser<'a> {
|
||||||
|| self.check(&token::OpenDelim(Delimiter::Brace));
|
|| self.check(&token::OpenDelim(Delimiter::Brace));
|
||||||
|
|
||||||
delimited.then(|| {
|
delimited.then(|| {
|
||||||
// We've confirmed above that there is a delimiter so unwrapping is OK.
|
|
||||||
let TokenTree::Delimited(dspan, delim, tokens) = self.parse_token_tree() else {
|
let TokenTree::Delimited(dspan, delim, tokens) = self.parse_token_tree() else {
|
||||||
unreachable!()
|
unreachable!()
|
||||||
};
|
};
|
||||||
|
DelimArgs { dspan, delim, tokens }
|
||||||
DelimArgs { dspan, delim: MacDelimiter::from_token(delim).unwrap(), tokens }
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -193,10 +193,9 @@ impl<'a> Parser<'a> {
|
||||||
/// At this point, the `!` token after the path has already been eaten.
|
/// At this point, the `!` token after the path has already been eaten.
|
||||||
fn parse_stmt_mac(&mut self, lo: Span, attrs: AttrVec, path: ast::Path) -> PResult<'a, Stmt> {
|
fn parse_stmt_mac(&mut self, lo: Span, attrs: AttrVec, path: ast::Path) -> PResult<'a, Stmt> {
|
||||||
let args = self.parse_delim_args()?;
|
let args = self.parse_delim_args()?;
|
||||||
let delim = args.delim.to_token();
|
|
||||||
let hi = self.prev_token.span;
|
let hi = self.prev_token.span;
|
||||||
|
|
||||||
let style = match delim {
|
let style = match args.delim {
|
||||||
Delimiter::Brace => MacStmtStyle::Braces,
|
Delimiter::Brace => MacStmtStyle::Braces,
|
||||||
_ => MacStmtStyle::NoBraces,
|
_ => MacStmtStyle::NoBraces,
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,9 +2,10 @@
|
||||||
|
|
||||||
use crate::{errors, parse_in};
|
use crate::{errors, parse_in};
|
||||||
|
|
||||||
|
use rustc_ast::token::Delimiter;
|
||||||
use rustc_ast::tokenstream::DelimSpan;
|
use rustc_ast::tokenstream::DelimSpan;
|
||||||
use rustc_ast::MetaItemKind;
|
use rustc_ast::MetaItemKind;
|
||||||
use rustc_ast::{self as ast, AttrArgs, AttrArgsEq, Attribute, DelimArgs, MacDelimiter, MetaItem};
|
use rustc_ast::{self as ast, AttrArgs, AttrArgsEq, Attribute, DelimArgs, MetaItem};
|
||||||
use rustc_ast_pretty::pprust;
|
use rustc_ast_pretty::pprust;
|
||||||
use rustc_errors::{Applicability, FatalError, PResult};
|
use rustc_errors::{Applicability, FatalError, PResult};
|
||||||
use rustc_feature::{AttributeTemplate, BuiltinAttribute, BUILTIN_ATTRIBUTE_MAP};
|
use rustc_feature::{AttributeTemplate, BuiltinAttribute, BUILTIN_ATTRIBUTE_MAP};
|
||||||
|
@ -84,8 +85,8 @@ pub fn parse_meta<'a>(sess: &'a ParseSess, attr: &Attribute) -> PResult<'a, Meta
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn check_meta_bad_delim(sess: &ParseSess, span: DelimSpan, delim: MacDelimiter) {
|
pub fn check_meta_bad_delim(sess: &ParseSess, span: DelimSpan, delim: Delimiter) {
|
||||||
if let ast::MacDelimiter::Parenthesis = delim {
|
if let Delimiter::Parenthesis = delim {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sess.emit_err(errors::MetaBadDelim {
|
sess.emit_err(errors::MetaBadDelim {
|
||||||
|
@ -94,8 +95,8 @@ pub fn check_meta_bad_delim(sess: &ParseSess, span: DelimSpan, delim: MacDelimit
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn check_cfg_attr_bad_delim(sess: &ParseSess, span: DelimSpan, delim: MacDelimiter) {
|
pub fn check_cfg_attr_bad_delim(sess: &ParseSess, span: DelimSpan, delim: Delimiter) {
|
||||||
if let ast::MacDelimiter::Parenthesis = delim {
|
if let Delimiter::Parenthesis = delim {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sess.emit_err(errors::CfgAttrBadDelim {
|
sess.emit_err(errors::CfgAttrBadDelim {
|
||||||
|
|
|
@ -1382,12 +1382,8 @@ pub(crate) fn can_be_overflowed_expr(
|
||||||
|| (context.use_block_indent() && args_len == 1)
|
|| (context.use_block_indent() && args_len == 1)
|
||||||
}
|
}
|
||||||
ast::ExprKind::MacCall(ref mac) => {
|
ast::ExprKind::MacCall(ref mac) => {
|
||||||
match (
|
match (mac.args.delim, context.config.overflow_delimited_expr()) {
|
||||||
rustc_ast::ast::MacDelimiter::from_token(mac.args.delim.to_token()),
|
(Delimiter::Bracket, true) | (Delimiter::Brace, true) => true,
|
||||||
context.config.overflow_delimited_expr(),
|
|
||||||
) {
|
|
||||||
(Some(ast::MacDelimiter::Bracket), true)
|
|
||||||
| (Some(ast::MacDelimiter::Brace), true) => true,
|
|
||||||
_ => context.use_block_indent() && args_len == 1,
|
_ => context.use_block_indent() && args_len == 1,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue