Skip to content

Commit 08c6506

Browse files
committed
Include missing files in program’s root file list
1 parent e540e15 commit 08c6506

File tree

4 files changed

+24
-21
lines changed

4 files changed

+24
-21
lines changed

internal/compiler/fileloader.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ type fileLoader struct {
3838

3939
type processedFiles struct {
4040
files []*ast.SourceFile
41+
missingFiles []string
4142
resolvedModules map[tspath.Path]module.ModeAwareCache[*module.ResolvedModule]
4243
sourceFileMetaDatas map[tspath.Path]*ast.SourceFileMetaData
4344
jsxRuntimeImportSpecifiers map[tspath.Path]*jsxRuntimeImportSpecifier
@@ -84,6 +85,7 @@ func processAllProgramFiles(
8485
totalFileCount := int(loader.totalFileCount.Load())
8586
libFileCount := int(loader.libFileCount.Load())
8687

88+
var missingFiles []string
8789
files := make([]*ast.SourceFile, 0, totalFileCount-libFileCount)
8890
libFiles := make([]*ast.SourceFile, 0, totalFileCount) // totalFileCount here since we append files to it later to construct the final list
8991

@@ -94,6 +96,10 @@ func processAllProgramFiles(
9496

9597
for task := range loader.collectTasks(loader.rootTasks) {
9698
file := task.file
99+
if file == nil {
100+
missingFiles = append(missingFiles, task.normalizedFilePath)
101+
continue
102+
}
97103
if task.isLib {
98104
libFiles = append(libFiles, file)
99105
} else {
@@ -189,10 +195,8 @@ func (p *fileLoader) collectTasksWorker(tasks []*parseTask, seen core.Set[*parse
189195
}
190196
}
191197

192-
if task.file != nil {
193-
if !yield(task) {
194-
return false
195-
}
198+
if !yield(task) {
199+
return false
196200
}
197201
}
198202
return true
@@ -244,6 +248,10 @@ func (t *parseTask) start(loader *fileLoader) {
244248

245249
loader.wg.Queue(func() {
246250
file := loader.parseSourceFile(t.normalizedFilePath)
251+
if file == nil {
252+
return
253+
}
254+
247255
t.file = file
248256
loader.wg.Queue(func() {
249257
t.metadata = loader.loadSourceFileMetaData(file.Path())

internal/project/project.go

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -158,13 +158,7 @@ func (p *Project) GetProjectVersion() int {
158158

159159
// GetRootFileNames implements LanguageServiceHost.
160160
func (p *Project) GetRootFileNames() []string {
161-
fileNames := make([]string, 0, p.rootFileNames.Size())
162-
for path, fileName := range p.rootFileNames.Entries() {
163-
if p.host.GetScriptInfoByPath(path) != nil {
164-
fileNames = append(fileNames, fileName)
165-
}
166-
}
167-
return fileNames
161+
return slices.Collect(p.rootFileNames.Values())
168162
}
169163

170164
// GetSourceFile implements LanguageServiceHost.

internal/project/service_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ func TestService(t *testing.T) {
293293
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "")
294294
_, project := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/index.ts")
295295
program := project.GetProgram()
296-
assert.Equal(t, len(program.GetSemanticDiagnostics(program.GetSourceFile("/home/projects/TS/p1/src/index.ts"))), 0)
296+
assert.Equal(t, len(program.GetSemanticDiagnostics(t.Context(), program.GetSourceFile("/home/projects/TS/p1/src/index.ts"))), 0)
297297

298298
filesCopy := maps.Clone(files)
299299
filesCopy["/home/projects/TS/p1/tsconfig.json"] = `{
@@ -311,7 +311,7 @@ func TestService(t *testing.T) {
311311
}))
312312

313313
program = project.GetProgram()
314-
assert.Equal(t, len(program.GetSemanticDiagnostics(program.GetSourceFile("/home/projects/TS/p1/src/index.ts"))), 1)
314+
assert.Equal(t, len(program.GetSemanticDiagnostics(t.Context(), program.GetSourceFile("/home/projects/TS/p1/src/index.ts"))), 1)
315315
})
316316

317317
t.Run("delete explicitly included file", func(t *testing.T) {
@@ -330,7 +330,7 @@ func TestService(t *testing.T) {
330330
service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "")
331331
_, project := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/index.ts")
332332
program := project.GetProgram()
333-
assert.Equal(t, len(program.GetSemanticDiagnostics(program.GetSourceFile("/home/projects/TS/p1/src/index.ts"))), 0)
333+
assert.Equal(t, len(program.GetSemanticDiagnostics(t.Context(), program.GetSourceFile("/home/projects/TS/p1/src/index.ts"))), 0)
334334

335335
filesCopy := maps.Clone(files)
336336
delete(filesCopy, "/home/projects/TS/p1/src/x.ts")
@@ -343,7 +343,7 @@ func TestService(t *testing.T) {
343343
}))
344344

345345
program = project.GetProgram()
346-
assert.Equal(t, len(program.GetSemanticDiagnostics(program.GetSourceFile("/home/projects/TS/p1/src/index.ts"))), 1)
346+
assert.Equal(t, len(program.GetSemanticDiagnostics(t.Context(), program.GetSourceFile("/home/projects/TS/p1/src/index.ts"))), 1)
347347
assert.Check(t, program.GetSourceFile("/home/projects/TS/p1/src/x.ts") == nil)
348348
})
349349

@@ -363,7 +363,7 @@ func TestService(t *testing.T) {
363363
service.OpenFile("/home/projects/TS/p1/src/x.ts", files["/home/projects/TS/p1/src/x.ts"], core.ScriptKindTS, "")
364364
_, project := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/x.ts")
365365
program := project.GetProgram()
366-
assert.Equal(t, len(program.GetSemanticDiagnostics(program.GetSourceFile("/home/projects/TS/p1/src/x.ts"))), 0)
366+
assert.Equal(t, len(program.GetSemanticDiagnostics(t.Context(), program.GetSourceFile("/home/projects/TS/p1/src/x.ts"))), 0)
367367

368368
filesCopy := maps.Clone(files)
369369
delete(filesCopy, "/home/projects/TS/p1/src/index.ts")
@@ -376,7 +376,7 @@ func TestService(t *testing.T) {
376376
}))
377377

378378
program = project.GetProgram()
379-
assert.Equal(t, len(program.GetSemanticDiagnostics(program.GetSourceFile("/home/projects/TS/p1/src/x.ts"))), 1)
379+
assert.Equal(t, len(program.GetSemanticDiagnostics(t.Context(), program.GetSourceFile("/home/projects/TS/p1/src/x.ts"))), 1)
380380
})
381381

382382
t.Run("create explicitly included file", func(t *testing.T) {
@@ -396,7 +396,7 @@ func TestService(t *testing.T) {
396396
program := project.GetProgram()
397397

398398
// Initially should have an error because y.ts is missing
399-
assert.Equal(t, len(program.GetSemanticDiagnostics(program.GetSourceFile("/home/projects/TS/p1/src/index.ts"))), 1)
399+
assert.Equal(t, len(program.GetSemanticDiagnostics(t.Context(), program.GetSourceFile("/home/projects/TS/p1/src/index.ts"))), 1)
400400

401401
// Add the missing file
402402
filesCopy := maps.Clone(files)
@@ -411,7 +411,7 @@ func TestService(t *testing.T) {
411411

412412
// Error should be resolved
413413
program = project.GetProgram()
414-
assert.Equal(t, len(program.GetSemanticDiagnostics(program.GetSourceFile("/home/projects/TS/p1/src/index.ts"))), 0)
414+
assert.Equal(t, len(program.GetSemanticDiagnostics(t.Context(), program.GetSourceFile("/home/projects/TS/p1/src/index.ts"))), 0)
415415
assert.Check(t, program.GetSourceFile("/home/projects/TS/p1/src/y.ts") != nil)
416416
})
417417

@@ -432,7 +432,7 @@ func TestService(t *testing.T) {
432432
program := project.GetProgram()
433433

434434
// Initially should have an error because z.ts is missing
435-
assert.Equal(t, len(program.GetSemanticDiagnostics(program.GetSourceFile("/home/projects/TS/p1/src/index.ts"))), 1)
435+
assert.Equal(t, len(program.GetSemanticDiagnostics(t.Context(), program.GetSourceFile("/home/projects/TS/p1/src/index.ts"))), 1)
436436

437437
// Add a new file through wildcard inclusion
438438
filesCopy := maps.Clone(files)
@@ -447,7 +447,7 @@ func TestService(t *testing.T) {
447447

448448
// Error should be resolved and the new file should be included in the program
449449
program = project.GetProgram()
450-
assert.Equal(t, len(program.GetSemanticDiagnostics(program.GetSourceFile("/home/projects/TS/p1/src/index.ts"))), 0)
450+
assert.Equal(t, len(program.GetSemanticDiagnostics(t.Context(), program.GetSourceFile("/home/projects/TS/p1/src/index.ts"))), 0)
451451
assert.Check(t, program.GetSourceFile("/home/projects/TS/p1/src/z.ts") != nil)
452452
})
453453
})

internal/tsoptions/parsedcommandline.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ func (p *ParsedCommandLine) GetConfigFileParsingDiagnostics() []*ast.Diagnostic
6464
return p.Errors
6565
}
6666

67+
// Porting reference: ProjectService.isMatchedByConfig
6768
func (p *ParsedCommandLine) MatchesFileName(fileName string, comparePathsOptions tspath.ComparePathsOptions) bool {
6869
path := tspath.ToPath(fileName, comparePathsOptions.CurrentDirectory, comparePathsOptions.UseCaseSensitiveFileNames)
6970
if slices.ContainsFunc(p.FileNames(), func(f string) bool {

0 commit comments

Comments
 (0)