@@ -12,6 +12,7 @@ let solutionBuilderHost:
1212 | ts . SolutionBuilderWithWatchHost < ts . SemanticDiagnosticsBuilderProgram >
1313 | undefined ;
1414let solutionBuilder : ts . SolutionBuilder < ts . SemanticDiagnosticsBuilderProgram > | undefined ;
15+ let hostDiagnostics : ts . Diagnostic [ ] = [ ] ;
1516
1617export function useSolutionBuilder ( ) {
1718 if ( ! solutionBuilderHost ) {
@@ -25,7 +26,7 @@ export function useSolutionBuilder() {
2526 host ,
2627 oldProgram ,
2728 configFileParsingDiagnostics ,
28- projectReferences
29+ projectReferences ,
2930 ) => {
3031 if ( compilerOptions ) {
3132 startTracingIfNeeded ( compilerOptions ) ;
@@ -36,28 +37,38 @@ export function useSolutionBuilder() {
3637 host ,
3738 oldProgram ,
3839 configFileParsingDiagnostics ,
39- projectReferences
40+ projectReferences ,
4041 ) ;
4142 } ,
42- undefined ,
43+ ( diagnostic ) => {
44+ // SolutionBuilder can emit graph-level diagnostics while building the project graph
45+ // (e.g. invalid/cyclic project references) — i.e. before any Program/BuilderProgram exists.
46+ hostDiagnostics . push ( diagnostic ) ;
47+ updateDiagnostics ( config . configFile , hostDiagnostics ) ;
48+ } ,
4349 undefined ,
4450 undefined ,
4551 undefined ,
4652 ( builderProgram ) => {
53+ const programConfigFile = getConfigFilePathFromBuilderProgram ( builderProgram ) ;
54+ const programDiagnostics = getDiagnosticsOfProgram ( builderProgram ) ;
55+
4756 updateDiagnostics (
48- getConfigFilePathFromBuilderProgram ( builderProgram ) ,
49- getDiagnosticsOfProgram ( builderProgram )
57+ programConfigFile ,
58+ programConfigFile === config . configFile
59+ ? [ ...programDiagnostics , ...hostDiagnostics ]
60+ : programDiagnostics ,
5061 ) ;
5162 emitTsBuildInfoIfNeeded ( builderProgram ) ;
5263 stopTracingIfNeeded ( builderProgram ) ;
53- }
64+ } ,
5465 ) ;
5566 }
5667 if ( ! solutionBuilder ) {
5768 solutionBuilder = typescript . createSolutionBuilderWithWatch (
5869 solutionBuilderHost ,
5970 [ config . configFile ] ,
60- { watch : true }
71+ { watch : true } ,
6172 ) ;
6273 solutionBuilder . build ( ) ;
6374 }
@@ -68,4 +79,5 @@ export function invalidateSolutionBuilder(withHost = false) {
6879 solutionBuilderHost = undefined ;
6980 }
7081 solutionBuilder = undefined ;
82+ hostDiagnostics = [ ] ;
7183}
0 commit comments