use std::path::{Path, PathBuf};
mod cargo;
mod go;
mod js;
#[cfg(test)]
mod tests;
#[derive(Debug, Clone)]
pub struct WorkspacePackage {
pub name: String,
pub root: PathBuf,
}
pub fn detect_workspace_packages(root: &Path) -> Vec<WorkspacePackage> {
let npm = js::from_npm_workspaces(root);
if !npm.is_empty() {
return npm;
}
let pnpm = js::from_pnpm_workspaces(root);
if !pnpm.is_empty() {
return pnpm;
}
let cargo = cargo::from_cargo_workspace(root);
if !cargo.is_empty() {
return cargo;
}
go::from_go_workspace(root)
}
pub(super) fn child_dirs(path: &Path) -> Vec<PathBuf> {
let Ok(entries) = std::fs::read_dir(path) else {
return Vec::new();
};
entries
.filter_map(Result::ok)
.map(|e| e.path())
.filter(|p| p.is_dir())
.collect()
}