Skip to content

Commit 38a7bf0

Browse files
committed
🎨 Improve reference count update after moving heading blocks #15322
1 parent d5d6095 commit 38a7bf0

2 files changed

Lines changed: 22 additions & 10 deletions

File tree

kernel/model/push_reload.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,9 @@ func refreshDynamicRefTexts0(updatedDefNodes map[string]*ast.Node, updatedTrees
207207
// 1. 更新引用的动态锚文本
208208
treeRefNodeIDs := map[string]*hashset.Set{}
209209
var changedNodes []*ast.Node
210+
var refs []*sql.Ref
210211
for _, updateNode := range updatedDefNodes {
211-
refs, parentNodes, childNodes := getRefsCacheByDefNode(updateNode)
212+
refs, changedNodes = getRefsCacheByDefNode(updateNode)
212213
for _, ref := range refs {
213214
if refIDs, ok := treeRefNodeIDs[ref.RootID]; !ok {
214215
refIDs = hashset.New()
@@ -218,12 +219,6 @@ func refreshDynamicRefTexts0(updatedDefNodes map[string]*ast.Node, updatedTrees
218219
refIDs.Add(ref.BlockID)
219220
}
220221
}
221-
if 0 < len(parentNodes) {
222-
changedNodes = append(changedNodes, parentNodes...)
223-
}
224-
if 0 < len(childNodes) {
225-
changedNodes = append(changedNodes, childNodes...)
226-
}
227222
}
228223
for _, n := range changedNodes {
229224
updatedDefNodes[n.ID] = n

kernel/model/transaction.go

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1594,7 +1594,8 @@ func (tx *Transaction) writeTree(tree *parse.Tree) (err error) {
15941594
return
15951595
}
15961596

1597-
func getRefsCacheByDefNode(updateNode *ast.Node) (ret []*sql.Ref, changedParentNodes, changedChildNodes []*ast.Node) {
1597+
func getRefsCacheByDefNode(updateNode *ast.Node) (ret []*sql.Ref, changedNodes []*ast.Node) {
1598+
changedNodesMap := map[string]*ast.Node{}
15981599
ret = sql.GetRefsCacheByDefID(updateNode.ID)
15991600
if nil != updateNode.Parent && ast.NodeDocument != updateNode.Parent.Type &&
16001601
updateNode.Parent.IsContainerBlock() && updateNode == treenode.FirstLeafBlock(updateNode.Parent) {
@@ -1607,7 +1608,9 @@ func getRefsCacheByDefNode(updateNode *ast.Node) (ret []*sql.Ref, changedParentN
16071608
parentRefs := sql.GetRefsCacheByDefID(parent.ID)
16081609
if 0 < len(parentRefs) {
16091610
ret = append(ret, parentRefs...)
1610-
changedParentNodes = append(changedParentNodes, parent)
1611+
if _, ok := changedNodesMap[parent.ID]; !ok {
1612+
changedNodesMap[parent.ID] = parent
1613+
}
16111614
}
16121615
}
16131616
}
@@ -1621,11 +1624,25 @@ func getRefsCacheByDefNode(updateNode *ast.Node) (ret []*sql.Ref, changedParentN
16211624
childRefs := sql.GetRefsCacheByDefID(n.ID)
16221625
if 0 < len(childRefs) {
16231626
ret = append(ret, childRefs...)
1624-
changedChildNodes = append(changedChildNodes, n)
1627+
changedNodesMap[n.ID] = n
16251628
}
16261629
return ast.WalkContinue
16271630
})
16281631
}
1632+
if ast.NodeHeading == updateNode.Type && "1" == updateNode.IALAttr("fold") {
1633+
// 如果是折叠标题,则需要向下查找引用
1634+
children := treenode.HeadingChildren(updateNode)
1635+
for _, child := range children {
1636+
childRefs := sql.GetRefsCacheByDefID(child.ID)
1637+
if 0 < len(childRefs) {
1638+
ret = append(ret, childRefs...)
1639+
changedNodesMap[child.ID] = child
1640+
}
1641+
}
1642+
}
1643+
for _, n := range changedNodesMap {
1644+
changedNodes = append(changedNodes, n)
1645+
}
16291646
return
16301647
}
16311648

0 commit comments

Comments
 (0)