Skip to content

Commit ec4ca05

Browse files
Fixing chained parents by simplifying the tree on unsplit
1 parent f4d62a4 commit ec4ca05

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

internal/views/splits.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,9 +479,32 @@ func (n *Node) Unsplit() bool {
479479
if n.parent.IsLeaf() {
480480
return n.parent.Unsplit()
481481
}
482+
483+
n.parent.simplify()
482484
return true
483485
}
484486

487+
// Simplify removes unnecessary chained parents
488+
func (n *Node) simplify() {
489+
if n.parent == nil || len(n.children) != 1 {
490+
return
491+
}
492+
493+
ind := 0
494+
for i, c := range n.parent.children {
495+
if c.id == n.id {
496+
ind = i
497+
}
498+
}
499+
500+
parent := n.parent
501+
kind := n.Kind
502+
parent.children[ind] = n.children[0]
503+
parent.children[ind].parent = parent
504+
parent.children[ind].Kind = kind
505+
parent.simplify()
506+
}
507+
485508
// String returns the string form of the node and all children (used for debugging)
486509
func (n *Node) String() string {
487510
var strf func(n *Node, ident int) string

0 commit comments

Comments
 (0)