Project

General

Profile

Feature #16289

Updated by nobu (Nobuyoshi Nakada) about 5 years ago

## Problem 

 Currently, the interpreter emits 200 lines of warnings against the following program. 

 ```ruby ``` 
 def foo(**opt); end 
 100.times { foo({kw:1}) } 
 ``` 

 ``` 
 $ ./miniruby -e 'def foo(**opt); end; 100.times { foo({kw:1}) }' 
 -e:1: warning: The last argument is used as the keyword parameter 
 -e:1: warning: for `foo' defined here 
 -e:1: warning: The last argument is used as the keyword parameter 
 -e:1: warning: for `foo' defined here 
 -e:1: warning: The last argument is used as the keyword parameter 
 -e:1: warning: for `foo' defined here 
 ... 
 ``` 

 In theory, the warnings are not harmful because they don't stop or interfere the execution.    But in practice, I'm afraid if they are annoying because they flush all console logs away. 
 I think that the warning is not needed if the call is already warned. 


 ## Proposal 

 How about limiting the count of warnings to at most once for each pair of caller and callee? 

 I've created [a pull request](https://github.com/ruby/ruby/pull/2458).    It records all pairs of caller position and callee iseq when emitting a warning, and suppress the warning if the same pair of caller and callee is already warned. 

 What do you think?

Back