713fe29fef
This change overhauls the core of how types are used by the entire compiler. In particular, we now have an ast.Type, and have begun using its use where appropriate. An ast.Type is a union representing precisely one of the possible sources of types in the system: * Primitive type: any, bool, number, string, or service. * Stack type: a resolved reference to an actual concrete stack. * Schema type: a resolved reference to an actual concrete schema. * Unresolved reference: a textual reference that hasn't yet been resolved to a concrete artifact. * Uninstantiated reference: a reference that has been resolved to an uninstantiated stack, but hasn't been bound to a concrete result yet. Right now, this can point to a stack, however eventually we would imagine this supporting inter-stack schema references also. * Decorated type: either an array or a map; in the array case, there is a single inner element type; in the map case, there are two, the keys and values; in all cases, the type recurses to any of the possibilities listed here. All of the relevant AST nodes have been overhauled accordingly. In addition to this, we now have an ast.Schema type. It is loosely modeled on JSON Schema in its capabilities (http://json-schema.org/). Although we parse and perform some visitation and binding of these, there are mostly placeholders left in the code for the interesting aspects, such as registering symbols, resolving dependencies, and typechecking usage of schema types. This is part of the ongoing work behind marapongo/mu#9.
84 lines
2.1 KiB
Go
84 lines
2.1 KiB
Go
// Copyright 2016 Marapongo, Inc. All rights reserved.
|
|
|
|
package errors
|
|
|
|
import (
|
|
"github.com/marapongo/mu/pkg/ast"
|
|
"github.com/marapongo/mu/pkg/diag"
|
|
)
|
|
|
|
var ErrorMissingStackName = &diag.Diag{
|
|
ID: 500,
|
|
Message: "This Stack is missing a `name` property (or it is empty)",
|
|
}
|
|
|
|
var ErrorIllegalStackVersion = &diag.Diag{
|
|
ID: 501,
|
|
Message: "This Stack's version '%v' is invalid: %v",
|
|
}
|
|
|
|
var ErrorSymbolAlreadyExists = &diag.Diag{
|
|
ID: 502,
|
|
Message: "A symbol already exists with the name '%v'",
|
|
}
|
|
|
|
var ErrorStackTypeNotFound = &diag.Diag{
|
|
ID: 503,
|
|
Message: "Stack type '%v' was not found; has it been installed?",
|
|
}
|
|
|
|
var ErrorNonAbstractStacksMustDefineServices = &diag.Diag{
|
|
ID: 504,
|
|
Message: "Non-abstract stacks must declare at least one private or public service",
|
|
}
|
|
|
|
var ErrorCannotCreateAbstractStack = &diag.Diag{
|
|
ID: 505,
|
|
Message: "Service '%v' cannot create abstract stack '%v'; only concrete stacks may be created",
|
|
}
|
|
|
|
var ErrorMissingRequiredProperty = &diag.Diag{
|
|
ID: 506,
|
|
Message: "Missing required property '%v' on '%v'",
|
|
}
|
|
|
|
var ErrorUnrecognizedProperty = &diag.Diag{
|
|
ID: 507,
|
|
Message: "Unrecognized property '%v' on '%v'",
|
|
}
|
|
|
|
var ErrorIncorrectType = &diag.Diag{
|
|
ID: 508,
|
|
Message: "Incorrect type; expected '%v', got '%v'",
|
|
}
|
|
|
|
var ErrorServiceNotFound = &diag.Diag{
|
|
ID: 509,
|
|
Message: "A service named '%v' was not found",
|
|
}
|
|
|
|
var ErrorServiceHasNoPublics = &diag.Diag{
|
|
ID: 510,
|
|
Message: "The service '%v' of type '%v' has no public entrypoint; it cannot be referenced",
|
|
}
|
|
|
|
var ErrorServiceHasManyPublics = &diag.Diag{
|
|
ID: 511,
|
|
Message: "The service '%v' of type '%v' has multiple public entrypoints; please choose one using a selector",
|
|
}
|
|
|
|
var ErrorServiceSelectorNotFound = &diag.Diag{
|
|
ID: 512,
|
|
Message: "No public by the given selector '%v' was found in service '%v' of type '%v'",
|
|
}
|
|
|
|
var ErrorServiceSelectorIsPrivate = &diag.Diag{
|
|
ID: 513,
|
|
Message: "The given selector '%v' references a private service in '%v' of type '%v'; it must be public",
|
|
}
|
|
|
|
var ErrorNotAName = &diag.Diag{
|
|
ID: 514,
|
|
Message: "The string '%v' is not a valid name (expected: " + ast.NamePartRegexps + ")",
|
|
}
|