From 5e56811883e614577e6e0189b241ac4c46f70880 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Barri=C3=A9?= Date: Mon, 16 Mar 2026 23:25:13 +0100 Subject: [PATCH] Accept Backtrace::Locations in OptParse::ParseError#set_backtrace --- lib/optparse.rb | 2 +- test/optparse/test_optparse.rb | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/optparse.rb b/lib/optparse.rb index 97178e2..09bb0b6 100644 --- a/lib/optparse.rb +++ b/lib/optparse.rb @@ -2271,7 +2271,7 @@ def recover(argv) DIR = File.join(__dir__, '') def self.filter_backtrace(array) unless $DEBUG - array.delete_if {|bt| bt.start_with?(DIR)} + array.delete_if {|bt| (bt.respond_to?(:path) ? bt.path : bt).start_with?(DIR)} end array end diff --git a/test/optparse/test_optparse.rb b/test/optparse/test_optparse.rb index ff33400..49dbaaf 100644 --- a/test/optparse/test_optparse.rb +++ b/test/optparse/test_optparse.rb @@ -178,6 +178,12 @@ def test_nonopt_pattern assert_equal(["-t"], e.args) end + def test_parse_error_set_backtrace + e = assert_raise(OptionParser::InvalidOption) {@opt.parse(%w(-t))} + assert_nothing_raised {e.set_backtrace(e.backtrace)} + assert_nothing_raised {e.set_backtrace(e.backtrace_locations)} + end + def test_help_pager require 'tmpdir' Dir.mktmpdir do |dir|