diff options
author | TSUYUSATO Kitsune <make.just.on@gmail.com> | 2023-12-11 12:29:20 +0900 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2023-12-15 13:25:54 +0000 |
commit | 16830a47830d6e780b7ce649f0247bdddd32f51d (patch) | |
tree | 75137879c9461fc948e764ca22343ddf7ed4465a | |
parent | 04f7be612625a51523c7ae546a8774aea1a8fa12 (diff) | |
download | ruby-16830a47830d6e780b7ce649f0247bdddd32f51d.tar.gz |
[ruby/prism] Add an error for `in` keyword in arguments
Fix https://github.com/ruby/prism/pull/2026
https://github.com/ruby/prism/commit/c4b41cd477
-rw-r--r-- | prism/diagnostic.c | 1 | ||||
-rw-r--r-- | prism/diagnostic.h | 1 | ||||
-rw-r--r-- | prism/prism.c | 2 | ||||
-rw-r--r-- | test/prism/errors_test.rb | 15 |
4 files changed, 19 insertions, 0 deletions
diff --git a/prism/diagnostic.c b/prism/diagnostic.c index 1fc8c50cb5..b3a8282cda 100644 --- a/prism/diagnostic.c +++ b/prism/diagnostic.c @@ -62,6 +62,7 @@ static const char* const diagnostic_messages[PM_DIAGNOSTIC_ID_LEN] = { [PM_ERR_ARGUMENT_FORMAL_GLOBAL] = "invalid formal argument; formal argument cannot be a global variable", [PM_ERR_ARGUMENT_FORMAL_IVAR] = "invalid formal argument; formal argument cannot be an instance variable", [PM_ERR_ARGUMENT_FORWARDING_UNBOUND] = "unexpected `...` in an non-parenthesized call", + [PM_ERR_ARGUMENT_IN] = "unexpected `in` keyword in arguments", [PM_ERR_ARGUMENT_NO_FORWARDING_AMP] = "unexpected `&` when the parent method is not forwarding", [PM_ERR_ARGUMENT_NO_FORWARDING_ELLIPSES] = "unexpected `...` when the parent method is not forwarding", [PM_ERR_ARGUMENT_NO_FORWARDING_STAR] = "unexpected `*` when the parent method is not forwarding", diff --git a/prism/diagnostic.h b/prism/diagnostic.h index fc1f0c2b4b..c88a704488 100644 --- a/prism/diagnostic.h +++ b/prism/diagnostic.h @@ -53,6 +53,7 @@ typedef enum { PM_ERR_ARGUMENT_FORMAL_GLOBAL, PM_ERR_ARGUMENT_FORMAL_IVAR, PM_ERR_ARGUMENT_FORWARDING_UNBOUND, + PM_ERR_ARGUMENT_IN, PM_ERR_ARGUMENT_NO_FORWARDING_AMP, PM_ERR_ARGUMENT_NO_FORWARDING_ELLIPSES, PM_ERR_ARGUMENT_NO_FORWARDING_STAR, diff --git a/prism/prism.c b/prism/prism.c index 79258386d6..61c1d6784b 100644 --- a/prism/prism.c +++ b/prism/prism.c @@ -11338,6 +11338,8 @@ parse_arguments(pm_parser_t *parser, pm_arguments_t *arguments, bool accepts_for } parsed_bare_hash = true; + } else if (accept1(parser, PM_TOKEN_KEYWORD_IN)) { + pm_parser_err_current(parser, PM_ERR_ARGUMENT_IN); } parse_arguments_append(parser, arguments, argument); diff --git a/test/prism/errors_test.rb b/test/prism/errors_test.rb index 51ac7bc5cf..57c0719aa7 100644 --- a/test/prism/errors_test.rb +++ b/test/prism/errors_test.rb @@ -1997,6 +1997,21 @@ module Prism end end + def test_command_call_in + source = <<~RUBY + foo 1 in a + a = foo 2 in b + RUBY + message1 = 'unexpected `in` keyword in arguments' + message2 = 'expected a newline or semicolon after the statement' + assert_errors expression(source), source, [ + [message1, 9..10], + [message2, 8..8], + [message1, 24..25], + [message2, 23..23], + ] + end + def test_constant_assignment_in_method source = 'def foo();A=1;end' assert_errors expression(source), source, [ |