codegen

package
v3.0.0-...-a5432f4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 13, 2025 License: Apache-2.0 Imports: 7 Imported by: 0

README

(codegen)= (crosscode)=

Code generation

Code generation is essential to Codeinfra's ability to support both a variety of programming languages and a variety of cloud providers. This package defines the core components of Codeinfra's code generation functionality (known as Codeinfra CrossCode). At a high level, code generation is used to manage three categories of output: SDKs, programs, and documentation. At a lower level, these all make use of a number of shared concepts such as schema and Codeinfra Configuration Language (PCL).

:::{toctree} :maxdepth: 1 :titlesonly:

/pkg/codegen/sdks.md /pkg/codegen/programs.md /pkg/codegen/docs/README /pkg/codegen/schema/README /pkg/codegen/pcl/README :::

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CleanDir

func CleanDir(dirPath string, exclusions StringSet) error

CleanDir removes all existing files from a directory except those in the exclusions list. Note: The exclusions currently don't function recursively, so you cannot exclude a single file in a subdirectory, only entire subdirectories. This function will need improvements to be able to target that use-case.

func ExpandShortEnumName

func ExpandShortEnumName(name string) string

func FilterExamples

func FilterExamples(description string, lang string) string

FilterExamples filters the code snippets in a schema docstring to include only those that target the given language.

func IsNOptionalInput

func IsNOptionalInput(t schema.Type) bool

func IsProvideDefaultsFuncRequired

func IsProvideDefaultsFuncRequired(t schema.Type) bool

If a helper function needs to be invoked to provide default values for a plain type. The provided map cannot be reused.

func MapInnerType

func MapInnerType(t schema.Type, f func(schema.Type) schema.Type) schema.Type

MapInnerType applies f to the first non-wrapper type in t. MapInnerType does not mutate it's input, and t should not either.

func MapOptionalType

func MapOptionalType(t schema.Type, f func(schema.Type) schema.Type) schema.Type

Applies f to the first non-optional type in t. If t is Optional{v} then returns Optional{f(v)}, otherwise f(t) is returned

func OptionalType

func OptionalType(p *schema.Property) schema.Type

OptionalType wraps the Property's type in an OptionalType if it is not already optional.

func PackageReferences

func PackageReferences(pkg *schema.Package) []schema.PackageReference

PackageReferences returns a list of packages that are referenced by the given package.

func PkgEquals

func PkgEquals(p1, p2 schema.PackageReference) bool

Check if two packages are the same.

func PlainType

func PlainType(t schema.Type) schema.Type

PlainType deeply removes any InputTypes from t, with the exception of argument structs. Use ResolvedType to unwrap argument structs as well.

func RequiredType

func RequiredType(p *schema.Property) schema.Type

RequiredType unwraps the OptionalType enclosing the Property's type, if any.

func ResolvedType

func ResolvedType(t schema.Type) schema.Type

ResolvedType deeply removes any InputTypes from t.

func SimplifyInputUnion

func SimplifyInputUnion(t schema.Type) schema.Type

func SortedKeys

func SortedKeys[T any](m map[string]T) []string

SortedKeys returns a sorted list of keys for the given map.

func UnwrapType

func UnwrapType(t schema.Type) schema.Type

UnwrapType removes any outer OptionalTypes and InputTypes from t.

func VisitType

func VisitType(schemaType schema.Type, visitor func(t schema.Type))

func VisitTypeClosure

func VisitTypeClosure(properties []*schema.Property, visitor func(t schema.Type))

Types

type DocLanguageHelper

type DocLanguageHelper interface {
	GetPropertyName(p *schema.Property) (string, error)
	GetEnumName(e *schema.Enum, typeName string) (string, error)
	GetDocLinkForResourceType(pkg *schema.Package, moduleName, typeName string) string
	GetDocLinkForCodeinfraType(pkg *schema.Package, typeName string) string
	GetDocLinkForResourceInputOrOutputType(pkg *schema.Package, moduleName, typeName string, input bool) string
	GetDocLinkForFunctionInputOrOutputType(pkg *schema.Package, moduleName, typeName string, input bool) string
	GetLanguageTypeString(pkg *schema.Package, moduleName string, t schema.Type, input bool) string

	GetFunctionName(modName string, f *schema.Function) string
	// GetResourceFunctionResultName returns the name of the result type when a static resource function is used to lookup
	// an existing resource.
	GetResourceFunctionResultName(modName string, f *schema.Function) string

	GetMethodName(m *schema.Method) string
	GetMethodResultName(pkg *schema.Package, modName string, r *schema.Resource, m *schema.Method) string

	// GetModuleDocLink returns the display name and the link for a module (including root modules) in a given package.
	GetModuleDocLink(pkg *schema.Package, modName string) (string, string)
}

DocLanguageHelper is an interface for extracting language-specific information from a Codeinfra schema. See the implementation for this interface under each of the language code generators.

type Fs

type Fs map[string][]byte

A simple in memory file system.

func (Fs) Add

func (fs Fs) Add(path string, contents []byte)

Add a new file to the Fs.

Panic if the file is a duplicate.

type Set

type Set map[interface{}]struct{}

func (Set) Add

func (s Set) Add(v interface{})

func (Set) Delete

func (s Set) Delete(v interface{})

func (Set) Has

func (s Set) Has(v interface{}) bool

type StringSet

type StringSet map[string]struct{}

func NewStringSet

func NewStringSet(values ...string) StringSet

func (StringSet) Add

func (ss StringSet) Add(s string)

func (StringSet) Any

func (ss StringSet) Any() bool

func (StringSet) Contains

func (ss StringSet) Contains(subset StringSet) bool

Contains returns true if all elements of the subset are also present in the current set. It also returns true if subset is empty.

func (StringSet) Delete

func (ss StringSet) Delete(s string)

func (StringSet) Except

func (ss StringSet) Except(s string) StringSet

StringSet.Except returns the string set setminus s.

func (StringSet) Has

func (ss StringSet) Has(s string) bool

func (StringSet) SortedValues

func (ss StringSet) SortedValues() []string

func (StringSet) Subtract

func (ss StringSet) Subtract(other StringSet) StringSet

Subtract returns a new string set with all elements of the current set that are not present in the other set.

func (StringSet) Union

func (ss StringSet) Union(other StringSet) StringSet

Directories

Path Synopsis
package cgstrings has various string processing functions that are useful during code generation.
package cgstrings has various string processing functions that are useful during code generation.
Pulling out some of the repeated strings tokens into constants would harm readability, so we just ignore the goconst linter's warning.
Pulling out some of the repeated strings tokens into constants would harm readability, so we just ignore the goconst linter's warning.
Pulling out some of the repeated strings tokens into constants would harm readability, so we just ignore the goconst linter's warning.
Pulling out some of the repeated strings tokens into constants would harm readability, so we just ignore the goconst linter's warning.
hcl2
model/pretty
pretty is an extensible utility library to pretty-print nested structures.
pretty is an extensible utility library to pretty-print nested structures.
Pulling out some of the repeated strings tokens into constants would harm readability, so we just ignore the goconst linter's warning.
Pulling out some of the repeated strings tokens into constants would harm readability, so we just ignore the goconst linter's warning.
tstypes
Helper code to assist emitting correctly minimally parenthesized TypeScript type literals.
Helper code to assist emitting correctly minimally parenthesized TypeScript type literals.
Pulling out some of the repeated strings tokens into constants would harm readability, so we just ignore the goconst linter's warning.
Pulling out some of the repeated strings tokens into constants would harm readability, so we just ignore the goconst linter's warning.
testing

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL