Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(compiler): ignore TS diagnostics on builds where typedef file changes #5013

Merged

Conversation

tanner-reits
Copy link
Member

What is the current behavior?

Building a Stencil project that uses the component starter template can result in build errors if the src/components.d.ts file doesn't already exist. This is because the TS program used for the build generates the semantic error diagnostics before we generate the typedef file. This bug was introduced by #4938 since we no longer early-abort before the TS diagnostics are pushed into our own diagnostics.

Fixes: #4999

What is the new behavior?

This is a temporary fix to prevent the build errors without needing to early abort and revert all the changes from #4938. If the typedef file was changed, we ignore the TS diagnostics.

Does this introduce a breaking change?

  • Yes
  • No

Testing

Tested in a component starter by deleting the src/components.d.ts file before running a build.

Other information

Copy link
Contributor

github-actions bot commented Nov 1, 2023

--strictNullChecks error report

Typechecking with --strictNullChecks resulted in 1391 errors on this branch.

That's the same number of errors on main, so at least we're not creating new ones!

reports and statistics

Our most error-prone files
Path Error Count
src/dev-server/index.ts 37
src/mock-doc/serialize-node.ts 36
src/dev-server/server-process.ts 32
src/compiler/build/build-stats.ts 27
src/compiler/output-targets/dist-lazy/generate-lazy-module.ts 25
src/compiler/style/test/optimize-css.spec.ts 23
src/testing/puppeteer/puppeteer-element.ts 23
src/compiler/prerender/prerender-main.ts 22
src/runtime/client-hydrate.ts 19
src/screenshot/connector-base.ts 19
src/runtime/vdom/vdom-render.ts 18
src/compiler/config/test/validate-paths.spec.ts 16
src/dev-server/request-handler.ts 15
src/compiler/prerender/prerender-optimize.ts 14
src/compiler/sys/stencil-sys.ts 14
src/compiler/transpile/transpile-module.ts 14
src/runtime/vdom/vdom-annotations.ts 14
src/sys/node/node-sys.ts 14
src/compiler/build/build-finish.ts 13
src/compiler/prerender/prerender-queue.ts 13
Our most common errors
Typescript Error Code Count
TS2345 418
TS2322 395
TS18048 310
TS18047 101
TS2722 38
TS2532 34
TS2531 23
TS2454 14
TS2352 13
TS2769 10
TS2790 10
TS2538 8
TS2344 5
TS2416 4
TS2493 3
TS18046 2
TS2684 1
TS2488 1
TS2430 1

Unused exports report

There are 15 unused exports on this PR. That's the same number of errors on main, so at least we're not creating new ones!

Unused exports
File Line Identifier
src/runtime/bootstrap-lazy.ts 21 setNonce
src/screenshot/screenshot-fs.ts 18 readScreenshotData
src/testing/testing-utils.ts 198 withSilentWarn
src/utils/index.ts 145 CUSTOM
src/utils/index.ts 232 resolve
src/utils/index.ts 246 normalize
src/utils/index.ts 7 escapeRegExpSpecialCharacters
src/compiler/app-core/app-data.ts 25 BUILD
src/compiler/app-core/app-data.ts 115 Env
src/compiler/app-core/app-data.ts 117 NAMESPACE
src/compiler/fs-watch/fs-watch-rebuild.ts 123 updateCacheFromRebuild
src/compiler/types/validate-primary-package-output-target.ts 62 satisfies
src/compiler/types/validate-primary-package-output-target.ts 62 Record
src/testing/puppeteer/puppeteer-declarations.ts 485 WaitForEventOptions
src/compiler/sys/fetch/write-fetch-success.ts 7 writeFetchSuccessSync

Copy link
Contributor

@alicewriteswrongs alicewriteswrongs left a comment

Choose a reason for hiding this comment

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

one question!

Comment on lines +135 to +138
// TODO(STENCIL-540): remove `hasTypesChanged` check and figure out how to generate types before
// executing the TS build program so we don't get semantic diagnostic errors about referencing the
// auto-generated `components.d.ts` file.
if (config.validateTypes && !hasTypesChanged) {
Copy link
Contributor

Choose a reason for hiding this comment

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

It looks like there's an emitOnlyDtsFiles option for the .emit callback that we call here:

// Emit files that changed
tsBuilder.emit(undefined, emitCallback, undefined, false, transformers);

possibly I'm misunderstanding the comment here - but if we ran a dts-only emit first and then the whole program would that prevent the error? Probably that would be slower so not necessarily saying we want to, more just wondering if that's indeed how it works here

Copy link
Member Author

Choose a reason for hiding this comment

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

I think there'd still be an issue since we don't generate the components.d.ts file until after the TS program has ran/emitted the files. What we really need to do is generate the components.d.ts file before we run the TS program so that the file exists before the build. We can do this, just need to restructure things a bit more since we don't have the components metadata on the BuildCtx until the build callback, at which point the TS program has already ran and generated the diagnostics. This was just intended as a quick fix to remedy the regression until we can take the step for the desired, long term solution

Copy link
Contributor

Choose a reason for hiding this comment

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

ahh I think I sort of forgot that the components.d.ts is so artisanal, makes sense!

@tanner-reits tanner-reits added this pull request to the merge queue Nov 2, 2023
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Nov 2, 2023
@tanner-reits tanner-reits added this pull request to the merge queue Nov 2, 2023
Merged via the queue into main with commit 2a75b65 Nov 2, 2023
120 checks passed
@tanner-reits tanner-reits deleted the treits/fix/typedef-module-reference-ts-diagnostics branch November 2, 2023 17:49
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.

bug: component.d.ts generation gives TS errors
3 participants