1- From 10f9cf092c951ee1385eaf19b43482d3a21b501c Mon Sep 17 00:00:00 2001
1+ From 7cc85d5e8801a380813fb196fd220cddb54381bd Mon Sep 17 00:00:00 2001
22From: Cameron Clark <cameron.clark@hey.com>
33Date: Sat, 22 Nov 2025 11:01:42 +0000
4- Subject: patch: expose more functions via the shim with type fixes
4+ Subject: [PATCH 3/5] patch: expose more functions via the shim with type fixes
55
66---
77 internal/project/autoimport.go | 4 +-
@@ -14,7 +14,7 @@ Subject: patch: expose more functions via the shim with type fixes
1414 7 files changed, 126 insertions(+), 117 deletions(-)
1515
1616diff --git a/internal/project/autoimport.go b/internal/project/autoimport.go
17- index 9dcc8228f..8145d5506 100644
17+ index 9dcc8228ff..8145d5506b 100644
1818--- a/internal/project/autoimport.go
1919+++ b/internal/project/autoimport.go
2020@@ -14,7 +14,7 @@ import (
@@ -36,7 +36,7 @@ index 9dcc8228f..8145d5506 100644
3636 toPath func(fileName string) tspath.Path,
3737 ) *autoImportRegistryCloneHost {
3838diff --git a/internal/project/compilerhost.go b/internal/project/compilerhost.go
39- index 1af21a828..fb0db1b09 100644
39+ index 1af21a828b..fb0db1b09c 100644
4040--- a/internal/project/compilerhost.go
4141+++ b/internal/project/compilerhost.go
4242@@ -86,7 +86,7 @@ func (c *compilerHost) GetResolvedProjectReference(fileName string, path tspath.
@@ -49,7 +49,7 @@ index 1af21a828..fb0db1b09 100644
4949 }
5050
5151diff --git a/internal/project/configfileregistrybuilder.go b/internal/project/configfileregistrybuilder.go
52- index 956241be4..3a86a16d0 100644
52+ index 956241be46..3a86a16d0f 100644
5353--- a/internal/project/configfileregistrybuilder.go
5454+++ b/internal/project/configfileregistrybuilder.go
5555@@ -16,14 +16,14 @@ import (
@@ -299,7 +299,7 @@ index 956241be4..3a86a16d0 100644
299299 entry.DeleteIf(func(value *configFileEntry) bool {
300300 return len(value.retainingProjects) == 0 && len(value.retainingOpenFiles) == 0 && len(value.retainingConfigs) == 0
301301diff --git a/internal/project/overlayfs.go b/internal/project/overlayfs.go
302- index e968e9c44..28faeb11f 100644
302+ index e968e9c441..28faeb11f4 100644
303303--- a/internal/project/overlayfs.go
304304+++ b/internal/project/overlayfs.go
305305@@ -68,13 +68,13 @@ func (f *fileBase) ECMALineInfo() *sourcemap.ECMALineInfo {
@@ -354,7 +354,7 @@ index e968e9c44..28faeb11f 100644
354354 fileName: f.fileName,
355355 content: f.content,
356356diff --git a/internal/project/projectcollectionbuilder.go b/internal/project/projectcollectionbuilder.go
357- index a8cbdae6b..763b252eb 100644
357+ index cedbe34016..d15a3353a7 100644
358358--- a/internal/project/projectcollectionbuilder.go
359359+++ b/internal/project/projectcollectionbuilder.go
360360@@ -16,13 +16,13 @@ import (
@@ -452,7 +452,7 @@ index a8cbdae6b..763b252eb 100644
452452 }
453453 }
454454
455- @@ -493 ,7 +493 ,7 @@ func (b *ProjectCollectionBuilder) ensureProjectTree(
455+ @@ -496 ,7 +496 ,7 @@ func (b *ProjectCollectionBuilder) ensureProjectTree(
456456 }
457457
458458 // Load this child project since this is referenced
@@ -461,7 +461,7 @@ index a8cbdae6b..763b252eb 100644
461461 b.updateProgram(childProjectEntry, logger)
462462
463463 // Ensure children for this project
464- @@ -613 ,7 +613 ,7 @@ func (b *ProjectCollectionBuilder) findDefaultConfiguredProject(fileName string,
464+ @@ -616 ,7 +616 ,7 @@ func (b *ProjectCollectionBuilder) findDefaultConfiguredProject(fileName string,
465465 })
466466
467467 if multipleCandidates {
@@ -470,7 +470,7 @@ index a8cbdae6b..763b252eb 100644
470470 return p
471471 }
472472 }
473- @@ -622 ,7 +622 ,7 @@ func (b *ProjectCollectionBuilder) findDefaultConfiguredProject(fileName string,
473+ @@ -625 ,7 +625 ,7 @@ func (b *ProjectCollectionBuilder) findDefaultConfiguredProject(fileName string,
474474 }
475475
476476 func (b *ProjectCollectionBuilder) ensureConfiguredProjectAndAncestorsForFile(fileName string, path tspath.Path, logger *logging.LogTree) searchResult {
@@ -479,7 +479,7 @@ index a8cbdae6b..763b252eb 100644
479479 if result.project != nil && b.fs.isOpenFile(path) {
480480 b.createAncestorTree(fileName, path, &result, logger)
481481 }
482- @@ -640 ,14 +640 ,14 @@ func (b *ProjectCollectionBuilder) createAncestorTree(fileName string, path tspa
482+ @@ -643 ,14 +643 ,14 @@ func (b *ProjectCollectionBuilder) createAncestorTree(fileName string, path tspa
483483 }
484484
485485 // Get config file name
@@ -496,7 +496,7 @@ index a8cbdae6b..763b252eb 100644
496496 if ancestor == nil {
497497 return
498498 }
499- @@ -670 ,13 +670 ,13 @@ func (b *ProjectCollectionBuilder) createAncestorTree(fileName string, path tspa
499+ @@ -673 ,13 +673 ,13 @@ func (b *ProjectCollectionBuilder) createAncestorTree(fileName string, path tspa
500500
501501 type searchNode struct {
502502 configFileName string
@@ -512,7 +512,7 @@ index a8cbdae6b..763b252eb 100644
512512 }
513513
514514 type searchResult struct {
515- @@ -688 ,7 +688 ,7 @@ func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectWorker(
515+ @@ -691 ,7 +691 ,7 @@ func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectWorker(
516516 fileName string,
517517 path tspath.Path,
518518 configFileName string,
@@ -521,7 +521,7 @@ index a8cbdae6b..763b252eb 100644
521521 visited *collections.SyncSet[searchNodeKey],
522522 fallback *searchResult,
523523 logger *logging.LogTree,
524- @@ -704 ,7 +704 ,7 @@ func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectWorker(
524+ @@ -707 ,7 +707 ,7 @@ func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectWorker(
525525 if config, ok := configs.Load(b.toPath(node.configFileName)); ok && len(config.ProjectReferences()) > 0 {
526526 referenceLoadKind := node.loadKind
527527 if config.CompilerOptions().DisableReferencedProjectLoad.IsTrue() {
@@ -530,7 +530,7 @@ index a8cbdae6b..763b252eb 100644
530530 }
531531
532532 var refLogger *logging.LogTree
533- @@ -720 ,7 +720 ,7 @@ func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectWorker(
533+ @@ -723 ,7 +723 ,7 @@ func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectWorker(
534534 },
535535 func(node searchNode) (isResult bool, stop bool) {
536536 configFilePath := b.toPath(node.configFileName)
@@ -539,7 +539,7 @@ index a8cbdae6b..763b252eb 100644
539539 if config == nil {
540540 node.logger.Log("Config file for project does not already exist")
541541 return false, false
542- @@ -748 ,7 +748 ,7 @@ func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectWorker(
542+ @@ -751 ,7 +751 ,7 @@ func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectWorker(
543543 return false, false
544544 }
545545
@@ -548,7 +548,7 @@ index a8cbdae6b..763b252eb 100644
548548 // Ensure project is up to date before checking for file inclusion
549549 b.updateProgram(project, node.logger)
550550 }
551- @@ -768 ,7 +768 ,7 @@ func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectWorker(
551+ @@ -771 ,7 +771 ,7 @@ func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectWorker(
552552 Visited: visited,
553553 PreprocessLevel: func(level *core.BreadthFirstSearchLevel[searchNodeKey, searchNode]) {
554554 level.Range(func(node searchNode) bool {
@@ -557,7 +557,7 @@ index a8cbdae6b..763b252eb 100644
557557 // Remove find requests when a create request for the same project is already present.
558558 level.Delete(searchNodeKey{configFileName: node.configFileName, loadKind: node.loadKind})
559559 }
560- @@ -818 ,7 +818 ,7 @@ func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectWorker(
560+ @@ -821 ,7 +821 ,7 @@ func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectWorker(
561561 return *fallback
562562 }
563563 }
@@ -566,7 +566,7 @@ index a8cbdae6b..763b252eb 100644
566566 return b.findOrCreateDefaultConfiguredProjectWorker(
567567 fileName,
568568 path,
569- @@ -845 ,7 +845 ,7 @@ func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectWorker(
569+ @@ -848 ,7 +848 ,7 @@ func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectWorker(
570570 func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectForFile(
571571 fileName string,
572572 path tspath.Path,
@@ -575,7 +575,7 @@ index a8cbdae6b..763b252eb 100644
575575 logger *logging.LogTree,
576576 ) searchResult {
577577 if key, ok := b.fileDefaultProjects[path]; ok {
578- @@ -856 ,7 +856 ,7 @@ func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectForFile(
578+ @@ -859 ,7 +859 ,7 @@ func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectForFile(
579579 entry, _ := b.configuredProjects.Load(key)
580580 return searchResult{project: entry}
581581 }
@@ -584,7 +584,7 @@ index a8cbdae6b..763b252eb 100644
584584 startTime := time.Now()
585585 result := b.findOrCreateDefaultConfiguredProjectWorker(
586586 fileName,
587- @@ -889 ,10 +889 ,10 @@ func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectForFile(
587+ @@ -892 ,10 +892 ,10 @@ func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectForFile(
588588 func (b *ProjectCollectionBuilder) findOrCreateProject(
589589 configFileName string,
590590 configFilePath tspath.Path,
@@ -597,7 +597,7 @@ index a8cbdae6b..763b252eb 100644
597597 entry, _ := b.configuredProjects.Load(configFilePath)
598598 return entry
599599 }
600- @@ -953 ,7 +953 ,7 @@ func (b *ProjectCollectionBuilder) updateProgram(entry dirty.Value[*Project], lo
600+ @@ -956 ,7 +956 ,7 @@ func (b *ProjectCollectionBuilder) updateProgram(entry dirty.Value[*Project], lo
601601 startTime := time.Now()
602602 entry.Locked(func(entry dirty.Value[*Project]) {
603603 if entry.Value().Kind == KindConfigured {
@@ -606,7 +606,7 @@ index a8cbdae6b..763b252eb 100644
606606 entry.Value().configFileName,
607607 entry.Value().configFilePath,
608608 entry.Value(),
609- @@ -1066 ,10 +1066 ,10 @@ func (b *ProjectCollectionBuilder) deleteConfiguredProject(project dirty.Value[*
609+ @@ -1069 ,10 +1069 ,10 @@ func (b *ProjectCollectionBuilder) deleteConfiguredProject(project dirty.Value[*
610610 }
611611 if program := project.Value().Program; program != nil {
612612 program.RangeResolvedProjectReference(func(referencePath tspath.Path, config *tsoptions.ParsedCommandLine, _ *tsoptions.ParsedCommandLine, _ int) bool {
@@ -620,10 +620,10 @@ index a8cbdae6b..763b252eb 100644
620620 project.Delete()
621621 }
622622diff --git a/internal/project/snapshot.go b/internal/project/snapshot.go
623- index 0b7688e8e..237c23cce 100644
623+ index 91e161ec0b..faef23914c 100644
624624--- a/internal/project/snapshot.go
625625+++ b/internal/project/snapshot.go
626- @@ -265 ,7 +265 ,7 @@ func (s *Snapshot) Clone(ctx context.Context, change SnapshotChange, overlays ma
626+ @@ -274 ,7 +274 ,7 @@ func (s *Snapshot) Clone(ctx context.Context, change SnapshotChange, overlays ma
627627 }
628628
629629 start := time.Now()
@@ -632,7 +632,7 @@ index 0b7688e8e..237c23cce 100644
632632 if change.fileChanges.HasExcessiveWatchEvents() {
633633 invalidateStart := time.Now()
634634 if !fs.watchChangesOverlapCache(change.fileChanges) {
635- @@ -344 ,7 +344 ,7 @@ func (s *Snapshot) Clone(ctx context.Context, change SnapshotChange, overlays ma
635+ @@ -353 ,7 +353 ,7 @@ func (s *Snapshot) Clone(ctx context.Context, change SnapshotChange, overlays ma
636636 if len(projectsWithNewProgramStructure) > 0 {
637637 cleanFilesStart := time.Now()
638638 removedFiles := 0
@@ -642,7 +642,7 @@ index 0b7688e8e..237c23cce 100644
642642 if project.host != nil && project.host.sourceFS.Seen(entry.Key()) {
643643 return true
644644diff --git a/internal/project/snapshotfs.go b/internal/project/snapshotfs.go
645- index a8629d0f7..a2fad571a 100644
645+ index a8629d0f76..a2fad571aa 100644
646646--- a/internal/project/snapshotfs.go
647647+++ b/internal/project/snapshotfs.go
648648@@ -23,7 +23,7 @@ type FileSource interface {
0 commit comments