From 8912396504bca860dc8ff2be0debbcb21eb07480 Mon Sep 17 00:00:00 2001 From: Liam Cervante Date: Sat, 9 Sep 2023 07:48:57 +0200 Subject: [PATCH] Reserve state and plan keywords in test files (#33846) --- internal/addrs/parse_ref.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/internal/addrs/parse_ref.go b/internal/addrs/parse_ref.go index 28f8cb2fd1..b77b5f8694 100644 --- a/internal/addrs/parse_ref.go +++ b/internal/addrs/parse_ref.go @@ -90,6 +90,7 @@ func ParseRef(traversal hcl.Traversal) (*Reference, tfdiags.Diagnostics) { // scope and so should use this function to retrieve references. func ParseRefFromTestingScope(traversal hcl.Traversal) (*Reference, tfdiags.Diagnostics) { root := traversal.RootName() + rootRange := traversal[0].SourceRange() var diags tfdiags.Diagnostics var reference *Reference @@ -119,6 +120,17 @@ func ParseRefFromTestingScope(traversal hcl.Traversal) (*Reference, tfdiags.Diag Remaining: remain, } diags = runDiags + case "plan", "state": + // These names are all pre-emptively reserved in the hope of landing + // some version of referencing the plan and state files in test + // assertions. + diags = diags.Append(&hcl.Diagnostic{ + Severity: hcl.DiagError, + Summary: "Reserved symbol name", + Detail: fmt.Sprintf("The symbol name %q is reserved for use in a future Terraform version. If you are using a provider that already uses this as a resource type name, add the prefix \"resource.\" to force interpretation as a resource type name.", root), + Subject: rootRange.Ptr(), + }) + return nil, diags } if reference != nil {