From 30b46a8a5fe2a83516bec6d5b085a6b324c782d8 Mon Sep 17 00:00:00 2001 From: Radek Simko Date: Thu, 3 Feb 2022 09:31:24 +0000 Subject: [PATCH] schema: Introduce BuiltinReferences(modPath) (#93) * schema: Introduce BuiltinReferences(modPath) * add comment --- internal/schema/refscope/scopes.go | 1 + schema/builtin_references.go | 55 ++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 schema/builtin_references.go diff --git a/internal/schema/refscope/scopes.go b/internal/schema/refscope/scopes.go index a73765ac..83b5d667 100644 --- a/internal/schema/refscope/scopes.go +++ b/internal/schema/refscope/scopes.go @@ -5,6 +5,7 @@ import ( ) var ( + BuiltinScope = lang.ScopeId("builtin") DataScope = lang.ScopeId("data") LocalScope = lang.ScopeId("local") ModuleScope = lang.ScopeId("module") diff --git a/schema/builtin_references.go b/schema/builtin_references.go new file mode 100644 index 00000000..6db7a572 --- /dev/null +++ b/schema/builtin_references.go @@ -0,0 +1,55 @@ +package schema + +import ( + "github.com/hashicorp/hcl-lang/lang" + "github.com/hashicorp/hcl-lang/reference" + "github.com/hashicorp/terraform-schema/internal/schema/refscope" + "github.com/zclconf/go-cty/cty" +) + +// BuiltinReferences returns known "built-in" reference targets +// (range-less references available within any module) +func BuiltinReferences(modPath string) reference.Targets { + return reference.Targets{ + { + Addr: lang.Address{ + lang.RootStep{Name: "path"}, + lang.AttrStep{Name: "module"}, + }, + ScopeId: refscope.BuiltinScope, + Type: cty.String, + Description: lang.Markdown("The filesystem path of the module where the expression is placed\n\n" + + modPath), + }, + { + Addr: lang.Address{ + lang.RootStep{Name: "path"}, + lang.AttrStep{Name: "root"}, + }, + ScopeId: refscope.BuiltinScope, + Type: cty.String, + Description: lang.Markdown("The filesystem path of the root module of the configuration"), + }, + { + Addr: lang.Address{ + lang.RootStep{Name: "path"}, + lang.AttrStep{Name: "cwd"}, + }, + ScopeId: refscope.BuiltinScope, + Type: cty.String, + Description: lang.Markdown("The filesystem path of the current working directory.\n\n" + + "In normal use of Terraform this is the same as `path.root`, " + + "but some advanced uses of Terraform run it from a directory " + + "other than the root module directory, causing these paths to be different."), + }, + { + Addr: lang.Address{ + lang.RootStep{Name: "terraform"}, + lang.AttrStep{Name: "workspace"}, + }, + ScopeId: refscope.BuiltinScope, + Type: cty.String, + Description: lang.Markdown("The name of the currently selected workspace"), + }, + } +}