Skip to content

Commit a835509

Browse files
committed
Implement warnings for {Module,Proc}#ruby2_keywords
1 parent e147657 commit a835509

File tree

3 files changed

+15
-8
lines changed

3 files changed

+15
-8
lines changed
Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,3 @@
11
fails:Module#ruby2_keywords marks the final hash argument as keyword hash
22
fails:Module#ruby2_keywords fixes delegation warnings when calling a method accepting keywords
3-
fails:Module#ruby2_keywords raises NameError when passed not existing method name
43
fails:Module#ruby2_keywords acceps String as well
5-
fails:Module#ruby2_keywords raises TypeError when passed not Symbol or String
6-
fails:Module#ruby2_keywords prints warning when a method does not accept argument splat
7-
fails:Module#ruby2_keywords prints warning when a method accepts keywords
8-
fails:Module#ruby2_keywords prints warning when a method accepts keyword splat
Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
11
fails:Proc#ruby2_keywords marks the final hash argument as keyword hash
22
fails:Proc#ruby2_keywords fixes delegation warnings when calling a method accepting keywords
33
fails:Proc#ruby2_keywords fixes delegation warnings when calling a proc accepting keywords
4-
fails:Proc#ruby2_keywords prints warning when a proc does not accept argument splat
5-
fails:Proc#ruby2_keywords prints warning when a proc accepts keywords
6-
fails:Proc#ruby2_keywords prints warning when a proc accepts keyword splat

src/main/ruby/truffleruby/core/pre.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,28 @@ def include(mod)
4545
end
4646

4747
private def ruby2_keywords(*methods)
48+
methods.each do |name|
49+
method = instance_method(name)
50+
kinds = method.parameters.map(&:first)
51+
if !kinds.include?(:rest)
52+
warn "Skipping set of ruby2_keywords flag for #{name} (method does not accept argument splat)", uplevel: 1
53+
elsif kinds.include?(:key) or kinds.include?(:keyreq) or kinds.include?(:keyrest)
54+
warn "Skipping set of ruby2_keywords flag for #{name} (method accepts keywords)", uplevel: 1
55+
end
56+
end
4857
warn "ruby2_keywords(#{methods.join(', ')}) was ignored", uplevel: 1 if $DEBUG
4958
nil
5059
end
5160
end
5261

5362
class Proc
5463
def ruby2_keywords
64+
kinds = parameters.map(&:first)
65+
if !kinds.include?(:rest)
66+
warn 'Skipping set of ruby2_keywords flag for proc (proc does not accept argument splat)', uplevel: 1
67+
elsif kinds.include?(:key) or kinds.include?(:keyreq) or kinds.include?(:keyrest)
68+
warn 'Skipping set of ruby2_keywords flag for proc (proc accepts keywords)', uplevel: 1
69+
end
5570
warn 'Proc#ruby2_keywords was ignored', uplevel: 1 if $DEBUG
5671
self
5772
end

0 commit comments

Comments
 (0)