From 26529fae94a2ac8962323cdc36942ece2a6a4e26 Mon Sep 17 00:00:00 2001 From: Mike Farah Date: Wed, 27 Apr 2022 14:46:52 +1000 Subject: [PATCH] Nicer error message when trying to use merge anchor tags other than maps #1184 --- pkg/yqlib/operator_traverse_path.go | 3 +++ pkg/yqlib/operator_traverse_path_test.go | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/pkg/yqlib/operator_traverse_path.go b/pkg/yqlib/operator_traverse_path.go index baaa4d27..b50aa3af 100644 --- a/pkg/yqlib/operator_traverse_path.go +++ b/pkg/yqlib/operator_traverse_path.go @@ -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: diff --git a/pkg/yqlib/operator_traverse_path_test.go b/pkg/yqlib/operator_traverse_path_test.go index d0addbb6..464cbba5 100644 --- a/pkg/yqlib/operator_traverse_path_test.go +++ b/pkg/yqlib/operator_traverse_path_test.go @@ -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, @@ -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) {