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.rs27
1 files changed, 18 insertions, 9 deletions
diff --git a/support/texlab/src/syntax/latex/analysis/implicit_link.rs b/support/texlab/src/syntax/latex/analysis/implicit_link.rs
index 74055b3e31..bba3acfb80 100644
--- a/support/texlab/src/syntax/latex/analysis/implicit_link.rs
+++ b/support/texlab/src/syntax/latex/analysis/implicit_link.rs
@@ -1,6 +1,6 @@
use std::sync::Arc;
-use crate::Uri;
+use lsp_types::Url;
use super::LatexAnalyzerContext;
@@ -10,32 +10,41 @@ pub fn analyze_implicit_links(context: &mut LatexAnalyzerContext) {
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)?));
+fn find_by_extension(context: &LatexAnalyzerContext, extension: &str) -> Option<Vec<Arc<Url>>> {
+ let mut targets = vec![Arc::new(with_extension(&context.document_uri, 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();
+ let options = &context.environment.options;
if let Some(root_dir) = options.root_directory.as_ref() {
let path = context
- .inner
+ .environment
.current_directory
.join(root_dir)
.join(&aux_name);
- targets.push(Arc::new(Uri::from_file_path(path).ok()?));
+ targets.push(Arc::new(Url::from_file_path(path).ok()?));
}
if let Some(build_dir) = options.aux_directory.as_ref() {
let path = context
- .inner
+ .environment
.current_directory
.join(build_dir)
.join(&aux_name);
- targets.push(Arc::new(Uri::from_file_path(path).ok()?));
+ targets.push(Arc::new(Url::from_file_path(path).ok()?));
}
}
Some(targets)
}
+
+fn with_extension(uri: &Url, extension: &str) -> Option<Url> {
+ let file_name = uri.path_segments()?.last()?;
+ let file_stem = file_name
+ .rfind('.')
+ .map(|i| &file_name[..i])
+ .unwrap_or(file_name);
+
+ uri.join(&format!("{}.{}", file_stem, extension)).ok()
+}