From 014bb67050cc8e62d772010e4fdcf9adb98d2f35 Mon Sep 17 00:00:00 2001 From: Ansgar Mertens Date: Wed, 21 Aug 2024 16:02:09 +0200 Subject: [PATCH 1/3] fix: Support reference completions after dot in object constructors Previously it was required to type a first character as the hclsyntax parser wouldn't return anything for these invalid references. This requires https://github.com/hashicorp/hcl/pull/692 to work --- decoder/expr_reference_completion.go | 40 +++++++++++++++++++--------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/decoder/expr_reference_completion.go b/decoder/expr_reference_completion.go index 83282eb9..132ff046 100644 --- a/decoder/expr_reference_completion.go +++ b/decoder/expr_reference_completion.go @@ -63,22 +63,36 @@ func (ref Reference) CompletionAtPos(ctx context.Context, pos hcl.Pos) []lang.Ca return candidates } - eType, ok := ref.expr.(*hclsyntax.ScopeTraversalExpr) - if !ok { + var editRng, prefixRng hcl.Range + switch eType := ref.expr.(type) { + case *hclsyntax.ScopeTraversalExpr: + editRng = eType.Range() + if !editRng.ContainsPos(pos) { + // account for trailing character(s) which doesn't appear in AST + // such as dot, opening bracket etc. + editRng.End = pos + } + prefixRng = hcl.Range{ + Filename: eType.Range().Filename, + Start: eType.Range().Start, + End: pos, + } + case *hclsyntax.ExprSyntaxError: + editRng = eType.Range() + if !editRng.ContainsPos(pos) { + // account for trailing character(s) which doesn't appear in AST + // such as dot, opening bracket etc. + editRng.End = pos + } + prefixRng = hcl.Range{ + Filename: eType.Range().Filename, + Start: eType.Range().Start, + End: pos, + } + default: return []lang.Candidate{} } - editRng := eType.Range() - if !editRng.ContainsPos(pos) { - // account for trailing character(s) which doesn't appear in AST - // such as dot, opening bracket etc. - editRng.End = pos - } - prefixRng := hcl.Range{ - Filename: eType.Range().Filename, - Start: eType.Range().Start, - End: pos, - } prefix := string(prefixRng.SliceBytes(file.Bytes)) candidates := make([]lang.Candidate, 0) From a02e1453099189f77e80245f1ca73e7a8a936d30 Mon Sep 17 00:00:00 2001 From: Ansgar Mertens Date: Wed, 21 Aug 2024 16:18:17 +0200 Subject: [PATCH 2/3] fix: update the range in fractional number partial test as parsing now includes the dot in the returned range --- decoder/expr_literal_value_completion_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decoder/expr_literal_value_completion_test.go b/decoder/expr_literal_value_completion_test.go index bd2f0b70..eb09284b 100644 --- a/decoder/expr_literal_value_completion_test.go +++ b/decoder/expr_literal_value_completion_test.go @@ -415,7 +415,7 @@ func TestCompletionAtPos_exprLiteralValue(t *testing.T) { Range: hcl.Range{ Filename: "test.tf", Start: hcl.Pos{Line: 1, Column: 8, Byte: 7}, - End: hcl.Pos{Line: 1, Column: 10, Byte: 9}, + End: hcl.Pos{Line: 1, Column: 11, Byte: 10}, }, }, }, From 9cbeb1632f528b931e94a3990892774b44174d80 Mon Sep 17 00:00:00 2001 From: Ansgar Mertens Date: Mon, 26 Aug 2024 14:51:42 +0200 Subject: [PATCH 3/3] Bump hcl to `v2.22.0` --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index ccb9aec6..f6d8dc5f 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.21.0 require ( github.com/google/go-cmp v0.6.0 github.com/hashicorp/go-multierror v1.1.1 - github.com/hashicorp/hcl/v2 v2.21.0 + github.com/hashicorp/hcl/v2 v2.22.0 github.com/mh-cbon/go-fmt-fail v0.0.0-20160815164508-67765b3fbcb5 github.com/zclconf/go-cty v1.15.0 github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 diff --git a/go.sum b/go.sum index 5247799d..635e6d1d 100644 --- a/go.sum +++ b/go.sum @@ -14,6 +14,8 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/hcl/v2 v2.21.0 h1:lve4q/o/2rqwYOgUg3y3V2YPyD1/zkCLGjIV74Jit14= github.com/hashicorp/hcl/v2 v2.21.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA= +github.com/hashicorp/hcl/v2 v2.22.0 h1:hkZ3nCtqeJsDhPRFz5EA9iwcG1hNWGePOTw6oyul12M= +github.com/hashicorp/hcl/v2 v2.22.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA= github.com/mh-cbon/go-fmt-fail v0.0.0-20160815164508-67765b3fbcb5 h1:shw+DWUaHIyW64Tv30ASCbC6QO6fLy+M5SJb5pJVEI4= github.com/mh-cbon/go-fmt-fail v0.0.0-20160815164508-67765b3fbcb5/go.mod h1:nHPoxaBUc5CDAMIv0MNmn5PBjWbTs9BI/eh30/n0U6g= github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7 h1:DpOJ2HYzCv8LZP15IdmG+YdwD2luVPHITV96TkirNBM=