Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/error_highlight/core_ext.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ module CoreExt
_, _, snippet, highlight = ErrorHighlight.formatter.message_for(spot).lines
out += "\n | #{ snippet } #{ highlight }"
else
out += "\n (cannot highlight method definition; try Ruby 4.0 or later)"
# do nothing
end
end
ret << "\n" + out if out
Expand Down
142 changes: 52 additions & 90 deletions test/test_error_highlight.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1450,26 +1450,28 @@ def exc.backtrace_locations = []
RubyVM::AbstractSyntaxTree.node_id_for_backtrace_location(exc.backtrace_locations.first)
end

WRONG_NUMBER_OF_ARGUMENTS_LIENO = __LINE__ + 1
def process_callee_snippet(str)
return str if MethodDefLocationSupported

str.sub(/\n +\|.*\n +\^+\n\z/, "")
end

WRONG_NUMBER_OF_ARGUMENTS_LINENO = __LINE__ + 1
def wrong_number_of_arguments_test(x, y)
x + y
end

def test_wrong_number_of_arguments_for_method
lineno = __LINE__
assert_error_message(ArgumentError, <<~END) do
assert_error_message(ArgumentError, process_callee_snippet(<<~END)) do
wrong number of arguments (given 1, expected 2) (ArgumentError)

caller: #{ __FILE__ }:#{ lineno + 16 }
caller: #{ __FILE__ }:#{ lineno + 12 }
| wrong_number_of_arguments_test(1)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
callee: #{ __FILE__ }:#{ WRONG_NUMBER_OF_ARGUMENTS_LIENO }
#{
MethodDefLocationSupported ?
"| def wrong_number_of_arguments_test(x, y)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" :
"(cannot highlight method definition; try Ruby 4.0 or later)"
}
callee: #{ __FILE__ }:#{ WRONG_NUMBER_OF_ARGUMENTS_LINENO }
| def wrong_number_of_arguments_test(x, y)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
END

wrong_number_of_arguments_test(1)
Expand All @@ -1483,19 +1485,15 @@ def keyword_test(kw1:, kw2:, kw3:)

def test_missing_keyword
lineno = __LINE__
assert_error_message(ArgumentError, <<~END) do
assert_error_message(ArgumentError, process_callee_snippet(<<~END)) do
missing keyword: :kw3 (ArgumentError)

caller: #{ __FILE__ }:#{ lineno + 16 }
caller: #{ __FILE__ }:#{ lineno + 12 }
| keyword_test(kw1: 1, kw2: 2)
^^^^^^^^^^^^
callee: #{ __FILE__ }:#{ KEYWORD_TEST_LINENO }
#{
MethodDefLocationSupported ?
"| def keyword_test(kw1:, kw2:, kw3:)
^^^^^^^^^^^^" :
"(cannot highlight method definition; try Ruby 4.0 or later)"
}
| def keyword_test(kw1:, kw2:, kw3:)
^^^^^^^^^^^^
END

keyword_test(kw1: 1, kw2: 2)
Expand All @@ -1504,19 +1502,15 @@ def test_missing_keyword

def test_missing_keywords # multiple missing keywords
lineno = __LINE__
assert_error_message(ArgumentError, <<~END) do
assert_error_message(ArgumentError, process_callee_snippet(<<~END)) do
missing keywords: :kw2, :kw3 (ArgumentError)

caller: #{ __FILE__ }:#{ lineno + 16 }
caller: #{ __FILE__ }:#{ lineno + 12 }
| keyword_test(kw1: 1)
^^^^^^^^^^^^
callee: #{ __FILE__ }:#{ KEYWORD_TEST_LINENO }
#{
MethodDefLocationSupported ?
"| def keyword_test(kw1:, kw2:, kw3:)
^^^^^^^^^^^^" :
"(cannot highlight method definition; try Ruby 4.0 or later)"
}
| def keyword_test(kw1:, kw2:, kw3:)
^^^^^^^^^^^^
END

keyword_test(kw1: 1)
Expand All @@ -1525,19 +1519,15 @@ def test_missing_keywords # multiple missing keywords

def test_unknown_keyword
lineno = __LINE__
assert_error_message(ArgumentError, <<~END) do
assert_error_message(ArgumentError, process_callee_snippet(<<~END)) do
unknown keyword: :kw4 (ArgumentError)

caller: #{ __FILE__ }:#{ lineno + 16 }
caller: #{ __FILE__ }:#{ lineno + 12 }
| keyword_test(kw1: 1, kw2: 2, kw3: 3, kw4: 4)
^^^^^^^^^^^^
callee: #{ __FILE__ }:#{ KEYWORD_TEST_LINENO }
#{
MethodDefLocationSupported ?
"| def keyword_test(kw1:, kw2:, kw3:)
^^^^^^^^^^^^" :
"(cannot highlight method definition; try Ruby 4.0 or later)"
}
| def keyword_test(kw1:, kw2:, kw3:)
^^^^^^^^^^^^
END

keyword_test(kw1: 1, kw2: 2, kw3: 3, kw4: 4)
Expand All @@ -1546,19 +1536,15 @@ def test_unknown_keyword

def test_unknown_keywords
lineno = __LINE__
assert_error_message(ArgumentError, <<~END) do
assert_error_message(ArgumentError, process_callee_snippet(<<~END)) do
unknown keywords: :kw4, :kw5 (ArgumentError)

caller: #{ __FILE__ }:#{ lineno + 16 }
caller: #{ __FILE__ }:#{ lineno + 12 }
| keyword_test(kw1: 1, kw2: 2, kw3: 3, kw4: 4, kw5: 5)
^^^^^^^^^^^^
callee: #{ __FILE__ }:#{ KEYWORD_TEST_LINENO }
#{
MethodDefLocationSupported ?
"| def keyword_test(kw1:, kw2:, kw3:)
^^^^^^^^^^^^" :
"(cannot highlight method definition; try Ruby 4.0 or later)"
}
| def keyword_test(kw1:, kw2:, kw3:)
^^^^^^^^^^^^
END

keyword_test(kw1: 1, kw2: 2, kw3: 3, kw4: 4, kw5: 5)
Expand All @@ -1576,19 +1562,15 @@ def wrong_number_of_arguments_test2(

def test_wrong_number_of_arguments_for_method2
lineno = __LINE__
assert_error_message(ArgumentError, <<~END) do
assert_error_message(ArgumentError, process_callee_snippet(<<~END)) do
wrong number of arguments (given 1, expected 3) (ArgumentError)

caller: #{ __FILE__ }:#{ lineno + 16 }
caller: #{ __FILE__ }:#{ lineno + 12 }
| wrong_number_of_arguments_test2(1)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
callee: #{ __FILE__ }:#{ WRONG_NUBMER_OF_ARGUMENTS_TEST2_LINENO }
#{
MethodDefLocationSupported ?
"| def wrong_number_of_arguments_test2(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" :
"(cannot highlight method definition; try Ruby 4.0 or later)"
}
| def wrong_number_of_arguments_test2(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
END

wrong_number_of_arguments_test2(1)
Expand All @@ -1598,19 +1580,15 @@ def test_wrong_number_of_arguments_for_method2
def test_wrong_number_of_arguments_for_lambda_literal
v = -> {}
lineno = __LINE__
assert_error_message(ArgumentError, <<~END) do
assert_error_message(ArgumentError, process_callee_snippet(<<~END)) do
wrong number of arguments (given 1, expected 0) (ArgumentError)

caller: #{ __FILE__ }:#{ lineno + 16 }
caller: #{ __FILE__ }:#{ lineno + 12 }
| v.call(1)
^^^^^
callee: #{ __FILE__ }:#{ lineno - 1 }
#{
MethodDefLocationSupported ?
"| v = -> {}
^^" :
"(cannot highlight method definition; try Ruby 4.0 or later)"
}
| v = -> {}
^^
END

v.call(1)
Expand All @@ -1620,19 +1598,15 @@ def test_wrong_number_of_arguments_for_lambda_literal
def test_wrong_number_of_arguments_for_lambda_method
v = lambda { }
lineno = __LINE__
assert_error_message(ArgumentError, <<~END) do
assert_error_message(ArgumentError, process_callee_snippet(<<~END)) do
wrong number of arguments (given 1, expected 0) (ArgumentError)

caller: #{ __FILE__ }:#{ lineno + 16 }
caller: #{ __FILE__ }:#{ lineno + 12 }
| v.call(1)
^^^^^
callee: #{ __FILE__ }:#{ lineno - 1 }
#{
MethodDefLocationSupported ?
"| v = lambda { }
^" :
"(cannot highlight method definition; try Ruby 4.0 or later)"
}
| v = lambda { }
^
END

v.call(1)
Expand All @@ -1646,19 +1620,15 @@ def test_wrong_number_of_arguments_for_lambda_method

def test_wrong_number_of_arguments_for_define_method
lineno = __LINE__
assert_error_message(ArgumentError, <<~END) do
assert_error_message(ArgumentError, process_callee_snippet(<<~END)) do
wrong number of arguments (given 1, expected 2) (ArgumentError)

caller: #{ __FILE__ }:#{ lineno + 16 }
caller: #{ __FILE__ }:#{ lineno + 12 }
| define_method_test(1)
^^^^^^^^^^^^^^^^^^
callee: #{ __FILE__ }:#{ DEFINE_METHOD_TEST_LINENO }
#{
MethodDefLocationSupported ?
"| define_method :define_method_test do |x, y|
^^" :
"(cannot highlight method definition; try Ruby 4.0 or later)"
}
| define_method :define_method_test do |x, y|
^^
END

define_method_test(1)
Expand Down Expand Up @@ -1742,19 +1712,15 @@ def self . baz(x:)

def test_singleton_method_with_spacing_missing_keyword
lineno = __LINE__
assert_error_message(ArgumentError, <<~END) do
assert_error_message(ArgumentError, process_callee_snippet(<<~END)) do
missing keyword: :x (ArgumentError)

caller: #{ __FILE__ }:#{ lineno + 16 }
caller: #{ __FILE__ }:#{ lineno + 12 }
| SingletonMethodWithSpacing.baz
^^^^
callee: #{ __FILE__ }:#{ SingletonMethodWithSpacing::LINENO }
#{
MethodDefLocationSupported ?
"| def self . baz(x:)
^^^^^" :
"(cannot highlight method definition; try Ruby 4.0 or later)"
}
| def self . baz(x:)
^^^^^
END

SingletonMethodWithSpacing.baz
Expand All @@ -1770,19 +1736,15 @@ def self.run(shop_id:, param1:)

def test_singleton_method_multiple_missing_keywords
lineno = __LINE__
assert_error_message(ArgumentError, <<~END) do
assert_error_message(ArgumentError, process_callee_snippet(<<~END)) do
missing keywords: :shop_id, :param1 (ArgumentError)

caller: #{ __FILE__ }:#{ lineno + 16 }
caller: #{ __FILE__ }:#{ lineno + 12 }
| SingletonMethodMultipleKwargs.run
^^^^
callee: #{ __FILE__ }:#{ SingletonMethodMultipleKwargs::LINENO }
#{
MethodDefLocationSupported ?
"| def self.run(shop_id:, param1:)
^^^^" :
"(cannot highlight method definition; try Ruby 4.0 or later)"
}
| def self.run(shop_id:, param1:)
^^^^
END

SingletonMethodMultipleKwargs.run
Expand Down