* Resolve all unresolved references
(
unresolvedRefs: UnresolvedReference[],
onProgress?: (current: number, total: number) => void
)
| 695 | * Resolve all unresolved references |
| 696 | */ |
| 697 | resolveAll( |
| 698 | unresolvedRefs: UnresolvedReference[], |
| 699 | onProgress?: (current: number, total: number) => void |
| 700 | ): ResolutionResult { |
| 701 | // Pre-load all nodes into memory for fast lookups |
| 702 | this.warmCaches(); |
| 703 | |
| 704 | const resolved: ResolvedRef[] = []; |
| 705 | const unresolved: UnresolvedRef[] = []; |
| 706 | const byMethod: Record<string, number> = {}; |
| 707 | |
| 708 | // Convert to our internal format, using denormalized fields when available |
| 709 | const refs: UnresolvedRef[] = unresolvedRefs.map((ref) => ({ |
| 710 | fromNodeId: ref.fromNodeId, |
| 711 | referenceName: ref.referenceName, |
| 712 | referenceKind: ref.referenceKind, |
| 713 | line: ref.line, |
| 714 | column: ref.column, |
| 715 | filePath: ref.filePath || this.getFilePathFromNodeId(ref.fromNodeId), |
| 716 | language: ref.language || this.getLanguageFromNodeId(ref.fromNodeId), |
| 717 | rowId: ref.rowId, |
| 718 | })); |
| 719 | |
| 720 | const total = refs.length; |
| 721 | let lastReportedPercent = -1; |
| 722 | |
| 723 | for (let i = 0; i < refs.length; i++) { |
| 724 | const ref = refs[i]!; // Array index is guaranteed to be in bounds |
| 725 | const result = this.resolveOneTimed(ref); |
| 726 | |
| 727 | if (result) { |
| 728 | resolved.push(result); |
| 729 | byMethod[result.resolvedBy] = (byMethod[result.resolvedBy] || 0) + 1; |
| 730 | } else { |
| 731 | unresolved.push(ref); |
| 732 | } |
| 733 | |
| 734 | // Report progress every 1% to avoid too many updates |
| 735 | if (onProgress) { |
| 736 | const currentPercent = Math.floor((i / total) * 100); |
| 737 | if (currentPercent > lastReportedPercent) { |
| 738 | lastReportedPercent = currentPercent; |
| 739 | onProgress(i + 1, total); |
| 740 | } |
| 741 | } |
| 742 | } |
| 743 | |
| 744 | // Final progress report |
| 745 | if (onProgress && total > 0) { |
| 746 | onProgress(total, total); |
| 747 | } |
| 748 | |
| 749 | return { |
| 750 | resolved, |
| 751 | unresolved, |
| 752 | stats: { |
| 753 | total: refs.length, |
| 754 | resolved: resolved.length, |
no test coverage detected