Skip to content

chore(snc): fix violations in update-element.spec#4905

Merged
rwaskiewicz merged 3 commits intomainfrom
rwaskiewicz/snc/update-element-spec
Oct 9, 2023
Merged

chore(snc): fix violations in update-element.spec#4905
rwaskiewicz merged 3 commits intomainfrom
rwaskiewicz/snc/update-element-spec

Conversation

@rwaskiewicz
Copy link
Member

@rwaskiewicz rwaskiewicz commented Oct 6, 2023

What is the current behavior?

We have quite a few SNCs! This is today's 15 minutes of work to drive these down

GitHub Issue Number: N/A

What is the new behavior?

this commit updates the types of multiple VNode variable instances to
null from VNode. in each of these usages, an old VNode
instance is instantiated as null for testing purposes to call
updateElement. since the old VNode can be null according to the
updateElement function signature, this is considered to by a safe
operation (i.e. does not adversely affect the tests).

for one test in particular, this commit updates VNode init by providing
the VNode with non-null values. the test that initializes these VNodes
doesn't use these values stored on the VNode, making this a safe
operation in terms of the test

Does this introduce a breaking change?

  • Yes
  • No

Testing

Unit tests continue to pass - reading through the code and tests, I don't have any reason to believe we've changed their actual behavior in the second commit (the first acts solely on the type system)

this commit widens the types of multiple VNode variable instances to
`VNode | null` from `VNode`. in each of thsee usages, an old VNode
instance is instantiated as `null` for testing purposes to call
`updateElement`. since the old VNode can be `null` according to the
`udpateElement` function signature, this is considered to by a safe
operation (i.e. does not adversely affect the tests).
the test that initializes these VNodes doesn't use these values stored
on the VNode, making this a safe operation in terms of the test
@github-actions
Copy link
Contributor

github-actions bot commented Oct 6, 2023

--strictNullChecks error report

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

That's 8 fewer than on main! 🎉🎉🎉

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/vdom/vdom-render.ts 20
src/runtime/client-hydrate.ts 19
src/screenshot/connector-base.ts 19
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 428
TS2322 400
TS18048 312
TS18047 100
TS2722 38
TS2532 36
TS2531 23
TS2454 14
TS2352 13
TS2769 10
TS2790 10
TS2538 8
TS2344 5
TS2416 4
TS2493 3
TS18046 2
TS2684 1
TS2488 1
TS2464 1
TS2430 1

Unused exports report

There are 12 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 140 CUSTOM
src/compiler/app-core/app-data.ts 25 BUILD
src/compiler/app-core/app-data.ts 114 Env
src/compiler/app-core/app-data.ts 116 NAMESPACE
src/compiler/fs-watch/fs-watch-rebuild.ts 110 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

@rwaskiewicz rwaskiewicz marked this pull request as ready for review October 6, 2023 14:41
@rwaskiewicz rwaskiewicz requested a review from a team as a code owner October 6, 2023 14:41
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!

it('should add new class when no oldVNode', () => {
const elm = document.createElement('my-tag') as HTMLElement;
const oldVNode: d.VNode = null;
const oldVNode: d.VNode | null = null;
Copy link
Contributor

Choose a reason for hiding this comment

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

could we just omit the annotation for these instead? I think that should be ok since the type of oldVNode for updateElement is already d.VNode | null

https://github.com/ionic-team/stencil/blob/8d0360666e84d9c7262bb321bdf1af487c1178e4/src/runtime/vdom/update-element.ts#L8-L12

Copy link
Contributor

Choose a reason for hiding this comment

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

(or equivalently just type them as null)

Copy link
Member Author

Choose a reason for hiding this comment

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

Yeah, I think we'd have to do the latter (type them as null), since they'd implicitly have any type (causing the compiler to yell at us) - done in 1cc54b7

@rwaskiewicz rwaskiewicz added this pull request to the merge queue Oct 9, 2023
Merged via the queue into main with commit 0340bf7 Oct 9, 2023
@rwaskiewicz rwaskiewicz deleted the rwaskiewicz/snc/update-element-spec branch October 9, 2023 15:42
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.

3 participants