diff options
Diffstat (limited to 'support/texlab/src/syntax/latex/analysis/implicit_link.rs')
-rw-r--r-- | support/texlab/src/syntax/latex/analysis/implicit_link.rs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/support/texlab/src/syntax/latex/analysis/implicit_link.rs b/support/texlab/src/syntax/latex/analysis/implicit_link.rs new file mode 100644 index 0000000000..74055b3e31 --- /dev/null +++ b/support/texlab/src/syntax/latex/analysis/implicit_link.rs @@ -0,0 +1,41 @@ +use std::sync::Arc; + +use crate::Uri; + +use super::LatexAnalyzerContext; + +pub fn analyze_implicit_links(context: &mut LatexAnalyzerContext) { + context.extras.implicit_links.aux = find_by_extension(context, "aux").unwrap_or_default(); + context.extras.implicit_links.log = find_by_extension(context, "log").unwrap_or_default(); + context.extras.implicit_links.pdf = find_by_extension(context, "pdf").unwrap_or_default(); +} + +fn find_by_extension(context: &LatexAnalyzerContext, extension: &str) -> Option<Vec<Arc<Uri>>> { + let mut targets: Vec<Arc<Uri>> = Vec::new(); + targets.push(Arc::new(context.document_uri.with_extension(extension)?)); + if context.document_uri.scheme() == "file" { + let file_path = context.document_uri.to_file_path().ok()?; + let file_stem = file_path.file_stem()?; + let aux_name = format!("{}.{}", file_stem.to_str()?, extension); + + let options = context.inner.options.read().unwrap(); + if let Some(root_dir) = options.root_directory.as_ref() { + let path = context + .inner + .current_directory + .join(root_dir) + .join(&aux_name); + targets.push(Arc::new(Uri::from_file_path(path).ok()?)); + } + + if let Some(build_dir) = options.aux_directory.as_ref() { + let path = context + .inner + .current_directory + .join(build_dir) + .join(&aux_name); + targets.push(Arc::new(Uri::from_file_path(path).ok()?)); + } + } + Some(targets) +} |