[ruby-core:118383] [Ruby master Bug#20593] `Kernel#format` emits a `too many arguments for format string` warning when called with keyword arguments and none are used

Issue #20593 has been reported by byroot (Jean Boussier). ---------------------------------------- Bug #20593: `Kernel#format` emits a `too many arguments for format string` warning when called with keyword arguments and none are used https://bugs.ruby-lang.org/issues/20593 * Author: byroot (Jean Boussier) * Status: Open * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- `Kernel#format` emits a warning when too many arguments are passed. It does so for postional arguments, which make sense, as it could be indicative of a bug: ```ruby $VERBOSE = true format("%s", 1, 2) # warning: too many arguments for format string ``` And doesn't for keyword arguments, as it's much less likely to be a bug: ```ruby $VERBOSE = true format("%{a}s", a: 1, unused: 2) # no warning ``` However it does emit a warning when passing keyword arguments, if none are used: ```ruby $VERBOSE = true format("test", unused: 2) # warning: too many arguments for format string ``` Which I believe is a bug, as it's common for `format` to take a user provided string to allow for safe interpolation, but with no intention to enforce any of the arguments to be interpolated. So I think that last case shouldn't emit a warning. -- https://bugs.ruby-lang.org/

Issue #20593 has been updated by Earlopain (A S). Huh, interesting. I didn't realise it worked that way. I recently fixed a few of those in rubocop but didn't catch on that it only applies when the string takes no arguments. This makes sense to me. Fixing these warnings didn't improve the code and is unexpectedly inconsistent. ---------------------------------------- Bug #20593: `Kernel#format` emits a `too many arguments for format string` warning when called with keyword arguments and none are used https://bugs.ruby-lang.org/issues/20593#change-108895 * Author: byroot (Jean Boussier) * Status: Open * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- `Kernel#format` emits a warning when too many arguments are passed. It does so for postional arguments, which make sense, as it could be indicative of a bug: ```ruby $VERBOSE = true format("%s", 1, 2) # warning: too many arguments for format string ``` And doesn't for keyword arguments, as it's much less likely to be a bug: ```ruby $VERBOSE = true format("%{a}s", a: 1, unused: 2) # no warning ``` However it does emit a warning when passing keyword arguments, if none are used: ```ruby $VERBOSE = true format("test", unused: 2) # warning: too many arguments for format string ``` Which I believe is a bug, as it's common for `format` to take a user provided string to allow for safe interpolation, but with no intention to enforce any of the arguments to be interpolated. So I think that last case shouldn't emit a warning. -- https://bugs.ruby-lang.org/

Issue #20593 has been updated by byroot (Jean Boussier). Proposed patch: https://github.com/ruby/ruby/pull/11053 ---------------------------------------- Bug #20593: `Kernel#format` emits a `too many arguments for format string` warning when called with keyword arguments and none are used https://bugs.ruby-lang.org/issues/20593#change-108896 * Author: byroot (Jean Boussier) * Status: Open * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- `Kernel#format` emits a warning when too many arguments are passed. It does so for postional arguments, which make sense, as it could be indicative of a bug: ```ruby $VERBOSE = true format("%s", 1, 2) # warning: too many arguments for format string ``` And doesn't for keyword arguments, as it's much less likely to be a bug: ```ruby $VERBOSE = true format("%{a}s", a: 1, unused: 2) # no warning ``` However it does emit a warning when passing keyword arguments, if none are used: ```ruby $VERBOSE = true format("test", unused: 2) # warning: too many arguments for format string ``` Which I believe is a bug, as it's common for `format` to take a user provided string to allow for safe interpolation, but with no intention to enforce any of the arguments to be interpolated. So I think that last case shouldn't emit a warning. -- https://bugs.ruby-lang.org/

Issue #20593 has been updated by matz (Yukihiro Matsumoto). OK, I accepted. Matz. ---------------------------------------- Bug #20593: `Kernel#format` emits a `too many arguments for format string` warning when called with a single hash and no key is used https://bugs.ruby-lang.org/issues/20593#change-109066 * Author: byroot (Jean Boussier) * Status: Open * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- `Kernel#format` emits a warning when too many arguments are passed. It does so for postional arguments, which make sense, as it could be indicative of a bug: ```ruby $VERBOSE = true format("%s", 1, 2) # warning: too many arguments for format string ``` And doesn't for keyword arguments, as it's much less likely to be a bug: ```ruby $VERBOSE = true format("%{a}s", a: 1, unused: 2) # no warning ``` However it does emit a warning when passing keyword arguments, if none are used: ```ruby $VERBOSE = true format("test", unused: 2) # warning: too many arguments for format string ``` Which I believe is a bug, as it's common for `format` to take a user provided string to allow for safe interpolation, but with no intention to enforce any of the arguments to be interpolated. So I think that last case shouldn't emit a warning. -- https://bugs.ruby-lang.org/
participants (3)
-
byroot (Jean Boussier)
-
Earlopain (A S)
-
matz (Yukihiro Matsumoto)