Class: Puppet::Pops::Validation::Checker4_0 Private
- Inherits:
-
Evaluator::LiteralEvaluator
- Object
- Evaluator::LiteralEvaluator
- Puppet::Pops::Validation::Checker4_0
- Includes:
- Evaluator::ExternalSyntaxSupport
- Defined in:
- lib/puppet/pops/validation/checker4_0.rb
Overview
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
This is however mostly valuable when validating model to model transformations, and is therefore T.B.D
Direct Known Subclasses
Constant Summary collapse
- RESERVED_TYPE_NAMES =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
{ 'type' => true, 'any' => true, 'unit' => true, 'scalar' => true, 'boolean' => true, 'numeric' => true, 'integer' => true, 'float' => true, 'collection' => true, 'array' => true, 'hash' => true, 'tuple' => true, 'struct' => true, 'variant' => true, 'optional' => true, 'enum' => true, 'regexp' => true, 'pattern' => true, 'runtime' => true, 'init' => true, 'object' => true, 'sensitive' => true, 'semver' => true, 'semverrange' => true, 'string' => true, 'timestamp' => true, 'timespan' => true, 'typeset' => true, }
- FUTURE_RESERVED_WORDS =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
{ 'plan' => true }
- NO_NAMESPACE =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
:no_namespace
- NO_PATH =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
:no_path
- BAD_MODULE_FILE =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
:bad_module_file
- RESERVED_PARAMETERS =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
{ 'name' => true, 'title' => true, }
Constants inherited from Evaluator::LiteralEvaluator
Evaluator::LiteralEvaluator::COMMA_SEPARATOR
Instance Attribute Summary collapse
- #acceptor ⇒ Object readonly private
- #migration_checker ⇒ Object readonly private
Class Method Summary collapse
- .check_visitor ⇒ Object private
Instance Method Summary collapse
-
#assign(o, via_index = false) ⇒ Object
private
Checks the LHS of an assignment (is it assignable?).
- #assign_AccessExpression(o, via_index) ⇒ Object private
- #assign_LiteralList(o, via_index) ⇒ Object private
- #assign_Object(o, via_index) ⇒ Object private
-
#assign_VariableExpression(o, via_index) ⇒ Object
private
—ASSIGNMENT CHECKS.
-
#check(o) ⇒ Object
private
Performs regular validity check.
- #check_AccessExpression(o) ⇒ Object private
- #check_AssignmentExpression(o) ⇒ Object private
-
#check_AttributeOperation(o) ⇒ Object
private
Checks that operation with :+> is contained in a ResourceOverride or Collector.
- #check_AttributesOperation(o) ⇒ Object private
- #check_BinaryExpression(o) ⇒ Object private
- #check_BlockExpression(o) ⇒ Object private
- #check_CallNamedFunctionExpression(o) ⇒ Object private
- #check_CaseExpression(o) ⇒ Object private
- #check_CaseOption(o) ⇒ Object private
- #check_CollectExpression(o) ⇒ Object private
- #check_EppExpression(o) ⇒ Object private
- #check_Factory(o) ⇒ Object private
- #check_FunctionDefinition(o) ⇒ Object private
- #check_HeredocExpression(o) ⇒ Object private
- #check_HostClassDefinition(o) ⇒ Object private
- #check_IfExpression(o) ⇒ Object private
- #check_KeyedEntry(o) ⇒ Object private
- #check_LambdaExpression(o) ⇒ Object private
- #check_LiteralHash(o) ⇒ Object private
- #check_LiteralInteger(o) ⇒ Object private
- #check_LiteralList(o) ⇒ Object private
- #check_MethodCallExpression(o) ⇒ Object private
-
#check_NamedAccessExpression(o) ⇒ Object
private
Only used for function names, grammar should not be able to produce something faulty, but check anyway if model is created programmatically (it will fail in transformation to AST for sure).
-
#check_NamedDefinition(o) ⇒ Object
private
for ‘class’, ‘define’, and function.
- #check_NodeDefinition(o) ⇒ Object private
-
#check_Object(o) ⇒ Object
private
—CHECKS.
- #check_Parameter(o) ⇒ Object private
-
#check_QualifiedName(o) ⇒ Object
private
No checking takes place - all expressions using a QualifiedName need to check.
-
#check_QualifiedReference(o) ⇒ Object
private
Checks that the value is a valid UpperCaseWord (a CLASSREF), and optionally if it contains a hypen.
- #check_QueryExpression(o) ⇒ Object private
-
#check_RelationshipExpression(o) ⇒ Object
private
relationship_side: resource | resourceref | collection | variable | quotedtext | selector | casestatement | hasharrayaccesses.
- #check_ReservedWord(o) ⇒ Object private
- #check_ResourceBody(o) ⇒ Object private
- #check_ResourceDefaultsExpression(o) ⇒ Object private
- #check_ResourceExpression(o) ⇒ Object private
- #check_ResourceOverrideExpression(o) ⇒ Object private
- #check_ResourceTypeDefinition(o) ⇒ Object private
- #check_SelectorEntry(o) ⇒ Object private
- #check_SelectorExpression(o) ⇒ Object private
- #check_TypeAlias(o) ⇒ Object private
- #check_TypeDefinition(o) ⇒ Object private
- #check_TypeMapping(o) ⇒ Object private
- #check_UnaryExpression(o) ⇒ Object private
- #check_UnlessExpression(o) ⇒ Object private
-
#check_VariableExpression(o) ⇒ Object
private
Checks that variable is either strictly 0, or a non 0 starting decimal number, or a valid VAR_NAME.
- #container(index = -1)) ⇒ Object private
- #dir_to_names(relative_path) ⇒ Object private
-
#ends_with_idem(o) ⇒ Object
private
Returns the last expression in a block, or the expression, if that expression is idem.
-
#hostname(o, semantic) ⇒ Object
private
Performs check if this is a vaid hostname expression.
-
#hostname_Array(o, semantic) ⇒ Object
private
Transforms Array of host matching expressions into a (Ruby) array of AST::HostName.
- #hostname_ConcatenatedString(o, semantic) ⇒ Object private
- #hostname_LiteralDefault(o, semantic) ⇒ Object private
- #hostname_LiteralNumber(o, semantic) ⇒ Object private
- #hostname_LiteralRegularExpression(o, semantic) ⇒ Object private
- #hostname_LiteralValue(o, semantic) ⇒ Object private
- #hostname_Object(o, semantic) ⇒ Object private
- #hostname_QualifiedName(o, semantic) ⇒ Object private
- #hostname_QualifiedReference(o, semantic) ⇒ Object private
- #hostname_String(o, semantic) ⇒ Object private
-
#idem(o) ⇒ Boolean
private
Checks if the expression has side effect (‘idem’ is latin for ‘the same’, here meaning that the evaluation state is known to be unchanged after the expression has been evaluated).
- #idem_AccessExpression(o) ⇒ Object private
-
#idem_ApplyExpression(o) ⇒ Object
private
An apply expression exists purely for the side effect of applying a catalog somewhere, so it always has side effects.
- #idem_AssignmentExpression(o) ⇒ Object private
- #idem_BinaryExpression(o) ⇒ Object private
- #idem_BlockExpression(o) ⇒ Object private
-
#idem_CaseExpression(o) ⇒ Object
private
Case expression is idem, if test, and all options are idem.
-
#idem_CaseOption(o) ⇒ Object
private
An option is idem if values and the then_expression are idem.
-
#idem_ConcatenatedString(o) ⇒ Object
private
Returns true even though there may be interpolated expressions that have side effect.
- #idem_Factory(o) ⇒ Object private
-
#idem_HeredocExpression(o) ⇒ Object
private
Heredoc is just a string, but may contain interpolated string (which may have side effects).
- #idem_IfExpression(o) ⇒ Object private
- #idem_Literal(o) ⇒ Object private
- #idem_LiteralHash(o) ⇒ Object private
- #idem_LiteralList(o) ⇒ Object private
- #idem_MatchExpression(o) ⇒ Object private
- #idem_NilClass(o) ⇒ Object private
- #idem_Nop(o) ⇒ Object private
-
#idem_Object(o) ⇒ Object
private
–IDEM CHECK.
-
#idem_ParenthesizedExpression(o) ⇒ Object
private
Allow (no-effect parentheses) to be used around a productive expression.
- #idem_RelationshipExpression(o) ⇒ Object private
- #idem_RenderExpression(o) ⇒ Object private
- #idem_RenderStringExpression(o) ⇒ Object private
-
#idem_SelectorExpression(o) ⇒ Object
private
May technically have side effects inside the Selector, but this is bad design - treat as idem.
-
#idem_UnaryExpression(o) ⇒ Object
private
Handles UnaryMinusExpression, NotExpression, VariableExpression.
- #initial_manifest?(path, manifest_setting) ⇒ Boolean private
-
#initialize(diagnostics_producer) ⇒ Checker4_0
constructor
private
Initializes the validator with a diagnostics producer.
- #internal_check_capture_last(o) ⇒ Object private
- #internal_check_file_namespace(o) ⇒ Object private
- #internal_check_future_reserved_word(o, name) ⇒ Object private
- #internal_check_illegal_assignment(o) ⇒ Object private
- #internal_check_no_capture(o, container = o) ⇒ Object private
- #internal_check_no_idem_last(o) ⇒ Object private
- #internal_check_parameter_name_uniqueness(o) ⇒ Object private
- #internal_check_parameter_type_literal(o) ⇒ Object private
- #internal_check_reserved_params(o) ⇒ Object private
- #internal_check_reserved_type_name(o, name) ⇒ Object private
- #internal_check_return_type(o) ⇒ Object private
- #internal_check_top_construct_in_module(prog) ⇒ Object private
- #internal_check_type_ref(o, r) ⇒ Object private
- #namespace_for_file(file) ⇒ Object private
- #pattern_with_replacement?(o) ⇒ Boolean private
-
#query(o) ⇒ Object
private
Performs check if this is valid as a query.
-
#query_BooleanExpression(o) ⇒ Object
private
Allows AND, OR, and checks if left/right are allowed in query.
-
#query_ComparisonExpression(o) ⇒ Object
private
Puppet AST only allows == and !=.
- #query_LiteralBoolean(o) ⇒ Object private
- #query_LiteralNumber(o) ⇒ Object private
- #query_LiteralString(o) ⇒ Object private
-
#query_Object(o) ⇒ Object
private
Anything not explicitly allowed is flagged as error.
- #query_ParenthesizedExpression(o) ⇒ Object private
- #query_QualifiedName(o) ⇒ Object private
- #query_VariableExpression(o) ⇒ Object private
-
#relation(o) ⇒ Object
private
Performs check if this is valid as a relationship side.
- #relation_CollectExpression(o) ⇒ Object private
- #relation_Object(o) ⇒ Object private
- #relation_RelationshipExpression(o) ⇒ Object private
- #resource_without_title?(o) ⇒ Boolean private
-
#rvalue(o) ⇒ Object
private
Performs check if this is valid as a rvalue.
- #rvalue_CollectExpression(o) ⇒ Object private
- #rvalue_Definition(o) ⇒ Object private
-
#rvalue_Expression(o) ⇒ Object
private
By default, all expressions are reported as being rvalues Implement specific rvalue checks for those that are not.
- #rvalue_NodeDefinition(o) ⇒ Object private
- #rvalue_UnaryExpression(o) ⇒ Object private
-
#top(definition, idx = -1)) ⇒ Object
private
—TOP CHECK Performs check if this is valid as a container of a definition (class, define, node).
- #type_ref?(o) ⇒ Boolean private
- #valid_top_construct?(o) ⇒ Boolean private
-
#validate(model) ⇒ Object
private
Validates the entire model by visiting each model element and calling ‘check`.
-
#varname_to_s(o) ⇒ Object
private
Produces string part of something named, or nil if not a QualifiedName or QualifiedReference.
Methods included from Evaluator::ExternalSyntaxSupport
#assert_external_syntax, #checker_for_syntax, #lookup_keys_for_syntax
Methods inherited from Evaluator::LiteralEvaluator
#literal, #literal_AccessExpression, #literal_ConcatenatedString, #literal_Factory, #literal_LiteralBoolean, #literal_LiteralDefault, #literal_LiteralHash, #literal_LiteralList, #literal_LiteralNumber, #literal_LiteralRegularExpression, #literal_LiteralString, #literal_LiteralUndef, #literal_Object, #literal_Program, #literal_QualifiedName, #literal_QualifiedReference, #literal_UnaryMinusExpression
Constructor Details
#initialize(diagnostics_producer) ⇒ Checker4_0
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Initializes the validator with a diagnostics producer. This object must respond to ‘:will_accept?` and `:accept`.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 33 def initialize(diagnostics_producer) super() @@rvalue_visitor ||= Visitor.new(nil, "rvalue", 0, 0) @@hostname_visitor ||= Visitor.new(nil, "hostname", 1, 2) @@assignment_visitor ||= Visitor.new(nil, "assign", 0, 1) @@query_visitor ||= Visitor.new(nil, "query", 0, 0) @@relation_visitor ||= Visitor.new(nil, "relation", 0, 0) @@idem_visitor ||= Visitor.new(nil, "idem", 0, 0) @check_visitor = self.class.check_visitor @acceptor = diagnostics_producer # Use null migration checker unless given in context @migration_checker = (Puppet.lookup(:migration_checker) { Migration::MigrationChecker.new() }) end |
Instance Attribute Details
#acceptor ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
21 22 23 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 21 def acceptor @acceptor end |
#migration_checker ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
22 23 24 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 22 def migration_checker @migration_checker end |
Class Method Details
.check_visitor ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
24 25 26 27 28 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 24 def self.check_visitor # Class instance variable rather than Class variable because methods visited # may be overridden in subclass @check_visitor ||= Visitor.new(nil, 'check', 0, 0) end |
Instance Method Details
#assign(o, via_index = false) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Checks the LHS of an assignment (is it assignable?). If args is true, assignment via index is checked.
124 125 126 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 124 def assign(o, via_index = false) @@assignment_visitor.visit_this_1(self, o, via_index) end |
#assign_AccessExpression(o, via_index) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
165 166 167 168 169 170 171 172 173 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 165 def assign_AccessExpression(o, via_index) # Are indexed assignments allowed at all ? $x[x] = '...' if acceptor.will_accept? Issues::ILLEGAL_INDEXED_ASSIGNMENT acceptor.accept(Issues::ILLEGAL_INDEXED_ASSIGNMENT, o) else # Then the left expression must be assignable-via-index assign(o.left_expr, true) end end |
#assign_LiteralList(o, via_index) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
175 176 177 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 175 def assign_LiteralList(o, via_index) o.values.each { |x| assign(x) } end |
#assign_Object(o, via_index) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
179 180 181 182 183 184 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 179 def assign_Object(o, via_index) # Can not assign to anything else (differentiate if this is via index or not) # i.e. 10 = 'hello' vs. 10['x'] = 'hello' (the root is reported as being in error in both cases) # acceptor.accept(via_index ? Issues::ILLEGAL_ASSIGNMENT_VIA_INDEX : Issues::ILLEGAL_ASSIGNMENT, o) end |
#assign_VariableExpression(o, via_index) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
—ASSIGNMENT CHECKS
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 149 def assign_VariableExpression(o, via_index) varname_string = varname_to_s(o.expr) if varname_string =~ Patterns::NUMERIC_VAR_NAME acceptor.accept(Issues::ILLEGAL_NUMERIC_ASSIGNMENT, o, :varname => varname_string) end # Can not assign to something in another namespace (i.e. a '::' in the name is not legal) if acceptor.will_accept? Issues::CROSS_SCOPE_ASSIGNMENT if varname_string =~ /::/ acceptor.accept(Issues::CROSS_SCOPE_ASSIGNMENT, o, :name => varname_string) end end # TODO: Could scan for reassignment of the same variable if done earlier in the same container # Or if assigning to a parameter (more work). end |
#check(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Performs regular validity check
66 67 68 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 66 def check(o) @check_visitor.visit_this_0(self, o) end |
#check_AccessExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
195 196 197 198 199 200 201 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 195 def check_AccessExpression(o) # Only min range is checked, all other checks are RT checks as they depend on the resulting type # of the LHS. if o.keys.size < 1 acceptor.accept(Issues::MISSING_INDEX, o) end end |
#check_AssignmentExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
203 204 205 206 207 208 209 210 211 212 213 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 203 def check_AssignmentExpression(o) case o.operator when '=' assign(o.left_expr) rvalue(o.right_expr) when '+=', '-=' acceptor.accept(Issues::APPENDS_DELETES_NO_LONGER_SUPPORTED, o, { :operator => o.operator }) else acceptor.accept(Issues::UNSUPPORTED_OPERATOR, o, { :operator => o.operator }) end end |
#check_AttributeOperation(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Checks that operation with :+> is contained in a ResourceOverride or Collector.
Parent of an AttributeOperation can be one of:
-
CollectExpression
-
ResourceOverride
-
ResourceBody (ILLEGAL this is a regular resource expression)
-
ResourceDefaults (ILLEGAL)
223 224 225 226 227 228 229 230 231 232 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 223 def check_AttributeOperation(o) if o.operator == '+>' # Append operator use is constrained p = container unless p.is_a?(Model::CollectExpression) || p.is_a?(Model::ResourceOverrideExpression) acceptor.accept(Issues::ILLEGAL_ATTRIBUTE_APPEND, o, { :name => o.attribute_name, :parent => p }) end end rvalue(o.value_expr) end |
#check_AttributesOperation(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 234 def check_AttributesOperation(o) # Append operator use is constrained p = container case p when Model::AbstractResource # do nothing when Model::CollectExpression # do nothing else # protect against just testing a snippet that has no parent, error message will be a bit strange # but it is not for a real program. parent2 = p.nil? ? o : container(-2) unless parent2.is_a?(Model::AbstractResource) acceptor.accept(Issues::UNSUPPORTED_OPERATOR_IN_CONTEXT, parent2, :operator => '* =>') end end rvalue(o.expr) end |
#check_BinaryExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
253 254 255 256 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 253 def check_BinaryExpression(o) rvalue(o.left_expr) rvalue(o.right_expr) end |
#check_BlockExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
267 268 269 270 271 272 273 274 275 276 277 278 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 267 def check_BlockExpression(o) if resource_without_title?(o) acceptor.accept(Issues::RESOURCE_WITHOUT_TITLE, o, :name => o.statements[0].value) else o.statements[0..-2].each do |statement| if idem(statement) acceptor.accept(Issues::IDEM_EXPRESSION_NOT_LAST, statement) break # only flag the first end end end end |
#check_CallNamedFunctionExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 280 def check_CallNamedFunctionExpression(o) functor = o.functor_expr if functor.is_a?(Model::QualifiedReference) || functor.is_a?(Model::AccessExpression) && functor.left_expr.is_a?(Model::QualifiedReference) # ok (a call to a type) return nil end case functor when Model::QualifiedName # ok nil when Model::RenderStringExpression # helpful to point out this easy to make Epp error acceptor.accept(Issues::ILLEGAL_EPP_PARAMETERS, o) else acceptor.accept(Issues::ILLEGAL_EXPRESSION, o.functor_expr, { :feature => 'function name', :container => o }) end end |
#check_CaseExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
322 323 324 325 326 327 328 329 330 331 332 333 334 335 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 322 def check_CaseExpression(o) rvalue(o.test) # There can only be one LiteralDefault case option value found_default = false o..each do |option| option.values.each do |value| next unless value.is_a?(Model::LiteralDefault) # Flag the second default as 'unreachable' acceptor.accept(Issues::DUPLICATE_DEFAULT, value, :container => o) if found_default found_default = true end end end |
#check_CaseOption(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
337 338 339 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 337 def check_CaseOption(o) o.values.each { |v| rvalue(v) } end |
#check_CollectExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
341 342 343 344 345 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 341 def check_CollectExpression(o) unless o.type_expr.is_a? Model::QualifiedReference acceptor.accept(Issues::ILLEGAL_EXPRESSION, o.type_expr, :feature => 'type name', :container => o) end end |
#check_EppExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
300 301 302 303 304 305 306 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 300 def check_EppExpression(o) p = container if p.is_a?(Model::LambdaExpression) internal_check_no_capture(p, o) internal_check_parameter_name_uniqueness(p) end end |
#check_Factory(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
191 192 193 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 191 def check_Factory(o) check(o.model) end |
#check_FunctionDefinition(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
463 464 465 466 467 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 463 def check_FunctionDefinition(o) check_NamedDefinition(o) internal_check_return_type(o) internal_check_parameter_name_uniqueness(o) end |
#check_HeredocExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
308 309 310 311 312 313 314 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 308 def check_HeredocExpression(o) # Only syntax check static text in heredoc during validation - dynamic text is validated by the evaluator. expr = o.text_expr if expr.is_a?(Model::LiteralString) assert_external_syntax(nil, expr.value, o.syntax, o.text_expr) end end |
#check_HostClassDefinition(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
469 470 471 472 473 474 475 476 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 469 def check_HostClassDefinition(o) check_NamedDefinition(o) internal_check_no_capture(o) internal_check_parameter_name_uniqueness(o) internal_check_reserved_params(o) internal_check_no_idem_last(o) internal_check_parameter_type_literal(o) end |
#check_IfExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
700 701 702 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 700 def check_IfExpression(o) rvalue(o.test) end |
#check_KeyedEntry(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
704 705 706 707 708 709 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 704 def check_KeyedEntry(o) rvalue(o.key) rvalue(o.value) # In case there are additional things to forbid than non-rvalues # acceptor.accept(Issues::ILLEGAL_EXPRESSION, o.key, :feature => 'hash key', :container => container) end |
#check_LambdaExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
711 712 713 714 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 711 def check_LambdaExpression(o) internal_check_capture_last(o) internal_check_return_type(o) end |
#check_LiteralHash(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
727 728 729 730 731 732 733 734 735 736 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 727 def check_LiteralHash(o) # the keys of a literal hash may be non-literal expressions. They cannot be checked. unique = Set.new o.entries.each do |entry| catch(:not_literal) do literal_key = literal(entry.key) acceptor.accept(Issues::DUPLICATE_KEY, entry, { :key => literal_key }) if unique.add?(literal_key).nil? end end end |
#check_LiteralInteger(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
720 721 722 723 724 725 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 720 def check_LiteralInteger(o) v = o.value if v < MIN_INTEGER || v > MAX_INTEGER acceptor.accept(Issues::NUMERIC_OVERFLOW, o, { :value => v }) end end |
#check_LiteralList(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
716 717 718 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 716 def check_LiteralList(o) o.values.each { |v| rvalue(v) } end |
#check_MethodCallExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
316 317 318 319 320 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 316 def check_MethodCallExpression(o) unless o.functor_expr.is_a? Model::QualifiedName acceptor.accept(Issues::ILLEGAL_EXPRESSION, o.functor_expr, :feature => 'function name', :container => o) end end |
#check_NamedAccessExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Only used for function names, grammar should not be able to produce something faulty, but check anyway if model is created programmatically (it will fail in transformation to AST for sure).
349 350 351 352 353 354 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 349 def check_NamedAccessExpression(o) name = o.right_expr unless name.is_a? Model::QualifiedName acceptor.accept(Issues::ILLEGAL_EXPRESSION, name, :feature => 'function name', :container => container) end end |
#check_NamedDefinition(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
for ‘class’, ‘define’, and function
392 393 394 395 396 397 398 399 400 401 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 392 def check_NamedDefinition(o) top(o) if o.name !~ Patterns::CLASSREF_DECL acceptor.accept(Issues::ILLEGAL_DEFINITION_NAME, o, { :name => o.name }) end internal_check_file_namespace(o) internal_check_reserved_type_name(o, o.name) internal_check_future_reserved_word(o, o.name) end |
#check_NodeDefinition(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
738 739 740 741 742 743 744 745 746 747 748 749 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 738 def check_NodeDefinition(o) # Check that hostnames are valid hostnames (or regular expressions) hostname(o.host_matches, o) top(o) violator = ends_with_idem(o.body) if violator acceptor.accept(Issues::IDEM_NOT_ALLOWED_LAST, violator, { :container => o }) unless resource_without_title?(violator) end unless o.parent.nil? acceptor.accept(Issues::ILLEGAL_NODE_INHERITANCE, o.parent) end end |
#check_Object(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
—CHECKS
188 189 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 188 def check_Object(o) end |
#check_Parameter(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
780 781 782 783 784 785 786 787 788 789 790 791 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 780 def check_Parameter(o) if o.name =~ /^(?:0x)?[0-9]+$/ acceptor.accept(Issues::ILLEGAL_NUMERIC_PARAMETER, o, :name => o.name) end unless o.name =~ Patterns::PARAM_NAME acceptor.accept(Issues::ILLEGAL_PARAM_NAME, o, :name => o.name) end return unless o.value internal_check_illegal_assignment(o.value) end |
#check_QualifiedName(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
No checking takes place - all expressions using a QualifiedName need to check. This because the rules are slightly different depending on the container (A variable allows a numeric start, but not other names). This means that (if the lexer/parser so chooses) a QualifiedName can be anything when it represents a Bare Word and evaluates to a String.
756 757 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 756 def check_QualifiedName(o) end |
#check_QualifiedReference(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Checks that the value is a valid UpperCaseWord (a CLASSREF), and optionally if it contains a hypen. DOH: QualifiedReferences are created with LOWER CASE NAMES at parse time
761 762 763 764 765 766 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 761 def check_QualifiedReference(o) # Is this a valid qualified name? if o.cased_value !~ Patterns::CLASSREF_EXT acceptor.accept(Issues::ILLEGAL_CLASSREF, o, { :name => o.cased_value }) end end |
#check_QueryExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
768 769 770 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 768 def check_QueryExpression(o) query(o.expr) if o.expr # is optional end |
#check_RelationshipExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
relationship_side: resource
| resourceref
| collection
| variable
| quotedtext
| selector
| casestatement
| hasharrayaccesses
812 813 814 815 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 812 def check_RelationshipExpression(o) relation(o.left_expr) relation(o.right_expr) end |
#check_ReservedWord(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
853 854 855 856 857 858 859 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 853 def check_ReservedWord(o) if o.future acceptor.accept(Issues::FUTURE_RESERVED_WORD, o, :word => o.word) else acceptor.accept(Issues::RESERVED_WORD, o, :word => o.word) end end |
#check_ResourceBody(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
828 829 830 831 832 833 834 835 836 837 838 839 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 828 def check_ResourceBody(o) seenUnfolding = false o.operations.each do |ao| if ao.is_a?(Model::AttributesOperation) if seenUnfolding acceptor.accept(Issues::MULTIPLE_ATTRIBUTES_UNFOLD, ao) else seenUnfolding = true end end end end |
#check_ResourceDefaultsExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
841 842 843 844 845 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 841 def check_ResourceDefaultsExpression(o) if o.form != 'regular' acceptor.accept(Issues::NOT_VIRTUALIZEABLE, o) end end |
#check_ResourceExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
817 818 819 820 821 822 823 824 825 826 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 817 def check_ResourceExpression(o) # The expression for type name cannot be statically checked - this is instead done at runtime # to enable better error message of the result of the expression rather than the static instruction. # (This can be revised as there are static constructs that are illegal, but require updating many # tests that expect the detailed reporting). type_name_expr = o.type_name if o.form && o.form != 'regular' && type_name_expr.is_a?(Model::QualifiedName) && type_name_expr.value == 'class' acceptor.accept(Issues::CLASS_NOT_VIRTUALIZABLE, o) end end |
#check_ResourceOverrideExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
847 848 849 850 851 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 847 def check_ResourceOverrideExpression(o) if o.form != 'regular' acceptor.accept(Issues::NOT_VIRTUALIZEABLE, o) end end |
#check_ResourceTypeDefinition(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
478 479 480 481 482 483 484 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 478 def check_ResourceTypeDefinition(o) check_NamedDefinition(o) internal_check_no_capture(o) internal_check_parameter_name_uniqueness(o) internal_check_reserved_params(o) internal_check_no_idem_last(o) end |
#check_SelectorEntry(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
871 872 873 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 871 def check_SelectorEntry(o) rvalue(o.matching_expr) end |
#check_SelectorExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
861 862 863 864 865 866 867 868 869 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 861 def check_SelectorExpression(o) rvalue(o.left_expr) # There can only be one LiteralDefault case option value defaults = o.selectors.select { |v| v.matching_expr.is_a?(Model::LiteralDefault) } unless defaults.size <= 1 # Flag the second default as 'unreachable' acceptor.accept(Issues::DUPLICATE_DEFAULT, defaults[1].matching_expr, :container => o) end end |
#check_TypeAlias(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
403 404 405 406 407 408 409 410 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 403 def check_TypeAlias(o) top(o) if o.name !~ Patterns::CLASSREF_EXT_DECL acceptor.accept(Issues::ILLEGAL_DEFINITION_NAME, o, { :name => o.name }) end internal_check_reserved_type_name(o, o.name) internal_check_type_ref(o, o.type_expr) end |
#check_TypeDefinition(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
456 457 458 459 460 461 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 456 def check_TypeDefinition(o) top(o) internal_check_reserved_type_name(o, o.name) # TODO: Check TypeDefinition body. For now, just error out acceptor.accept(Issues::UNSUPPORTED_EXPRESSION, o) end |
#check_TypeMapping(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 412 def check_TypeMapping(o) top(o) lhs = o.type_expr lhs_type = 0 # Not Runtime if lhs.is_a?(Model::AccessExpression) left = lhs.left_expr if left.is_a?(Model::QualifiedReference) && left.cased_value == 'Runtime' lhs_type = 1 # Runtime keys = lhs.keys # Must be a literal string or pattern replacement lhs_type = 2 if keys.size == 2 && pattern_with_replacement?(keys[1]) end end if lhs_type == 0 # This is not a TypeMapping. Something other than Runtime[] on LHS acceptor.accept(Issues::UNSUPPORTED_EXPRESSION, o) else rhs = o.mapping_expr if pattern_with_replacement?(rhs) acceptor.accept(Issues::ILLEGAL_SINGLE_TYPE_MAPPING, o) if lhs_type == 1 elsif type_ref?(rhs) acceptor.accept(Issues::ILLEGAL_REGEXP_TYPE_MAPPING, o) if lhs_type == 2 else acceptor.accept(lhs_type == 1 ? Issues::ILLEGAL_SINGLE_TYPE_MAPPING : Issues::ILLEGAL_REGEXP_TYPE_MAPPING, o) end end end |
#check_UnaryExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
875 876 877 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 875 def check_UnaryExpression(o) rvalue(o.expr) end |
#check_UnlessExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
879 880 881 882 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 879 def check_UnlessExpression(o) rvalue(o.test) # TODO: Unless may not have an else part that is an IfExpression (grammar denies this though) end |
#check_VariableExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Checks that variable is either strictly 0, or a non 0 starting decimal number, or a valid VAR_NAME
885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 885 def check_VariableExpression(o) # The expression must be a qualified name or an integer name_expr = o.expr return if name_expr.is_a?(Model::LiteralInteger) if !name_expr.is_a?(Model::QualifiedName) acceptor.accept(Issues::ILLEGAL_EXPRESSION, o, :feature => 'name', :container => o) else # name must be either a decimal string value, or a valid NAME name = o.expr.value if name[0, 1] =~ /[0-9]/ unless name =~ Patterns::NUMERIC_VAR_NAME acceptor.accept(Issues::ILLEGAL_NUMERIC_VAR_NAME, o, :name => name) end else unless name =~ Patterns::VAR_NAME acceptor.accept(Issues::ILLEGAL_VAR_NAME, o, :name => name) end end end end |
#container(index = -1)) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
61 62 63 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 61 def container(index = -1) @path[index] end |
#dir_to_names(relative_path) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 654 def dir_to_names(relative_path) # Downcasing here because check is case-insensitive path_components = relative_path.to_s.downcase.split(File::SEPARATOR) # Example definition dir: manifests in this path: # <module name>/manifests/<module subdir>/<classfile>.pp dir = path_components[1] # How can we get this result? # If it is not an initial manifest, it must come from a module, # and from the manifests dir there. This may never get used... return BAD_MODULE_FILE unless dir == 'manifests' || dir == 'functions' || dir == 'types' || dir == 'plans' names = path_components[2..-2] # Directories inside module names.unshift(path_components[0]) # Name of the module itself # Do not include name of module init file at top level of module # e.g. <module name>/manifests/init.pp filename = path_components[-1] unless path_components.length == 3 && filename == 'init.pp' names.push(filename[0..-4]) # Remove .pp from filename end names end |
#ends_with_idem(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns the last expression in a block, or the expression, if that expression is idem
138 139 140 141 142 143 144 145 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 138 def ends_with_idem(o) if o.is_a?(Model::BlockExpression) last = o.statements[-1] idem(last) ? last : nil else idem(o) ? o : nil end end |
#hostname(o, semantic) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Performs check if this is a vaid hostname expression
72 73 74 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 72 def hostname(o, semantic) @@hostname_visitor.visit_this_1(self, o, semantic) end |
#hostname_Array(o, semantic) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Transforms Array of host matching expressions into a (Ruby) array of AST::HostName
910 911 912 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 910 def hostname_Array(o, semantic) o.each { |x| hostname(x, semantic) } end |
#hostname_ConcatenatedString(o, semantic) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
928 929 930 931 932 933 934 935 936 937 938 939 940 941 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 928 def hostname_ConcatenatedString(o, semantic) # Puppet 3.1. only accepts a concatenated string without interpolated expressions the_expr = o.segments.index { |s| s.is_a?(Model::TextExpression) } if the_expr acceptor.accept(Issues::ILLEGAL_HOSTNAME_INTERPOLATION, o.segments[the_expr].expr) elsif o.segments.size() != 1 # corner case, bad model, concatenation of several plain strings acceptor.accept(Issues::ILLEGAL_HOSTNAME_INTERPOLATION, o) else # corner case, may be ok, but lexer may have replaced with plain string, this is # here if it does not hostname_String(o.segments[0], o.segments[0]) end end |
#hostname_LiteralDefault(o, semantic) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
955 956 957 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 955 def hostname_LiteralDefault(o, semantic) # always ok end |
#hostname_LiteralNumber(o, semantic) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
951 952 953 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 951 def hostname_LiteralNumber(o, semantic) # always ok end |
#hostname_LiteralRegularExpression(o, semantic) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
959 960 961 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 959 def hostname_LiteralRegularExpression(o, semantic) # always ok end |
#hostname_LiteralValue(o, semantic) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
924 925 926 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 924 def hostname_LiteralValue(o, semantic) hostname_String(o.value.to_s, o) end |
#hostname_Object(o, semantic) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
963 964 965 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 963 def hostname_Object(o, semantic) acceptor.accept(Issues::ILLEGAL_EXPRESSION, o, { :feature => 'hostname', :container => semantic }) end |
#hostname_QualifiedName(o, semantic) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
943 944 945 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 943 def hostname_QualifiedName(o, semantic) hostname_String(o.value.to_s, o) end |
#hostname_QualifiedReference(o, semantic) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
947 948 949 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 947 def hostname_QualifiedReference(o, semantic) hostname_String(o.value.to_s, o) end |
#hostname_String(o, semantic) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
914 915 916 917 918 919 920 921 922 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 914 def hostname_String(o, semantic) # The 3.x checker only checks for illegal characters - if matching /[^-\w.]/ the name is invalid, # but this allows pathological names like "a..b......c", "----" # TODO: Investigate if more illegal hostnames should be flagged. # if o =~ Patterns::ILLEGAL_HOSTNAME_CHARS acceptor.accept(Issues::ILLEGAL_HOSTNAME_CHARS, semantic, :hostname => o) end end |
#idem(o) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Checks if the expression has side effect (‘idem’ is latin for ‘the same’, here meaning that the evaluation state is known to be unchanged after the expression has been evaluated). The result is not 100% authoritative for negative answers since analysis of function behavior is not possible.
133 134 135 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 133 def idem(o) @@idem_visitor.visit_this_0(self, o) end |
#idem_AccessExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
1052 1053 1054 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1052 def idem_AccessExpression(o) true end |
#idem_ApplyExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
An apply expression exists purely for the side effect of applying a catalog somewhere, so it always has side effects
1117 1118 1119 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1117 def idem_ApplyExpression(o) false end |
#idem_AssignmentExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
1069 1070 1071 1072 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1069 def idem_AssignmentExpression(o) # Always side effect false end |
#idem_BinaryExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
1056 1057 1058 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1056 def idem_BinaryExpression(o) true end |
#idem_BlockExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
1092 1093 1094 1095 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1092 def idem_BlockExpression(o) # productive if there is at least one productive expression !o.statements.any? { |expr| !idem(expr) } end |
#idem_CaseExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Case expression is idem, if test, and all options are idem
1126 1127 1128 1129 1130 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1126 def idem_CaseExpression(o) return false unless idem(o.test) !o..any? { |opt| !idem(opt) } end |
#idem_CaseOption(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
An option is idem if values and the then_expression are idem
1133 1134 1135 1136 1137 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1133 def idem_CaseOption(o) return false if o.values.any? { |value| !idem(value) } idem(o.then_expr) end |
#idem_ConcatenatedString(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns true even though there may be interpolated expressions that have side effect. Report as idem anyway, as it is very bad design to evaluate an interpolated string for its side effect only.
1100 1101 1102 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1100 def idem_ConcatenatedString(o) true end |
#idem_Factory(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
1048 1049 1050 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1048 def idem_Factory(o) idem(o.model) end |
#idem_HeredocExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Heredoc is just a string, but may contain interpolated string (which may have side effects). This is still bad design and should be reported as idem.
1106 1107 1108 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1106 def idem_HeredocExpression(o) true end |
#idem_IfExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
1121 1122 1123 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1121 def idem_IfExpression(o) [o.test, o.then_expr, o.else_expr].all? { |e| idem(e) } end |
#idem_Literal(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
1036 1037 1038 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1036 def idem_Literal(o) true end |
#idem_LiteralHash(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
1044 1045 1046 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1044 def idem_LiteralHash(o) true end |
#idem_LiteralList(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
1040 1041 1042 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1040 def idem_LiteralList(o) true end |
#idem_MatchExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
1060 1061 1062 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1060 def idem_MatchExpression(o) false # can have side effect of setting $n match variables end |
#idem_NilClass(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
1032 1033 1034 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1032 def idem_NilClass(o) true end |
#idem_Nop(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
1028 1029 1030 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1028 def idem_Nop(o) true end |
#idem_Object(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
–IDEM CHECK
1024 1025 1026 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1024 def idem_Object(o) false end |
#idem_ParenthesizedExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Allow (no-effect parentheses) to be used around a productive expression
1080 1081 1082 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1080 def idem_ParenthesizedExpression(o) idem(o.expr) end |
#idem_RelationshipExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
1064 1065 1066 1067 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1064 def idem_RelationshipExpression(o) # Always side effect false end |
#idem_RenderExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
1084 1085 1086 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1084 def idem_RenderExpression(o) false end |
#idem_RenderStringExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
1088 1089 1090 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1088 def idem_RenderStringExpression(o) false end |
#idem_SelectorExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
May technically have side effects inside the Selector, but this is bad design - treat as idem
1111 1112 1113 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1111 def idem_SelectorExpression(o) true end |
#idem_UnaryExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Handles UnaryMinusExpression, NotExpression, VariableExpression
1075 1076 1077 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1075 def idem_UnaryExpression(o) true end |
#initial_manifest?(path, manifest_setting) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
626 627 628 629 630 631 632 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 626 def initial_manifest?(path, manifest_setting) return false if manifest_setting.nil? || manifest_setting == :no_manifest string_path = path.to_s string_path == manifest_setting || string_path.start_with?(manifest_setting) end |
#internal_check_capture_last(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
519 520 521 522 523 524 525 526 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 519 def internal_check_capture_last(o) accepted_index = o.parameters.size() - 1 o.parameters.each_with_index do |p, index| if p.captures_rest && index != accepted_index acceptor.accept(Issues::CAPTURES_REST_NOT_LAST, p, { :param_name => p.name }) end end end |
#internal_check_file_namespace(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
552 553 554 555 556 557 558 559 560 561 562 563 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 552 def internal_check_file_namespace(o) file = o.locator.file return if file.nil? || file == '' # e.g. puppet apply -e '...' file_namespace = namespace_for_file(file) return if file_namespace == NO_NAMESPACE # Downcasing here because check is case-insensitive if file_namespace == BAD_MODULE_FILE || !o.name.downcase.start_with?(file_namespace) acceptor.accept(Issues::ILLEGAL_DEFINITION_LOCATION, o, { :name => o.name, :file => file }) end end |
#internal_check_future_reserved_word(o, name) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
542 543 544 545 546 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 542 def internal_check_future_reserved_word(o, name) if FUTURE_RESERVED_WORDS[name] acceptor.accept(Issues::FUTURE_RESERVED_WORD, o, { :word => name }) end end |
#internal_check_illegal_assignment(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
793 794 795 796 797 798 799 800 801 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 793 def internal_check_illegal_assignment(o) if o.is_a?(Model::AssignmentExpression) acceptor.accept(Issues::ILLEGAL_ASSIGNMENT_CONTEXT, o) else # recursively check all contents unless it's a lambda expression. A lambda may contain # local assignments o._pcore_contents { |model| internal_check_illegal_assignment(model) } unless o.is_a?(Model::LambdaExpression) end end |
#internal_check_no_capture(o, container = o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
528 529 530 531 532 533 534 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 528 def internal_check_no_capture(o, container = o) o.parameters.each do |p| if p.captures_rest acceptor.accept(Issues::CAPTURES_REST_NOT_SUPPORTED, p, { :container => container, :param_name => p.name }) end end end |
#internal_check_no_idem_last(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
512 513 514 515 516 517 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 512 def internal_check_no_idem_last(o) violator = ends_with_idem(o.body) if violator acceptor.accept(Issues::IDEM_NOT_ALLOWED_LAST, violator, { :container => o }) unless resource_without_title?(violator) end end |
#internal_check_parameter_name_uniqueness(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
693 694 695 696 697 698 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 693 def internal_check_parameter_name_uniqueness(o) unique = Set.new o.parameters.each do |p| acceptor.accept(Issues::DUPLICATE_PARAMETER, p, { :param_name => p.name }) unless unique.add?(p.name) end end |
#internal_check_parameter_type_literal(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
486 487 488 489 490 491 492 493 494 495 496 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 486 def internal_check_parameter_type_literal(o) o.parameters.each do |p| next unless p.type_expr type = nil catch :not_literal do type = literal(p.type_expr) end acceptor.accept(Issues::ILLEGAL_NONLITERAL_PARAMETER_TYPE, p, { name: p.name, type_class: p.type_expr.class }) if type.nil? end end |
#internal_check_reserved_params(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
685 686 687 688 689 690 691 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 685 def internal_check_reserved_params(o) o.parameters.each do |p| if RESERVED_PARAMETERS[p.name] acceptor.accept(Issues::RESERVED_PARAMETER, p, { :container => o, :param_name => p.name }) end end end |
#internal_check_reserved_type_name(o, name) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
536 537 538 539 540 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 536 def internal_check_reserved_type_name(o, name) if RESERVED_TYPE_NAMES[name] acceptor.accept(Issues::RESERVED_TYPE_NAME, o, { :name => name }) end end |
#internal_check_return_type(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
498 499 500 501 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 498 def internal_check_return_type(o) r = o.return_type internal_check_type_ref(o, r) unless r.nil? end |
#internal_check_top_construct_in_module(prog) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 565 def internal_check_top_construct_in_module(prog) return unless prog.is_a?(Model::Program) && !prog.body.nil? # Check that this is a module autoloaded file file = prog.locator.file return if file.nil? return if namespace_for_file(file) == NO_NAMESPACE body = prog.body return if prog.body.is_a?(Model::Nop) # Ignore empty or comment-only files if body.is_a?(Model::BlockExpression) body.statements.each { |s| acceptor.accept(Issues::ILLEGAL_TOP_CONSTRUCT_LOCATION, s) unless valid_top_construct?(s) } else acceptor.accept(Issues::ILLEGAL_TOP_CONSTRUCT_LOCATION, body) unless valid_top_construct?(body) end end |
#internal_check_type_ref(o, r) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
503 504 505 506 507 508 509 510 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 503 def internal_check_type_ref(o, r) n = r.is_a?(Model::AccessExpression) ? r.left_expr : r if n.is_a? Model::QualifiedReference internal_check_future_reserved_word(r, n.value) else acceptor.accept(Issues::ILLEGAL_EXPRESSION, r, :feature => 'a type reference', :container => o) end end |
#namespace_for_file(file) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 598 def namespace_for_file(file) env = Puppet.lookup(:current_environment) return NO_NAMESPACE if env.nil? adapter = Puppet::Util::FileNamespaceAdapter.adapt(env) file_namespace = adapter.file_to_namespace[file] return file_namespace unless file_namespace.nil? # No cache entry, so we do the calculation path = Pathname.new(file) return adapter.file_to_namespace[file] = NO_NAMESPACE if path.extname != ".pp" path = path. return adapter.file_to_namespace[file] = NO_NAMESPACE if initial_manifest?(path, env.manifest) # All auto-loaded files from modules come from a module search path dir relative_path = get_module_relative_path(path, env.full_modulepath) return adapter.file_to_namespace[file] = NO_NAMESPACE if relative_path == NO_PATH # If a file comes from a module, but isn't in the right place, always error names = dir_to_names(relative_path) adapter.file_to_namespace[file] = (names == BAD_MODULE_FILE ? BAD_MODULE_FILE : names.join("::").freeze) end |
#pattern_with_replacement?(o) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
442 443 444 445 446 447 448 449 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 442 def pattern_with_replacement?(o) if o.is_a?(Model::LiteralList) v = o.values v.size == 2 && v[0].is_a?(Model::LiteralRegularExpression) && v[1].is_a?(Model::LiteralString) else false end end |
#query(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Performs check if this is valid as a query
77 78 79 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 77 def query(o) @@query_visitor.visit_this_0(self, o) end |
#query_BooleanExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Allows AND, OR, and checks if left/right are allowed in query.
981 982 983 984 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 981 def query_BooleanExpression(o) query o.left_expr query o.right_expr end |
#query_ComparisonExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Puppet AST only allows == and !=
976 977 978 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 976 def query_ComparisonExpression(o) acceptor.accept(Issues::ILLEGAL_QUERY_EXPRESSION, o) unless ['==', '!='].include? o.operator end |
#query_LiteralBoolean(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
998 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 998 def query_LiteralBoolean(o); end |
#query_LiteralNumber(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
994 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 994 def query_LiteralNumber(o); end |
#query_LiteralString(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
996 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 996 def query_LiteralString(o); end |
#query_Object(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Anything not explicitly allowed is flagged as error.
970 971 972 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 970 def query_Object(o) acceptor.accept(Issues::ILLEGAL_QUERY_EXPRESSION, o) end |
#query_ParenthesizedExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
986 987 988 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 986 def query_ParenthesizedExpression(o) query(o.expr) end |
#query_QualifiedName(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
992 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 992 def query_QualifiedName(o); end |
#query_VariableExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
990 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 990 def query_VariableExpression(o); end |
#relation(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Performs check if this is valid as a relationship side
82 83 84 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 82 def relation(o) @@relation_visitor.visit_this_0(self, o) end |
#relation_CollectExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
776 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 776 def relation_CollectExpression(o); end |
#relation_Object(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
772 773 774 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 772 def relation_Object(o) rvalue(o) end |
#relation_RelationshipExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
778 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 778 def relation_RelationshipExpression(o); end |
#resource_without_title?(o) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
258 259 260 261 262 263 264 265 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 258 def resource_without_title?(o) if o.instance_of?(Model::BlockExpression) statements = o.statements statements.length == 2 && statements[0].instance_of?(Model::QualifiedName) && statements[1].instance_of?(Model::LiteralHash) else false end end |
#rvalue(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Performs check if this is valid as a rvalue
87 88 89 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 87 def rvalue(o) @@rvalue_visitor.visit_this_0(self, o) end |
#rvalue_CollectExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
1007 1008 1009 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1007 def rvalue_CollectExpression(o) acceptor.accept(Issues::NOT_RVALUE, o) end |
#rvalue_Definition(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
1011 1012 1013 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1011 def rvalue_Definition(o) acceptor.accept(Issues::NOT_RVALUE, o) end |
#rvalue_Expression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
By default, all expressions are reported as being rvalues Implement specific rvalue checks for those that are not.
1005 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1005 def rvalue_Expression(o); end |
#rvalue_NodeDefinition(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
1015 1016 1017 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1015 def rvalue_NodeDefinition(o) acceptor.accept(Issues::NOT_RVALUE, o) end |
#rvalue_UnaryExpression(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
1019 1020 1021 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1019 def rvalue_UnaryExpression(o) rvalue o.expr end |
#top(definition, idx = -1)) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
—TOP CHECK Performs check if this is valid as a container of a definition (class, define, node)
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 93 def top(definition, idx = -1) o = container(idx) idx -= 1 case o when NilClass, Model::ApplyExpression, Model::HostClassDefinition, Model::Program # ok, stop scanning parents when Model::BlockExpression c = container(idx) if !c.is_a?(Model::Program) && (definition.is_a?(Model::FunctionDefinition) || definition.is_a?(Model::TypeAlias) || definition.is_a?(Model::TypeDefinition)) # not ok. These can never be nested in a block acceptor.accept(Issues::NOT_ABSOLUTE_TOP_LEVEL, definition) else # ok, if this is a block representing the body of a class, or is top level top(definition, idx) end when Model::LambdaExpression # A LambdaExpression is a BlockExpression, and this check is needed to prevent the polymorph method for BlockExpression # to accept a lambda. # A lambda can not iteratively create classes, nodes or defines as the lambda does not have a closure. acceptor.accept(Issues::NOT_TOP_LEVEL, definition) else # fail, reached a container that is not top level acceptor.accept(Issues::NOT_TOP_LEVEL, definition) end end |
#type_ref?(o) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
451 452 453 454 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 451 def type_ref?(o) o = o.left_expr if o.is_a?(Model::AccessExpression) o.is_a?(Model::QualifiedReference) end |
#valid_top_construct?(o) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
583 584 585 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 583 def valid_top_construct?(o) o.is_a?(Model::Definition) && !o.is_a?(Model::NodeDefinition) end |
#validate(model) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Validates the entire model by visiting each model element and calling ‘check`. The result is collected (or acted on immediately) by the configured diagnostic provider/acceptor given when creating this Checker.
53 54 55 56 57 58 59 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 53 def validate(model) # tree iterate the model, and call check for each element @path = [] check(model) internal_check_top_construct_in_module(model) model._pcore_all_contents(@path) { |element| check(element) } end |
#varname_to_s(o) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Produces string part of something named, or nil if not a QualifiedName or QualifiedReference
1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 |
# File 'lib/puppet/pops/validation/checker4_0.rb', line 1143 def varname_to_s(o) case o when Model::QualifiedName o.value when Model::QualifiedReference o.value else nil end end |