internal/diff: use field Selector instead of Name
Change-Id: I37d88d4d33fe3ede3b70b59babef1e74c71b8f4e
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/6659
Reviewed-by: CUE cueckoo <cueckoo@gmail.com>
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/internal/diff/diff.go b/internal/diff/diff.go
index 98f6b44..538d662 100644
--- a/internal/diff/diff.go
+++ b/internal/diff/diff.go
@@ -15,9 +15,6 @@
package diff
import (
- "strconv"
-
- "cuelang.org/go/cue/ast"
"cuelang.org/go/cue/errors"
"cuelang.org/go/internal/legacy/cue"
)
@@ -103,10 +100,7 @@
// TODO: return formatted expression for optionals.
f := st.Field(i)
- str := f.Name
- if !ast.IsValidIdent(str) {
- str = strconv.Quote(str)
- }
+ str := f.Selector
if f.IsOptional {
str += "?"
}
@@ -208,10 +202,10 @@
xMap := make(map[string]int32, sx.Len())
yMap := make(map[string]int32, sy.Len())
for i := 0; i < sx.Len(); i++ {
- xMap[sx.Field(i).Name] = int32(i + 1)
+ xMap[sx.Field(i).Selector] = int32(i + 1)
}
for i := 0; i < sy.Len(); i++ {
- yMap[sy.Field(i).Name] = int32(i + 1)
+ yMap[sy.Field(i).Selector] = int32(i + 1)
}
edits := []Edit{}
@@ -223,7 +217,7 @@
// Process zero nodes
for ; xi < sx.Len(); xi++ {
xf = sx.Field(xi)
- yp := yMap[xf.Name]
+ yp := yMap[xf.Selector]
if yp > 0 {
break
}
@@ -232,15 +226,15 @@
}
for ; yi < sy.Len(); yi++ {
yf = sy.Field(yi)
- if yMap[yf.Name] == 0 {
+ if yMap[yf.Selector] == 0 {
// already done
continue
}
- xp := xMap[yf.Name]
+ xp := xMap[yf.Selector]
if xp > 0 {
break
}
- yMap[yf.Name] = 0
+ yMap[yf.Selector] = 0
edits = append(edits, Edit{UniqueY, 0, int32(yi + 1), nil})
differs = true
}
@@ -249,12 +243,12 @@
for ; xi < sx.Len(); xi++ {
xf = sx.Field(xi)
- yp := yMap[xf.Name]
+ yp := yMap[xf.Selector]
if yp == 0 {
break
}
// If yp != xi+1, the topological sort was not possible.
- yMap[xf.Name] = 0
+ yMap[xf.Selector] = 0
yf := sy.Field(int(yp - 1))