[#102393] [Ruby master Feature#17608] Compact and sum in one step — sawadatsuyoshi@...

Issue #17608 has been reported by sawa (Tsuyoshi Sawada).

13 messages 2021/02/04

[#102438] [Ruby master Bug#17619] if false foo=42; end creates a foo local variable set to nil — pkmuldoon@...

Issue #17619 has been reported by pkmuldoon (Phil Muldoon).

10 messages 2021/02/10

[#102631] [Ruby master Feature#17660] Expose information about which basic methods have been redefined — tenderlove@...

Issue #17660 has been reported by tenderlovemaking (Aaron Patterson).

9 messages 2021/02/27

[#102639] [Ruby master Misc#17662] The herdoc pattern used in tests does not syntax highlight correctly in many editors — eregontp@...

Issue #17662 has been reported by Eregon (Benoit Daloze).

13 messages 2021/02/27

[#102652] [Ruby master Bug#17664] Behavior of sockets changed in Ruby 3.0 to non-blocking — ciconia@...

Issue #17664 has been reported by ciconia (Sharon Rosner).

23 messages 2021/02/28

[ruby-core:102660] [Ruby master Bug#16950] Stop nonsense keyword argument warnings in 2.6

From: usa@...
Date: 2021-02-28 14:33:20 UTC
List: ruby-core #102660
Issue #16950 has been updated by usa (Usaku NAKAMURA).

Backport changed from 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN to 2.5: DONTNEED, 2.6: DONE, 2.7: DONTNEED
Status changed from Open to Closed

patched to ruby_2_6 at r67899.

----------------------------------------
Bug #16950: Stop nonsense keyword argument warnings in 2.6
https://bugs.ruby-lang.org/issues/16950#change-90654

* Author: mame (Yusuke Endoh)
* Status: Closed
* Priority: Normal
* Assignee: usa (Usaku NAKAMURA)
* ruby -v: ruby 2.6.7p147 (2020-03-31 revision 67883) [x86_64-linux]
* Backport: 2.5: DONTNEED, 2.6: DONE, 2.7: DONTNEED
----------------------------------------
Ruby 2.6 warns the following code with `-w` option:

```
def foo(x)    # warning: in `foo': the last argument was passed as a single Hash
end
h = { k: 42 }
foo(**h)      # warning: although a splat keyword arguments here
```

This warning had been introduced by @nobu based on the original proposal of [#14183 "Real" keyword argument](https://bugs.ruby-lang.org/issues/14183).  However, the design was changed so that automatic conversion from keywords to positional arguments will be kept in 3.0.  In other words, the code above will work even in 3.0, so the warning no longer makes sense.

Rather, according to @matsuda and @kamipo, this warning sometimes hindered the fix work for the keyword argument change in Rails.  This issue is possible to work around by using always non-keyword argument (and [they actually did so](https://github.com/rails/rails/commit/c0fd8f4bb2d4dd9abfbef9cc658ca0c88b8b0842)), but they say it is very annoying.

So, I propose stopping the warning in 2.6.  This is a change for 2.6, but matz already accepted this.  @usa, do you accept this?

A patch is quite simple:

```patch
diff --git a/vm_args.c b/vm_args.c
index 299ed16aa8..2e70ed3fcf 100644
--- a/vm_args.c
+++ b/vm_args.c
@@ -685,17 +685,6 @@ setup_parameters_complex(rb_execution_context_t * const ec, const rb_iseq_t * co
     else if (!NIL_P(keyword_hash) && RHASH_SIZE(keyword_hash) > 0) {
 	argument_kw_error(ec, iseq, "unknown", rb_hash_keys(keyword_hash));
     }
-    else if (kw_splat && NIL_P(keyword_hash)) {
-	if (RTEST(ruby_verbose)) {
-	    VALUE path = rb_iseq_path(iseq);
-	    VALUE line = rb_iseq_first_lineno(iseq);
-	    VALUE label = rb_iseq_label(iseq);
-	    rb_compile_warning(NIL_P(path) ? NULL : RSTRING_PTR(path), FIX2INT(line),
-			       "in `%s': the last argument was passed as a single Hash",
-			       NIL_P(label) ? NULL : RSTRING_PTR(label));
-	    rb_warning("although a splat keyword arguments here");
-	}
-    }
 
     if (iseq->body->param.flags.has_block) {
 	if (iseq->body->local_iseq == iseq) {
```



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next