summaryrefslogtreecommitdiff
path: root/support/texlab/crates/completion/src/providers/command.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/crates/completion/src/providers/command.rs')
-rw-r--r--support/texlab/crates/completion/src/providers/command.rs17
1 files changed, 17 insertions, 0 deletions
diff --git a/support/texlab/crates/completion/src/providers/command.rs b/support/texlab/crates/completion/src/providers/command.rs
index ddbf8bc206..f404d42ab3 100644
--- a/support/texlab/crates/completion/src/providers/command.rs
+++ b/support/texlab/crates/completion/src/providers/command.rs
@@ -7,6 +7,8 @@ use crate::{
CommandData, CompletionItem, CompletionItemData, CompletionParams,
};
+static DELIMITERS: &[(&str, &str)] = &[("(", ")"), ("[", "]"), ("{", "\\}")];
+
pub fn complete_commands<'a>(
params: &'a CompletionParams<'a>,
builder: &mut CompletionBuilder<'a>,
@@ -20,6 +22,7 @@ pub fn complete_commands<'a>(
});
proc.add_begin_snippet();
+ proc.add_delimiters();
proc.add_library();
proc.add_user();
Some(())
@@ -39,6 +42,20 @@ impl<'a, 'b> Processor<'a, 'b> {
Some(())
}
+ pub fn add_delimiters(&mut self) {
+ for (left, right) in DELIMITERS {
+ let Some(score) = self.0.builder.matcher.score(&left, &self.0.cursor.text) else {
+ continue;
+ };
+
+ let data = CompletionItemData::CommandLikeDelimiter(left, right);
+ self.0
+ .builder
+ .items
+ .push(CompletionItem::new_simple(score, self.0.cursor.range, data));
+ }
+ }
+
pub fn add_library(&mut self) -> Option<()> {
for package in included_packages(&self.0.params.feature) {
let commands_with_score = package.commands.iter().filter_map(|command| {