in rf_iterate.go [13:46]
func iterator(keyword string, addressLength int) refIterator {
return func(ts []hcl.Traverser, i int) []string {
var r []string
if len(ts) == 0 {
return nil
}
if name(ts[i]) != keyword {
return nil
}
if len(ts) < i+addressLength {
return nil
}
remain := addressLength
sb := strings.Builder{}
// data.xyz.abc
for j := i; remain > 0; j++ {
sb.WriteString(name(ts[j]))
remain--
if remain > 0 {
sb.WriteString(".")
}
}
r = []string{sb.String()}
//potential index, like data.xyz.abc["foo"]
if len(ts) > i+addressLength+1 {
index, ok := ts[i+addressLength].(hcl.TraverseIndex)
if ok {
sb.WriteString(fmt.Sprintf(`[%s]`, CtyValueToString(index.Key)))
r = append(r, sb.String())
}
}
return r
}
}