mogglo 0.1.0

Multi-language AST-based code search and rewriting
Documentation
use std::collections::{HashMap, HashSet};

use tree_sitter::Node;

#[derive(Clone, Debug, Eq, Hash, PartialEq)]
pub struct Metavar(pub(crate) String);

#[derive(Clone, Debug, Default, Eq, PartialEq)]
pub struct Env<'tree>(pub(crate) HashMap<Metavar, HashSet<Node<'tree>>>);

impl<'tree> Env<'tree> {
    pub fn extend(&mut self, env: Env<'tree>) {
        for (mvar, bindings) in env.0 {
            self.0
                .entry(mvar)
                .or_insert_with(HashSet::new)
                .extend(bindings);
        }
    }

    pub fn insert(&mut self, mvar: Metavar, node: Node<'tree>) {
        self.0.entry(mvar).or_insert_with(HashSet::new).insert(node);
    }
}