summaryrefslogtreecommitdiff
path: root/support/texlab/src/features/completion/argument.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/src/features/completion/argument.rs')
-rw-r--r--support/texlab/src/features/completion/argument.rs40
1 files changed, 19 insertions, 21 deletions
diff --git a/support/texlab/src/features/completion/argument.rs b/support/texlab/src/features/completion/argument.rs
index e2637e026f..ded16b359e 100644
--- a/support/texlab/src/features/completion/argument.rs
+++ b/support/texlab/src/features/completion/argument.rs
@@ -1,22 +1,14 @@
-use cancellation::CancellationToken;
-use cstree::TextRange;
use lsp_types::CompletionParams;
+use rowan::{ast::AstNode, TextRange};
-use crate::{
- component_db::COMPONENT_DATABASE,
- features::cursor::CursorContext,
- syntax::{latex, CstNode},
-};
+use crate::{component_db::COMPONENT_DATABASE, features::cursor::CursorContext, syntax::latex};
use super::types::{InternalCompletionItem, InternalCompletionItemData};
pub fn complete_arguments<'a>(
context: &'a CursorContext<CompletionParams>,
items: &mut Vec<InternalCompletionItem<'a>>,
- cancellation_token: &CancellationToken,
) -> Option<()> {
- cancellation_token.result().ok()?;
-
let token = context.cursor.as_latex()?;
let range = if token.kind() == latex::WORD {
@@ -25,8 +17,13 @@ pub fn complete_arguments<'a>(
TextRange::empty(context.offset)
};
- let group = latex::CurlyGroup::cast(token.parent())
- .or_else(|| token.parent().parent().and_then(latex::CurlyGroup::cast))
+ let group = latex::CurlyGroup::cast(token.parent()?)
+ .or_else(|| {
+ token
+ .parent()
+ .and_then(|node| node.parent())
+ .and_then(latex::CurlyGroup::cast)
+ })
.filter(|group| context.is_inside_latex_curly(group))?;
let command = latex::GenericCommand::cast(group.syntax().parent()?)?;
@@ -37,9 +34,10 @@ pub fn complete_arguments<'a>(
.filter_map(latex::CurlyGroup::cast)
.position(|g| g.syntax().text_range() == group.syntax().text_range())?;
- let command_name = &command.name()?.text()[1..];
+ let command_name = command.name()?;
+ let command_name = &command_name.text()[1..];
- for component in COMPONENT_DATABASE.linked_components(&context.request.subset) {
+ for component in COMPONENT_DATABASE.linked_components(&context.request.workspace) {
for component_command in component
.commands
.iter()
@@ -70,7 +68,7 @@ pub fn complete_arguments<'a>(
#[cfg(test)]
mod tests {
- use cstree::TextRange;
+ use rowan::TextRange;
use crate::features::testing::FeatureTester;
@@ -88,7 +86,7 @@ mod tests {
let context = CursorContext::new(request);
let mut actual_items = Vec::new();
- complete_arguments(&context, &mut actual_items, CancellationToken::none());
+ complete_arguments(&context, &mut actual_items);
assert!(actual_items.is_empty());
}
@@ -105,7 +103,7 @@ mod tests {
let context = CursorContext::new(request);
let mut actual_items = Vec::new();
- complete_arguments(&context, &mut actual_items, CancellationToken::none());
+ complete_arguments(&context, &mut actual_items);
assert!(actual_items.is_empty());
}
@@ -122,7 +120,7 @@ mod tests {
let context = CursorContext::new(request);
let mut actual_items = Vec::new();
- complete_arguments(&context, &mut actual_items, CancellationToken::none());
+ complete_arguments(&context, &mut actual_items);
assert!(!actual_items.is_empty());
for item in actual_items {
@@ -142,7 +140,7 @@ mod tests {
let context = CursorContext::new(request);
let mut actual_items = Vec::new();
- complete_arguments(&context, &mut actual_items, CancellationToken::none());
+ complete_arguments(&context, &mut actual_items);
assert!(!actual_items.is_empty());
for item in actual_items {
@@ -162,7 +160,7 @@ mod tests {
let context = CursorContext::new(request);
let mut actual_items = Vec::new();
- complete_arguments(&context, &mut actual_items, CancellationToken::none());
+ complete_arguments(&context, &mut actual_items);
assert!(!actual_items.is_empty());
for item in actual_items {
@@ -182,7 +180,7 @@ mod tests {
let context = CursorContext::new(request);
let mut actual_items = Vec::new();
- complete_arguments(&context, &mut actual_items, CancellationToken::none());
+ complete_arguments(&context, &mut actual_items);
assert!(actual_items.is_empty());
}