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