{"record":{"id":"0c9abfd7af62ce2a","repo":"puppetlabs/puppet","slug":"invalid-short-option-name-name","errorCode":null,"errorMessage":"invalid short option name '%{name}'","messagePattern":"invalid short option name '%(.+?)'","errorType":"exception","errorClass":"ArgumentError","httpStatus":null,"severity":"error","filePath":"lib/puppet/util/command_line/trollop.rb","lineNumber":239,"sourceCode":"      opts[:long] =\n        case opts[:long]\n        when /^--([^-].*)$/\n          ::Regexp.last_match(1)\n        when /^[^-]/\n          opts[:long]\n        else\n          raise ArgumentError, _(\"invalid long option name %{name}\") % { name: opts[:long].inspect }\n        end\n      raise ArgumentError, _(\"long option name %{value0} is already taken; please specify a (different) :long\") % { value0: opts[:long].inspect } if @long[opts[:long]]\n\n      ## fill in :short\n      unless opts[:short] == :none\n        opts[:short] = opts[:short].to_s if opts[:short]\n      end\n      opts[:short] = case opts[:short]\n                     when /^-(.)$/; ::Regexp.last_match(1)\n                     when nil, :none, /^.$/; opts[:short]\n                     else raise ArgumentError, _(\"invalid short option name '%{name}'\") % { name: opts[:short].inspect }\n                     end\n\n      if opts[:short]\n        raise ArgumentError, _(\"short option name %{value0} is already taken; please specify a (different) :short\") % { value0: opts[:short].inspect } if @short[opts[:short]]\n        raise ArgumentError, _(\"a short option name can't be a number or a dash\") if opts[:short] =~ INVALID_SHORT_ARG_REGEX\n      end\n\n      ## fill in :default for flags\n      opts[:default] = false if opts[:type] == :flag && opts[:default].nil?\n\n      ## autobox :default for :multi (multi-occurrence) arguments\n      opts[:default] = [opts[:default]] if opts[:default] && opts[:multi] && !opts[:default].is_a?(Array)\n\n      ## fill in :multi\n      opts[:multi] ||= false\n\n      opts[:desc] ||= desc\n      @long[opts[:long]] = name","sourceCodeStart":221,"sourceCodeEnd":257,"githubUrl":"https://github.com/puppetlabs/puppet/blob/e227c27540975c25aa22d533a52424a9d2fc886a/lib/puppet/util/command_line/trollop.rb#L221-L257","documentation":"After long-name handling, opt normalizes :short through the case at trollop.rb:236-240. Acceptable forms are nil, :none, a single character, or a '-c' string whose dash is stripped. Any other value — a multi-character string like 'vv', a double-dash '--v', or an empty string — falls to the else branch and raises ArgumentError at line 239.","triggerScenarios":"`short: '-vv'`, `short: 'vx'`, `short: '--v'`, `short: ''`.","commonSituations":"Trying to declare a multi-letter bundled flag as a 'short' name; OptionParser habits where looser strings were tolerated; typos in hand-written option declarations.","solutions":["Use a single character: `short: 'v'` or `short: '-v'`","Pass `short: :none` when the option should have no short form at all","Express multi-letter flags as a long option instead of a short one"],"exampleFix":"# before\nopt :verbosity, 'Verbosity', short: '-vv'\n\n# after\nopt :verbosity, 'Verbosity', short: '-v'","handlingStrategy":"validation","validationCode":"# Validate a :short spec before opt\ndef valid_short?(short)\n  short.nil? || short == :none || short.to_s =~ /^-(.)$/ || short.to_s =~ /^.$/\nend\n\nraise ArgumentError, \"bad short #{opts[:short].inspect}\" unless valid_short?(opts[:short])","typeGuard":null,"tryCatchPattern":"begin\n  parser.opt name, desc, short: candidate\nrescue ArgumentError => e\n  raise unless e.message.include?('invalid short option name')\n  parser.opt name, desc, short: :none   # degrade to long-only\nend","preventionTips":["Keep :short to a single character or a '-c' string","Use short: :none rather than inventing placeholders when no short form is wanted","Multi-letter flags belong in :long"],"tags":["puppet","trollop","cli","option-parsing","argumenterror"],"backgroundTag":"invalid-option-name","analyzedSha":"e227c27540975c25aa22d533a52424a9d2fc886a","analyzedAt":"2026-08-21T20:49:46.650Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}