From: merch-redmine@... Date: 2019-07-07T20:57:22+00:00 Subject: [ruby-core:93593] [Ruby master Bug#10928] optparse Switch#summarize code doesn't reflect its documentation Issue #10928 has been updated by jeremyevans0 (Jeremy Evans). Assignee set to nobu (Nobuyoshi Nakada) Status changed from Open to Assigned File optparse-switch-summarize.patch added I agree that this is a bug and it should be fixed. You can trigger it by calling `OptionParser::Switch#summarize` without arguments: ```ruby require 'optparse' o = OptionParser.new o.on('-c'){} o.instance_variable_get(:@stack)[2].instance_variable_get(:@short).values.first.summarize{} # TypeError (no implicit conversion of String into Integer) ``` Attached is a patch that fixes the issue. ---------------------------------------- Bug #10928: optparse Switch#summarize code doesn't reflect its documentation https://bugs.ruby-lang.org/issues/10928#change-79185 * Author: gettalong (Thomas Leitner) * Status: Assigned * Priority: Normal * Assignee: nobu (Nobuyoshi Nakada) * Target version: * ruby -v: ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-linux] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- The documentation for `Switch#summarize` says "+sdone+:: Already summarized short style options keyed hash." for the `sdone` argument (similar problem with `ldone`). I.e. it mentions it should be a Hash. However, the actual method definition line shows otherwise, namely an Array. ~~~ def summarize(sdone = [], ldone = [], width = 1, max = width - 1, indent = "") ~~~ The `OptionParser#summarize` command does actually invoke it with Hashes as arguments (line 566): `visit(:summarize, {}, {}, width, max, indent, &blk)`. So the method definition for `Switch#summarize` is probably false. ---Files-------------------------------- optparse-switch-summarize.patch (1.19 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: