diff options
Diffstat (limited to 'support/texlab/src/features/completion.rs')
-rw-r--r-- | support/texlab/src/features/completion.rs | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/support/texlab/src/features/completion.rs b/support/texlab/src/features/completion.rs index 29559bd808..f9ad8554cd 100644 --- a/support/texlab/src/features/completion.rs +++ b/support/texlab/src/features/completion.rs @@ -22,6 +22,7 @@ mod util; use std::borrow::Cow; use cancellation::CancellationToken; +use cstree::TextSize; use fuzzy_matcher::{skim::SkimMatcherV2, FuzzyMatcher}; use lsp_types::{ CompletionItem, CompletionList, CompletionParams, CompletionTextEdit, Documentation, @@ -147,7 +148,15 @@ fn dedup(items: Vec<InternalCompletionItem>) -> Vec<InternalCompletionItem> { fn score(context: &CursorContext<CompletionParams>, items: &mut Vec<InternalCompletionItem>) { let pattern: Cow<str> = match &context.cursor { - Cursor::Latex(token) if token.kind().is_command_name() => token.text().trim_end().into(), + Cursor::Latex(token) if token.kind().is_command_name() => { + if token.text_range().start() + TextSize::from(1) == context.offset { + // Handle cases similar to this one correctly: + // $\|$ % (| is the cursor) + "\\".into() + } else { + token.text().trim_end().into() + } + } Cursor::Latex(token) if token.kind() == latex::WORD => { if let Some(key) = latex::Key::cast(token.parent()) { key.to_string().into() |