Skip to content

Do not emit declaration files when they contain a declaration emit error#4015

Open
weswigham wants to merge 1 commit into
microsoft:mainfrom
weswigham:no-declaration-emit-on-declaration-transform-error
Open

Do not emit declaration files when they contain a declaration emit error#4015
weswigham wants to merge 1 commit into
microsoft:mainfrom
weswigham:no-declaration-emit-on-declaration-transform-error

Conversation

@weswigham
Copy link
Copy Markdown
Member

Fixes #3094

Took me quite awhile to figure out where build mode had picked up a dependence on the files actually emitting to encode the diagnostic state. #3996 helped enormously.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adjusts tsgo’s declaration emit behavior to match upstream TypeScript by skipping .d.ts emission when declaration emit produces errors (e.g. TS7056), and updates incremental/build-mode state tracking and baselines accordingly.

Changes:

  • Skip writing declaration outputs when declaration-transform diagnostics are produced, while still reporting those diagnostics.
  • Ensure incremental build state records the presence of emit (declaration) diagnostics even when outputs are skipped.
  • Update/clean up reference baselines and accepted-diff lists to reflect the new “no .d.ts on declaration emit error” behavior.

Reviewed changes

Copilot reviewed 134 out of 138 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
internal/compiler/emitter.go Skip .d.ts printing when declaration-transform diagnostics exist; still surface diagnostics even when emit is blocked.
internal/execute/incremental/emitfileshandler.go Track whether any emit diagnostics occurred across code paths (including cached results).
testdata/submoduleAccepted.txt Remove accepted-diff entries that no longer apply after .d.ts is no longer emitted on decl-emit errors.
testdata/baselines/reference/tscWatch/noEmit/dts-errors.js Baseline update: no .d.ts content emitted/recorded when declaration diagnostics are present.
testdata/baselines/reference/tsc/noEmit/dts-errors.js Baseline update: exit status reflects outputs skipped; .d.ts not emitted on decl-emit error.
testdata/baselines/reference/tsc/noEmit/dts-errors-with-incremental.js Baseline update for incremental mode: outputs skipped; .d.ts not emitted on decl-emit error.
testdata/baselines/reference/tsc/noEmit/dts-errors-with-incremental-as-modules.js Baseline update for incremental-as-modules: outputs skipped; .d.ts not emitted on decl-emit error.
testdata/baselines/reference/tsc/noCheck/dts-errors.js Baseline update for --noCheck: outputs skipped; .d.ts not emitted on decl-emit error.
testdata/baselines/reference/tsc/noCheck/dts-errors-with-incremental.js Baseline update for --noCheck + incremental: outputs skipped; .d.ts not emitted on decl-emit error.
testdata/baselines/reference/tsc/incremental/change-to-modifier-of-class-expression-field-with-declaration-emit-enabled.js Baseline update: .d.ts changes suppressed when decl-emit errors occur.
testdata/baselines/reference/tsc/declarationEmit/when-pkg-references-sibling-package-through-indirect-symlink.js Baseline update: .d.ts not emitted when decl-emit errors exist in project emit.
testdata/baselines/reference/tsc/declarationEmit/reports-dts-generation-errors.js Baseline update: --listEmittedFiles no longer includes .d.ts when decl-emit errors occur.
testdata/baselines/reference/tsc/declarationEmit/reports-dts-generation-errors-with-incremental.js Baseline update: incremental build info no longer stores signatures “at emit” for erroring .d.ts output.
testdata/baselines/reference/tsbuildWatch/programUpdates/declarationEmitErrors-when-fixing-error-files-all-files-are-emitted.js Baseline update: watch/build mode skips .d.ts when decl-emit errors present; build info updated accordingly.
testdata/baselines/reference/tsbuildWatch/programUpdates/declarationEmitErrors-when-file-with-no-error-changes.js Baseline update: build/watch behavior with decl-emit errors no longer emits .d.ts.
testdata/baselines/reference/tsbuildWatch/programUpdates/declarationEmitErrors-introduceError-when-fixing-errors-only-changed-file-is-emitted.js Baseline update: build/watch incremental emit signatures/state updated for skipped .d.ts.
testdata/baselines/reference/tsbuildWatch/programUpdates/declarationEmitErrors-introduceError-when-file-with-no-error-changes.js Baseline update: build/watch state updated; .d.ts suppressed on decl-emit errors.
testdata/baselines/reference/tsbuildWatch/noEmit/dts-errors.js Baseline update: watch + noEmit now updates timestamps without emitting .d.ts content on errors.
testdata/baselines/reference/tsbuildWatch/noEmit/dts-errors-with-incremental.js Baseline update: watch + noEmit + incremental doesn’t emit .d.ts on decl-emit error.
testdata/baselines/reference/tsbuildWatch/noEmit/dts-errors-with-incremental-as-modules.js Baseline update: watch + noEmit + incremental-as-modules doesn’t emit .d.ts on decl-emit error.
testdata/baselines/reference/tsbuild/noEmit/dts-errors.js Baseline update: build mode exit status/outputs updated; .d.ts not emitted on decl-emit error.
testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-incremental.js Baseline update: build + incremental skips .d.ts on decl-emit error.
testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-incremental-as-modules.js Baseline update: build + incremental-as-modules skips .d.ts on decl-emit error.
testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-declaration-enable-changes.js Baseline update: enabling declarations + errors no longer creates .d.ts.
testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-declaration-enable-changes-with-multiple-files.js Baseline update: multi-file build skips all .d.ts that would be produced under decl-emit errors.
testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-declaration-enable-changes-with-incremental.js Baseline update: incremental build info no longer encodes .d.ts content/signature on decl-emit errors.
testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-declaration-enable-changes-with-incremental-as-modules.js Baseline update: incremental-as-modules build info updated for skipped .d.ts on errors.
testdata/baselines/reference/tsbuild/noCheck/dts-errors.js Baseline update: --noCheck build skips .d.ts on decl-emit error; timestamps/exit status updated.
testdata/baselines/reference/tsbuild/noCheck/dts-errors-with-incremental.js Baseline update: --noCheck + incremental build skips .d.ts on decl-emit error.
testdata/baselines/reference/tsbuild/declarationEmit/reports-dts-generation-errors.js Baseline update: build --listEmittedFiles no longer lists .d.ts under decl-emit errors.
testdata/baselines/reference/tsbuild/declarationEmit/reports-dts-generation-errors-with-incremental.js Baseline update: build + incremental buildinfo signature encoding updated when .d.ts is skipped.
testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsExportDoubleAssignmentInClosure.js.diff Accepted diff updated for removed .d.ts emission under decl-emit errors.
testdata/baselines/reference/submoduleAccepted/conformance/assignmentToVoidZero1.js.diff Accepted diff updated for removed .d.ts emission under decl-emit errors.
testdata/baselines/reference/submoduleAccepted/compiler/declarationEmitTypeofRest.js.diff Accepted diff updated for changed .d.ts output presence/content under decl-emit error rules.
testdata/baselines/reference/submoduleAccepted/compiler/declarationEmitInvalidExport.js.diff Remove accepted diff (no longer applicable after .d.ts suppression).
testdata/baselines/reference/submoduleAccepted/compiler/declarationEmitExpressionWithNonlocalPrivateUniqueSymbol.js.diff Remove accepted diff (no longer applicable after .d.ts suppression).
testdata/baselines/reference/submoduleAccepted/compiler/declarationEmitExpandoPropertyPrivateName.js.diff Remove accepted diff (no longer applicable after .d.ts suppression).
testdata/baselines/reference/submoduleAccepted/compiler/computedPropertiesNarrowed.js.diff Remove accepted diff (no longer applicable after .d.ts suppression).
testdata/baselines/reference/submoduleAccepted/compiler/amdLikeInputDeclarationEmit.js.diff Accepted diff updated to reflect <no content> when .d.ts is skipped.
testdata/baselines/reference/submodule/conformance/nodeModulesExportsSourceTs(module=nodenext).js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/conformance/nodeModulesExportsSourceTs(module=nodenext).js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/conformance/nodeModulesExportsSourceTs(module=node20).js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/conformance/nodeModulesExportsSourceTs(module=node20).js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/conformance/nodeModulesExportsSourceTs(module=node18).js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/conformance/nodeModulesExportsSourceTs(module=node18).js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/conformance/nodeModulesExportsSourceTs(module=node16).js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/conformance/nodeModulesExportsSourceTs(module=node16).js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=nodenext).js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=nodenext).js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=node20).js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=node20).js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=node18).js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=node18).js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=node16).js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/conformance/nodeModulesExportsBlocksSpecifierResolution(module=node16).js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/conformance/legacyNodeModulesExportsSpecifierGenerationConditions.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/conformance/legacyNodeModulesExportsSpecifierGenerationConditions.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/conformance/jsDeclarationsTypeReassignmentFromDeclaration2.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/conformance/jsDeclarationsTypeReassignmentFromDeclaration2.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/conformance/jsDeclarationsExportDoubleAssignmentInClosure.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/conformance/declarationFiles.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/conformance/declarationFiles.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/conformance/assignmentToVoidZero1.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/privateFieldsInClassExpressionDeclaration.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/privateFieldsInClassExpressionDeclaration.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/isolatedDeclarationsAllowJs.js.diff Baseline diff updated: .d.ts emission changes under error suppression.
testdata/baselines/reference/submodule/compiler/isolatedDeclarationsAllowJs.js Baseline update: remove/adjust .d.ts outputs under error suppression.
testdata/baselines/reference/submodule/compiler/isolatedDeclarationsAddUndefined.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/isolatedDeclarationsAddUndefined.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/isolatedDeclarationLazySymbols.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/isolatedDeclarationLazySymbols.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsReturnTypes.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsReturnTypes.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsObjects.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsObjects.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsFunctionDeclarations.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsFunctionDeclarations.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsExpressions.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsExpressions.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsExpandoFunctions.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsExpandoFunctions.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsEnums.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsEnums.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsDefault.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsDefault.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsClassesExpressions.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsClassesExpressions.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsClasses.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsClasses.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsAugmentation.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsAugmentation.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrors.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrors.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/globalThisDeclarationEmit.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/globalThisDeclarationEmit.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/exportAssignmentMembersVisibleInAugmentation.js.diff New diff reflecting changed .d.ts emission behavior under decl-emit errors.
testdata/baselines/reference/submodule/compiler/exportAssignmentMembersVisibleInAugmentation.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/emitClassExpressionInDeclarationFile2.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/emitClassExpressionInDeclarationFile2.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/declarationEmitVarInElidedBlock.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/declarationEmitVarInElidedBlock.js Remove baseline file now that .d.ts emission content is no longer produced here.
testdata/baselines/reference/submodule/compiler/declarationEmitUsingTypeAlias1.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/declarationEmitUsingTypeAlias1.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/declarationEmitUnsafeImportSymbolName.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/declarationEmitUnsafeImportSymbolName.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/declarationEmitTypeofRest.js Baseline update: remove secondary .d.ts output when blocked by decl-emit rules.
testdata/baselines/reference/submodule/compiler/declarationEmitReexportedSymlinkReference3.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/declarationEmitReexportedSymlinkReference3.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/declarationEmitReadonlyComputedProperty.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/declarationEmitReadonlyComputedProperty.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/declarationEmitObjectAssignedDefaultExport.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/declarationEmitObjectAssignedDefaultExport.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/declarationEmitMixinPrivateProtected.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/declarationEmitMixinPrivateProtected.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeTemplateTypeofSymbol.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/declarationEmitMappedTypeTemplateTypeofSymbol.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/declarationEmitIsolatedDeclarationErrorNotEmittedForNonEmittedFile.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/declarationEmitIsolatedDeclarationErrorNotEmittedForNonEmittedFile.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/declarationEmitInvalidExport.js Baseline update: remove .d.ts output previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/declarationEmitExpressionWithNonlocalPrivateUniqueSymbol.js Baseline update: remove .d.ts output previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/declarationEmitExpandoPropertyPrivateName.js Baseline update: remove .d.ts output previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/declarationEmitComputedPropertyNameSymbol2.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/declarationEmitComputedPropertyNameSymbol2.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/declarationEmitComputedPropertyNameSymbol1.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/declarationEmitComputedPropertyNameSymbol1.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/declarationEmitCommonJsModuleReferencedType.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/declarationEmitCommonJsModuleReferencedType.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/computedPropertiesNarrowed.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/arrayFakeFlatNoCrashInferenceDeclarations.js.diff Remove submodule diff (no .d.ts emitted under decl-emit errors).
testdata/baselines/reference/submodule/compiler/arrayFakeFlatNoCrashInferenceDeclarations.js Baseline update: remove .d.ts section previously emitted under error conditions.
testdata/baselines/reference/submodule/compiler/amdLikeInputDeclarationEmit.js Remove baseline file now that .d.ts output is suppressed/empty in this scenario.
testdata/baselines/reference/compiler/multipleModuleExportsAssignments.js Baseline update: remove .d.ts section for x.d.ts where declaration output is now suppressed on errors.
testdata/baselines/reference/compiler/isolatedDeclarationsTypePredicate.js Baseline update: remove .d.ts output where declaration output is now suppressed on errors.

Comment on lines 53 to 60
if options.TargetSourceFile != nil {
// Result from cache
diagnostics, _ := h.program.snapshot.emitDiagnosticsPerFile.Load(options.TargetSourceFile.Path())
return &compiler.EmitResult{
diags := diagnostics.getDiagnostics(h.program.program, options.TargetSourceFile)
result := &compiler.EmitResult{
EmitSkipped: true,
Diagnostics: diagnostics.getDiagnostics(h.program.program, options.TargetSourceFile),
Diagnostics: diags,
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Declaration emit proceeds in the presence of TS7056

2 participants