Documentation
¶
Overview ¶
Package semantics provides the derived semantic model that validation depth-C constraint checks rely on: a specialization/typing graph (with cycle detection), and — in later increments — inherited-member resolution, multiplicity extraction, and a bounded model-level expression evaluator.
All results are memoized in side tables keyed by *symbols.Symbol, consistent with the project rule that semantic information lives outside the immutable AST. A Model is built per resolution session over an existing symbol index and name resolver.
Index ¶
- Variables
- func ConjugateDirection(d ast.FeatureDirection) ast.FeatureDirection
- func ConvertMagnitude(magnitude float64, from, to Scale) float64
- func DeclaresRedefinition(sym *symbols.Symbol) bool
- func DeclaresVariant(sym *symbols.Symbol) bool
- func DeclaresVariation(sym *symbols.Symbol) bool
- func EnumerationOwning(sym *symbols.Symbol) *symbols.Symbol
- func GeneralizationKind(k ast.RelationshipKind) bool
- func IsView(sym *symbols.Symbol) bool
- func IsViewpoint(sym *symbols.Symbol) bool
- func IsViewpointSatisfy(sat *symbols.Symbol) bool
- func KindBaseFQN(sym *symbols.Symbol, isKerML bool) (string, bool)
- func LiteralValue(sym *symbols.Symbol) ast.Node
- func NotYetMember(sym, declaring *symbols.Symbol) bool
- func PrimConforms(from, to PrimType) bool
- func QualifiedNameText(qn *ast.QualifiedName) string
- func RelationshipsOf(sym *symbols.Symbol) []*ast.Relationship
- func UnevaluableClassification(reason string, span source.Span) error
- func UnitExprText(node ast.Node) string
- func VariantValue(sym *symbols.Symbol) ast.Node
- func VariationOwning(sym *symbols.Symbol) *symbols.Symbol
- type BehaviorParameter
- type Bound
- type ConcernCheck
- type ConcernConformance
- type ConcernEvaluator
- type ConformanceViolation
- type ConformanceViolationKind
- type ConnectorEndAttachment
- type Dimension
- type FilterError
- type FilterProblem
- type FilterProblemKind
- type FlowEndAttachment
- type MetadataAnnotation
- type Model
- func (m *Model) AllSupertypes(sym *symbols.Symbol) []*symbols.Symbol
- func (m *Model) AnnotatedElementViolation(annotated *symbols.Symbol, scope *symbols.Scope, prefix *ast.PrefixMetadata) (string, bool)
- func (m *Model) AnnotationFactsOf(sym *symbols.Symbol) []symbols.AnnotationFacts
- func (m *Model) BehaviorParametersOf(sym *symbols.Symbol) []BehaviorParameter
- func (m *Model) CheckElementFilter(f symbols.ElementFilter) []FilterProblem
- func (m *Model) CompileElementFilter(f symbols.ElementFilter) *symbols.FilterPredicate
- func (m *Model) ConcernEvaluationTarget(fc *symbols.Symbol) *symbols.Symbol
- func (m *Model) ConformanceViolations(sym *symbols.Symbol) []ConformanceViolation
- func (m *Model) Conforms(a, b *symbols.Symbol) bool
- func (m *Model) ConnectorEndAttachments(sym *symbols.Symbol) []ConnectorEndAttachment
- func (m *Model) ConnectorEndCount(sym *symbols.Symbol) int
- func (m *Model) CouldHold(sym *symbols.Symbol, prim PrimType) bool
- func (m *Model) DimensionFactsOf(sym *symbols.Symbol, idx *symbols.Index) *symbols.DimensionFacts
- func (m *Model) DimensionOfExpr(scope *symbols.Scope, node ast.Node) (Dimension, bool)
- func (m *Model) DimensionOfFeature(sym *symbols.Symbol) (Dimension, bool)
- func (m *Model) DimensionOfType(sym *symbols.Symbol) (Dimension, bool)
- func (m *Model) DimensionOfUnit(unit UnitTerm) (Dimension, bool)
- func (m *Model) DirectMemberSources(sym *symbols.Symbol) []*symbols.Symbol
- func (m *Model) DirectSupertypes(sym *symbols.Symbol) []*symbols.Symbol
- func (m *Model) EffectiveMultiplicityOf(sym *symbols.Symbol) Range
- func (m *Model) Eval(n ast.Node) (Value, bool)
- func (m *Model) EvalClassification(scope *symbols.Scope, e *ast.OperatorExpr, elem *symbols.Symbol) (bool, error)
- func (m *Model) EvalElementFilter(f symbols.ElementFilter, cand *symbols.Symbol) (bool, error)
- func (m *Model) ExposedElements(view *symbols.Symbol) ([]*symbols.Symbol, error)
- func (m *Model) FeatureBaseFQN(sym *symbols.Symbol) (string, bool)
- func (m *Model) FlowEndAttachments(sym *symbols.Symbol) []FlowEndAttachment
- func (m *Model) FramedConcernTarget(fc *symbols.Symbol) *symbols.Symbol
- func (m *Model) FramedConcernsOf(sym *symbols.Symbol) []*symbols.Symbol
- func (m *Model) HasSpecializationCycle(sym *symbols.Symbol) bool
- func (m *Model) ImplicitEndRedefinitions(sym *symbols.Symbol) []*symbols.Symbol
- func (m *Model) ImplicitGenerals(sym *symbols.Symbol) []*symbols.Symbol
- func (m *Model) ImplicitRoleRedefinitions(sym *symbols.Symbol) []*symbols.Symbol
- func (m *Model) InheritanceMasked(sym, candidate *symbols.Symbol) bool
- func (m *Model) InheritanceMaskedDeclaring(sym, candidate *symbols.Symbol, declName string) bool
- func (m *Model) InterfaceEndPortMismatch(sym *symbols.Symbol) (a, b *symbols.Symbol, mismatch bool)
- func (m *Model) IsBinaryConnector(sym *symbols.Symbol) bool
- func (m *Model) IsConjugated(sym *symbols.Symbol) bool
- func (m *Model) IsConnectorUsage(sym *symbols.Symbol) bool
- func (m *Model) IsMeasurementUnit(sym *symbols.Symbol) bool
- func (m *Model) IsVariationFeature(sym *symbols.Symbol) bool
- func (m *Model) LiteralsOf(sym *symbols.Symbol) []*symbols.Symbol
- func (m *Model) LookupContributedMember(sym *symbols.Symbol, name string) (*symbols.Symbol, bool)
- func (m *Model) LookupMember(sym *symbols.Symbol, name string) (*symbols.Symbol, bool)
- func (m *Model) MemberSources(sym *symbols.Symbol) []*symbols.Symbol
- func (m *Model) MembersOf(sym *symbols.Symbol) []*symbols.Symbol
- func (m *Model) MembersOfDeclaring(sym, declaring *symbols.Symbol) []*symbols.Symbol
- func (m *Model) MembersOfIncludingRedefined(sym *symbols.Symbol) []*symbols.Symbol
- func (m *Model) MetadataBodyInevaluableValues(scope *symbols.Scope, prefix *ast.PrefixMetadata) []ast.Node
- func (m *Model) MetadataBodyViolations(scope *symbols.Scope, prefix *ast.PrefixMetadata) []ast.Node
- func (m *Model) ModelLevelEvaluable(scope *symbols.Scope, expr ast.Node) bool
- func (m *Model) MultiplicityOf(sym *symbols.Symbol) (Range, bool)
- func (m *Model) NestedViews(view *symbols.Symbol) ([]*symbols.Symbol, error)
- func (m *Model) PortFeatures(sym *symbols.Symbol) []PortFeature
- func (m *Model) PortsConform(a, b *symbols.Symbol) bool
- func (m *Model) PrimTypeOf(sym *symbols.Symbol) PrimType
- func (m *Model) RangeOf(mult *ast.Multiplicity) (Range, bool)
- func (m *Model) RedefinedFeatures(sym *symbols.Symbol) []*symbols.Symbol
- func (m *Model) ReferencedFeature(sym *symbols.Symbol) *symbols.Symbol
- func (m *Model) RelationshipTarget(sym *symbols.Symbol, rel *ast.Relationship) *symbols.Symbol
- func (m *Model) RenderingTarget(member *symbols.Symbol) (*symbols.Symbol, string)
- func (m *Model) ResultParameterOf(sym *symbols.Symbol) *symbols.Symbol
- func (m *Model) SatisfiesElementFilter(f symbols.ElementFilter, cand *symbols.Symbol) bool
- func (m *Model) SatisfyMembersOf(view *symbols.Symbol) []*symbols.Symbol
- func (m *Model) SatisfyTarget(sat *symbols.Symbol) (*symbols.Symbol, string)
- func (m *Model) SelectsVariantOf(sym, variant *symbols.Symbol) bool
- func (m *Model) SupertypesProvisional(sym *symbols.Symbol) bool
- func (m *Model) UnioningTypes(sym *symbols.Symbol) []*symbols.Symbol
- func (m *Model) UnitTermOf(sym *symbols.Symbol) (UnitTerm, error)
- func (m *Model) UnitTermOfExpr(scope *symbols.Scope, node ast.Node) (UnitTerm, error)
- func (m *Model) UnmatchedConnectorEnds(sym *symbols.Symbol) (*symbols.Symbol, []*symbols.Symbol)
- func (m *Model) UsageMayTimeVary(sym *symbols.Symbol) bool
- func (m *Model) VariantOf(sym *symbols.Symbol, name string) (*symbols.Symbol, bool)
- func (m *Model) VariantsOf(sym *symbols.Symbol) []*symbols.Symbol
- func (m *Model) VariationPointOwning(sym *symbols.Symbol) *symbols.Symbol
- func (m *Model) ViewConformance(view *symbols.Symbol, eval ConcernEvaluator) (*ViewConformance, error)
- func (m *Model) ViewRenderings(view *symbols.Symbol) ([]ViewRendering, error)
- type PartyBinding
- type PortFeature
- type PrimType
- type Range
- type Scale
- type ShadowedUnitError
- type UnitFactor
- type UnitTerm
- func (t UnitTerm) Commensurable(other UnitTerm) bool
- func (t UnitTerm) DimensionKey() string
- func (t UnitTerm) Dimensionless() bool
- func (t UnitTerm) DividedBy(other UnitTerm) UnitTerm
- func (t UnitTerm) Normalized() UnitTerm
- func (t UnitTerm) Pow(exp float64) UnitTerm
- func (t UnitTerm) String() string
- func (t UnitTerm) Times(other UnitTerm) UnitTerm
- type Value
- type ValueKind
- type Verdict
- type ViewConformance
- type ViewRendering
- type ViewpointConformance
- type ViolationReporter
Constants ¶
This section is empty.
Variables ¶
var ( // ErrArithmeticDomain reports operands an operation is not defined for, such // as a negative base raised to a fractional exponent. ErrArithmeticDomain = errors.New("arithmetic domain error") // ErrArithmeticOverflow reports a result outside the range of the kind it // would have: an Integer that does not fit int64, or a non-finite Real. ErrArithmeticOverflow = errors.New("arithmetic overflow") )
var ( // ErrFilterUnevaluable reports a filter condition outside the subset of // predicates the evaluator implements, or one naming something that does // not resolve. Such a condition selects nothing and rejects nothing: it is // reported, and the candidate is kept, so that an unevaluable filter never // silently hides model content. ErrFilterUnevaluable = errors.New("filter condition cannot be evaluated") // ErrFilterNotBoolean reports a filter condition that evaluates to // something other than a boolean, which cannot select elements. ErrFilterNotBoolean = errors.New("filter condition is not boolean-valued") )
var ( // ErrNotAUnit reports a feature used as a measurement reference that is not // one: it does not conform to MeasurementReferences::MeasurementUnit. ErrNotAUnit = errors.New("not a measurement unit") // ErrUnitExpr reports an expression in unit position that is not a product // of powers of measurement units. ErrUnitExpr = errors.New("not a measurement unit expression") // ErrUnitConversion reports a unit whose conversion to its reference unit is // declared but cannot be read as a number, so no factor can be derived. ErrUnitConversion = errors.New("undetermined unit conversion") // ErrUnitCycle reports a unit that is defined, directly or through other // units, in terms of itself. ErrUnitCycle = errors.New("cyclic unit definition") )
var ErrNotAView = errors.New("not a view")
ErrNotAView is returned when the exposed set is asked of an element that is no view; only a view usage or a view definition exposes elements.
var ErrNotAViewpoint = errors.New("not a viewpoint")
ErrNotAViewpoint reports a `satisfy` in a view body whose target is no viewpoint, so it asserts no viewpoint conformance.
Functions ¶
func ConjugateDirection ¶
func ConjugateDirection(d ast.FeatureDirection) ast.FeatureDirection
ConjugateDirection returns the conjugate of a feature direction (§7.12.2): in and out are each other's conjugate, inout and none are their own.
func ConvertMagnitude ¶
ConvertMagnitude expresses a magnitude given over the scale factor from over the scale factor to, as one ratio so that no intermediate rounding enters.
func DeclaresRedefinition ¶ added in v0.2.0
DeclaresRedefinition reports whether sym carries a `redefines`/`:>>` clause, whether or not its target resolves.
func DeclaresVariant ¶
DeclaresVariant reports whether sym is declared with the `variant` keyword, which makes it one of the choices of the variation that owns it.
func DeclaresVariation ¶
DeclaresVariation reports whether sym is declared with the `variation` modifier, which makes it a variation point: an abstract classifier of the variants declared for it (SysML v2 §7.20, VariantMembership).
func EnumerationOwning ¶
EnumerationOwning returns the enumeration definition sym is a literal of, or nil when sym is no enumeration literal: a literal is an enumeration usage declared in an enumeration definition's body (SysML v2 §7.6.4).
func GeneralizationKind ¶
func GeneralizationKind(k ast.RelationshipKind) bool
GeneralizationKind reports whether a relationship kind forms a conformance ("is-a" / "conforms-to") edge for the specialization graph: specialization on definitions, and subsetting/redefinition/typing on usages.
Reference subsetting (`references`) is excluded even though KerML 8.3.3.3.9 makes it a kind of Subsetting: it contributes members through MemberSources instead, so that a referencing feature does not silently acquire the referenced feature's type for conformance and implicit-typing purposes. crosses is a feature-value edge, not generalization, and is excluded too.
func IsView ¶
IsView reports whether sym is a view usage or a view definition, the two elements that own Expose relationships.
func IsViewpoint ¶
IsViewpoint reports whether sym is a viewpoint usage or definition.
func IsViewpointSatisfy ¶
IsViewpointSatisfy reports whether a satisfy member claims conformance to what it names — `satisfy vp;`. A satisfy stating a subject asserts its requirement of that subject instead (`satisfy requirement r by that;`, as the stdlib View does), which is no claim about the view.
func KindBaseFQN ¶ added in v0.2.0
KindBaseFQN returns the standard-library base every declaration of sym's kind conforms to, implicitly or through its declared chain.
func LiteralValue ¶
LiteralValue returns the value expression a literal declares, or nil when it declares none and is identified by itself: a literal of an enumeration specializing a scalar type — `enum def GradePoints :> Real { A = 4.0; }` — is a value of that type.
func NotYetMember ¶ added in v0.2.0
NotYetMember reports whether a member of a namespace a declaration is being written in is that declaration: the one identified, or, when the caller cannot tell which it is, any redefinition the namespace declares (KerML 8.3.3.3.6).
func PrimConforms ¶
PrimConforms reports whether a value of type from is acceptable where to is expected. PrimUnknown on either side conforms, so partial information never produces a diagnostic.
func QualifiedNameText ¶
func QualifiedNameText(qn *ast.QualifiedName) string
QualifiedNameText renders a qualified name as "A::B::C".
func RelationshipsOf ¶
func RelationshipsOf(sym *symbols.Symbol) []*ast.Relationship
RelationshipsOf returns the declared relationships of a symbol's def/usage declaration, or nil for symbols that are not def/usage.
func UnevaluableClassification ¶
UnevaluableClassification reports a classification whose subject the caller could not settle — an expression denoting no element — as the same ErrFilterUnevaluable a filter condition outside the evaluable subset reports.
func UnitExprText ¶
UnitExprText renders an expression in unit position as written, so a diagnostic, a printed value or an exported type fact names the unit the model used rather than its reduction.
func VariantValue ¶
VariantValue returns the value expression a variant declares, or nil when it declares none and stands for an object of itself.
Types ¶
type BehaviorParameter ¶ added in v0.4.1
type BehaviorParameter struct {
Symbol *symbols.Symbol
Direction ast.FeatureDirection
IsResult bool
}
BehaviorParameter is one effective parameter of a behavior, in invocation order.
type Bound ¶
Bound is one end of a multiplicity range. Known is false when the bound expression is not model-level-evaluable (checks then skip it). Infinite marks the `*` unbounded upper.
type ConcernCheck ¶
ConcernCheck is the verdict of one framed concern against one exposed element.
type ConcernConformance ¶
type ConcernConformance struct {
// Concern is the viewpoint's framing and Target the concern it names, nil
// when the framing names nothing resolvable.
Concern *symbols.Symbol
Target *symbols.Symbol
// Name is how the framed concern is written, for reporting.
Name string
// FramedBy is the view's framing of the same concern and FramedIn the view
// declaring it. Both are nil when the view does not frame the concern.
FramedBy *symbols.Symbol
FramedIn *symbols.Symbol
// Checks are the per-element verdicts, in exposed-element order.
Checks []ConcernCheck
Verdict Verdict
Reason string
}
ConcernConformance is what became of one concern the viewpoint frames.
type ConcernEvaluator ¶
ConcernEvaluator evaluates a framed concern's conditions with one exposed element bound as its subject. It is implemented over the runtime's requirement engine, which the semantic model cannot import.
type ConformanceViolation ¶ added in v0.2.0
type ConformanceViolation struct {
Kind ConformanceViolationKind
// Feature is the subsetting or redefining feature.
Feature *symbols.Symbol
// Target is the subsetted or redefined feature.
Target *symbols.Symbol
// Ref is the node the diagnostic is reported at: the target reference of an
// explicit clause, or the declaration itself for an implicit redefinition.
Ref ast.Node
}
ConformanceViolation is one broken conformance rule: the relationship that breaks it, and the reference to report it at.
type ConformanceViolationKind ¶ added in v0.2.0
type ConformanceViolationKind int
ConformanceViolationKind names the conformance rule a relationship breaks.
const ( // ViolationDirection: a redefining feature's direction differs from the // direction the redefined feature has in the owning type. ViolationDirection ConformanceViolationKind = iota // ViolationUniqueness: a nonunique feature subsets or redefines a unique one. ViolationUniqueness // ViolationConstancy: a variable feature subsets or redefines a constant one. ViolationConstancy )
type ConnectorEndAttachment ¶
type ConnectorEndAttachment struct {
// Name is the effective name of the end feature this position occupies: the
// name the end declares for itself, else the name of the end it implicitly
// redefines in the connector it specializes, else the name a binary
// connector's ends have in the library. It is empty when none of those
// answers a name — an end of an untyped connector with an arity other than
// two, whose ends are the participants of a link and are unnamed.
Name string
// Attachment is the expression naming the connected feature (`a.p`).
Attachment ast.Node
// End is the syntax of the end itself, which carries its source location.
End *ast.ConnectorEnd
// EndFeature is the end feature Name comes from, when a declaration in the
// model declares it: the end's own symbol, or the end it redefines. It is nil
// for a name taken from the library, whose declarations are indexed without
// bodies.
EndFeature *symbols.Symbol
}
ConnectorEndAttachment is one end of a connector usage as an object of that usage carries it: the name of the end feature the position occupies, and the node naming the feature the end attaches to. A connector end reference-subsets what it attaches to (KerML 1.0 §7.4.6, SysML v2 §7.13.2), so an object of the connector holds that very feature at the end rather than an object of the end's declared type.
type Dimension ¶
type Dimension struct {
Term UnitTerm
// Unit is the unit as written or the operand's quantity type, for the
// diagnostic; empty for a computed dimension, described by Term alone.
Unit string
}
Dimension is the quantity dimension of a measurement: a product of powers of base quantities (ISQ's L, M, T, ...), held as a UnitTerm over the base-quantity features so that UnitTerm.Commensurable — the same commensurability the runtime applies to units — decides whether two dimensions are comparable.
type FilterError ¶
FilterError is why a filter condition could not decide a candidate. Reason describes the part at fault in the terms a diagnostic message uses, and Span locates it.
func (*FilterError) Error ¶
func (e *FilterError) Error() string
func (*FilterError) Unwrap ¶
func (e *FilterError) Unwrap() error
type FilterProblem ¶
type FilterProblem struct {
// Kind distinguishes a specification fault from an evaluator limitation.
Kind FilterProblemKind
Reason string
Span source.Span
}
FilterProblem is a fault in a filter condition itself, found without any candidate to evaluate it for: a part of it the evaluator cannot decide, or one that yields something other than a boolean where the condition needs a truth value. Reason describes the fault for a diagnostic message, and Span locates the part of the condition at fault.
type FilterProblemKind ¶ added in v0.2.1
type FilterProblemKind uint8
FilterProblemKind classifies a filter condition fault.
const ( FilterProblemNotBoolean FilterProblemKind = iota FilterProblemNotEvaluable FilterProblemUnsupported )
type FlowEndAttachment ¶ added in v0.2.0
FlowEndAttachment is one declared from/to target of a flow usage.
type MetadataAnnotation ¶ added in v0.2.0
type MetadataAnnotation struct {
Node *ast.PrefixMetadata
Prefix bool
}
MetadataAnnotation is a metadata feature annotating an element, written either as a prefix (`#A part p`) or as a member of the element's body (`@A;`).
func MetadataAnnotationsOf ¶ added in v0.2.0
func MetadataAnnotationsOf(decl ast.Node) []MetadataAnnotation
MetadataAnnotationsOf returns the metadata features annotating a declaration, in declaration order. `@A about x` annotates other elements, so it is not one.
type Model ¶
type Model struct {
// contains filtered or unexported fields
}
Model is the derived semantic model over a symbol index. It memoizes the specialization graph computed from resolved def/usage relationships.
func NewModel ¶
NewModel creates a semantic model backed by the given name resolver. The resolver must already be associated with the index whose symbols will be queried. The model attaches itself to the resolver so name resolution sees inherited members, which a redefinition target may only be reachable through.
func (*Model) AllSupertypes ¶
AllSupertypes returns the transitive closure of DirectSupertypes, excluding sym itself, in a deterministic order (breadth-first over declaration order). It is safe on cyclic graphs. The result is memoized.
func (*Model) AnnotatedElementViolation ¶ added in v0.2.0
func (m *Model) AnnotatedElementViolation(annotated *symbols.Symbol, scope *symbols.Scope, prefix *ast.PrefixMetadata) (string, bool)
AnnotatedElementViolation names the metaclass of annotated that the metadata type of the annotation may not be applied to: the metaclass of an annotated element conforms to every type of the annotatedElement feature of the metadata type (KerML 1.0 §8.3.4.9, validateMetadataFeatureAnnotatedElement).
func (*Model) AnnotationFactsOf ¶
func (m *Model) AnnotationFactsOf(sym *symbols.Symbol) []symbols.AnnotationFacts
AnnotationFactsOf states the metadata annotating sym as names and constants, so that how an element filter classifies it can be compared across loads. The values an annotation binds are reported as read; a binding whose value is not constant is reported with an unknown value, which a condition reading it reports as unevaluable rather than silently treating as absent.
func (*Model) BehaviorParametersOf ¶ added in v0.4.1
func (m *Model) BehaviorParametersOf(sym *symbols.Symbol) []BehaviorParameter
BehaviorParametersOf returns a behavior's inherited and declared parameters.
func (*Model) CheckElementFilter ¶
func (m *Model) CheckElementFilter(f symbols.ElementFilter) []FilterProblem
CheckElementFilter reports the faults of a filter condition, in the order they appear in it. It is what the validation pass reports: the same compiled predicate the enumeration evaluates is examined, so a condition diagnosed here is exactly one whose verdict is not trusted there.
Only faults that hold for every candidate are reported. Whether an annotation actually binds a feature is a property of the candidate, not of the condition, so it surfaces as an unevaluable verdict during enumeration rather than here.
func (*Model) CompileElementFilter ¶
func (m *Model) CompileElementFilter(f symbols.ElementFilter) *symbols.FilterPredicate
CompileElementFilter returns the condition compiled to a predicate over a candidate element, by resolving the elements it names against the scope it was written in. Returns nil for an empty condition.
func (*Model) ConcernEvaluationTarget ¶
ConcernEvaluationTarget returns the element whose conditions answer a framing: the framing when it declares a concern of its own, else the concern it names, whose conditions a bare `frame <concern>;` does not restate.
func (*Model) ConformanceViolations ¶ added in v0.2.0
func (m *Model) ConformanceViolations(sym *symbols.Symbol) []ConformanceViolation
ConformanceViolations returns the feature-conformance rules the declaration of sym breaks against the features it subsets and redefines, explicitly or as a parameter of its owning behavior.
func (*Model) Conforms ¶
Conforms reports whether a conforms to b: a == b, b is a (transitive) supertype of a, or a is the union of types that all conform to b.
func (*Model) ConnectorEndAttachments ¶
func (m *Model) ConnectorEndAttachments(sym *symbols.Symbol) []ConnectorEndAttachment
ConnectorEndAttachments returns the ends of the connector usage sym in declaration order, one entry per end of its `connect` clause. It returns nothing for a symbol that is no connector usage.
func (*Model) ConnectorEndCount ¶
ConnectorEndCount returns the number of effective ends of the connector sym.
func (*Model) CouldHold ¶ added in v0.2.0
CouldHold reports whether a feature of the given type could hold a value of the scalar type prim: either the type conforms to it, or it conforms to the type, as every value does to `Anything`.
func (*Model) DimensionFactsOf ¶
DimensionFactsOf returns the dimension to record for a library symbol, or nil when it is undetermined or its base quantities have no qualified name to restore them by.
func (*Model) DimensionOfExpr ¶
DimensionOfExpr reports the dimension of an expression's value when the declarations it names determine it statically. A dimension that only evaluation determines — an untyped feature or parameter, a calculation result, an unresolved reference, an unbound redefinition — is reported as unknown rather than guessed.
func (*Model) DimensionOfFeature ¶
DimensionOfFeature reports the dimension a feature's values are measured in, as its declared quantity type fixes it.
func (*Model) DimensionOfType ¶ added in v0.4.0
DimensionOfType reports the dimension a declared type fixes for the values it types, as DimensionOfFeature does for a feature's own declaration. A write target known only by the type it was declared with is judged through this.
func (*Model) DimensionOfUnit ¶
DimensionOfUnit reports the dimension a reduced unit measures in, so a value carrying a unit can be checked against the dimension a feature declares.
func (*Model) DirectMemberSources ¶ added in v0.2.0
DirectMemberSources returns the symbols that contribute members to sym in one step, deduplicated: the edges MemberSources takes the closure of. A caller enumerating names needs the steps, not the closure, to tell which types a derivation traversed (KerML 8.2.3.5, inheritedMemberships' excluded types).
func (*Model) DirectSupertypes ¶
DirectSupertypes returns the immediate supertype symbols of sym: the resolved targets of its generalization relationships. Unresolved or non-def/usage targets are skipped. The result is memoized and deterministic (declaration order, duplicates removed).
func (*Model) EffectiveMultiplicityOf ¶
EffectiveMultiplicityOf returns the multiplicity governing a usage symbol: the one it declares, or the assumed 1..1 when it declares none.
func (*Model) Eval ¶
Eval attempts to evaluate n as a model-level constant. It returns ok=false for anything outside the supported subset (feature references, strings, null, unsupported operators, or arithmetic on infinity) — callers then skip the check, matching the pilot's model-level-evaluable gating.
func (*Model) EvalClassification ¶
func (m *Model) EvalClassification(scope *symbols.Scope, e *ast.OperatorExpr, elem *symbols.Symbol) (bool, error)
EvalClassification evaluates the classification `@T`/`@@T` that e writes against one element, for a caller that has settled which element the subject denotes — the runtime value evaluator, whose `@` has a subject expression a filter condition has no equivalent of. e's operand is not looked at here.
The type is resolved and the verdict decided by the same code a filter condition is compiled and run with, so a classification cannot answer one way in a filter and another in an expression. A condition outside the evaluable subset — a type that does not resolve — is a *FilterError wrapping ErrFilterUnevaluable, as it is at the model level.
func (*Model) EvalElementFilter ¶
EvalElementFilter evaluates a filter condition for one candidate element, returning whether the candidate is selected, or a *FilterError saying why no verdict is possible.
func (*Model) ExposedElements ¶
ExposedElements returns what view exposes, in declaration order and once each: its own `expose` relationships followed by those of the views it specializes, since an Expose is protected. An empty set is no error, a non-view is ErrNotAView, and a nested view's own set is asked of it directly.
func (*Model) FeatureBaseFQN ¶ added in v0.2.0
FeatureBaseFQN returns the standard-library element a feature declaration takes its type from when it declares none: the base feature its kind implies, or the base definition a SysML usage of that kind is typed by.
func (*Model) FlowEndAttachments ¶ added in v0.2.0
func (m *Model) FlowEndAttachments(sym *symbols.Symbol) []FlowEndAttachment
FlowEndAttachments returns the declared from/to targets of a flow usage.
func (*Model) FramedConcernTarget ¶
FramedConcernTarget returns the concern a `frame` member frames: the concern definition it is typed by, or the concern usage it references — the element named, not what that element in turn specializes, whose values it may mask. It is nil when the framing names no concern.
func (*Model) FramedConcernsOf ¶
FramedConcernsOf returns the `frame` concern usages a viewpoint or view declares followed by those it inherits, in declaration order and once each.
func (*Model) HasSpecializationCycle ¶
HasSpecializationCycle reports whether sym participates in a specialization cycle: sym is reachable from itself through one or more generalization edges (including a direct self-specialization). AllSupertypes excludes its own starting node, so sym is detected via a back-edge from one of its supertypes.
func (*Model) ImplicitEndRedefinitions ¶
ImplicitEndRedefinitions returns the ends of the connectors its owner specializes that sym redefines by occupying their position, which no clause of its declaration names. The features it redefines are one feature with it, so an object holds one set of values under all their names.
func (*Model) ImplicitGenerals ¶ added in v0.2.0
ImplicitGenerals returns the general types sym has by its kind rather than by declaration. A scope reached through a recursive import does not traverse them (KerML 8.2.3.5).
func (*Model) ImplicitRoleRedefinitions ¶ added in v0.2.0
ImplicitRoleRedefinitions returns same-role features of the owner's generals.
func (*Model) InheritanceMasked ¶ added in v0.2.0
InheritanceMasked reports whether sym does not inherit candidate because one of its features redefines it. Callers enumerating or resolving inherited members ask here; resolving a redefinition target itself must not, as that reference names the masked feature (KerML 7.3.4.5).
func (*Model) InheritanceMaskedDeclaring ¶ added in v0.2.0
InheritanceMaskedDeclaring is InheritanceMasked as the declaration named declName, being written in sym, sees it: sym's own redefinitions mask nothing, so the target such a declaration names stays resolvable (KerML 8.3.3.3.6).
func (*Model) InterfaceEndPortMismatch ¶
InterfaceEndPortMismatch returns the port types of the two ends of the interface sym when they do not match with conjugate directions (§7.12.2). Ends whose port type is not resolvable, and interfaces whose ends are not both declared, are not reported.
func (*Model) IsBinaryConnector ¶ added in v0.2.0
IsBinaryConnector reports whether sym conforms to the library's binary-link base, including through cached/index-only specialization edges.
func (*Model) IsConjugated ¶
IsConjugated reports whether sym's inherited features have reversed directions. Conjugation composes, so `~` of a conjugate is the original.
func (*Model) IsConnectorUsage ¶
IsConnectorUsage reports whether sym declares a connector usage that joins features it names — a `connection`/`interface`/`allocation`/`connector` usage with a `connect … to …` clause. Such a usage is materialized from the features its ends attach to, unlike a usage that only holds objects of its own.
func (*Model) IsMeasurementUnit ¶
IsMeasurementUnit reports whether sym is a feature typed by a measurement unit, which is what may stand in the unit position of a quantity expression.
func (*Model) IsVariationFeature ¶
IsVariationFeature reports whether sym is a variation point: declared `variation` itself, or specializing one — a usage typed by a variation definition and a usage redefining a variation usage are both variation points, and neither restates the modifier.
func (*Model) LiteralsOf ¶
LiteralsOf returns the literals an enumeration definition declares, including the ones it inherits from an enumeration it specializes.
func (*Model) LookupContributedMember ¶
LookupContributedMember is LookupMember without sym's own declarations: only the members contributed by what sym specializes, is typed by or reference-subsets. Callers that must not see a local binding — resolving a reference subsetting's target past the borrowed name it binds itself — ask for the contributed member instead.
func (*Model) LookupMember ¶
LookupMember returns the first visible member of sym — declared by it, or contributed by what it specializes or reference-subsets — registered under name, honoring masking.
func (*Model) MemberSources ¶
MemberSources returns the symbols whose scopes contribute members to sym, in deterministic breadth-first order and excluding sym itself: what sym specializes (DirectSupertypes) and what it reference-subsets (ReferencedFeature), transitively.
Reference subsetting is a kind of subsetting, and subsetting is a kind of specialization (KerML 8.3.3.3.9), so a referencing feature inherits the referenced feature's features: `perform action takePhoto references takePicture` makes takePicture's members reachable as `takePhoto.focus`. It is kept out of DirectSupertypes because that relation also drives conformance and implicit typing, which this implementation does not yet derive from reference subsetting — see docs/project/spec-compliance.md.
func (*Model) MembersOf ¶
MembersOf returns the members visible on sym: those declared directly in its owned scope plus members inherited from what it specializes and what it reference-subsets. Two maskings apply: a member declared closer to sym hides an inherited member of the same name, and a feature redefined by one of sym's features is not inherited at all (see masking.go). Results are deterministic: local members first (declaration order), then contributed members in MemberSources order.
func (*Model) MembersOfDeclaring ¶ added in v0.2.0
MembersOfDeclaring returns the members of sym as a declaration being written in it sees them: that declaration is not yet a member of its own owner and the redefinition it carries masks nothing, so its target stays resolvable (KerML 8.3.3.3.6). Sym's other declarations, and the masks they cause, are present. A nil declaring — the caller cannot tell which declaration is being written — stands for every redefinition sym declares.
func (*Model) MembersOfIncludingRedefined ¶ added in v0.2.0
MembersOfIncludingRedefined is MembersOf without redefinition masking: the members a type would have if none of its features redefined anything. A redefinition shares its target's feature value, so the runtime shape needs both.
func (*Model) MetadataBodyInevaluableValues ¶ added in v0.2.0
func (m *Model) MetadataBodyInevaluableValues(scope *symbols.Scope, prefix *ast.PrefixMetadata) []ast.Node
MetadataBodyInevaluableValues returns the values written in the body of the annotation that are not model-level evaluable, at any nesting depth. A metadata feature is a model-level element, so its value must be one the model alone decides (KerML 7.4.7, Expression::isModelLevelEvaluable).
func (*Model) MetadataBodyViolations ¶ added in v0.2.0
MetadataBodyViolations returns the declarations in the body of the annotation that redefine no feature of the metadata type it names, at any nesting depth. It returns nothing when the type does not resolve: an unresolved reference is reported by name resolution, and every name under it would be a false report.
func (*Model) ModelLevelEvaluable ¶ added in v0.2.0
ModelLevelEvaluable reports whether an expression written in scope can be evaluated from the model alone (KerML 1.0 §7.4.9, Expression::isModelLevelEvaluable).
func (*Model) MultiplicityOf ¶
MultiplicityOf returns the extracted multiplicity range of a usage symbol, or ok=false when the symbol is not a usage or declares no multiplicity.
func (*Model) NestedViews ¶
NestedViews returns the views declared in view's body, in declaration order, so a caller can walk a view tree.
func (*Model) PortFeatures ¶
func (m *Model) PortFeatures(sym *symbols.Symbol) []PortFeature
PortFeatures returns the features of the port sym, declared and inherited, with the direction each has as seen through sym. A closer declaration masks an inherited feature of the same name.
func (*Model) PortsConform ¶
PortsConform reports whether every feature of port a matches one on port b (§7.12.2): conforming types, and conjugate or absent directions.
func (*Model) PrimTypeOf ¶
PrimTypeOf classifies sym against the scalar lattice. A definition is classified by itself or its nearest scalar supertype; a usage by the type it is typed by (typing is a generalization edge, so the same walk covers both). Symbols with no scalar ancestor are PrimUnknown.
func (*Model) RangeOf ¶
func (m *Model) RangeOf(mult *ast.Multiplicity) (Range, bool)
RangeOf extracts the multiplicity range declared on a usage node, or ok=false when it declares none.
func (*Model) RedefinedFeatures ¶ added in v0.2.0
RedefinedFeatures returns the features sym redefines: the resolved target of each explicit `redefines`/`:>>` clause. Alias targets are resolved through, so the result names elements rather than the bindings that reach them. The implicit redefinitions of parameters and connector ends are matched by position rather than declared, and are reported by DirectSupertypes only. Memoized.
func (*Model) ReferencedFeature ¶
ReferencedFeature returns the feature sym reference-subsets: the target of the single `references` / `::>` edge its declaration may carry (KerML 8.3.3.3.9, "A Feature can have at most one ownedReferenceSubsetting"), or nil when it has none or the target does not resolve.
The `perform` and `event` shorthands declare that edge without the keyword: `perform providePower.generateTorque` is a perform action usage whose performed action is related to it by reference subsetting (SysML 7.17.6).
The result is memoized. Resolution of the target runs member lookup, which consults this relation in turn, so a symbol already being resolved yields nil rather than recursing.
func (*Model) RelationshipTarget ¶ added in v0.2.0
RelationshipTarget resolves the element rel names from sym's scope.
func (*Model) RenderingTarget ¶
RenderingTarget returns the rendering a `render`/`rendering` member names and the reference as written: the rendering it references (`render asTreeDiagram;`) or the rendering definition it is typed by (`render rendering r : AsTree;`).
func (*Model) ResultParameterOf ¶ added in v0.2.0
ResultParameterOf returns the result parameter of a behavior or step, inherited ones included, or nil when it has none.
func (*Model) SatisfiesElementFilter ¶
SatisfiesElementFilter reports whether cand is selected by the filter condition. It is the form the symbol layer's enumeration installs (see symbols.Index.SetElementFilter): a condition that cannot be evaluated, or that is not boolean-valued, keeps the candidate rather than dropping it — the diagnostic is what reports it (see passes.checkElementFilters), because losing model content silently is worse than surfacing an element a filter meant to hide.
func (*Model) SatisfyMembersOf ¶
SatisfyMembersOf returns the viewpoint-claiming `satisfy` usages in a view's body followed by those of the views it specializes, in declaration order and once each: a satisfy is inherited the way an expose is.
func (*Model) SatisfyTarget ¶
SatisfyTarget returns the element a satisfy member names and the reference as written. A satisfy reference is recorded as a subsetting rather than a reference subsetting, so it has no effective name to read the target from.
func (*Model) SelectsVariantOf ¶
SelectsVariantOf reports whether variant is a variant sym may be bound to: one declared for sym itself, or for a variation sym specializes — a usage redefining a variation selects among the variants of what it redefines.
func (*Model) SupertypesProvisional ¶ added in v0.2.0
SupertypesProvisional reports whether sym's supertypes were last derived from a metadata annotation whose type had not resolved yet, so the answer may still change and must not be recorded as a fact.
func (*Model) UnioningTypes ¶ added in v0.1.2
UnioningTypes returns the resolved targets of sym's `unions` relationships: the types sym is declared to be the union of (KerML 1.0 §8.3.3). Unioning is not a generalization edge — a union is constrained by its members rather than inheriting from them — so it is resolved on its own. The result is memoized.
func (*Model) UnitTermOf ¶
UnitTermOf reduces a measurement unit to base units. A unit declared with a conversion to a reference unit contributes that conversion's factor; a unit declared as an expression of other units reduces through that expression; a unit of dimension one reduces to no base unit at all; and a unit that is declared in terms of nothing else is itself a base unit.
The reduction is memoized per symbol, and read from the facts installed for a library symbol rather than derived again.
func (*Model) UnitTermOfExpr ¶
UnitTermOfExpr reduces an expression in unit position — a measurement unit, or a product, quotient or power of them — resolving names in scope.
func (*Model) UnmatchedConnectorEnds ¶
UnmatchedConnectorEnds returns the ends the connector sym declares that redefine no end of a general connector, together with the general connector that has too few ends. A connector with no connector-like general — an untyped `connect a to b` — has none: there is nothing to match against.
func (*Model) UsageMayTimeVary ¶ added in v0.2.0
UsageMayTimeVary derives SysML Usage::mayTimeVary (SysML v2 §8.3.6.4).
func (*Model) VariantOf ¶
VariantOf returns the variant of sym named name, and whether sym offers one.
func (*Model) VariantsOf ¶
VariantsOf returns the variants sym offers, in declaration order: those declared for it and those it inherits from the variation it specializes. A `variant` inherited from a type that is not a variation point offers no choice, so it is an ordinary member here too.
func (*Model) VariationPointOwning ¶
VariationPointOwning returns the variation point sym is a variant of, or nil when sym is not a variant of one: unlike VariationOwning it accepts an owner that is a variation by specialization without restating the modifier.
func (*Model) ViewConformance ¶
func (m *Model) ViewConformance(view *symbols.Symbol, eval ConcernEvaluator) (*ViewConformance, error)
ViewConformance evaluates whether view conforms to the viewpoints its body satisfies: every concern a viewpoint frames must be framed by the view and must hold of what the view exposes. A nil evaluator answers the structural question alone; a non-view is ErrNotAView, a view satisfying nothing no error.
func (*Model) ViewRenderings ¶
func (m *Model) ViewRenderings(view *symbols.Symbol) ([]ViewRendering, error)
ViewRenderings returns the rendering members of view: its own in declaration order, followed by those of the views it specializes, once each. A view stating no rendering returns none, which is no error; a non-view is ErrNotAView. An abstract member states no rendering — every view inherits the standard library's `abstract ref rendering viewRendering` — so it is left out.
type PartyBinding ¶
type PartyBinding struct {
Party *symbols.Symbol
Kind string // "stakeholder" or "actor"
Name string
Owner *symbols.Symbol
Bound *symbols.Symbol
Reason string
}
PartyBinding is a stakeholder or actor of a viewpoint or view and what it is bound to. Reason is empty when the binding resolves.
type PortFeature ¶
type PortFeature struct {
Symbol *symbols.Symbol
Name string
Direction ast.FeatureDirection
}
PortFeature is a feature of a port, with the direction it has as seen through the port that was queried.
type PrimType ¶
type PrimType int
PrimType classifies a symbol against the stdlib scalar value types (`ScalarValues`). It is the lattice the expression type checker reasons over; anything outside it (parts, items, enumerations, collections, unresolved names) is PrimUnknown and suppresses checking.
func PrimWiden ¶
PrimWiden returns the more general of two numeric types, or PrimUnknown if either is not numeric.
type Range ¶
Range is an extracted multiplicity [lower..upper]. For the single-bound form `[n]`, Lower and Upper are both n, except for `[*]`, whose lower bound is 0 (KerML 1.0 §8.2.5.11, multiplicity textual notation).
func AssumedRange ¶
func AssumedRange() Range
AssumedRange is the multiplicity of a feature that declares none: a feature holds exactly one value unless it says otherwise (KerML 1.0 §7.4.5). It is the one notion of implicit multiplicity every layer holds a feature to.
func (Range) CountViolation ¶
CountViolation returns why count values do not conform to the range, phrased for a diagnostic, or "" when they conform or a bound is not evaluable. It is the one wording for a count against a multiplicity, shared by the static check on a bound value and the runtime check on a materialized default.
func (Range) LowerLeUpper ¶
LowerLeUpper reports whether a range's lower bound does not exceed its upper bound. It returns ok=false when either bound is unknown (not evaluable), so callers can skip the check. An infinite upper always satisfies the ordering; an infinite lower is only valid when the upper is also infinite.
type Scale ¶
Scale is a unit's scale factor as a ratio kept unevaluated, so a conversion whose factor is exact stays exact: `5.4 [km/h]` is `5.4·1000/3600 = 1.5 [m/s]`, where evaluating 1000/3600 first would answer 1.4999999999999998 and make a requirement's `<=` at its boundary come out wrong.
func (Scale) IsZero ¶
IsZero reports whether the ratio is zero or undefined, which no unit's scale factor is.
func (Scale) Pow ¶
Pow raises the ratio to an exponent. A negative exponent inverts the ratio rather than raising it to a negative power, which would evaluate it: `h^-1` stays 1/3600 instead of becoming 0.0002777777777777778.
type ShadowedUnitError ¶
type ShadowedUnitError struct {
Name string // the name as written in unit position
Resolved *symbols.Symbol // the declaration the name resolved to
Shadowed *symbols.Symbol // the measurement unit that declaration hid, or nil
// ShadowedName is the qualified name of Shadowed, which is how a message names
// a unit the model did not write.
ShadowedName string
Namespace string // qualified name of the namespace Resolved was declared in
Suggestion string // qualified spelling that names the shadowed unit
}
ShadowedUnitError reports a name in unit position that resolved to a declaration which is not a measurement unit, naming the unit it hid.
func (*ShadowedUnitError) Error ¶
func (e *ShadowedUnitError) Error() string
func (*ShadowedUnitError) Unwrap ¶
func (e *ShadowedUnitError) Unwrap() error
Unwrap reports the error as a not-a-unit error, which is the condition a caller tests for.
type UnitFactor ¶
UnitFactor is one base unit raised to an exponent.
type UnitTerm ¶
type UnitTerm struct {
Scale Scale
Factors []UnitFactor
}
UnitTerm is a measurement unit reduced to a scale factor over base units: the product of Scale and each base unit raised to its exponent. `km/h` reduces to Scale 1000/3600 over `SI::m` and `SI::s^-1`, which is what makes two units comparable — they are commensurable when their factors agree, and a magnitude converts between them by the ratio of their scales.
Factors are ordered by base-unit qualified name and carry no zero exponents, so two terms over the same base units compare element-wise.
func (UnitTerm) Commensurable ¶
Commensurable reports whether both terms are expressed over the same base units with the same exponents, so a magnitude in one converts to the other.
func (UnitTerm) DimensionKey ¶
DimensionKey identifies the base units the term is over, exponents included but scale excluded: two terms share a key exactly when they are commensurable.
func (UnitTerm) Dimensionless ¶
Dimensionless reports whether the term has no base units, as a count or a ratio of like quantities has.
func (UnitTerm) Normalized ¶
Normalized restores the term's invariant: repeated base units summed, those that cancel dropped, the rest ordered by name. For a term built from outside.
type Value ¶
Value is a model-level-evaluated constant. Only the field selected by Kind is meaningful. This is a deliberately small subset: the constraint checks that need evaluation (multiplicity bounds, some guards) operate over integers, reals, booleans, and the infinity bound.
func EvalBinary ¶
func EvalBinary(op ast.OperatorKind, l, r Value) (Value, bool)
EvalBinary evaluates a binary operator on two constant values. Returns (result, true) if successful, (zero, false) otherwise.
func EvalUnary ¶
func EvalUnary(op ast.OperatorKind, v Value) (Value, bool)
EvalUnary evaluates a unary operator on a constant value. Returns (result, true) if successful, (zero, false) otherwise.
func Pow ¶
Pow evaluates l ** r (equivalently l ^ r) — the single implementation the constant folder and the runtime share, so a folded and an evaluated exponentiation agree. Integer operands with a non-negative exponent give an Integer, as IntegerFunctions::'**' declares; every other numeric combination gives a Real, as RealFunctions::'**' does. A result that is not a finite value of that kind is an error rather than a NaN, an infinity, or a wrapped integer: the folder declines on it, the runtime reports it.
type Verdict ¶
type Verdict int
Verdict is the outcome of a conformance question. A verdict is never guessed: what could not be evaluated is VerdictUnevaluable with a reason, never a pass.
const ( // VerdictConforms is a question answered in the affirmative. VerdictConforms Verdict = iota // VerdictViolated is a question answered in the negative: a concern the view // does not frame, or a condition that evaluated to false. VerdictViolated // VerdictUnevaluable is a question no answer could be reached for. VerdictUnevaluable // VerdictNotEvaluated is a structurally conforming concern whose conditions // were not evaluated, because the caller supplied no evaluator. VerdictNotEvaluated )
type ViewConformance ¶
type ViewConformance struct {
View *symbols.Symbol
Exposed []*symbols.Symbol
Viewpoints []ViewpointConformance
Verdict Verdict
}
ViewConformance is a view's conformance to the viewpoints it satisfies.
type ViewRendering ¶
type ViewRendering struct {
// Member is the `render`/`rendering` member itself.
Member *symbols.Symbol
// Ref is the rendering as written, empty for a member naming none.
Ref string
// Rendering is what Ref resolves to, nil when it names nothing or does not
// resolve.
Rendering *symbols.Symbol
// DeclaredIn is the view declaring the member: the view itself, or one it
// specializes.
DeclaredIn *symbols.Symbol
}
ViewRendering is one rendering member of a view, and the rendering it names.
type ViewpointConformance ¶
type ViewpointConformance struct {
// Satisfy is the satisfy usage, Ref its target as written and Viewpoint the
// viewpoint it resolves to, nil when that is unresolved or no viewpoint.
Satisfy *symbols.Symbol
Ref string
Viewpoint *symbols.Symbol
// SatisfiedIn is the view declaring the satisfy: the view itself or one it
// specializes.
SatisfiedIn *symbols.Symbol
Concerns []ConcernConformance
Parties []PartyBinding
Verdict Verdict
Reason string
}
ViewpointConformance is what became of one `satisfy` in a view's body.
type ViolationReporter ¶
ViolationReporter tells whether an evaluator's error is a false verdict rather than a failure to evaluate. Without it, every error reads as a failure.
Source Files
¶
- annotated_element.go
- annotations.go
- conformance.go
- conjugation.go
- connector.go
- dimension.go
- enumeration.go
- eval.go
- evaluable.go
- expose.go
- exprtype.go
- filter.go
- implicit.go
- masking.go
- members.go
- metadata.go
- metadata_body.go
- model.go
- multiplicity.go
- redefinition.go
- redefinition_conformance.go
- reference.go
- rendering.go
- roles.go
- units.go
- usage.go
- variation.go