use std::path::Path;
use harn_parser::TypeChecker;
pub(crate) fn checker_with_resolved_imports(checker: TypeChecker, path: &Path) -> TypeChecker {
let graph = harn_modules::build(&[path.to_path_buf()]);
checker_with_resolved_graph(checker, path, &graph)
}
pub(crate) fn checker_with_resolved_graph(
checker: TypeChecker,
path: &Path,
graph: &harn_modules::ModuleGraph,
) -> TypeChecker {
checker_with_graph(checker, path, graph)
}
pub(crate) fn checker_with_standalone_imports(
checker: TypeChecker,
path: &Path,
source: &str,
) -> TypeChecker {
let graph = harn_modules::build_with_standalone_source(path, source);
checker_with_graph(checker, path, &graph)
}
fn checker_with_graph(
mut checker: TypeChecker,
path: &Path,
graph: &harn_modules::ModuleGraph,
) -> TypeChecker {
if let Some(imported) = graph.imported_names_for_file(path) {
checker = checker.with_imported_names(imported);
}
if let Some(imported) = graph.imported_type_declarations_for_file(path) {
checker = checker.with_imported_type_decls(imported);
}
if let Some(imported) = graph.imported_callable_declarations_for_file(path) {
checker = checker.with_imported_callable_decls(imported);
}
checker
}