diff --git a/lib/prism/translation/ripper.rb b/lib/prism/translation/ripper.rb index 00506d650e21a8..77ee2c337d9517 100644 --- a/lib/prism/translation/ripper.rb +++ b/lib/prism/translation/ripper.rb @@ -22,7 +22,6 @@ module Translation # - on_comma # - on_ignored_nl # - on_ignored_sp - # - on_label_end # - on_nl # - on_operator_ambiguous # - on_semicolon @@ -3633,7 +3632,13 @@ def visit_string_node(node) end result = yield - return result if assoc + if assoc + if node.closing != ":" + bounds(node.closing_loc) + on_label_end(node.closing) + end + return result + end if is_heredoc bounds(node.closing_loc) diff --git a/test/prism/ruby/ripper_test.rb b/test/prism/ruby/ripper_test.rb index cdb8375f96a38c..05be087868d811 100644 --- a/test/prism/ruby/ripper_test.rb +++ b/test/prism/ruby/ripper_test.rb @@ -139,11 +139,11 @@ def test_lex_ignored_missing_heredoc_end end end - UNSUPPORTED_EVENTS = %i[comma ignored_nl label_end nl semicolon sp ignored_sp] + UNSUPPORTED_EVENTS = %i[comma ignored_nl nl semicolon sp ignored_sp] # Events that are currently not emitted SUPPORTED_EVENTS = Translation::Ripper::EVENTS - UNSUPPORTED_EVENTS # Events that assert against their line/column - CHECK_LOCATION_EVENTS = %i[kw op lbrace rbrace lbracket rbracket lparen rparen words_sep] + CHECK_LOCATION_EVENTS = %i[kw op lbrace rbrace lbracket rbracket lparen rparen words_sep label_end] module Events attr_reader :events