From 35d338cc240d55238e8e7599abe1d4ea608458ca Mon Sep 17 00:00:00 2001 From: Louis Lombard Date: Mon, 8 Sep 2025 10:08:18 +0200 Subject: [PATCH] modify empty table decode --- pkg/yqlib/decoder_toml.go | 14 +++++++------- pkg/yqlib/toml_test.go | 31 +++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/pkg/yqlib/decoder_toml.go b/pkg/yqlib/decoder_toml.go index d67047b8..8f90c66e 100644 --- a/pkg/yqlib/decoder_toml.go +++ b/pkg/yqlib/decoder_toml.go @@ -282,13 +282,13 @@ func (dec *tomlDecoder) processTable(currentNode *toml.Node) (bool, error) { tableValue = dec.parser.Expression() // next expression is not table data, so we are done if tableValue.Kind != toml.KeyValue { - log.Debug("got an empty table, returning") - return true, nil - } - - runAgainstCurrentExp, err = dec.decodeKeyValuesIntoMap(tableNodeValue, tableValue) - if err != nil && !errors.Is(err, io.EOF) { - return false, err + log.Debug("got an empty table") + runAgainstCurrentExp = true + } else { + runAgainstCurrentExp, err = dec.decodeKeyValuesIntoMap(tableNodeValue, tableValue) + if err != nil && !errors.Is(err, io.EOF) { + return false, err + } } } diff --git a/pkg/yqlib/toml_test.go b/pkg/yqlib/toml_test.go index 60eb4c83..82c82f13 100644 --- a/pkg/yqlib/toml_test.go +++ b/pkg/yqlib/toml_test.go @@ -23,6 +23,7 @@ street = "first street" [owner] name = "Tom Preston-Werner" ` + var expectedTableArrayBeforeOwners = `owner: addresses: - street: first street @@ -67,6 +68,29 @@ var emptyTable = ` var emptyTableExpected = "dependencies: {}\n" +var multipleEmptyTables = ` +[firstEmptyTable] +[firstTableWithContent] +key = "value" +[secondEmptyTable] +[thirdEmptyTable] +[secondTableWithContent] +key = "value" +[fourthEmptyTable] +[fifthEmptyTable] +` + +var expectedMultipleEmptyTables = `firstEmptyTable: {} +firstTableWithContent: + key: value +secondEmptyTable: {} +thirdEmptyTable: {} +secondTableWithContent: + key: value +fourthEmptyTable: {} +fifthEmptyTable: {} +` + var sampleWithHeader = ` [servers] @@ -238,6 +262,13 @@ var tomlScenarios = []formatScenario{ expected: expectedSampleWithHeader, scenarioType: "decode", }, + { + description: "Parse: multiple empty tables", + skipDoc: true, + input: multipleEmptyTables, + expected: expectedMultipleEmptyTables, + scenarioType: "decode", + }, } func testTomlScenario(t *testing.T, s formatScenario) {