Implment #[cfg]
and #[cfg_attr]
in where
clauses
This commit is contained in:
parent
30508faeb3
commit
42f51d4fd4
38 changed files with 3296 additions and 88 deletions
|
@ -417,9 +417,11 @@ impl WhereClause {
|
|||
/// A single predicate in a where-clause.
|
||||
#[derive(Clone, Encodable, Decodable, Debug)]
|
||||
pub struct WherePredicate {
|
||||
pub attrs: AttrVec,
|
||||
pub kind: WherePredicateKind,
|
||||
pub id: NodeId,
|
||||
pub span: Span,
|
||||
pub is_placeholder: bool,
|
||||
}
|
||||
|
||||
/// Predicate kind in where-clause.
|
||||
|
|
|
@ -11,7 +11,7 @@ use crate::tokenstream::LazyAttrTokenStream;
|
|||
use crate::{
|
||||
Arm, AssocItem, AttrItem, AttrKind, AttrVec, Attribute, Block, Crate, Expr, ExprField,
|
||||
FieldDef, ForeignItem, GenericParam, Item, NodeId, Param, Pat, PatField, Path, Stmt, StmtKind,
|
||||
Ty, Variant, Visibility,
|
||||
Ty, Variant, Visibility, WherePredicate,
|
||||
};
|
||||
|
||||
/// A utility trait to reduce boilerplate.
|
||||
|
@ -79,6 +79,7 @@ impl_has_node_id!(
|
|||
Stmt,
|
||||
Ty,
|
||||
Variant,
|
||||
WherePredicate,
|
||||
);
|
||||
|
||||
impl<T: AstDeref<Target: HasNodeId>> HasNodeId for T {
|
||||
|
@ -127,7 +128,16 @@ macro_rules! impl_has_tokens_none {
|
|||
}
|
||||
|
||||
impl_has_tokens!(AssocItem, AttrItem, Block, Expr, ForeignItem, Item, Pat, Path, Ty, Visibility);
|
||||
impl_has_tokens_none!(Arm, ExprField, FieldDef, GenericParam, Param, PatField, Variant);
|
||||
impl_has_tokens_none!(
|
||||
Arm,
|
||||
ExprField,
|
||||
FieldDef,
|
||||
GenericParam,
|
||||
Param,
|
||||
PatField,
|
||||
Variant,
|
||||
WherePredicate
|
||||
);
|
||||
|
||||
impl<T: AstDeref<Target: HasTokens>> HasTokens for T {
|
||||
fn tokens(&self) -> Option<&LazyAttrTokenStream> {
|
||||
|
@ -279,6 +289,7 @@ impl_has_attrs!(
|
|||
Param,
|
||||
PatField,
|
||||
Variant,
|
||||
WherePredicate,
|
||||
);
|
||||
impl_has_attrs_none!(Attribute, AttrItem, Block, Pat, Path, Ty, Visibility);
|
||||
|
||||
|
|
|
@ -338,8 +338,11 @@ pub trait MutVisitor: Sized {
|
|||
walk_where_clause(self, where_clause);
|
||||
}
|
||||
|
||||
fn visit_where_predicate(&mut self, where_predicate: &mut WherePredicate) {
|
||||
walk_where_predicate(self, where_predicate)
|
||||
fn flat_map_where_predicate(
|
||||
&mut self,
|
||||
where_predicate: WherePredicate,
|
||||
) -> SmallVec<[WherePredicate; 1]> {
|
||||
walk_flat_map_where_predicate(self, where_predicate)
|
||||
}
|
||||
|
||||
fn visit_where_predicate_kind(&mut self, kind: &mut WherePredicateKind) {
|
||||
|
@ -1097,15 +1100,20 @@ fn walk_ty_alias_where_clauses<T: MutVisitor>(vis: &mut T, tawcs: &mut TyAliasWh
|
|||
|
||||
fn walk_where_clause<T: MutVisitor>(vis: &mut T, wc: &mut WhereClause) {
|
||||
let WhereClause { has_where_token: _, predicates, span } = wc;
|
||||
visit_thin_vec(predicates, |predicate| vis.visit_where_predicate(predicate));
|
||||
predicates.flat_map_in_place(|predicate| vis.flat_map_where_predicate(predicate));
|
||||
vis.visit_span(span);
|
||||
}
|
||||
|
||||
pub fn walk_where_predicate<T: MutVisitor>(vis: &mut T, pred: &mut WherePredicate) {
|
||||
let WherePredicate { kind, id, span } = pred;
|
||||
pub fn walk_flat_map_where_predicate<T: MutVisitor>(
|
||||
vis: &mut T,
|
||||
mut pred: WherePredicate,
|
||||
) -> SmallVec<[WherePredicate; 1]> {
|
||||
let WherePredicate { attrs, kind, id, span, is_placeholder: _ } = &mut pred;
|
||||
vis.visit_id(id);
|
||||
visit_attrs(vis, attrs);
|
||||
vis.visit_where_predicate_kind(kind);
|
||||
vis.visit_span(span);
|
||||
smallvec![pred]
|
||||
}
|
||||
|
||||
pub fn walk_where_predicate_kind<T: MutVisitor>(vis: &mut T, kind: &mut WherePredicateKind) {
|
||||
|
|
|
@ -833,7 +833,8 @@ pub fn walk_where_predicate<'a, V: Visitor<'a>>(
|
|||
visitor: &mut V,
|
||||
predicate: &'a WherePredicate,
|
||||
) -> V::Result {
|
||||
let WherePredicate { kind, id: _, span: _ } = predicate;
|
||||
let WherePredicate { attrs, kind, id: _, span: _, is_placeholder: _ } = predicate;
|
||||
walk_list!(visitor, visit_attribute, attrs);
|
||||
visitor.visit_where_predicate_kind(kind)
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue