diff options
| author | mo khan <mo@mokhan.ca> | 2021-06-05 13:39:20 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2021-06-05 13:39:20 -0600 |
| commit | 69ce1e87131b0890795f0de330da863b00684463 (patch) | |
| tree | bf8a54cba7e415a63b923b478ed6fe34ef0d7f09 | |
| parent | 0b3f77dea0b7573f0dd67891628f47de0e0da6d0 (diff) | |
fix: parse empty arrays
| -rw-r--r-- | lib/hcl2/parser.rb | 6 | ||||
| -rw-r--r-- | spec/parser_spec.rb | 11 |
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 |
