From bd933fbd686fafb023bed4f149a632cbdccc5595 Mon Sep 17 00:00:00 2001 From: "Kritagya Bhattarai (CalfMoon)" Date: Fri, 27 Mar 2026 21:56:43 +0545 Subject: [PATCH] fix(calc): fix looping error with travel forward tree Previously a fix was only implemented for when A->B->C->A now it also works for A->B->C->D->B --- src/main.ts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main.ts b/src/main.ts index 9a4a77c..82bdcb9 100644 --- a/src/main.ts +++ b/src/main.ts @@ -85,7 +85,7 @@ export default class NodeFactor extends Plugin { weight += Object.keys(node.reverse).length * settings.bwdMultiplier; if (settings.fwdTree) { weight += - this.fwdNodeTreeSize(node, node.id) * settings.fwdMultiplier; + this.fwdNodeTreeSize(node, new Set()) * settings.fwdMultiplier; } else { weight += Object.keys(node.forward).length * settings.fwdMultiplier; } @@ -104,8 +104,12 @@ export default class NodeFactor extends Plugin { return file.stat.size; } - private fwdNodeTreeSize(node: ObsidianNode, id: string): number { - let size = 0; + private fwdNodeTreeSize( + node: ObsidianNode, + antiLoopSet: Set, + ): number { + let size: number = 0; + antiLoopSet.add(node.id); const sizeMap = this.treeOptimizeMap.get(node.id); if (sizeMap !== undefined) { @@ -116,11 +120,11 @@ export default class NodeFactor extends Plugin { // @ts-ignore const childNode: ObsidianNode = value.target; - // Prevents looping if A -> B -> C -> A - if (key === id) return size; + // Prevents looping if A -> B -> C -> D -> B + if (antiLoopSet.has(key)) return size; size++; - const childSize = this.fwdNodeTreeSize(childNode, id); + const childSize = this.fwdNodeTreeSize(childNode, antiLoopSet); size += childSize; });