From 445ccb5769ee0574ff036cd8a262898f52c49bd8 Mon Sep 17 00:00:00 2001 From: Henrik Jess Nielsen Date: Mon, 11 May 2026 11:20:54 +0200 Subject: [PATCH] fix(bicep): detect param context when module ref has empty version The lookback regex used ([^']+) requiring one or more version chars, so 'br/modules:modules/keyvault:' (no version yet) silently fell through to the unknown context and injected all module names instead of params. Change + to * to allow empty version string. The param_completion_items fallback already handles empty version by picking the closest schema. --- ilsp/bicep_lsp/proxy.py | 2 +- tests/test_proxy.py | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/ilsp/bicep_lsp/proxy.py b/ilsp/bicep_lsp/proxy.py index f16ddfd..258b339 100644 --- a/ilsp/bicep_lsp/proxy.py +++ b/ilsp/bicep_lsp/proxy.py @@ -118,7 +118,7 @@ class _ProxySession: # Find the last module declaration in the lookback window mod_matches = list( - re.finditer(r"module\s+\w+\s+'br/modules:([^:]+):([^']+)'", context_text) + re.finditer(r"module\s+\w+\s+'br/modules:([^:]+):([^']*)'", context_text) ) if mod_matches: last_mod = mod_matches[-1] diff --git a/tests/test_proxy.py b/tests/test_proxy.py index 5b16fdb..b68c056 100644 --- a/tests/test_proxy.py +++ b/tests/test_proxy.py @@ -253,6 +253,22 @@ def test_detect_param_context(): assert ctx["version"] == "1.1.x" +def test_detect_param_context_empty_version(): + """Params context should work even when module ref has no version yet.""" + lines = [ + "module keyVault 'br/modules:modules/keyvault:' = {", + " params: {", + " ", # ← cursor here + " }", + "}", + ] + session = _make_session_with_doc(URI, lines) + ctx = session._detect_context(URI, {"line": 2, "character": 4}) + assert ctx["type"] == "param" + assert ctx["module"] == "modules/keyvault" + assert ctx["version"] == "" + + def test_detect_param_value_context_no_quote(): """Cursor after 'principalType: ' (no opening quote) → param_value context.""" lines = [