Issue #16364 has been updated by jeremyevans0 (Jeremy Evans).


I'm in favor of adding top level `ruby2_keywords`.

----------------------------------------
Feature #16364: Top-level ruby2_keywords
https://bugs.ruby-lang.org/issues/16364#change-82818

* Author: mame (Yusuke Endoh)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
How about defining top-level ruby2_keywords?

```
#!/usr/bin/env ruby

def foo(**kw)
  kw
end

ruby2_keywords def bar(*a)
  foo(*a)
end

bar(k:1) #=> {:k=>1} with no warnings in 2.7
```

Currently, `Module#ruby2_keywords` is defined only in `Module` class.  So, to mark a top-level method as `ruby2_keywords`, we need to workaround by surrounding the definition with `class Object; ruby2_keywords ...; end`.  It is a bit annoying.

I know that practical applications tend to define no top-level methods.  However, I think of two reasons that we want top-level `ruby2_keywords`:

1. To learn `ruby2_keywords`, we tend to write a minimal script without class definition.  Actually, I saw some people (even a committer) confused due to lack of top-level `ruby2_keywords` when they are learning `ruby2_keywords`.
2. We write small applications that consist of only one script file, e.g., Slack notification script, a simple AWS Lambda, a CGI script for webhooks, etc.  I believe top-level methods are actually used in such a script.

So, I think the top-level `ruby2_keywords` is good to have in 2.7.

---Files--------------------------------
top-level-ruby2_keywords.patch (1.57 KB)


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