Skip to content

Commit 169c174

Browse files
authored
Fix diagnostic handling, unbreaking bind timing (#346)
1 parent 8eac796 commit 169c174

File tree

4 files changed

+36
-35
lines changed

4 files changed

+36
-35
lines changed

cmd/tsgo/main.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"path/filepath"
1010
"runtime"
1111
"runtime/pprof"
12+
"slices"
1213
"strings"
1314
"time"
1415

@@ -184,7 +185,7 @@ func main() {
184185

185186
var bindTime, checkTime time.Duration
186187

187-
diagnostics := program.GetOptionsDiagnostics()
188+
diagnostics := program.GetConfigFileParsingDiagnostics()
188189
if len(diagnostics) != 0 {
189190
printDiagnostics(diagnostics, host, compilerOptions)
190191
os.Exit(1)
@@ -202,7 +203,7 @@ func main() {
202203
// !!! the checker already reads noCheck, but do it here just for stats printing for now
203204
if compilerOptions.NoCheck.IsFalseOrUnknown() {
204205
checkStart := time.Now()
205-
diagnostics = program.GetSemanticDiagnostics(nil)
206+
diagnostics = slices.Concat(program.GetGlobalDiagnostics(), program.GetSemanticDiagnostics(nil))
206207
checkTime = time.Since(checkStart)
207208
}
208209
}
@@ -224,7 +225,7 @@ func main() {
224225
runtime.ReadMemStats(&memStats)
225226

226227
if !opts.devel.quiet && len(diagnostics) != 0 {
227-
printDiagnostics(diagnostics, host, compilerOptions)
228+
printDiagnostics(ts.SortAndDeduplicateDiagnostics(diagnostics), host, compilerOptions)
228229
}
229230

230231
if compilerOptions.ListFiles.IsTrue() {

internal/ast/diagnostic.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ func (c *DiagnosticsCollection) GetDiagnosticsForFile(fileName string) []*Diagno
122122
func (c *DiagnosticsCollection) GetDiagnostics() []*Diagnostic {
123123
fileNames := slices.Collect(maps.Keys(c.fileDiagnostics))
124124
slices.Sort(fileNames)
125-
diagnostics := c.nonFileDiagnostics
125+
diagnostics := slices.Clip(c.nonFileDiagnostics)
126126
for _, fileName := range fileNames {
127127
diagnostics = append(diagnostics, c.fileDiagnostics[fileName]...)
128128
}

internal/compiler/program.go

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -20,25 +20,25 @@ import (
2020
)
2121

2222
type ProgramOptions struct {
23-
ConfigFilePath string
24-
RootFiles []string
25-
Host CompilerHost
26-
Options *core.CompilerOptions
27-
SingleThreaded bool
28-
ProjectReference []core.ProjectReference
29-
OptionsDiagnostics []*ast.Diagnostic
23+
ConfigFilePath string
24+
RootFiles []string
25+
Host CompilerHost
26+
Options *core.CompilerOptions
27+
SingleThreaded bool
28+
ProjectReference []core.ProjectReference
29+
ConfigFileParsingDiagnostics []*ast.Diagnostic
3030
}
3131

3232
type Program struct {
33-
host CompilerHost
34-
programOptions ProgramOptions
35-
compilerOptions *core.CompilerOptions
36-
configFilePath string
37-
nodeModules map[string]*ast.SourceFile
38-
checkers []*checker.Checker
39-
checkersByFile map[*ast.SourceFile]*checker.Checker
40-
currentDirectory string
41-
optionsDiagnostics []*ast.Diagnostic
33+
host CompilerHost
34+
programOptions ProgramOptions
35+
compilerOptions *core.CompilerOptions
36+
configFilePath string
37+
nodeModules map[string]*ast.SourceFile
38+
checkers []*checker.Checker
39+
checkersByFile map[*ast.SourceFile]*checker.Checker
40+
currentDirectory string
41+
configFileParsingDiagnostics []*ast.Diagnostic
4242

4343
resolver *module.Resolver
4444
resolvedModules map[tspath.Path]module.ModeAwareCache[*module.ResolvedModule]
@@ -70,7 +70,7 @@ func NewProgram(options ProgramOptions) *Program {
7070
p := &Program{}
7171
p.programOptions = options
7272
p.compilerOptions = options.Options
73-
p.optionsDiagnostics = options.OptionsDiagnostics
73+
p.configFileParsingDiagnostics = slices.Clip(options.ConfigFileParsingDiagnostics)
7474
if p.compilerOptions == nil {
7575
p.compilerOptions = &core.CompilerOptions{}
7676
}
@@ -96,7 +96,7 @@ func NewProgram(options ProgramOptions) *Program {
9696
}
9797
parsedConfig := parser.ParseJSONText(p.configFilePath, jsonText)
9898
if len(parsedConfig.Diagnostics()) > 0 {
99-
p.optionsDiagnostics = append(p.optionsDiagnostics, parsedConfig.Diagnostics()...)
99+
p.configFileParsingDiagnostics = append(p.configFileParsingDiagnostics, parsedConfig.Diagnostics()...)
100100
return p
101101
}
102102

@@ -118,7 +118,7 @@ func NewProgram(options ProgramOptions) *Program {
118118
p.compilerOptions = parseConfigFileContent.CompilerOptions()
119119

120120
if len(parseConfigFileContent.Errors) > 0 {
121-
p.optionsDiagnostics = append(p.optionsDiagnostics, parseConfigFileContent.Errors...)
121+
p.configFileParsingDiagnostics = append(p.configFileParsingDiagnostics, parseConfigFileContent.Errors...)
122122
return p
123123
}
124124

@@ -162,15 +162,17 @@ func NewProgramFromParsedCommandLine(config *tsoptions.ParsedCommandLine, host C
162162
Options: config.CompilerOptions(),
163163
Host: host,
164164
// todo: ProjectReferences
165-
OptionsDiagnostics: config.GetConfigFileParsingDiagnostics(),
165+
ConfigFileParsingDiagnostics: config.GetConfigFileParsingDiagnostics(),
166166
}
167167
return NewProgram(programOptions)
168168
}
169169

170-
func (p *Program) SourceFiles() []*ast.SourceFile { return p.files }
171-
func (p *Program) Options() *core.CompilerOptions { return p.compilerOptions }
172-
func (p *Program) Host() CompilerHost { return p.host }
173-
func (p *Program) OptionsDiagnostics() []*ast.Diagnostic { return p.optionsDiagnostics }
170+
func (p *Program) SourceFiles() []*ast.SourceFile { return p.files }
171+
func (p *Program) Options() *core.CompilerOptions { return p.compilerOptions }
172+
func (p *Program) Host() CompilerHost { return p.host }
173+
func (p *Program) GetConfigFileParsingDiagnostics() []*ast.Diagnostic {
174+
return slices.Clip(p.configFileParsingDiagnostics)
175+
}
174176

175177
func (p *Program) BindSourceFiles() {
176178
wg := core.NewWorkGroup(p.programOptions.SingleThreaded)
@@ -283,7 +285,7 @@ func (p *Program) getOptionsDiagnosticsOfConfigFile() []*ast.Diagnostic {
283285
if p.Options() == nil || p.Options().ConfigFilePath == "" {
284286
return nil
285287
}
286-
return p.optionsDiagnostics
288+
return p.configFileParsingDiagnostics // TODO: actually call getDiagnosticsHelper on config path
287289
}
288290

289291
func (p *Program) getSyntaticDiagnosticsForFile(sourceFile *ast.SourceFile) []*ast.Diagnostic {

internal/execute/tsc.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ func performCompilation(sys System, cb cbType, config *tsoptions.ParsedCommandLi
172172
// todo: cache, statistics, tracing
173173
program := compiler.NewProgramFromParsedCommandLine(config, host)
174174
options := program.Options()
175-
allDiagnostics := program.GetOptionsDiagnostics()
175+
allDiagnostics := program.GetConfigFileParsingDiagnostics()
176176

177177
// todo: early exit logic and append diagnostics
178178
diagnostics := program.GetSyntacticDiagnostics(nil)
@@ -200,11 +200,9 @@ func performCompilation(sys System, cb cbType, config *tsoptions.ParsedCommandLi
200200
diagnostics = append(diagnostics, emitResult.Diagnostics...)
201201

202202
allDiagnostics = append(allDiagnostics, diagnostics...)
203-
if allDiagnostics != nil {
204-
allDiagnostics = compiler.SortAndDeduplicateDiagnostics(allDiagnostics)
205-
for _, diagnostic := range allDiagnostics {
206-
reportDiagnostic(diagnostic)
207-
}
203+
allDiagnostics = compiler.SortAndDeduplicateDiagnostics(allDiagnostics)
204+
for _, diagnostic := range allDiagnostics {
205+
reportDiagnostic(diagnostic)
208206
}
209207

210208
// !!! if (write)

0 commit comments

Comments
 (0)