From 39b3c4bf34b3720b1af5b2380406c9e037686344 Mon Sep 17 00:00:00 2001 From: Marc-Andre Lafortune Date: Tue, 26 May 2020 06:41:28 -0400 Subject: [PATCH] Add legacy switches to ruby-parse and ruby-rewrite --- lib/parser/runner.rb | 23 +++++++++++++++++++++-- test/test_runner_parse.rb | 21 +++++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/lib/parser/runner.rb b/lib/parser/runner.rb index 82a493ccb..1d840907d 100644 --- a/lib/parser/runner.rb +++ b/lib/parser/runner.rb @@ -14,9 +14,8 @@ def self.go(options) end def initialize - Parser::Builders::Default.modernize - @option_parser = OptionParser.new { |opts| setup_option_parsing(opts) } + @legacy = {} @parser_class = nil @parser = nil @files = [] @@ -30,6 +29,7 @@ def initialize def execute(options) parse_options(options) + setup_builder_default prepare_parser process_all_input @@ -37,6 +37,8 @@ def execute(options) private + LEGACY_MODES = %i[lambda procarg0 encoding index arg_inside_procarg0].freeze + def runner_name raise NotImplementedError, "implement #{self.class}##{__callee__}" end @@ -126,6 +128,17 @@ def setup_option_parsing(opts) @parser_class = Parser::RubyMotion end + opts.on '--legacy', "Parse with all legacy modes" do + @legacy = Hash.new(true) + end + + LEGACY_MODES.each do |mode| + opt_name = "--legacy-#{mode.to_s.gsub('_', '-')}" + opts.on opt_name, "Parse with legacy mode for emit_#{mode}" do + @legacy[mode] = true + end + end + opts.on '-w', '--warnings', 'Enable warnings' do |w| @warnings = w end @@ -164,6 +177,12 @@ def parse_options(options) end end + def setup_builder_default + LEGACY_MODES.each do |mode| + Parser::Builders::Default.send(:"emit_#{mode}=", !@legacy[mode]) + end + end + def prepare_parser @parser = @parser_class.new diff --git a/test/test_runner_parse.rb b/test/test_runner_parse.rb index f4fbe2733..e43d9b9d2 100644 --- a/test/test_runner_parse.rb +++ b/test/test_runner_parse.rb @@ -18,6 +18,27 @@ def test_emit_ruby 's(:int, 123)' end + def test_emit_modern_ruby + assert_prints ['-e', '->{}'], + '(lambda)' + assert_prints ['-e', 'self[1] = 2'], + 'indexasgn' + end + + def test_emit_legacy + assert_prints ['--legacy', '-e', '->{}'], + '(send nil :lambda)' + assert_prints ['--legacy', '-e', 'self[1] = 2'], + ':[]=' + end + + def test_emit_legacy_lambda + assert_prints ['--legacy-lambda', '-e', '->{}'], + '(send nil :lambda)' + assert_prints ['--legacy-lambda', '-e', 'self[1] = 2'], + 'indexasgn' + end + def test_emit_json assert_prints ['--emit-json', '-e', '123'], '["int",123]'