use ruff_db::files::File;
use ruff_python_ast::PythonVersion;
use crate::{Db, ModuleResolveMode, SearchPaths, search_paths};
#[salsa::interned(debug, heap_size = ruff_memory_usage::heap_size)]
pub struct ResolverEnvironment<'db> {
#[returns(copy)]
pub python_version: PythonVersion,
#[returns(ref)]
pub search_paths: SearchPaths,
}
impl get_size2::GetSize for ResolverEnvironment<'_> {}
impl<'db> ResolverEnvironment<'db> {
pub fn display_search_paths(
self,
db: &'db dyn Db,
mode: ModuleResolveMode,
) -> impl std::fmt::Display {
std::fmt::from_fn(move |f| {
let mut paths = search_paths(db, self, mode).peekable();
if paths.peek().is_none() {
return f.write_str("[]");
}
writeln!(f, "[")?;
for path in paths {
writeln!(f, " {path},")?;
}
f.write_str("]")
})
}
}
#[salsa::interned(debug, heap_size = ruff_memory_usage::heap_size)]
pub struct ResolverFile<'db> {
#[returns(copy)]
pub file: File,
#[returns(copy)]
pub environment: ResolverEnvironment<'db>,
}
impl get_size2::GetSize for ResolverFile<'_> {}