Commit 69ce1e8

mo khan <mo@mokhan.ca>
2021-06-05 19:39:20
fix: parse empty arrays
1 parent 0b3f77d
Changed files (2)
lib/hcl2/parser.rb
@@ -71,12 +71,16 @@ module Hcl2
       whitespace? >> string >> comma.maybe >> eol
     end
 
+    rule :empty_array do
+      lbracket >> eol >> eol >> rbracket
+    end
+
     rule :array do
       lbracket >> eol >> array_item.repeat >> whitespace >> rbracket
     end
 
     rule :argument_value do
-      (array.as(:values) | string) >> eol
+      (empty_array | array.as(:values) | string) >> eol
     end
 
     rule :argument do
spec/parser_spec.rb
@@ -211,6 +211,13 @@ RSpec.describe Hcl2::Parser do
   specify { expect(parser.string).to parse('"h1:fjlp3Pd3QsTLghNm7TUh/KnEMM2D3tLb7jsDLs8oWUE="') }
   specify { expect(parser.string).to parse('"zh:2014b397dd93fa55f2f2d1338c19e5b2b77b025a76a6b1fceea0b8696e984b9c"') }
 
+  specify do
+    expect(parser.empty_array).to parse(<<~HCL.chomp)
+      [
+      ]
+    HCL
+  end
+
   specify do
     expect(parser.whitespace).to parse(<<~HCL)
       /*
@@ -348,9 +355,9 @@ RSpec.describe Hcl2::Parser do
         HCL
       end
 
-      pending "parses multiple empty blocks" do
+      it "parses multiple empty blocks" do
         expect(subject[:blocks]).to match_array([
-          { type: "provider", name: "thingy", arguments: [{ name: "names", values: [] }] },
+          { type: "provider", name: "thingy", arguments: [{ name: "names" }] },
         ])
       end
     end