Project

General

Profile

Actions

Bug #20593

closed

`Kernel#format` emits a `too many arguments for format string` warning when called with a single hash and no key is used

Added by byroot (Jean Boussier) 4 months ago. Updated 4 months ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:118383]

Description

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:

$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:

$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:

$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.

Updated by Earlopain (A S) 4 months ago

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.

Actions #3

Updated by byroot (Jean Boussier) 4 months ago

  • Subject changed from `Kernel#format` emits a `too many arguments for format string` warning when called with keyword arguments and none are used to `Kernel#format` emits a `too many arguments for format string` warning when called with a single hash and no key is used

Updated by matz (Yukihiro Matsumoto) 4 months ago

OK, I accepted.

Matz.

Actions #5

Updated by byroot (Jean Boussier) 4 months ago

  • Status changed from Open to Closed

Applied in changeset git|3de0e343e27c4bbb76c3c9fda0d8be4d83807a2d.


Do not warn about extra format argument when passed as keywords

[Bug #20593]

It's fairly common to use format to interpolate a number of values
into a user provided strings.

The arguments not matching are a problem when they are positional,
but when they are named, it's absolutely fine and we shouldn't
emit a warning.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0