Allow value omission in Hash literals

`{x:, y:}` is a syntax sugar of `{x: x, y: y}`.
This commit is contained in:
Shugo Maeda 2021-09-11 18:49:12 +09:00
Родитель 64e056a4c5
Коммит c60dbcd1c5
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 2DFE34085E97CE47
2 изменённых файлов: 26 добавлений и 0 удалений

Просмотреть файл

@ -5617,6 +5617,15 @@ assoc : arg_value tASSOC arg_value
/*% %*/
/*% ripper: assoc_new!($1, $2) %*/
}
| tLABEL
{
/*%%%*/
NODE *val = gettable(p, $1, &@$);
if (!val) val = NEW_BEGIN(0, &@$);
$$ = list_append(p, NEW_LIST(NEW_LIT(ID2SYM($1), &@1), &@$), val);
/*% %*/
/*% ripper: assoc_new!($1, id_is_var(p, get_id($1)) ? var_ref!($1) : vcall!($1)) %*/
}
| tSTRING_BEG string_contents tLABEL_END arg_value
{
/*%%%*/

Просмотреть файл

@ -2178,4 +2178,21 @@ class TestHash < Test::Unit::TestCase
end;
end
end
def test_value_omission
x = 1
y = 2
assert_equal({x: 1, y: 2}, {x:, y:})
assert_equal({one: 1, two: 2}, {one:, two:})
end
private
def one
1
end
def two
2
end
end