diff --git a/gazelle/common/starlark/utils/util.go b/gazelle/common/starlark/utils/util.go index d43493edf..f197babe9 100644 --- a/gazelle/common/starlark/utils/util.go +++ b/gazelle/common/starlark/utils/util.go @@ -32,18 +32,12 @@ func Write(v interface{}) starlark.Value { return starlark.MakeInt64(v) case float64: return starlark.Float(v) + case []string: + return WriteList(v, WriteString) case []interface{}: - l := make([]starlark.Value, 0, len(v)) - for _, lv := range v { - l = append(l, Write(lv)) - } - return starlark.NewList(l) + return WriteList(v, Write) case map[string]interface{}: - d := starlark.NewDict(len(v)) - for k, lv := range v { - d.SetKey(starlark.String(k), Write(lv)) - } - return d + return WriteMap(v, Write) } log.Panicf("Failed to write value %v of type %q", v, reflect.TypeOf(v)) diff --git a/gazelle/common/starlark/utils/util_test.go b/gazelle/common/starlark/utils/util_test.go index 1679b7bce..7d263c021 100644 --- a/gazelle/common/starlark/utils/util_test.go +++ b/gazelle/common/starlark/utils/util_test.go @@ -81,6 +81,25 @@ func TestReadWrite(t *testing.T) { } }) + t.Run("[]string => List", func(t *testing.T) { + a := []string{"a", "b"} + l := Write(a).(*starlark.List) + + if len(a) != l.Len() { + t.Errorf("Expected equal length") + } + + l0, isString := l.Index(0).(starlark.String) + if !isString || a[0] != l0.GoString() { + t.Errorf("Expected %v to be String", l0) + } + + l1, isString := l.Index(1).(starlark.String) + if !isString || a[1] != l1.GoString() { + t.Errorf("Expected %v to be String", l1) + } + }) + t.Run("List <=> []interface{}", func(t *testing.T) { l := starlark.NewList([]starlark.Value{starlark.MakeInt(1), starlark.String("hello"), starlark.Bool(true)}) a := Read(l).([]interface{})