diff --git a/Makefile b/Makefile index 3a12968..202f672 100644 --- a/Makefile +++ b/Makefile @@ -37,6 +37,7 @@ GO_LDFLAGS_CMD = go run _scripts/goldflags.go GO_LDFLAGS_PACKAGE = cmd GO_LDFLAGS_PACKAGES = \ starlarkVersion=go.starlark.net \ + starlibVersion=github.com/qri-io/starlib \ terraformVersion=github.com/hashicorp/terraform # Site diff --git a/cmd/repl.go b/cmd/repl.go index 0364408..68a6e6a 100644 --- a/cmd/repl.go +++ b/cmd/repl.go @@ -1,5 +1,8 @@ package cmd +import "github.com/jessevdk/go-flags" + +// Command descriptions used in the flags.Parser.AddCommand. const ( REPLCmdShortDescription = "Run as interactive shell." REPLCmdLongDescription = REPLCmdShortDescription + "\n\n" + @@ -7,13 +10,17 @@ const ( "command." ) +// REPLCmd implements the command `repl`. type REPLCmd struct { commonCmd } +// Execute honors the flags.Commander interface. func (c *REPLCmd) Execute(args []string) error { c.init() c.runtime.REPL() return nil } + +var _ flags.Commander = &REPLCmd{} diff --git a/cmd/run.go b/cmd/run.go index 96ca0ab..7744baa 100644 --- a/cmd/run.go +++ b/cmd/run.go @@ -6,9 +6,11 @@ import ( "os" "github.com/hashicorp/hcl2/hclwrite" + "github.com/jessevdk/go-flags" "go.starlark.net/starlark" ) +// Command descriptions used in the flags.Parser.AddCommand. const ( RunCmdShortDescription = "Run parses, resolves, and executes a Starlark file." RunCmdLongDescription = RunCmdShortDescription + "\n\n" + @@ -20,6 +22,7 @@ const ( "and plan commands.\n" ) +// RunCmd implements the command `run`. type RunCmd struct { commonCmd @@ -30,6 +33,7 @@ type RunCmd struct { } `positional-args:"true" required:"1"` } +// Execute honors the flags.Commander interface. func (c *RunCmd) Execute(args []string) error { c.init() @@ -65,3 +69,5 @@ func (c *RunCmd) dumpToHCL(ctx starlark.StringDict) error { return ioutil.WriteFile(c.ToHCL, f.Bytes(), 0644) } + +var _ flags.Commander = &RunCmd{} diff --git a/cmd/version.go b/cmd/version.go index 06fcf90..cbaeeb8 100644 --- a/cmd/version.go +++ b/cmd/version.go @@ -3,8 +3,11 @@ package cmd import ( "fmt" "runtime" + + "github.com/jessevdk/go-flags" ) +// Command descriptions used in the flags.Parser.AddCommand. const ( VersionCmdShortDescription = "Version prints information about this binary." VersionCmdLongDescription = VersionCmdShortDescription + "\n\n" + @@ -12,14 +15,19 @@ const ( "date but also versions from the Go runtime and other dependencies." ) -var version string -var commit string -var build string -var terraformVersion string -var starlarkVersion string +var ( + version string + commit string + build string + terraformVersion string + starlarkVersion string + starlibVersion string +) +// VersionCmd implements the command `version`. type VersionCmd struct{} +// Execute honors the flags.Commander interface. func (c *VersionCmd) Execute(args []string) error { fmt.Printf("Go Version: %s\n", runtime.Version()) fmt.Printf("AsCode Version: %s\n", version) @@ -27,6 +35,9 @@ func (c *VersionCmd) Execute(args []string) error { fmt.Printf("AsCode Build Date: %s\n", build) fmt.Printf("Terraform Version: %s\n", terraformVersion) fmt.Printf("Starlark Version: %s\n", starlarkVersion) + fmt.Printf("Starlib Version: %s\n", starlibVersion) return nil } + +var _ flags.Commander = &VersionCmd{} diff --git a/starlark/module/docker/image.go b/starlark/module/docker/image.go index e8c6387..346c0ad 100644 --- a/starlark/module/docker/image.go +++ b/starlark/module/docker/image.go @@ -22,9 +22,8 @@ const ( // in starlark's load() function, eg: load('docker', 'docker') ModuleName = "docker" - ImageFuncName = "image" - - latestTag = "lastest" + imageFuncName = "image" + latestTag = "lastest" ) var ( @@ -44,7 +43,7 @@ func LoadModule() (starlark.StringDict, error) { "docker": &starlarkstruct.Module{ Name: "docker", Members: starlark.StringDict{ - ImageFuncName: starlark.NewBuiltin(ImageFuncName, Image), + imageFuncName: starlark.NewBuiltin(imageFuncName, Image), }, }, } @@ -104,7 +103,7 @@ func Image( ) (starlark.Value, error) { var image, constraint string - err := starlark.UnpackArgs(ImageFuncName, args, kwargs, "image", &image, "constraint", &constraint) + err := starlark.UnpackArgs(imageFuncName, args, kwargs, "image", &image, "constraint", &constraint) if err != nil { return nil, err } diff --git a/starlark/module/filepath/filepath.go b/starlark/module/filepath/filepath.go index edf55d5..12cd6b1 100644 --- a/starlark/module/filepath/filepath.go +++ b/starlark/module/filepath/filepath.go @@ -1,4 +1,4 @@ -package filepath +package filepath import ( "path/filepath" @@ -13,16 +13,16 @@ const ( // in starlark's load() function, eg: load('io/ioutil', 'json') ModuleName = "path/filepath" - SeparatorVarName = "separator" - AbsFuncName = "abs" - BaseFuncName = "base" - CleanFuncName = "clean" - DirFuncName = "dir" - ExtFuncName = "ext" - GlobFuncName = "glob" - IsAbsFuncName = "is_abs" - JoinFuncName = "join" - RelFuncName = "rel" + separatorVarName = "separator" + absFuncName = "abs" + baseFuncName = "base" + cleanFuncName = "clean" + dirFuncName = "dir" + extFuncName = "ext" + globFuncName = "glob" + isAbsFuncName = "is_abs" + joinFuncName = "join" + relFuncName = "rel" ) var ( @@ -43,16 +43,16 @@ func LoadModule() (starlark.StringDict, error) { "filepath": &starlarkstruct.Module{ Name: "filepath", Members: starlark.StringDict{ - SeparatorVarName: starlark.String(string(filepath.Separator)), - GlobFuncName: starlark.NewBuiltin(GlobFuncName, Glob), - AbsFuncName: starlark.NewBuiltin(AbsFuncName, Abs), - BaseFuncName: starlark.NewBuiltin(BaseFuncName, Base), - CleanFuncName: starlark.NewBuiltin(CleanFuncName, Clean), - DirFuncName: starlark.NewBuiltin(DirFuncName, Dir), - ExtFuncName: starlark.NewBuiltin(ExtFuncName, Ext), - IsAbsFuncName: starlark.NewBuiltin(IsAbsFuncName, IsAbs), - JoinFuncName: starlark.NewBuiltin(JoinFuncName, Join), - RelFuncName: starlark.NewBuiltin(RelFuncName, Rel), + separatorVarName: starlark.String(string(filepath.Separator)), + globFuncName: starlark.NewBuiltin(globFuncName, Glob), + absFuncName: starlark.NewBuiltin(absFuncName, Abs), + baseFuncName: starlark.NewBuiltin(baseFuncName, Base), + cleanFuncName: starlark.NewBuiltin(cleanFuncName, Clean), + dirFuncName: starlark.NewBuiltin(dirFuncName, Dir), + extFuncName: starlark.NewBuiltin(extFuncName, Ext), + isAbsFuncName: starlark.NewBuiltin(isAbsFuncName, IsAbs), + joinFuncName: starlark.NewBuiltin(joinFuncName, Join), + relFuncName: starlark.NewBuiltin(relFuncName, Rel), }, }, } @@ -75,7 +75,7 @@ func LoadModule() (starlark.StringDict, error) { func Glob(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) { var pattern string - err := starlark.UnpackArgs(GlobFuncName, args, kwargs, "pattern", &pattern) + err := starlark.UnpackArgs(globFuncName, args, kwargs, "pattern", &pattern) if err != nil { return nil, err } @@ -109,7 +109,7 @@ func Glob(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwa func Abs(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) { var path string - err := starlark.UnpackArgs(AbsFuncName, args, kwargs, "path", &path) + err := starlark.UnpackArgs(absFuncName, args, kwargs, "path", &path) if err != nil { return nil, err } @@ -139,7 +139,7 @@ func Abs(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwar func Base(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) { var path string - err := starlark.UnpackArgs(BaseFuncName, args, kwargs, "path", &path) + err := starlark.UnpackArgs(baseFuncName, args, kwargs, "path", &path) if err != nil { return nil, err } @@ -160,7 +160,7 @@ func Base(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwa func Clean(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) { var path string - err := starlark.UnpackArgs(CleanFuncName, args, kwargs, "path", &path) + err := starlark.UnpackArgs(cleanFuncName, args, kwargs, "path", &path) if err != nil { return nil, err } @@ -185,7 +185,7 @@ func Clean(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kw func Dir(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) { var path string - err := starlark.UnpackArgs(DirFuncName, args, kwargs, "path", &path) + err := starlark.UnpackArgs(dirFuncName, args, kwargs, "path", &path) if err != nil { return nil, err } @@ -209,7 +209,7 @@ func Dir(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwar func Ext(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) { var path string - err := starlark.UnpackArgs(ExtFuncName, args, kwargs, "path", &path) + err := starlark.UnpackArgs(extFuncName, args, kwargs, "path", &path) if err != nil { return nil, err } @@ -229,7 +229,7 @@ func Ext(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwar func IsAbs(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) { var path string - err := starlark.UnpackArgs(IsAbsFuncName, args, kwargs, "path", &path) + err := starlark.UnpackArgs(isAbsFuncName, args, kwargs, "path", &path) if err != nil { return nil, err } @@ -253,7 +253,7 @@ func IsAbs(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kw func Join(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) { var elements *starlark.List - err := starlark.UnpackArgs(JoinFuncName, args, kwargs, "elements", &elements) + err := starlark.UnpackArgs(joinFuncName, args, kwargs, "elements", &elements) if err != nil { return nil, err } @@ -287,7 +287,7 @@ func Join(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwa func Rel(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) { var basepath, targpath string - err := starlark.UnpackArgs(RelFuncName, args, kwargs, "basepath", &basepath, "targpath", &targpath) + err := starlark.UnpackArgs(relFuncName, args, kwargs, "basepath", &basepath, "targpath", &targpath) if err != nil { return nil, err } diff --git a/starlark/module/os/os.go b/starlark/module/os/os.go index f491da2..3acd2fa 100644 --- a/starlark/module/os/os.go +++ b/starlark/module/os/os.go @@ -14,18 +14,18 @@ const ( // in starlark's load() function, eg: load('io/ioutil', 'json') ModuleName = "os" - GetwdFuncName = "getwd" - ChdirFuncName = "chdir" - GetenvFuncName = "getenv" - SetenvFuncName = "setenv" - WriteFileFuncName = "write_file" - ReadFileFuncName = "read_file" - MkdirFuncName = "mkdir" - MkdirAllFuncName = "mkdir_all" - RemoveFuncName = "remove" - RemoveAllFuncName = "remove_all" - RenameFuncName = "rename" - TempDirFuncName = "temp_dir" + getwdFuncName = "getwd" + chdirFuncName = "chdir" + getenvFuncName = "getenv" + setenvFuncName = "setenv" + writeFileFuncName = "write_file" + readFileFuncName = "read_file" + mkdirFuncName = "mkdir" + mkdirAllFuncName = "mkdir_all" + removeFuncName = "remove" + removeAllFuncName = "remove_all" + renameFuncName = "rename" + tempDirFuncName = "temp_dir" ) var ( @@ -45,18 +45,18 @@ func LoadModule() (starlark.StringDict, error) { "os": &starlarkstruct.Module{ Name: "os", Members: starlark.StringDict{ - ChdirFuncName: starlark.NewBuiltin(ChdirFuncName, Chdir), - GetwdFuncName: starlark.NewBuiltin(GetwdFuncName, Getwd), - SetenvFuncName: starlark.NewBuiltin(SetenvFuncName, Setenv), - GetenvFuncName: starlark.NewBuiltin(GetenvFuncName, Getenv), - WriteFileFuncName: starlark.NewBuiltin(WriteFileFuncName, WriteFile), - ReadFileFuncName: starlark.NewBuiltin(ReadFileFuncName, ReadFile), - MkdirFuncName: starlark.NewBuiltin(MkdirFuncName, Mkdir), - MkdirAllFuncName: starlark.NewBuiltin(MkdirAllFuncName, MkdirAll), - RemoveFuncName: starlark.NewBuiltin(MkdirFuncName, Remove), - RemoveAllFuncName: starlark.NewBuiltin(MkdirFuncName, RemoveAll), - RenameFuncName: starlark.NewBuiltin(RenameFuncName, Rename), - TempDirFuncName: starlark.NewBuiltin(TempDirFuncName, TempDir), + chdirFuncName: starlark.NewBuiltin(chdirFuncName, Chdir), + getwdFuncName: starlark.NewBuiltin(getwdFuncName, Getwd), + setenvFuncName: starlark.NewBuiltin(setenvFuncName, Setenv), + getenvFuncName: starlark.NewBuiltin(getenvFuncName, Getenv), + writeFileFuncName: starlark.NewBuiltin(writeFileFuncName, WriteFile), + readFileFuncName: starlark.NewBuiltin(readFileFuncName, ReadFile), + mkdirFuncName: starlark.NewBuiltin(mkdirFuncName, Mkdir), + mkdirAllFuncName: starlark.NewBuiltin(mkdirAllFuncName, MkdirAll), + removeFuncName: starlark.NewBuiltin(mkdirFuncName, Remove), + removeAllFuncName: starlark.NewBuiltin(mkdirFuncName, RemoveAll), + renameFuncName: starlark.NewBuiltin(renameFuncName, Rename), + tempDirFuncName: starlark.NewBuiltin(tempDirFuncName, TempDir), }, }, } @@ -77,7 +77,7 @@ func LoadModule() (starlark.StringDict, error) { func Chdir(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) { var dir string - err := starlark.UnpackArgs(ChdirFuncName, args, kwargs, "dir", &dir) + err := starlark.UnpackArgs(chdirFuncName, args, kwargs, "dir", &dir) if err != nil { return nil, err } @@ -113,7 +113,7 @@ func Setenv(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, k value string ) - err := starlark.UnpackArgs(SetenvFuncName, args, kwargs, "key", &key, "value", &value) + err := starlark.UnpackArgs(setenvFuncName, args, kwargs, "key", &key, "value", &value) if err != nil { return nil, err } @@ -136,7 +136,7 @@ func Getenv(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, k def string ) - err := starlark.UnpackArgs(GetenvFuncName, args, kwargs, "key", &key, "default?", &def) + err := starlark.UnpackArgs(getenvFuncName, args, kwargs, "key", &key, "default?", &def) if err != nil { return nil, err } @@ -171,7 +171,7 @@ func WriteFile(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple perms = 0644 ) - err := starlark.UnpackArgs(WriteFileFuncName, args, kwargs, "filename", &filename, "content", &content, "perms?", &perms) + err := starlark.UnpackArgs(writeFileFuncName, args, kwargs, "filename", &filename, "content", &content, "perms?", &perms) if err != nil { return nil, err } @@ -195,7 +195,7 @@ func WriteFile(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple func ReadFile(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) { var filename string - err := starlark.UnpackArgs(ReadFileFuncName, args, kwargs, "filename", &filename) + err := starlark.UnpackArgs(readFileFuncName, args, kwargs, "filename", &filename) if err != nil { return nil, err } @@ -225,7 +225,7 @@ func Mkdir(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kw perms = 0777 ) - err := starlark.UnpackArgs(MkdirFuncName, args, kwargs, "name", &name, "perms?", &perms) + err := starlark.UnpackArgs(mkdirFuncName, args, kwargs, "name", &name, "perms?", &perms) if err != nil { return nil, err } @@ -250,7 +250,7 @@ func MkdirAll(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, perms = 0777 ) - err := starlark.UnpackArgs(MkdirAllFuncName, args, kwargs, "path", &path, "perms?", &perms) + err := starlark.UnpackArgs(mkdirAllFuncName, args, kwargs, "path", &path, "perms?", &perms) if err != nil { return nil, err } @@ -270,7 +270,7 @@ func MkdirAll(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, func Remove(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) { var name string - err := starlark.UnpackArgs(RemoveFuncName, args, kwargs, "name", &name) + err := starlark.UnpackArgs(removeFuncName, args, kwargs, "name", &name) if err != nil { return nil, err } @@ -291,7 +291,7 @@ func Remove(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, k func RemoveAll(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) { var path string - err := starlark.UnpackArgs(RemoveAllFuncName, args, kwargs, "path", &path) + err := starlark.UnpackArgs(removeAllFuncName, args, kwargs, "path", &path) if err != nil { return nil, err } @@ -318,7 +318,7 @@ func Rename(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, k newpath string ) - err := starlark.UnpackArgs(RenameFuncName, args, kwargs, "oldpath", &oldpath, "newpath", &newpath) + err := starlark.UnpackArgs(renameFuncName, args, kwargs, "oldpath", &oldpath, "newpath", &newpath) if err != nil { return nil, err } diff --git a/starlark/test/assert.go b/starlark/test/assert.go index d4d3932..482a479 100644 --- a/starlark/test/assert.go +++ b/starlark/test/assert.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Package starlarktest defines utilities for testing Starlark programs. +// Package test defines utilities for testing Starlark programs. // // Clients can call LoadAssertModule to load a module that defines // several functions useful for testing. See assert.star for its @@ -61,7 +61,7 @@ var ( func LoadAssertModule() (starlark.StringDict, error) { once.Do(func() { predeclared := starlark.StringDict{ - "error": starlark.NewBuiltin("error", error_), + "error": starlark.NewBuiltin("error", errorFn), "catch": starlark.NewBuiltin("catch", catch), "matches": starlark.NewBuiltin("matches", matches), "module": starlark.NewBuiltin("module", starlarkstruct.MakeModule), @@ -101,7 +101,7 @@ func matches(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, } // error(x) reports an error to the Go test framework. -func error_(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) { +func errorFn(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) { if len(args) != 1 { return nil, fmt.Errorf("error: got %d arguments, want 1", len(args)) } diff --git a/starlark/types/attribute.go b/starlark/types/attribute.go index baa052c..4956a4b 100644 --- a/starlark/types/attribute.go +++ b/starlark/types/attribute.go @@ -46,6 +46,7 @@ var _ starlark.Indexable = &Attribute{} var _ starlark.Comparable = &Attribute{} // NewAttribute returns a new Attribute for a given value or block of a Resource. +// The path is calculated traversing the parents of the given Resource. func NewAttribute(r *Resource, t cty.Type, name string) *Attribute { var parts []string var path string @@ -80,6 +81,7 @@ func NewAttribute(r *Resource, t cty.Type, name string) *Attribute { return NewAttributeWithPath(r, t, name, path+"."+name) } +// NewAttributeWithPath returns a new Attribute for a given value or block of a Resource. func NewAttributeWithPath(r *Resource, t cty.Type, name, path string) *Attribute { return &Attribute{ r: r, @@ -95,6 +97,7 @@ func (c *Attribute) Type() string { return fmt.Sprintf("Attribute<%s>", MustTypeFromCty(c.t).Starlark()) } +// InnerType returns the inner Type represented by this Attribute. func (c *Attribute) InnerType() *Type { t, _ := NewTypeFromCty(c.t) return t