summaryrefslogtreecommitdiff
path: root/support/texlab/src/features/reference/label.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/src/features/reference/label.rs')
-rw-r--r--support/texlab/src/features/reference/label.rs55
1 files changed, 31 insertions, 24 deletions
diff --git a/support/texlab/src/features/reference/label.rs b/support/texlab/src/features/reference/label.rs
index 45c6b90137..2fc3efc398 100644
--- a/support/texlab/src/features/reference/label.rs
+++ b/support/texlab/src/features/reference/label.rs
@@ -1,22 +1,17 @@
-use cancellation::CancellationToken;
use lsp_types::{Location, ReferenceParams};
use crate::{features::cursor::CursorContext, LineIndexExt};
pub fn find_label_references(
context: &CursorContext<ReferenceParams>,
- cancellation_token: &CancellationToken,
references: &mut Vec<Location>,
) -> Option<()> {
- cancellation_token.result().ok()?;
-
let (name_text, _) = context
.find_label_name_key()
.or_else(|| context.find_label_name_command())?;
- for document in &context.request.subset.documents {
+ for document in context.request.workspace.documents_by_uri.values() {
if let Some(data) = document.data.as_latex() {
- cancellation_token.result().ok()?;
for name in data
.extras
.label_names
@@ -27,7 +22,7 @@ pub fn find_label_references(
})
{
references.push(Location::new(
- document.uri.as_ref().clone().into(),
+ document.uri.as_ref().clone(),
document.line_index.line_col_lsp_range(name.range),
));
}
@@ -45,6 +40,14 @@ mod tests {
use super::*;
+ fn sort_references(actual_references: &mut [Location]) {
+ actual_references.sort_by(|a, b| {
+ a.uri
+ .cmp(&b.uri)
+ .then_with(|| a.range.start.cmp(&b.range.start))
+ });
+ }
+
#[test]
fn test_definition() {
let tester = FeatureTester::builder()
@@ -61,10 +64,11 @@ mod tests {
let request = tester.reference();
let context = CursorContext::new(request);
- find_label_references(&context, CancellationToken::none(), &mut actual_references);
+ find_label_references(&context, &mut actual_references);
+ sort_references(&mut actual_references);
let expected_references = vec![Location::new(
- uri.as_ref().clone().into(),
+ uri.as_ref().clone(),
Range::new_simple(0, 5, 0, 8),
)];
assert_eq!(actual_references, expected_references);
@@ -82,17 +86,18 @@ mod tests {
.character(9)
.include_declaration(true)
.build();
- let uri1 = tester.uri("foo.tex");
- let uri2 = tester.uri("bar.tex");
+ let uri1 = tester.uri("bar.tex");
+ let uri2 = tester.uri("foo.tex");
let mut actual_references = Vec::new();
let request = tester.reference();
let context = CursorContext::new(request);
- find_label_references(&context, CancellationToken::none(), &mut actual_references);
+ find_label_references(&context, &mut actual_references);
+ sort_references(&mut actual_references);
let expected_references = vec![
- Location::new(uri1.as_ref().clone().into(), Range::new_simple(0, 7, 0, 10)),
- Location::new(uri2.as_ref().clone().into(), Range::new_simple(0, 5, 0, 8)),
+ Location::new(uri1.as_ref().clone(), Range::new_simple(0, 5, 0, 8)),
+ Location::new(uri2.as_ref().clone(), Range::new_simple(0, 7, 0, 10)),
];
assert_eq!(actual_references, expected_references);
}
@@ -115,11 +120,12 @@ mod tests {
let request = tester.reference();
let context = CursorContext::new(request);
- find_label_references(&context, CancellationToken::none(), &mut actual_references);
+ find_label_references(&context, &mut actual_references);
+ sort_references(&mut actual_references);
let expected_references = vec![
- Location::new(uri1.as_ref().clone().into(), Range::new_simple(0, 5, 0, 8)),
- Location::new(uri2.as_ref().clone().into(), Range::new_simple(0, 5, 0, 8)),
+ Location::new(uri1.as_ref().clone(), Range::new_simple(0, 5, 0, 8)),
+ Location::new(uri2.as_ref().clone(), Range::new_simple(0, 5, 0, 8)),
];
assert_eq!(actual_references, expected_references);
}
@@ -136,17 +142,18 @@ mod tests {
.character(7)
.include_declaration(true)
.build();
- let uri1 = tester.uri("foo.tex");
- let uri2 = tester.uri("bar.tex");
+ let uri1 = tester.uri("bar.tex");
+ let uri2 = tester.uri("foo.tex");
let mut actual_references = Vec::new();
let request = tester.reference();
let context = CursorContext::new(request);
- find_label_references(&context, CancellationToken::none(), &mut actual_references);
+ find_label_references(&context, &mut actual_references);
+ sort_references(&mut actual_references);
let expected_references = vec![
- Location::new(uri2.as_ref().clone().into(), Range::new_simple(0, 5, 0, 8)),
- Location::new(uri1.as_ref().clone().into(), Range::new_simple(0, 7, 0, 10)),
+ Location::new(uri1.as_ref().clone(), Range::new_simple(0, 5, 0, 8)),
+ Location::new(uri2.as_ref().clone(), Range::new_simple(0, 7, 0, 10)),
];
assert_eq!(actual_references, expected_references);
}
@@ -163,7 +170,7 @@ mod tests {
let mut actual_references = Vec::new();
let context = CursorContext::new(request);
- find_label_references(&context, CancellationToken::none(), &mut actual_references);
+ find_label_references(&context, &mut actual_references);
assert!(actual_references.is_empty());
}
@@ -180,7 +187,7 @@ mod tests {
let mut actual_references = Vec::new();
let context = CursorContext::new(request);
- find_label_references(&context, CancellationToken::none(), &mut actual_references);
+ find_label_references(&context, &mut actual_references);
assert!(actual_references.is_empty());
}