Simplify ast implementation
Change-Id: I0e61cde0e8551103e362a14de880d77fc9315807
diff --git a/ast/compare.go b/ast/compare.go
index 617e8f0..df4b28f 100644
--- a/ast/compare.go
+++ b/ast/compare.go
@@ -4,7 +4,7 @@
"reflect"
)
-// NodesEqual compares two AST nodes for equality
+// NodesEqual compares two AST nodes for structural equality, ignoring rewrites metadata
func NodesEqual(a, b Node) bool {
if a == nil || b == nil {
return a == b
@@ -21,8 +21,7 @@
n1.Key == n2.Key &&
n1.Layer == n2.Layer &&
n1.Match == n2.Match &&
- n1.Value == n2.Value &&
- rewritesEqual(n1.Rewrites, n2.Rewrites)
+ n1.Value == n2.Value
}
case *TermGroup:
if n2, ok := b.(*TermGroup); ok {
@@ -34,12 +33,11 @@
return false
}
}
- return rewritesEqual(n1.Rewrites, n2.Rewrites)
+ return true
}
case *Token:
if n2, ok := b.(*Token); ok {
- return NodesEqual(n1.Wrap, n2.Wrap) &&
- rewritesEqual(n1.Rewrites, n2.Rewrites)
+ return NodesEqual(n1.Wrap, n2.Wrap)
}
case *CatchallNode:
if n2, ok := b.(*CatchallNode); ok {
@@ -72,24 +70,6 @@
return false
}
-// rewritesEqual compares two slices of Rewrite structs for equality
-func rewritesEqual(a, b []Rewrite) bool {
- if len(a) != len(b) {
- return false
- }
- for i := range a {
- if a[i].Editor != b[i].Editor ||
- a[i].Operation != b[i].Operation ||
- a[i].Scope != b[i].Scope ||
- a[i].Src != b[i].Src ||
- a[i].Comment != b[i].Comment ||
- !reflect.DeepEqual(a[i].Original, b[i].Original) {
- return false
- }
- }
- return true
-}
-
// IsTermNode checks if a node is a Term node
func IsTermNode(node Node) bool {
_, ok := node.(*Term)