Skip to content

Commit

Permalink
Nicer error message when trying to use merge anchor tags other than m…
Browse files Browse the repository at this point in the history
…aps #1184
  • Loading branch information
mikefarah committed Apr 27, 2022
1 parent 70ad7a3 commit 26529fa
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 0 deletions.
3 changes: 3 additions & 0 deletions pkg/yqlib/operator_traverse_path.go
Expand Up @@ -309,6 +309,9 @@ func doTraverseMap(newMatches *orderedmap.OrderedMap, candidate *CandidateNode,
func traverseMergeAnchor(newMatches *orderedmap.OrderedMap, originalCandidate *CandidateNode, value *yaml.Node, wantedKey string, prefs traversePreferences, splat bool) error {
switch value.Kind {
case yaml.AliasNode:
if value.Alias.Kind != yaml.MappingNode {
return fmt.Errorf("can only use merge anchors with maps (!!map), but got %v", value.Alias.Tag)
}
candidateNode := originalCandidate.CreateReplacement(value.Alias)
return doTraverseMap(newMatches, candidateNode, wantedKey, prefs, splat)
case yaml.SequenceNode:
Expand Down
15 changes: 15 additions & 0 deletions pkg/yqlib/operator_traverse_path_test.go
Expand Up @@ -26,6 +26,15 @@ foobar:
thing: foobar_thing
`

// cannot use merge anchors with arrays
var badAliasSample = `
_common: &common-docker-file
- FROM ubuntu:18.04
steps:
<<: *common-docker-file
`

var traversePathOperatorScenarios = []expressionScenario{
{
skipDoc: true,
Expand Down Expand Up @@ -529,6 +538,12 @@ var traversePathOperatorScenarios = []expressionScenario{
"D0, P[a 2], (!!str)::c\n",
},
},
{
skipDoc: true,
document: badAliasSample,
expression: ".steps[]",
expectedError: "can only use merge anchors with maps (!!map), but got !!seq",
},
}

func TestTraversePathOperatorScenarios(t *testing.T) {
Expand Down

0 comments on commit 26529fa

Please sign in to comment.