use super::*;
use crate::project::collect_link_literals;
pub fn compute_document_links(
text: &str,
base_dir: Option<&Path>,
file_size_limit: u64,
) -> Vec<DocumentLink> {
if text.len() as u64 > file_size_limit {
return Vec::new();
}
let root = parse(text).cst;
let line_index = LineIndex::new(text);
collect_link_literals(&root)
.into_iter()
.filter_map(|literal| {
let target_path = match base_dir {
Some(dir) if literal.was_relative => dir.join(&literal.spelling),
_ => PathBuf::from(&literal.spelling),
};
if !target_path.is_file() {
return None;
}
let target = uri::from_path(&target_path)?;
Some(DocumentLink {
range: text_range_to_lsp_range(&line_index, literal.literal_range),
target: Some(target),
tooltip: None,
data: None,
})
})
.collect()
}