summaryrefslogtreecommitdiff
path: root/support/texlab/src/syntax/latex/analysis/implicit_link.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/src/syntax/latex/analysis/implicit_link.rs')
-rw-r--r--support/texlab/src/syntax/latex/analysis/implicit_link.rs40
1 files changed, 27 insertions, 13 deletions
diff --git a/support/texlab/src/syntax/latex/analysis/implicit_link.rs b/support/texlab/src/syntax/latex/analysis/implicit_link.rs
index bba3acfb80..60524c623e 100644
--- a/support/texlab/src/syntax/latex/analysis/implicit_link.rs
+++ b/support/texlab/src/syntax/latex/analysis/implicit_link.rs
@@ -1,4 +1,4 @@
-use std::sync::Arc;
+use std::{path::Path, sync::Arc};
use lsp_types::Url;
@@ -19,26 +19,40 @@ fn find_by_extension(context: &LatexAnalyzerContext, extension: &str) -> Option<
let options = &context.environment.options;
if let Some(root_dir) = options.root_directory.as_ref() {
- let path = context
- .environment
- .current_directory
- .join(root_dir)
- .join(&aux_name);
- targets.push(Arc::new(Url::from_file_path(path).ok()?));
+ find_inside_directory(context, root_dir, &aux_name, &mut targets)?;
}
if let Some(build_dir) = options.aux_directory.as_ref() {
- let path = context
- .environment
- .current_directory
- .join(build_dir)
- .join(&aux_name);
- targets.push(Arc::new(Url::from_file_path(path).ok()?));
+ find_inside_directory(context, build_dir, &aux_name, &mut targets)?;
}
}
Some(targets)
}
+fn find_inside_directory(
+ context: &LatexAnalyzerContext,
+ dir: &Path,
+ aux_name: &str,
+ targets: &mut Vec<Arc<Url>>,
+) -> Option<()> {
+ let path = context
+ .environment
+ .current_directory
+ .join(dir)
+ .join(aux_name);
+
+ targets.push(Arc::new(Url::from_file_path(path).ok()?));
+
+ targets.push(Arc::new(
+ context
+ .base_uri
+ .join(&dir.join(aux_name).to_string_lossy())
+ .ok()?,
+ ));
+
+ Some(())
+}
+
fn with_extension(uri: &Url, extension: &str) -> Option<Url> {
let file_name = uri.path_segments()?.last()?;
let file_stem = file_name