Skip to content

Commit 63719d8

Browse files
authored
Merge pull request #3865 from Earlopain/ripper-events-return-value
Fix `on_*` return value of ripper translator
2 parents 38c64e5 + 94e0107 commit 63719d8

File tree

2 files changed

+40
-6
lines changed

2 files changed

+40
-6
lines changed

lib/prism/translation/ripper.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3446,12 +3446,12 @@ def bounds(location)
34463446

34473447
# :stopdoc:
34483448
def _dispatch_0; end
3449-
def _dispatch_1(_); end
3450-
def _dispatch_2(_, _); end
3451-
def _dispatch_3(_, _, _); end
3452-
def _dispatch_4(_, _, _, _); end
3453-
def _dispatch_5(_, _, _, _, _); end
3454-
def _dispatch_7(_, _, _, _, _, _, _); end
3449+
def _dispatch_1(arg); arg end
3450+
def _dispatch_2(arg, _); arg end
3451+
def _dispatch_3(arg, _, _); arg end
3452+
def _dispatch_4(arg, _, _, _); arg end
3453+
def _dispatch_5(arg, _, _, _, _); arg end
3454+
def _dispatch_7(arg, _, _, _, _, _, _); arg end
34553455
# :startdoc:
34563456

34573457
#

test/prism/ruby/ripper_test.rb

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,40 @@ class RipperTest < TestCase
8686
define_method("#{fixture.test_name}_lex") { assert_ripper_lex(fixture.read) }
8787
end
8888

89+
module Events
90+
attr_reader :events
91+
92+
def initialize(...)
93+
super
94+
@events = []
95+
end
96+
97+
Prism::Translation::Ripper::PARSER_EVENTS.each do |event|
98+
define_method(:"on_#{event}") do |*args|
99+
@events << [event, *args]
100+
super(*args)
101+
end
102+
end
103+
end
104+
105+
class RipperEvents < Ripper
106+
include Events
107+
end
108+
109+
class PrismEvents < Translation::Ripper
110+
include Events
111+
end
112+
113+
def test_events
114+
source = "1 rescue 2"
115+
ripper = RipperEvents.new(source)
116+
prism = PrismEvents.new(source)
117+
ripper.parse
118+
prism.parse
119+
# This makes sure that the content is the same. Ordering is not correct for now.
120+
assert_equal(ripper.events.sort, prism.events.sort)
121+
end
122+
89123
def test_lexer
90124
lexer = Translation::Ripper::Lexer.new("foo")
91125
expected = [[1, 0], :on_ident, "foo", Translation::Ripper::EXPR_CMDARG]

0 commit comments

Comments
 (0)