pub(crate) mod python;
pub(crate) mod rust_lang;
pub(crate) mod typescript;
use std::path::Path;
pub(crate) fn find_project_root(dir: &Path) -> std::path::PathBuf {
let markers = ["tsconfig.json", "package.json", "Cargo.toml", "pyproject.toml", ".git"];
let abs_dir = dir.canonicalize().unwrap_or_else(|_| dir.to_path_buf());
let mut current = abs_dir.as_path();
loop {
for marker in &markers {
if current.join(marker).exists() {
return current.to_path_buf();
}
}
match current.parent() {
Some(parent) if parent != current => current = parent,
_ => break,
}
}
abs_dir
}
pub(crate) fn find_call_position(line: &str, callee_name: &str) -> Option<usize> {
let pattern = format!("{}(", callee_name);
if let Some(pos) = line.find(&pattern) {
return Some(pos);
}
let dot_pattern = format!(".{}(", callee_name);
if let Some(pos) = line.find(&dot_pattern) {
return Some(pos + 1);
}
None
}