lang/funcs: fix error when `matchkeys` encountered a variable
`matchkeys` was returning a (false) error if the searchset was a variable, since then the type of the keylist and searchset parameters would not match. This does slightly change the behavior: previously matchkeys would produce an error if the parameters were not of the same type, for e.g. if searchset was a list of strings and keylist was a list of integers. This no longer produces an error.
This commit is contained in:
parent
ab9e98da3c
commit
f2a14d7c18
|
@ -800,7 +800,13 @@ var MatchkeysFunc = function.New(&function.Spec{
|
|||
},
|
||||
},
|
||||
Type: func(args []cty.Value) (cty.Type, error) {
|
||||
if !args[1].Type().Equals(args[2].Type()) {
|
||||
argTypes := make([]cty.Type, 2)
|
||||
for i := 0; i < 2; i++ {
|
||||
argTypes[i] = args[i+1].Type()
|
||||
}
|
||||
|
||||
ty, _ := convert.UnifyUnsafe(argTypes)
|
||||
if ty == cty.NilType {
|
||||
return cty.NilType, errors.New("lists must be of the same type")
|
||||
}
|
||||
|
||||
|
|
|
@ -1883,8 +1883,7 @@ func TestMatchkeys(t *testing.T) {
|
|||
cty.UnknownVal(cty.List(cty.String)),
|
||||
false,
|
||||
},
|
||||
// errors
|
||||
{ // different types
|
||||
{ // different types that can be unified
|
||||
cty.ListVal([]cty.Value{
|
||||
cty.StringVal("a"),
|
||||
}),
|
||||
|
@ -1894,9 +1893,10 @@ func TestMatchkeys(t *testing.T) {
|
|||
cty.ListVal([]cty.Value{
|
||||
cty.StringVal("a"),
|
||||
}),
|
||||
cty.NilVal,
|
||||
true,
|
||||
cty.ListValEmpty(cty.String),
|
||||
false,
|
||||
},
|
||||
// errors
|
||||
{ // different types
|
||||
cty.ListVal([]cty.Value{
|
||||
cty.StringVal("a"),
|
||||
|
|
Loading…
Reference in New Issue