summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2021-06-05 13:39:20 -0600
committermo khan <mo@mokhan.ca>2021-06-05 13:39:20 -0600
commit69ce1e87131b0890795f0de330da863b00684463 (patch)
treebf8a54cba7e415a63b923b478ed6fe34ef0d7f09
parent0b3f77dea0b7573f0dd67891628f47de0e0da6d0 (diff)
fix: parse empty arrays
-rw-r--r--lib/hcl2/parser.rb6
-rw-r--r--spec/parser_spec.rb11
2 files changed, 14 insertions, 3 deletions
diff --git a/lib/hcl2/parser.rb b/lib/hcl2/parser.rb
index 6afcbd0..43dabeb 100644
--- a/lib/hcl2/parser.rb
+++ b/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
diff --git a/spec/parser_spec.rb b/spec/parser_spec.rb
index a397ecf..5f503ad 100644
--- a/spec/parser_spec.rb
+++ b/spec/parser_spec.rb
@@ -212,6 +212,13 @@ RSpec.describe Hcl2::Parser do
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)
/*
This is a multi-line comment
@@ -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