mirror of
https://github.com/taigrr/yq
synced 2025-01-18 04:53:17 -08:00
New,Update now support anchors and aliases
This commit is contained in:
@@ -48,7 +48,7 @@ func DebugNode(value *yaml.Node) {
|
||||
log.Error("Error debugging node, %v", errorEncoding.Error())
|
||||
}
|
||||
encoder.Close()
|
||||
log.Debug("Tag: %v, Kind: %v", value.Tag, KindString(value.Kind))
|
||||
log.Debug("Tag: %v, Kind: %v, Anchor: %v", value.Tag, KindString(value.Kind), value.Anchor)
|
||||
log.Debug("%v", buf.String())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,6 +31,8 @@ func UpdateNavigationStrategy(updateCommand UpdateCommand, autoCreate bool) Navi
|
||||
node.Kind = changesToApply.Kind
|
||||
node.Style = changesToApply.Style
|
||||
node.Content = changesToApply.Content
|
||||
node.Anchor = changesToApply.Anchor
|
||||
node.Alias = changesToApply.Alias
|
||||
node.HeadComment = changesToApply.HeadComment
|
||||
node.LineComment = changesToApply.LineComment
|
||||
node.FootComment = changesToApply.FootComment
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
)
|
||||
|
||||
type ValueParser interface {
|
||||
Parse(argument string, customTag string, customStyle string) *yaml.Node
|
||||
Parse(argument string, customTag string, customStyle string, anchorName string, createAlias bool) *yaml.Node
|
||||
}
|
||||
|
||||
type valueParser struct {
|
||||
@@ -15,7 +15,7 @@ func NewValueParser() ValueParser {
|
||||
return &valueParser{}
|
||||
}
|
||||
|
||||
func (v *valueParser) Parse(argument string, customTag string, customStyle string) *yaml.Node {
|
||||
func (v *valueParser) Parse(argument string, customTag string, customStyle string, anchorName string, createAlias bool) *yaml.Node {
|
||||
var style yaml.Style
|
||||
if customStyle == "tagged" {
|
||||
style = yaml.TaggedStyle
|
||||
@@ -32,9 +32,15 @@ func (v *valueParser) Parse(argument string, customTag string, customStyle strin
|
||||
} else if customStyle != "" {
|
||||
log.Error("Unknown style %v, ignoring", customStyle)
|
||||
}
|
||||
|
||||
if argument == "[]" {
|
||||
return &yaml.Node{Tag: "!!seq", Kind: yaml.SequenceNode, Style: style}
|
||||
}
|
||||
return &yaml.Node{Value: argument, Tag: customTag, Kind: yaml.ScalarNode, Style: style}
|
||||
|
||||
kind := yaml.ScalarNode
|
||||
|
||||
if createAlias {
|
||||
kind = yaml.AliasNode
|
||||
}
|
||||
|
||||
return &yaml.Node{Value: argument, Tag: customTag, Kind: kind, Style: style, Anchor: anchorName}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ var parseStyleTests = []struct {
|
||||
|
||||
func TestValueParserStyleTag(t *testing.T) {
|
||||
for _, tt := range parseStyleTests {
|
||||
actual := NewValueParser().Parse("cat", "", tt.customStyle)
|
||||
actual := NewValueParser().Parse("cat", "", tt.customStyle, "", false)
|
||||
test.AssertResultWithContext(t, tt.expectedStyle, actual.Style, tt.customStyle)
|
||||
}
|
||||
}
|
||||
@@ -40,7 +40,7 @@ var parseValueTests = []struct {
|
||||
|
||||
func TestValueParserParse(t *testing.T) {
|
||||
for _, tt := range parseValueTests {
|
||||
actual := NewValueParser().Parse(tt.argument, tt.customTag, "")
|
||||
actual := NewValueParser().Parse(tt.argument, tt.customTag, "", "", false)
|
||||
test.AssertResultWithContext(t, tt.argument, actual.Value, tt.testDescription)
|
||||
test.AssertResultWithContext(t, tt.expectedTag, actual.Tag, tt.testDescription)
|
||||
test.AssertResult(t, yaml.ScalarNode, actual.Kind)
|
||||
@@ -48,7 +48,18 @@ func TestValueParserParse(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestValueParserParseEmptyArray(t *testing.T) {
|
||||
actual := NewValueParser().Parse("[]", "", "")
|
||||
actual := NewValueParser().Parse("[]", "", "", "", false)
|
||||
test.AssertResult(t, "!!seq", actual.Tag)
|
||||
test.AssertResult(t, yaml.SequenceNode, actual.Kind)
|
||||
}
|
||||
|
||||
func TestValueParserParseAlias(t *testing.T) {
|
||||
actual := NewValueParser().Parse("bob", "", "", "", true)
|
||||
test.AssertResult(t, "bob", actual.Value)
|
||||
test.AssertResult(t, yaml.AliasNode, actual.Kind)
|
||||
}
|
||||
|
||||
func TestValueParserAnchorname(t *testing.T) {
|
||||
actual := NewValueParser().Parse("caterpillar", "", "", "foo", false)
|
||||
test.AssertResult(t, "foo", actual.Anchor)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user