summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYusuke Endoh <mame@ruby-lang.org>2025-08-28 15:32:08 +0900
committergit <svn-admin@ruby-lang.org>2025-08-28 06:35:10 +0000
commitb85b2b84ad407b4653b6762ee61db0676655b21d (patch)
treea6bc02853aa1e181bd3b201230393886a33fb357
parent2e27f6e1f11745669c0a52e5c68b2f01f99c6a0b (diff)
[ruby/error_highlight] Remove a branch for Ruby 3.1
https://github.com/ruby/error_highlight/commit/d3063cde62
-rw-r--r--lib/error_highlight/base.rb75
-rw-r--r--test/error_highlight/test_error_highlight.rb25
2 files changed, 40 insertions, 60 deletions
diff --git a/lib/error_highlight/base.rb b/lib/error_highlight/base.rb
index b4a31f8e80..a4c65c63e6 100644
--- a/lib/error_highlight/base.rb
+++ b/lib/error_highlight/base.rb
@@ -122,56 +122,51 @@ module ErrorHighlight
end
end
- OPT_GETCONSTANT_PATH = (RUBY_VERSION.split(".").map {|s| s.to_i } <=> [3, 2]) >= 0
- private_constant :OPT_GETCONSTANT_PATH
-
def spot
return nil unless @node
- if OPT_GETCONSTANT_PATH
- # In Ruby 3.2 or later, a nested constant access (like `Foo::Bar::Baz`)
- # is compiled to one instruction (opt_getconstant_path).
- # @node points to the node of the whole `Foo::Bar::Baz` even if `Foo`
- # or `Foo::Bar` causes NameError.
- # So we try to spot the sub-node that causes the NameError by using
- # `NameError#name`.
- case @node.type
- when :COLON2
- subnodes = []
- node = @node
- while node.type == :COLON2
- node2, const = node.children
- subnodes << node if const == @name
- node = node2
- end
- if node.type == :CONST || node.type == :COLON3
- if node.children.first == @name
- subnodes << node
- end
-
- # If we found only one sub-node whose name is equal to @name, use it
- return nil if subnodes.size != 1
- @node = subnodes.first
- else
- # Do nothing; opt_getconstant_path is used only when the const base is
- # NODE_CONST (`Foo`) or NODE_COLON3 (`::Foo`)
- end
- when :constant_path_node
- subnodes = []
- node = @node
-
- begin
- subnodes << node if node.name == @name
- end while (node = node.parent).is_a?(Prism::ConstantPathNode)
-
- if node.is_a?(Prism::ConstantReadNode) && node.name == @name
+ # In Ruby 3.2 or later, a nested constant access (like `Foo::Bar::Baz`)
+ # is compiled to one instruction (opt_getconstant_path).
+ # @node points to the node of the whole `Foo::Bar::Baz` even if `Foo`
+ # or `Foo::Bar` causes NameError.
+ # So we try to spot the sub-node that causes the NameError by using
+ # `NameError#name`.
+ case @node.type
+ when :COLON2
+ subnodes = []
+ node = @node
+ while node.type == :COLON2
+ node2, const = node.children
+ subnodes << node if const == @name
+ node = node2
+ end
+ if node.type == :CONST || node.type == :COLON3
+ if node.children.first == @name
subnodes << node
end
# If we found only one sub-node whose name is equal to @name, use it
return nil if subnodes.size != 1
@node = subnodes.first
+ else
+ # Do nothing; opt_getconstant_path is used only when the const base is
+ # NODE_CONST (`Foo`) or NODE_COLON3 (`::Foo`)
end
+ when :constant_path_node
+ subnodes = []
+ node = @node
+
+ begin
+ subnodes << node if node.name == @name
+ end while (node = node.parent).is_a?(Prism::ConstantPathNode)
+
+ if node.is_a?(Prism::ConstantReadNode) && node.name == @name
+ subnodes << node
+ end
+
+ # If we found only one sub-node whose name is equal to @name, use it
+ return nil if subnodes.size != 1
+ @node = subnodes.first
end
case @node.type
diff --git a/test/error_highlight/test_error_highlight.rb b/test/error_highlight/test_error_highlight.rb
index 09b0579f8a..be3e360733 100644
--- a/test/error_highlight/test_error_highlight.rb
+++ b/test/error_highlight/test_error_highlight.rb
@@ -891,27 +891,13 @@ uninitialized constant ErrorHighlightTest::NotDefined
end
end
- if ErrorHighlight.const_get(:Spotter).const_get(:OPT_GETCONSTANT_PATH)
- def test_COLON2_5
- # Unfortunately, we cannot identify which `NotDefined` caused the NameError
- assert_error_message(NameError, <<~END) do
- uninitialized constant ErrorHighlightTest::NotDefined
- END
-
- ErrorHighlightTest::NotDefined::NotDefined
- end
- end
- else
- def test_COLON2_5
- assert_error_message(NameError, <<~END) do
+ def test_COLON2_5
+ # Unfortunately, we cannot identify which `NotDefined` caused the NameError
+ assert_error_message(NameError, <<~END) do
uninitialized constant ErrorHighlightTest::NotDefined
+ END
- ErrorHighlightTest::NotDefined::NotDefined
- ^^^^^^^^^^^^
- END
-
- ErrorHighlightTest::NotDefined::NotDefined
- end
+ ErrorHighlightTest::NotDefined::NotDefined
end
end
@@ -1617,7 +1603,6 @@ wrong number of arguments (given 1, expected 0) (ArgumentError)
end
def test_wrong_number_of_arguments_for_define_method
- v = lambda { }
lineno = __LINE__
assert_error_message(ArgumentError, <<~END) do
wrong number of arguments (given 1, expected 2) (ArgumentError)