diff options
Diffstat (limited to 'support/texlab/src/features/reference/label.rs')
-rw-r--r-- | support/texlab/src/features/reference/label.rs | 55 |
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()); } |