Skip to content

Commit

Permalink
Constants and def nodes
Browse files Browse the repository at this point in the history
  • Loading branch information
kddnewton committed Sep 6, 2023
1 parent a6fdb8a commit 6b2421c
Show file tree
Hide file tree
Showing 116 changed files with 366 additions and 0 deletions.
2 changes: 2 additions & 0 deletions config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1041,6 +1041,8 @@ nodes:
^^^^^^^
- name: DefNode
fields:
- name: name
type: constant
- name: name_loc
type: location
- name: receiver
Expand Down
1 change: 1 addition & 0 deletions src/yarp.c
Original file line number Diff line number Diff line change
Expand Up @@ -2030,6 +2030,7 @@ yp_def_node_create(
.type = YP_DEF_NODE,
.location = { .start = def_keyword->start, .end = end },
},
.name = yp_parser_constant_id_token(parser, name),
.name_loc = YP_LOCATION_TOKEN_VALUE(name),
.receiver = receiver,
.parameters = parameters,
Expand Down
22 changes: 22 additions & 0 deletions test/yarp/errors_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,7 @@ def test_splat_argument_after_keyword_argument

def test_module_definition_in_method_body
expected = DefNode(
:foo,
Location(),
nil,
nil,
Expand All @@ -411,6 +412,7 @@ def test_module_definition_in_method_body

def test_module_definition_in_method_body_within_block
expected = DefNode(
:foo,
Location(),
nil,
nil,
Expand Down Expand Up @@ -453,6 +455,7 @@ module Foo;end

def test_class_definition_in_method_body
expected = DefNode(
:foo,
Location(),
nil,
nil,
Expand Down Expand Up @@ -485,6 +488,7 @@ def test_class_definition_in_method_body

def test_bad_arguments
expected = DefNode(
:foo,
Location(),
nil,
ParametersNode([
Expand Down Expand Up @@ -552,6 +556,7 @@ def test_cannot_assign_to_a_reserved_numbered_parameter

def test_do_not_allow_trailing_commas_in_method_parameters
expected = DefNode(
:foo,
Location(),
nil,
ParametersNode(
Expand Down Expand Up @@ -635,6 +640,7 @@ def test_unterminated_unicode_brackets_should_be_a_syntax_error

def test_method_parameters_after_block
expected = DefNode(
:foo,
Location(),
nil,
ParametersNode(
Expand Down Expand Up @@ -662,6 +668,7 @@ def test_method_parameters_after_block

def test_method_with_arguments_after_anonymous_block
expected = DefNode(
:foo,
Location(),
nil,
ParametersNode([], [], [RequiredParameterNode(:a)], nil, [], nil, BlockParameterNode(nil, nil, Location())),
Expand All @@ -682,6 +689,7 @@ def test_method_with_arguments_after_anonymous_block

def test_method_parameters_after_arguments_forwarding
expected = DefNode(
:foo,
Location(),
nil,
ParametersNode(
Expand Down Expand Up @@ -709,6 +717,7 @@ def test_method_parameters_after_arguments_forwarding

def test_keywords_parameters_before_required_parameters
expected = DefNode(
:foo,
Location(),
nil,
ParametersNode(
Expand Down Expand Up @@ -736,6 +745,7 @@ def test_keywords_parameters_before_required_parameters

def test_rest_keywords_parameters_before_required_parameters
expected = DefNode(
:foo,
Location(),
nil,
ParametersNode(
Expand All @@ -756,13 +766,15 @@ def test_rest_keywords_parameters_before_required_parameters
nil,
Location()
)

assert_errors expected, "def foo(**rest, b:)\nend", [
["Unexpected parameter order", 16..18]
]
end

def test_double_arguments_forwarding
expected = DefNode(
:foo,
Location(),
nil,
ParametersNode([], [], [], nil, [], ForwardingParameterNode(), nil),
Expand All @@ -783,6 +795,7 @@ def test_double_arguments_forwarding

def test_multiple_error_in_parameters_order
expected = DefNode(
:foo,
Location(),
nil,
ParametersNode(
Expand Down Expand Up @@ -812,6 +825,7 @@ def test_multiple_error_in_parameters_order

def test_switching_to_optional_arguments_twice
expected = DefNode(
:foo,
Location(),
nil,
ParametersNode(
Expand Down Expand Up @@ -841,6 +855,7 @@ def test_switching_to_optional_arguments_twice

def test_switching_to_named_arguments_twice
expected = DefNode(
:foo,
Location(),
nil,
ParametersNode(
Expand Down Expand Up @@ -870,6 +885,7 @@ def test_switching_to_named_arguments_twice

def test_returning_to_optional_parameters_multiple_times
expected = DefNode(
:foo,
Location(),
nil,
ParametersNode(
Expand Down Expand Up @@ -915,6 +931,7 @@ def test_case_without_when_clauses_errors_on_else_clause

def test_setter_method_cannot_be_defined_in_an_endless_method_definition
expected = DefNode(
:a=,
Location(),
nil,
nil,
Expand Down Expand Up @@ -1030,6 +1047,7 @@ def test_duplicated_parameter_names
# duplicated parameter names for positional parameters.
unless RUBY_VERSION < "3.1.0"
expected = DefNode(
:foo,
Location(),
nil,
ParametersNode([RequiredParameterNode(:a), RequiredParameterNode(:b), RequiredParameterNode(:a)], [], [], nil, [], nil, nil),
Expand All @@ -1049,6 +1067,7 @@ def test_duplicated_parameter_names
end

expected = DefNode(
:foo,
Location(),
nil,
ParametersNode([RequiredParameterNode(:a), RequiredParameterNode(:b)], [], [], RestParameterNode(:a, Location(), Location()), [], nil, nil),
Expand All @@ -1067,6 +1086,7 @@ def test_duplicated_parameter_names
]

expected = DefNode(
:foo,
Location(),
nil,
ParametersNode([RequiredParameterNode(:a), RequiredParameterNode(:b)], [], [], nil, [], KeywordRestParameterNode(:a, Location(), Location()), nil),
Expand All @@ -1085,6 +1105,7 @@ def test_duplicated_parameter_names
]

expected = DefNode(
:foo,
Location(),
nil,
ParametersNode([RequiredParameterNode(:a), RequiredParameterNode(:b)], [], [], nil, [], nil, BlockParameterNode(:a, Location(), Location())),
Expand All @@ -1103,6 +1124,7 @@ def test_duplicated_parameter_names
]

expected = DefNode(
:foo,
Location(),
nil,
ParametersNode([], [OptionalParameterNode(:a, Location(), Location(), IntegerNode())], [RequiredParameterNode(:b)], RestParameterNode(:c, Location(), Location()), [], nil, nil),
Expand Down
3 changes: 3 additions & 0 deletions test/yarp/snapshots/endless_methods.txt

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions test/yarp/snapshots/indented_file_end.txt

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions test/yarp/snapshots/keyword_method_names.txt

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 6b2421c

Please sign in to comment.