@@ -29,9 +29,10 @@ type fileLoaderWorker[K fileLoaderWorkerTask[K]] struct {
29
29
}
30
30
31
31
type queuedTask [K fileLoaderWorkerTask [K ]] struct {
32
- task K
33
- mu sync.Mutex
34
- lowestDepth int
32
+ task K
33
+ mu sync.Mutex
34
+ lowestDepth int
35
+ fromExternalLibrary bool
35
36
}
36
37
37
38
func (w * fileLoaderWorker [K ]) runAndWait (loader * fileLoader , tasks []K ) {
@@ -47,30 +48,31 @@ func (w *fileLoaderWorker[K]) start(loader *fileLoader, tasks []K, depth int, is
47
48
task = loadedTask .task
48
49
if loaded {
49
50
tasks [i ] = task
51
+ // Add in the loaded task's external-ness.
52
+ taskIsFromExternalLibrary = taskIsFromExternalLibrary || task .isFromExternalLibrary ()
50
53
}
51
54
52
55
w .wg .Queue (func () {
53
56
loadedTask .mu .Lock ()
54
57
defer loadedTask .mu .Unlock ()
55
58
59
+ startSubtasks := false
60
+
56
61
currentDepth := depth
57
62
if task .shouldIncreaseDepth () {
58
63
currentDepth ++
59
64
}
60
-
61
- startSubtasks := false
62
-
63
65
if currentDepth < loadedTask .lowestDepth {
64
66
// If we're seeing this task at a lower depth than before,
65
67
// reprocess its subtasks to ensure they are loaded.
66
68
loadedTask .lowestDepth = currentDepth
67
69
startSubtasks = true
68
70
}
69
71
70
- if ! task .isRoot () && taskIsFromExternalLibrary && ! task . isFromExternalLibrary () {
72
+ if ! task .isRoot () && taskIsFromExternalLibrary && ! loadedTask . fromExternalLibrary {
71
73
// If we're seeing this task now as an external library,
72
74
// reprocess its subtasks to ensure they are also marked as external.
73
- task . markFromExternalLibrary ()
75
+ loadedTask . fromExternalLibrary = true
74
76
startSubtasks = true
75
77
}
76
78
@@ -83,13 +85,20 @@ func (w *fileLoaderWorker[K]) start(loader *fileLoader, tasks []K, depth int, is
83
85
}
84
86
85
87
if startSubtasks {
86
- w .start (loader , task .getSubTasks (), loadedTask .lowestDepth , task . isFromExternalLibrary () )
88
+ w .start (loader , task .getSubTasks (), loadedTask .lowestDepth , loadedTask . fromExternalLibrary )
87
89
}
88
90
})
89
91
}
90
92
}
91
93
92
94
func (w * fileLoaderWorker [K ]) collect (loader * fileLoader , tasks []K , iterate func (K , []tspath.Path )) []tspath.Path {
95
+ // Mark all tasks we saw as external after the fact.
96
+ w .tasksByFileName .Range (func (key string , value * queuedTask [K ]) bool {
97
+ if value .fromExternalLibrary {
98
+ value .task .markFromExternalLibrary ()
99
+ }
100
+ return true
101
+ })
93
102
return w .collectWorker (loader , tasks , iterate , collections.Set [K ]{})
94
103
}
95
104
0 commit comments