type Puppet::AST = TypeSet[{ pcore_version => '1.0.0', types => { Locator => Object[{ attributes => { 'string' => String, 'file' => String, 'line_index' => { type => Optional[Array[Integer]], value => undef } } }], PopsObject => Object[{ }], Positioned => Object[{ parent => PopsObject, attributes => { 'locator' => { type => Locator, kind => reference }, 'offset' => Integer, 'length' => Integer, 'file' => { type => String, kind => derived, annotations => { RubyMethod => { 'body' => '@locator.file' } } }, 'line' => { type => Integer, kind => derived, annotations => { RubyMethod => { 'body' => '@locator.line_for_offset(@offset)' } } }, 'pos' => { type => Integer, kind => derived, annotations => { RubyMethod => { 'body' => '@locator.pos_on_line(@offset)' } } } }, equality => [] }], Expression => Object[{ parent => Positioned }], Nop => Object[{ parent => Expression }], BinaryExpression => Object[{ parent => Expression, attributes => { 'left_expr' => Expression, 'right_expr' => Expression } }], UnaryExpression => Object[{ parent => Expression, attributes => { 'expr' => Expression } }], ParenthesizedExpression => Object[{ parent => UnaryExpression }], NotExpression => Object[{ parent => UnaryExpression }], UnaryMinusExpression => Object[{ parent => UnaryExpression }], UnfoldExpression => Object[{ parent => UnaryExpression }], AssignmentExpression => Object[{ parent => BinaryExpression, attributes => { 'operator' => Enum['+=', '-=', '='] } }], ArithmeticExpression => Object[{ parent => BinaryExpression, attributes => { 'operator' => Enum['%', '*', '+', '-', '/', '<<', '>>'] } }], RelationshipExpression => Object[{ parent => BinaryExpression, attributes => { 'operator' => Enum['->', '<-', '<~', '~>'] } }], AccessExpression => Object[{ parent => Expression, attributes => { 'left_expr' => Expression, 'keys' => { type => Array[Expression], value => [] } } }], ComparisonExpression => Object[{ parent => BinaryExpression, attributes => { 'operator' => Enum['!=', '<', '<=', '==', '>', '>='] } }], MatchExpression => Object[{ parent => BinaryExpression, attributes => { 'operator' => Enum['!~', '=~'] } }], InExpression => Object[{ parent => BinaryExpression }], BooleanExpression => Object[{ parent => BinaryExpression }], AndExpression => Object[{ parent => BooleanExpression }], OrExpression => Object[{ parent => BooleanExpression }], LiteralList => Object[{ parent => Expression, attributes => { 'values' => { type => Array[Expression], value => [] } } }], KeyedEntry => Object[{ parent => Positioned, attributes => { 'key' => Expression, 'value' => Expression } }], LiteralHash => Object[{ parent => Expression, attributes => { 'entries' => { type => Array[KeyedEntry], value => [] } } }], BlockExpression => Object[{ parent => Expression, attributes => { 'statements' => { type => Array[Expression], value => [] } } }], ApplyBlockExpression => Object[{ parent => BlockExpression, }], CaseOption => Object[{ parent => Expression, attributes => { 'values' => Array[Expression, 1, default], 'then_expr' => { type => Optional[Expression], value => undef } } }], CaseExpression => Object[{ parent => Expression, attributes => { 'test' => Expression, 'options' => { type => Array[CaseOption], value => [] } } }], QueryExpression => Object[{ parent => Expression, attributes => { 'expr' => { type => Optional[Expression], value => undef } } }], ExportedQuery => Object[{ parent => QueryExpression }], VirtualQuery => Object[{ parent => QueryExpression }], AbstractAttributeOperation => Object[{ parent => Positioned }], AttributeOperation => Object[{ parent => AbstractAttributeOperation, attributes => { 'attribute_name' => String, 'operator' => Enum['+>', '=>'], 'value_expr' => Expression } }], AttributesOperation => Object[{ parent => AbstractAttributeOperation, attributes => { 'expr' => Expression } }], CollectExpression => Object[{ parent => Expression, attributes => { 'type_expr' => Expression, 'query' => QueryExpression, 'operations' => { type => Array[AbstractAttributeOperation], value => [] } } }], Parameter => Object[{ parent => Positioned, attributes => { 'name' => String, 'value' => { type => Optional[Expression], value => undef }, 'type_expr' => { type => Optional[Expression], value => undef }, 'captures_rest' => { type => Optional[Boolean], value => undef } } }], Definition => Object[{ parent => Expression }], NamedDefinition => Object[{ parent => Definition, attributes => { 'name' => String, 'parameters' => { type => Array[Parameter], value => [] }, 'body' => { type => Optional[Expression], value => undef } } }], FunctionDefinition => Object[{ parent => NamedDefinition, attributes => { 'return_type' => { type => Optional[Expression], value => undef } } }], ResourceTypeDefinition => Object[{ parent => NamedDefinition }], QRefDefinition => Object[{ parent => Definition, attributes => { 'name' => String } }], TypeAlias => Object[{ parent => QRefDefinition, attributes => { 'type_expr' => { type => Optional[Expression], value => undef } } }], TypeMapping => Object[{ parent => Definition, attributes => { 'type_expr' => { type => Optional[Expression], value => undef }, 'mapping_expr' => { type => Optional[Expression], value => undef } } }], TypeDefinition => Object[{ parent => QRefDefinition, attributes => { 'parent' => { type => Optional[String], value => undef }, 'body' => { type => Optional[Expression], value => undef } } }], NodeDefinition => Object[{ parent => Definition, attributes => { 'parent' => { type => Optional[Expression], value => undef }, 'host_matches' => Array[Expression, 1, default], 'body' => { type => Optional[Expression], value => undef } } }], HeredocExpression => Object[{ parent => Expression, attributes => { 'syntax' => { type => Optional[String], value => undef }, 'text_expr' => Expression } }], HostClassDefinition => Object[{ parent => NamedDefinition, attributes => { 'parent_class' => { type => Optional[String], value => undef } } }], PlanDefinition => Object[{ parent => FunctionDefinition, }], LambdaExpression => Object[{ parent => Expression, attributes => { 'parameters' => { type => Array[Parameter], value => [] }, 'body' => { type => Optional[Expression], value => undef }, 'return_type' => { type => Optional[Expression], value => undef } } }], ApplyExpression => Object[{ parent => Expression, attributes => { 'arguments' => { type => Array[Expression], value => [] }, 'body' => { type => Optional[Expression], value => undef } } }], IfExpression => Object[{ parent => Expression, attributes => { 'test' => Expression, 'then_expr' => { type => Optional[Expression], value => undef }, 'else_expr' => { type => Optional[Expression], value => undef } } }], UnlessExpression => Object[{ parent => IfExpression }], CallExpression => Object[{ parent => Expression, attributes => { 'rval_required' => { type => Boolean, value => false }, 'functor_expr' => Expression, 'arguments' => { type => Array[Expression], value => [] }, 'lambda' => { type => Optional[Expression], value => undef } } }], CallFunctionExpression => Object[{ parent => CallExpression }], CallNamedFunctionExpression => Object[{ parent => CallExpression }], CallMethodExpression => Object[{ parent => CallExpression }], Literal => Object[{ parent => Expression }], LiteralValue => Object[{ parent => Literal }], LiteralRegularExpression => Object[{ parent => LiteralValue, attributes => { 'value' => Any, 'pattern' => String } }], LiteralString => Object[{ parent => LiteralValue, attributes => { 'value' => String } }], LiteralNumber => Object[{ parent => LiteralValue }], LiteralInteger => Object[{ parent => LiteralNumber, attributes => { 'radix' => { type => Integer, value => 10 }, 'value' => Integer } }], LiteralFloat => Object[{ parent => LiteralNumber, attributes => { 'value' => Float } }], LiteralUndef => Object[{ parent => Literal }], LiteralDefault => Object[{ parent => Literal }], LiteralBoolean => Object[{ parent => LiteralValue, attributes => { 'value' => Boolean } }], TextExpression => Object[{ parent => UnaryExpression }], ConcatenatedString => Object[{ parent => Expression, attributes => { 'segments' => { type => Array[Expression], value => [] } } }], QualifiedName => Object[{ parent => LiteralValue, attributes => { 'value' => String } }], ReservedWord => Object[{ parent => LiteralValue, attributes => { 'word' => String, 'future' => { type => Optional[Boolean], value => undef } } }], QualifiedReference => Object[{ parent => LiteralValue, attributes => { 'cased_value' => String, 'value' => { type => String, kind => derived, annotations => { RubyMethod => { 'body' => '@cased_value.downcase' } } } } }], VariableExpression => Object[{ parent => UnaryExpression }], EppExpression => Object[{ parent => Expression, attributes => { 'parameters_specified' => { type => Optional[Boolean], value => undef }, 'body' => { type => Optional[Expression], value => undef } } }], RenderStringExpression => Object[{ parent => LiteralString }], RenderExpression => Object[{ parent => UnaryExpression }], ResourceBody => Object[{ parent => Positioned, attributes => { 'title' => { type => Optional[Expression], value => undef }, 'operations' => { type => Array[AbstractAttributeOperation], value => [] } } }], AbstractResource => Object[{ parent => Expression, attributes => { 'form' => { type => Enum['exported', 'regular', 'virtual'], value => 'regular' }, 'virtual' => { type => Boolean, kind => derived, annotations => { RubyMethod => { 'body' => "@form == 'virtual' || @form == 'exported'" } } }, 'exported' => { type => Boolean, kind => derived, annotations => { RubyMethod => { 'body' => "@form == 'exported'" } } } } }], ResourceExpression => Object[{ parent => AbstractResource, attributes => { 'type_name' => Expression, 'bodies' => { type => Array[ResourceBody], value => [] } } }], ResourceDefaultsExpression => Object[{ parent => AbstractResource, attributes => { 'type_ref' => { type => Optional[Expression], value => undef }, 'operations' => { type => Array[AbstractAttributeOperation], value => [] } } }], ResourceOverrideExpression => Object[{ parent => AbstractResource, attributes => { 'resources' => Expression, 'operations' => { type => Array[AbstractAttributeOperation], value => [] } } }], SelectorEntry => Object[{ parent => Positioned, attributes => { 'matching_expr' => Expression, 'value_expr' => Expression } }], SelectorExpression => Object[{ parent => Expression, attributes => { 'left_expr' => Expression, 'selectors' => { type => Array[SelectorEntry], value => [] } } }], NamedAccessExpression => Object[{ parent => BinaryExpression }], Program => Object[{ parent => PopsObject, attributes => { 'body' => { type => Optional[Expression], value => undef }, 'definitions' => { type => Array[Definition], kind => reference, value => [] }, 'source_text' => { type => String, kind => derived, annotations => { RubyMethod => { 'body' => '@locator.string' } } }, 'source_ref' => { type => String, kind => derived, annotations => { RubyMethod => { 'body' => '@locator.file' } } }, 'line_offsets' => { type => Array[Integer], kind => derived, annotations => { RubyMethod => { 'body' => '@locator.line_index' } } }, 'locator' => Locator } }] } }]