You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: cargo_plan.rs
    path of file: ./repos/rls/rls/src/build
    
    the code of the file until where you have to start completion: //! This contains a build plan that is created during the Cargo build routine
//! and stored afterwards, which can be later queried, given a list of dirty
//! files, to retrieve a queue of compiler calls to be invoked (including
//! appropriate arguments and env variables).
//! The underlying structure is a dependency graph between simplified units
//! (package id and crate target kind), as opposed to Cargo units (package with
//! a target info, including crate target kind, profile and host/target kind).
//! This will be used for a quick check recompilation and does not aim to
//! reimplement all the intricacies of Cargo.
//! The unit dependency graph in Cargo also distinguishes between compiling the
//! build script and running it and collecti
    
    fn add<T: Into<Self::Unit>>(&mut self, unit: T, deps: Vec<T>) {
        let unit = unit.into();
        // Units can depend on others with different `Target`s or `Profile`s
        // (e.g., different `run_custom_build`) despite having the same `UnitKey`.
        // We coalesce them here while creating the `UnitKey` dep graph.
        // TODO: Are we sure? Can we figure that out?
        let deps = deps.into_iter().map(|d| d.into()).filter(|dep| unit.key() != dep.key());

        for dep in deps {
            self.dep_graph.entry(unit.key()).or_insert_with(HashSet::new).insert(dep.key());
            self.rev_dep_graph.entry(dep.key()).or_insert_with(HashSet::new).insert(unit.key());

            self.units.entry(dep.key()).or_insert(dep);
        }

        // We expect these entries to be present for each unit in the graph.
        self.dep_graph.entry(unit.key()).or_insert_with(HashSet::new);
        self.rev_dep_graph.entry(unit.key()).or_insert_with(HashSet::new);

        self.units.entry(unit.key()).or_insert(unit);
    }