From 4ee3778ff8bda83a0a90d7cb42bc4132bd8c06a5 Mon Sep 17 00:00:00 2001 From: James Pogran Date: Wed, 29 Sep 2021 10:34:08 -0400 Subject: [PATCH] Prefill Required Attributes This adds a new experimental setting for prefilling required attributes as blocks are completed from intellisense. For example, completing a resource provider will fill in the required attributes automatically. --- internal/langserver/handlers/complete.go | 7 +++++++ internal/langserver/handlers/service.go | 1 + internal/settings/settings.go | 3 ++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/internal/langserver/handlers/complete.go b/internal/langserver/handlers/complete.go index 73b23f7f..ab51d061 100644 --- a/internal/langserver/handlers/complete.go +++ b/internal/langserver/handlers/complete.go @@ -47,6 +47,13 @@ func (h *logHandler) TextDocumentComplete(ctx context.Context, params lsp.Comple } d.SetSchema(schema) + expFeatures, err := lsctx.ExperimentalFeatures(ctx) + if err != nil { + d.PrefillRequiredAttributes = false + } + + d.PrefillRequiredAttributes = expFeatures.PrefillRequiredAttributes + fPos, err := ilsp.FilePositionFromDocumentPosition(params.TextDocumentPositionParams, file) if err != nil { return list, err diff --git a/internal/langserver/handlers/service.go b/internal/langserver/handlers/service.go index a0c2de63..e9ef163b 100644 --- a/internal/langserver/handlers/service.go +++ b/internal/langserver/handlers/service.go @@ -217,6 +217,7 @@ func (svc *service) Assigner() (jrpc2.Assigner, error) { ctx = lsctx.WithDocumentStorage(ctx, svc.fs) ctx = lsctx.WithClientCapabilities(ctx, cc) ctx = lsctx.WithModuleFinder(ctx, svc.modMgr) + ctx = lsctx.WithExperimentalFeatures(ctx, &expFeatures) return handle(ctx, req, lh.TextDocumentComplete) }, diff --git a/internal/settings/settings.go b/internal/settings/settings.go index 5f586b5c..d97ae1a4 100644 --- a/internal/settings/settings.go +++ b/internal/settings/settings.go @@ -9,7 +9,8 @@ import ( ) type ExperimentalFeatures struct { - ValidateOnSave bool `mapstructure:"validateOnSave"` + ValidateOnSave bool `mapstructure:"validateOnSave"` + PrefillRequiredAttributes bool `mapstructure:"prefillRequiredAttributes"` } type Options struct {