mirror of
https://github.com/mikefarah/yq.git
synced 2026-07-07 22:35:37 +00:00
modify empty table decode
This commit is contained in:
parent
c34edcf983
commit
b1d6a88eb8
10
README.md
10
README.md
@ -294,7 +294,7 @@ Using [winget](https://learn.microsoft.com/en-us/windows/package-manager/)
|
||||
winget install --id MikeFarah.yq
|
||||
```
|
||||
|
||||
### Mac:
|
||||
### MacPorts:
|
||||
Using [MacPorts](https://www.macports.org/)
|
||||
```
|
||||
sudo port selfupdate
|
||||
@ -324,6 +324,14 @@ Flox can be used to install yq on Linux, MacOS, and Windows through WSL.
|
||||
flox install yq
|
||||
```
|
||||
|
||||
|
||||
### MacOS / Linux via gah:
|
||||
Using [gah](https://github.com/marverix/gah)
|
||||
|
||||
```
|
||||
gah install yq
|
||||
```
|
||||
|
||||
## Features
|
||||
- [Detailed documentation with many examples](https://mikefarah.gitbook.io/yq/)
|
||||
- Written in portable go, so you can download a lovely dependency free binary
|
||||
|
||||
@ -41,7 +41,6 @@ func processFormatScenario(s formatScenario, decoder Decoder, encoder Encoder) (
|
||||
}
|
||||
|
||||
exp, err := getExpressionParser().ParseExpression(expression)
|
||||
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@ -65,12 +64,10 @@ func processFormatScenario(s formatScenario, decoder Decoder, encoder Encoder) (
|
||||
}
|
||||
|
||||
func mustProcessFormatScenario(s formatScenario, decoder Decoder, encoder Encoder) string {
|
||||
|
||||
result, err := processFormatScenario(s, decoder, encoder)
|
||||
if err != nil {
|
||||
log.Error("Bad scenario %v: %w", s.description, err)
|
||||
return fmt.Sprintf("Bad scenario %v: %v", s.description, err.Error())
|
||||
}
|
||||
return result
|
||||
|
||||
}
|
||||
|
||||
@ -140,7 +140,6 @@ func (dec *tomlDecoder) createArray(tomlNode *toml.Node) (*CandidateNode, error)
|
||||
Tag: "!!seq",
|
||||
Content: content,
|
||||
}, nil
|
||||
|
||||
}
|
||||
|
||||
func (dec *tomlDecoder) createStringScalar(tomlNode *toml.Node) (*CandidateNode, error) {
|
||||
@ -190,7 +189,6 @@ func (dec *tomlDecoder) decodeNode(tomlNode *toml.Node) (*CandidateNode, error)
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupported type %v", tomlNode.Kind)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (dec *tomlDecoder) Decode() (*CandidateNode, error) {
|
||||
@ -200,7 +198,7 @@ func (dec *tomlDecoder) Decode() (*CandidateNode, error) {
|
||||
//
|
||||
// toml library likes to panic
|
||||
var deferredError error
|
||||
defer func() { //catch or finally
|
||||
defer func() { // catch or finally
|
||||
if r := recover(); r != nil {
|
||||
var ok bool
|
||||
deferredError, ok = r.(error)
|
||||
@ -211,7 +209,7 @@ func (dec *tomlDecoder) Decode() (*CandidateNode, error) {
|
||||
}()
|
||||
|
||||
log.Debug("ok here we go")
|
||||
var runAgainstCurrentExp = false
|
||||
runAgainstCurrentExp := false
|
||||
var err error
|
||||
for runAgainstCurrentExp || dec.parser.NextExpression() {
|
||||
|
||||
@ -242,7 +240,6 @@ func (dec *tomlDecoder) Decode() (*CandidateNode, error) {
|
||||
}
|
||||
|
||||
return dec.rootMap, deferredError
|
||||
|
||||
}
|
||||
|
||||
func (dec *tomlDecoder) processTopLevelNode(currentNode *toml.Node) (bool, error) {
|
||||
@ -282,13 +279,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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user