diff --git a/lib/power_assert/parser.rb b/lib/power_assert/parser.rb index c8ad988..399e9f7 100644 --- a/lib/power_assert/parser.rb +++ b/lib/power_assert/parser.rb @@ -1,9 +1,18 @@ -require 'ripper' - module PowerAssert class Parser Ident = Struct.new(:type, :name, :column) + # Prism is the default parser since Ruby 3.4. It contains a compatibility layer + # with ripper that returns data in the same format that ripper would. + RipperImplementation = begin + gem "prism", ">= 1.0.0" + require "prism" + Prism::Translation::Ripper + rescue LoadError + require "ripper" + Ripper + end + attr_reader :line, :path, :lineno, :binding def initialize(line, path, lineno, binding, assertion_method_name = nil, assertion_proc = nil) @@ -18,7 +27,7 @@ def initialize(line, path, lineno, binding, assertion_method_name = nil, asserti end def idents - @idents ||= extract_idents(Ripper.sexp(@line_for_parsing)) + @idents ||= extract_idents(RipperImplementation.sexp(@line_for_parsing)) end def call_paths diff --git a/test/test_helper.rb b/test/test_helper.rb index 5cc39ef..4c1d742 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -14,7 +14,6 @@ require 'test/unit' require 'power_assert' -require 'ripper' module PowerAssertTestHelper class << self