use crate::rule_finder::StartMatch;
use rustc::hir::{self, HirId};
use std::collections::HashMap;
use std::vec::Vec;
use syntax::symbol::Symbol;
#[derive(Debug)]
pub(crate) struct Rule<'tcx, T: StartMatch> {
pub(crate) search: &'tcx T,
pub(crate) replace: &'tcx T,
pub(crate) body_id: hir::BodyId,
pub(crate) placeholder_ids: Vec<HirId>,
pub(crate) declared_name_hir_ids: HashMap<Symbol, HirId>,
}
#[derive(Debug)]
pub(crate) struct Rules<'tcx> {
pub(crate) expr_rules: Vec<Rule<'tcx, hir::Expr>>,
pub(crate) pattern_rules: Vec<Rule<'tcx, hir::Pat>>,
pub(crate) type_rules: Vec<Rule<'tcx, hir::Ty>>,
pub(crate) trait_ref_rules: Vec<Rule<'tcx, hir::TraitRef>>,
}
impl<'tcx> Rules<'tcx> {
pub(crate) fn new() -> Rules<'tcx> {
Rules {
expr_rules: Vec::new(),
pattern_rules: Vec::new(),
type_rules: Vec::new(),
trait_ref_rules: Vec::new(),
}
}
pub(crate) fn len(&self) -> usize {
self.expr_rules.len()
+ self.pattern_rules.len()
+ self.type_rules.len()
+ self.trait_ref_rules.len()
}
}