fix(bicep): detect param context when module ref has empty version
All checks were successful
Build and Deploy iLSP / test (push) Successful in 21s
Build and Deploy iLSP / build-and-deploy (push) Successful in 1m24s

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.
This commit is contained in:
Henrik Jess Nielsen
2026-05-11 11:20:54 +02:00
parent e7471e5dfd
commit 445ccb5769
2 changed files with 17 additions and 1 deletions

View File

@@ -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]

View File

@@ -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 = [