From f87299f1b7512ac06e96c77eeb22459389573ada Mon Sep 17 00:00:00 2001
From: Pascal Kuthe <pascal.kuthe@semimod.de>
Date: Mon, 13 Mar 2023 19:30:58 +0100
Subject: [PATCH] allow empty placeholders

---
 helix-lsp/src/snippet.rs | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/helix-lsp/src/snippet.rs b/helix-lsp/src/snippet.rs
index f64f29f2..13e7609f 100644
--- a/helix-lsp/src/snippet.rs
+++ b/helix-lsp/src/snippet.rs
@@ -336,7 +336,12 @@ mod parser {
                 "${",
                 digit(),
                 ":",
-                one_or_more(anything(TEXT_ESCAPE_CHARS)),
+                // according to the grammar there is just a single anything here.
+                // However in the procese it is explained that placeholders can be nested
+                // the example there contains both a placeholder text and a nested placeholder
+                // which indicates a list. Looking at the VSCode sourcecode, the placeholder
+                // is indeed parsed as zero_or_more so the grammar is simply incorrect here
+                zero_or_more(anything(TEXT_ESCAPE_CHARS)),
                 "}"
             ),
             |seq| SnippetElement::Placeholder {