From 51791542aa767968a8d098805999f9d6df1ca46a Mon Sep 17 00:00:00 2001 From: Robin Christ Date: Wed, 14 Oct 2026 19:45:18 +0200 Subject: [PATCH] fix(js_ruler): number serial "arg" keys again Since 3fdd108 the result of the "arg" -> "arg_N" gsub is discarded, so s(arg, arg) becomes an object with duplicate "arg" keys and the JS parser keeps only one of the values (e.g. "mpls priority 7 0"). --- lib/junoser/js_ruler.rb | 2 +- test/test_js_ruler.rb | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 test/test_js_ruler.rb diff --git a/lib/junoser/js_ruler.rb b/lib/junoser/js_ruler.rb index 5d7e0c2..1bc3d50 100644 --- a/lib/junoser/js_ruler.rb +++ b/lib/junoser/js_ruler.rb @@ -292,7 +292,7 @@ def finalize(lines) lines.gsub!(/([{,]\n\s*)([^ "(]+)/m) { "#{$1}\"null_#{sequence}\": #{$2}" } # "arg" -> "arg_1" - lines.gsub('"arg":') { %("arg_#{sequence}":) } + lines.gsub!('"arg":') { %("arg_#{sequence}":) } conditional_groups(lines) end diff --git a/test/test_js_ruler.rb b/test/test_js_ruler.rb new file mode 100644 index 0000000..fa235d4 --- /dev/null +++ b/test/test_js_ruler.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require 'helper' +require 'junoser/development' +require 'stringio' + +class TestJsRuler < Test::Unit::TestCase + test 'number serial arguments of a sequence' do + rule = <<~RULE + rule(:path_lsp_type) do + c( + "priority" ( /* Preemption priorities */ + s( + arg, + arg + ) + ) + ) + end + RULE + + js = Junoser::JsRuler.new(StringIO.new(rule)).rule + + assert_not_match(/"arg":/, js) + assert_equal 2, js.scan(/"arg_\d+": null/).uniq.size + end +end