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