From 9e465a7b0cb30fd71603f4f58c2c78f50b3bc8b0 Mon Sep 17 00:00:00 2001 From: TSUYUSATO Kitsune Date: Sat, 17 Oct 2026 10:44:58 +0900 Subject: [PATCH] Accept multiple --define flags --- lib/lrama/option_parser.rb | 8 +++----- spec/lrama/option_parser_spec.rb | 9 +++++++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/lrama/option_parser.rb b/lib/lrama/option_parser.rb index ac200d34..2612823f 100644 --- a/lib/lrama/option_parser.rb +++ b/lib/lrama/option_parser.rb @@ -79,11 +79,9 @@ def parse_by_option_parser(argv) o.on('-t', '--debug', 'display debugging outputs of internal parser') {|v| @options.debug = true } o.separator " same as '-Dparse.trace'" o.on('--locations', 'enable location support') {|v| @options.locations = true } - o.on('-D', '--define=NAME[=VALUE]', Array, "similar to '%define NAME VALUE'") do |v| - @options.define = v.each_with_object({}) do |item, hash| # steep:ignore UnannotatedEmptyCollection - key, value = item.split('=', 2) - hash[key] = value - end + o.on('-D', '--define=NAME[=VALUE]', "similar to '%define NAME VALUE'") do |v| + key, value = v.split('=', 2) + @options.define[key] = value end o.separator '' o.separator 'Output:' diff --git a/spec/lrama/option_parser_spec.rb b/spec/lrama/option_parser_spec.rb index 52ffb508..6404c220 100644 --- a/spec/lrama/option_parser_spec.rb +++ b/spec/lrama/option_parser_spec.rb @@ -403,5 +403,14 @@ end end end + + context "when multiple define options are passed" do + it "returns hash of define options" do + option_parser = Lrama::OptionParser.new + option_parser.send(:parse, ["--define=foo=1", "--define=bar", fixture_path("command/basic.y")]) + options = option_parser.instance_variable_get(:@options) + expect(options.define).to eq({'foo' => "1", 'bar' => nil}) + end + end end end