summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authoreileencodes <eileencodes@gmail.com>2022-10-19 13:23:53 -0400
committerYusuke Endoh <mame@ruby-lang.org>2022-10-31 13:39:56 +0900
commit3391c51effcd61f9a718adf59740661d99f57b5b (patch)
treec45ce41d5b960638724db4376c0a5a87dab8c0df /test
parent7ed10abdd97a324583c9b9794088a41a550abcd0 (diff)
Add `node_id_for_backtrace_location` function
We want to use error highlight with eval'd code, specifically ERB templates. We're able to recover the generated code for eval'd templates and can get a parse tree for the ERB generated code, but we don't have a way to get the node id from the backtrace location. So we can't pass the right node into error highlight. This patch gives us an API to get the node id from the backtrace location so we can find the node in the AST. Error Highlight PR: https://github.com/ruby/error_highlight/pull/26 Co-authored-by: Aaron Patterson <tenderlove@ruby-lang.org>
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/6593
Diffstat (limited to 'test')
-rw-r--r--test/ruby/test_ast.rb13
1 files changed, 13 insertions, 0 deletions
diff --git a/test/ruby/test_ast.rb b/test/ruby/test_ast.rb
index aaf626e801..0932e93d5a 100644
--- a/test/ruby/test_ast.rb
+++ b/test/ruby/test_ast.rb
@@ -186,6 +186,19 @@ class TestAst < Test::Unit::TestCase
end
end
+ def test_node_id_for_location
+ exception = begin
+ raise
+ rescue => e
+ e
+ end
+ loc = exception.backtrace_locations.first
+ node_id = RubyVM::AbstractSyntaxTree.node_id_for_backtrace_location(loc)
+ node = RubyVM::AbstractSyntaxTree.of(loc, keep_script_lines: true)
+
+ assert_equal node.node_id, node_id
+ end
+
def test_of_proc_and_method
proc = Proc.new { 1 + 2 }
method = self.method(__method__)