mirror of
https://github.com/ruby/ruby.git
synced 2026-01-27 04:24:23 +00:00
[ruby/error_highlight] Fix prism_spot_def_for_name for singletons
Previously calling a singleton method with invalid arguments would give:
RuntimeError: Incompatible locations
This is because `join` wants the operator to come before the location
https://github.com/ruby/error_highlight/commit/44920551dd
This commit is contained in:
parent
4a1af72a13
commit
4e1f20fee6
@ -913,7 +913,7 @@ module ErrorHighlight
|
||||
# ^^^
|
||||
def prism_spot_def_for_name
|
||||
location = @node.name_loc
|
||||
location = location.join(@node.operator_loc) if @node.operator_loc
|
||||
location = @node.operator_loc.join(location) if @node.operator_loc
|
||||
prism_location(location)
|
||||
end
|
||||
|
||||
|
||||
@ -1733,6 +1733,62 @@ wrong number of arguments (given 1, expected 2) (ArgumentError)
|
||||
assert_equal expected_spot, actual_spot
|
||||
end
|
||||
|
||||
module SingletonMethodWithSpacing
|
||||
LINENO = __LINE__ + 1
|
||||
def self . baz(x:)
|
||||
x
|
||||
end
|
||||
end
|
||||
|
||||
def test_singleton_method_with_spacing_missing_keyword
|
||||
lineno = __LINE__
|
||||
assert_error_message(ArgumentError, <<~END) do
|
||||
missing keyword: :x (ArgumentError)
|
||||
|
||||
caller: #{ __FILE__ }:#{ lineno + 16 }
|
||||
| SingletonMethodWithSpacing.baz
|
||||
^^^^
|
||||
callee: #{ __FILE__ }:#{ SingletonMethodWithSpacing::LINENO }
|
||||
#{
|
||||
MethodDefLocationSupported ?
|
||||
"| def self . baz(x:)
|
||||
^^^^^" :
|
||||
"(cannot highlight method definition; try Ruby 4.0 or later)"
|
||||
}
|
||||
END
|
||||
|
||||
SingletonMethodWithSpacing.baz
|
||||
end
|
||||
end
|
||||
|
||||
module SingletonMethodMultipleKwargs
|
||||
LINENO = __LINE__ + 1
|
||||
def self.run(shop_id:, param1:)
|
||||
shop_id + param1
|
||||
end
|
||||
end
|
||||
|
||||
def test_singleton_method_multiple_missing_keywords
|
||||
lineno = __LINE__
|
||||
assert_error_message(ArgumentError, <<~END) do
|
||||
missing keywords: :shop_id, :param1 (ArgumentError)
|
||||
|
||||
caller: #{ __FILE__ }:#{ lineno + 16 }
|
||||
| SingletonMethodMultipleKwargs.run
|
||||
^^^^
|
||||
callee: #{ __FILE__ }:#{ SingletonMethodMultipleKwargs::LINENO }
|
||||
#{
|
||||
MethodDefLocationSupported ?
|
||||
"| def self.run(shop_id:, param1:)
|
||||
^^^^" :
|
||||
"(cannot highlight method definition; try Ruby 4.0 or later)"
|
||||
}
|
||||
END
|
||||
|
||||
SingletonMethodMultipleKwargs.run
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def find_node_by_id(node, node_id)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user