From 2eef0c795aa803bec8c592fca4e7a0f22d38bca5 Mon Sep 17 00:00:00 2001 From: arturovt Date: Wed, 17 Jun 2026 21:34:10 +0300 Subject: [PATCH] fix(@angular/build): skip semantic diagnostics for declaration files Declaration files don't produce semantic or template diagnostics, so calling getSemanticDiagnostics() on them was just wasted work. Move the isDeclarationFile guard to before that call so .d.ts files are skipped entirely. --- .../src/tools/angular/compilation/aot-compilation.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/angular/build/src/tools/angular/compilation/aot-compilation.ts b/packages/angular/build/src/tools/angular/compilation/aot-compilation.ts index 73462c2b3475..149c9ea25080 100644 --- a/packages/angular/build/src/tools/angular/compilation/aot-compilation.ts +++ b/packages/angular/build/src/tools/angular/compilation/aot-compilation.ts @@ -234,6 +234,7 @@ export class AotCompilation extends AngularCompilation { const syntactic = modes & DiagnosticModes.Syntactic; const semantic = modes & DiagnosticModes.Semantic; + const skipLibCheck = typeScriptProgram.getCompilerOptions().skipLibCheck; // Collect program level diagnostics if (modes & DiagnosticModes.Option) { @@ -265,13 +266,19 @@ export class AotCompilation extends AngularCompilation { continue; } + // When skipLibCheck is enabled (the default), declaration files are not + // type-checked, so getSemanticDiagnostics() would return nothing for them. + if (sourceFile.isDeclarationFile && skipLibCheck) { + continue; + } + yield* profileSync( 'NG_DIAGNOSTICS_SEMANTIC', () => typeScriptProgram.getSemanticDiagnostics(sourceFile), true, ); - // Declaration files cannot have template diagnostics + // Declaration files cannot have template diagnostics. if (sourceFile.isDeclarationFile) { continue; }