analyzed-ra-ide 0.4.1

Patched ra_ap_ide bridge crate for analyzed
Documentation
use std::{any::Any, fmt, panic::RefUnwindSafe, sync::Arc};

use ide_db::{FileId, RootDatabase, base_db::Crate};
use rustc_hash::FxHashSet;

use crate::{Analysis, AnalysisHost};

pub(crate) struct AnalysisGuard {
    _guard: Box<dyn Any + Send + Sync + RefUnwindSafe>,
}

impl fmt::Debug for AnalysisGuard {
    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
        formatter.write_str("AnalysisGuard")
    }
}

impl Analysis {
    pub fn with_guard(
        mut self,
        guard: impl Any + Send + Sync + RefUnwindSafe + 'static,
    ) -> Analysis {
        self.guard = Some(AnalysisGuard { _guard: Box::new(guard) });
        self
    }
}

impl AnalysisHost {
    pub fn analysis_with_visible_files(
        &self,
        visible_files: Arc<FxHashSet<FileId>>,
    ) -> Analysis {
        Analysis {
            db: self.db.clone().with_visible_files(visible_files),
            guard: None,
        }
    }
}

pub(crate) fn all_crates(db: &RootDatabase) -> Vec<Crate> {
    db.visible_base_crates(ide_db::base_db::all_crates(db).iter().copied())
}