mirror of
https://github.com/mikefarah/yq.git
synced 2026-07-04 19:35:38 +00:00
maps and strings
This commit is contained in:
parent
2be7e904be
commit
0cff8c234a
@ -122,7 +122,7 @@ func convertHclExprToNode(expr hclsyntax.Expression, src []byte) *CandidateNode
|
|||||||
// check if bf represents an exact integer
|
// check if bf represents an exact integer
|
||||||
if intVal, acc := bf.Int(nil); acc == big.Exact {
|
if intVal, acc := bf.Int(nil); acc == big.Exact {
|
||||||
s := intVal.String()
|
s := intVal.String()
|
||||||
return createScalarNode(int64(intVal.Int64()), s)
|
return createScalarNode(intVal.Int64(), s)
|
||||||
}
|
}
|
||||||
s := bf.Text('g', -1)
|
s := bf.Text('g', -1)
|
||||||
return createScalarNode(0.0, s)
|
return createScalarNode(0.0, s)
|
||||||
@ -152,6 +152,38 @@ func convertHclExprToNode(expr hclsyntax.Expression, src []byte) *CandidateNode
|
|||||||
s := v.GoString()
|
s := v.GoString()
|
||||||
return createStringScalarNode(s)
|
return createStringScalarNode(s)
|
||||||
}
|
}
|
||||||
|
case *hclsyntax.TupleConsExpr:
|
||||||
|
// parse tuple/list into YAML sequence
|
||||||
|
seq := &CandidateNode{Kind: SequenceNode}
|
||||||
|
for _, exprVal := range e.Exprs {
|
||||||
|
child := convertHclExprToNode(exprVal, src)
|
||||||
|
seq.AddChild(child)
|
||||||
|
}
|
||||||
|
return seq
|
||||||
|
case *hclsyntax.ObjectConsExpr:
|
||||||
|
// parse object into YAML mapping
|
||||||
|
m := &CandidateNode{Kind: MappingNode}
|
||||||
|
for _, item := range e.Items {
|
||||||
|
// evaluate key expression to get the key string
|
||||||
|
keyVal, keyDiags := item.KeyExpr.Value(nil)
|
||||||
|
if keyDiags != nil && keyDiags.HasErrors() {
|
||||||
|
// fallback: try to extract key from source
|
||||||
|
r := item.KeyExpr.Range()
|
||||||
|
start := r.Start.Byte
|
||||||
|
end := r.End.Byte
|
||||||
|
if start > 0 && end >= start && end <= len(src) {
|
||||||
|
keyNode := createStringScalarNode(strings.TrimSpace(string(src[start-1 : end])))
|
||||||
|
valNode := convertHclExprToNode(item.ValueExpr, src)
|
||||||
|
m.AddKeyValueChild(keyNode, valNode)
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
keyStr := keyVal.AsString()
|
||||||
|
keyNode := createStringScalarNode(keyStr)
|
||||||
|
valNode := convertHclExprToNode(item.ValueExpr, src)
|
||||||
|
m.AddKeyValueChild(keyNode, valNode)
|
||||||
|
}
|
||||||
|
return m
|
||||||
case *hclsyntax.TemplateExpr:
|
case *hclsyntax.TemplateExpr:
|
||||||
// join parts; if single literal, return that string
|
// join parts; if single literal, return that string
|
||||||
var parts []string
|
var parts []string
|
||||||
@ -206,7 +238,7 @@ func convertCtyValueToNode(v cty.Value) *CandidateNode {
|
|||||||
}
|
}
|
||||||
if intVal, acc := bf.Int(nil); acc == big.Exact {
|
if intVal, acc := bf.Int(nil); acc == big.Exact {
|
||||||
s := intVal.String()
|
s := intVal.String()
|
||||||
return createScalarNode(int64(intVal.Int64()), s)
|
return createScalarNode(intVal.Int64(), s)
|
||||||
}
|
}
|
||||||
s := bf.Text('g', -1)
|
s := bf.Text('g', -1)
|
||||||
return createScalarNode(0.0, s)
|
return createScalarNode(0.0, s)
|
||||||
|
|||||||
@ -5,7 +5,6 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"errors"
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/fatih/color"
|
"github.com/fatih/color"
|
||||||
|
|||||||
@ -34,13 +34,13 @@ var hclFormatScenarios = []formatScenario{
|
|||||||
{
|
{
|
||||||
description: "list of strings",
|
description: "list of strings",
|
||||||
input: `tags = ["a", "b"]`,
|
input: `tags = ["a", "b"]`,
|
||||||
expected: "tags: ' [\"a\", \"b\"]'\n",
|
expected: "tags:\n - a\n - b\n",
|
||||||
scenarioType: "decode",
|
scenarioType: "decode",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "object/map attribute",
|
description: "object/map attribute",
|
||||||
input: `obj = { a = 1, b = "two" }`,
|
input: `obj = { a = 1, b = "two" }`,
|
||||||
expected: "obj: ' { a = 1, b = \"two\" }'\n",
|
expected: "obj:\n a: 1\n b: two\n",
|
||||||
scenarioType: "decode",
|
scenarioType: "decode",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user