{"record":{"id":"4ace7d09edba63d1","repo":"puppetlabs/puppet","slug":"the-label-type-cannot-be-parameterized-using-an","errorCode":null,"errorMessage":"The %{label}-Type cannot be parameterized using an empty parameter list","messagePattern":"The %(.+?)-Type cannot be parameterized using an empty parameter list","errorType":"exception","errorClass":"Puppet::ParseError","httpStatus":null,"severity":"error","filePath":"lib/puppet/pops/types/p_object_type_extension.rb","lineNumber":85,"sourceCode":"      hash = init_parameters[0]\n      hash.each_pair do |pn, pv|\n        tp = pts[pn]\n        if tp.nil?\n          raise Puppet::ParseError, _(\"'%{pn}' is not a known type parameter for %{label}-Type\") % { pn: pn, label: base_type.label }\n        end\n\n        by_name[pn] = check_param(tp, pv) unless pv == :default\n      end\n    else\n      pts.values.each_with_index do |tp, idx|\n        if idx < init_parameters.size\n          pv = init_parameters[idx]\n          by_name[tp.name] = check_param(tp, pv) unless pv == :default\n        end\n      end\n    end\n    if by_name.empty?\n      raise Puppet::ParseError, _('The %{label}-Type cannot be parameterized using an empty parameter list') % { label: base_type.label }\n    end\n\n    @parameters = by_name\n  end\n\n  def check_param(type_param, v)\n    TypeAsserter.assert_instance_of(nil, type_param.type, v) { type_param.label }\n  end\n\n  # Return the parameter values as positional arguments with unset values as :default. The\n  # array is stripped from trailing :default values\n  # @return [Array] the parameter values\n  # @api private\n  def init_parameters\n    pts = @base_type.type_parameters(true)\n    if pts.size > 2\n      @parameters\n    else","sourceCodeStart":67,"sourceCodeEnd":103,"githubUrl":"https://github.com/puppetlabs/puppet/blob/e227c27540975c25aa22d533a52424a9d2fc886a/lib/puppet/pops/types/p_object_type_extension.rb#L67-L103","documentation":"Parameterizing an Object type skips arguments equal to :default (and named entries whose value is :default), binding only concrete values. If nothing binds - because the only argument was default, an all-default hash, or fewer positional values than parameters with the rest defaulted - Puppet::ParseError reports that the type cannot be parameterized with an empty parameter list.","triggerScenarios":"MyApp::Color[default], MyApp::Color[] corner cases produced programmatically, or MyApp::Color[{channel => default}]: every candidate value is :default so by_name ends up empty and the constructor raises.","commonSituations":"Programmatic type construction that forwards optional arguments and ends up passing only defaults; template code that parameterizes unconditionally even when no filter values are set.","solutions":["Pass at least one concrete parameter value: MyApp::Color[3]","If you want the unparameterized type, use the bare name MyApp::Color instead of MyApp::Color[default]","In Ruby generators, skip creating the extension entirely when all parameter values are :default"],"exampleFix":"# before\n$filtered = MyApp::Color[default]   # binds nothing -> ParseError\n\n# after\n$plain    = MyApp::Color            # unparameterized base type\n$filtered = MyApp::Color[3]         # at least one concrete value","handlingStrategy":"validation","validationCode":"# ensure at least one parameter binds a concrete value\nconcrete = args.compact.reject { |v| v == :default }\nraise 'nothing to parameterize: all values are default' if concrete.empty?\n# or skip parameterization entirely and use base_type itself","typeGuard":"def parameterizable_args?(args)\n  args.any? { |v| !v.nil? && v != :default }\nend","tryCatchPattern":"begin\n  Puppet::Pops::Types::PObjectTypeExtension.create(base_type, args)\nrescue Puppet::ParseError => e\n  raise unless e.message =~ /empty parameter list/\n  base_type  # caller decides: unparameterized type or raise upstream\nend","preventionTips":["Use the bare type name when no filtering parameter value is set","In generators, skip extension creation when every value is :default"],"tags":["puppet","pcore","object-type","type-parameters","empty-arguments"],"backgroundTag":"invalid-type-parameterization","analyzedSha":"e227c27540975c25aa22d533a52424a9d2fc886a","analyzedAt":"2026-08-21T20:49:46.650Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}