use std::path::Path;
use std::path::PathBuf;
use mago_database::file::FileId;
use tower_lsp::lsp_types::InitializeParams;
use tower_lsp::lsp_types::Url;
#[must_use]
pub fn workspace_root(params: &InitializeParams) -> Option<PathBuf> {
if let Some(folders) = ¶ms.workspace_folders
&& let Some(first) = folders.first()
&& let Ok(path) = first.uri.to_file_path()
{
return Some(path);
}
#[allow(deprecated)]
if let Some(uri) = ¶ms.root_uri
&& let Ok(path) = uri.to_file_path()
{
return Some(path);
}
#[allow(deprecated)]
if let Some(root) = ¶ms.root_path {
return Some(PathBuf::from(root));
}
None
}
#[must_use]
pub fn logical_name_for(workspace: &Path, path: &Path) -> String {
path.strip_prefix(workspace).unwrap_or(path).to_string_lossy().into_owned()
}
#[must_use]
pub fn file_id_for(workspace: &Path, path: &Path) -> FileId {
FileId::new(&logical_name_for(workspace, path))
}
#[allow(dead_code)]
pub fn url_for_path(path: &Path) -> Option<Url> {
Url::from_file_path(path).ok()
}