Skip to content

Commit 387faae

Browse files
Earlopainmatzbot
authored andcommitted
[ruby/prism] Add a test for multiple &nil blocks/mixing them
ruby/prism@e5fb0e192b
1 parent 7135ab5 commit 387faae

3 files changed

Lines changed: 18 additions & 1 deletion

File tree

lib/prism/node_ext.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,9 @@ def signature
286286
case param
287287
when MultiTargetNode
288288
names << [:req]
289-
when NoKeywordsParameterNode, KeywordRestParameterNode, ForwardingParameterNode
289+
when NoKeywordsParameterNode, KeywordRestParameterNode,
290+
NoBlockParameterNode, BlockParameterNode,
291+
ForwardingParameterNode
290292
# Invalid syntax, e.g. "def f(**nil, ...)" moves the NoKeywordsParameterNode to posts
291293
raise "Invalid syntax"
292294
else

prism/config.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4065,6 +4065,9 @@ nodes:
40654065
- on error: NoKeywordsParameterNode
40664066
# On parsing error of `f(..., ...)`, the first forwarding parameter is moved here:
40674067
- on error: ForwardingParameterNode
4068+
# On parsing error of `f(&nil, &foo)`/`f(&foo, &nil)`, the first forwarding parameter is moved here:
4069+
- on error: BlockParameterNode
4070+
- on error: NoBlockParameterNode
40684071
- name: keywords
40694072
type: node[]
40704073
kind:
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
def foo(&nil, &nil); end
2+
^ unexpected parameter order
3+
^~~~ multiple block parameters; only one block is allowed
4+
5+
def foo(&foo, &nil); end
6+
^ unexpected parameter order
7+
^~~~ multiple block parameters; only one block is allowed
8+
9+
def foo(&nil, &foo); end
10+
^ unexpected parameter order
11+
^~~~ multiple block parameters; only one block is allowed
12+

0 commit comments

Comments
 (0)