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

Dependency Extraction Webpack Plugin: Add types #22498

Merged
merged 19 commits into from
Jun 2, 2020

Conversation

sirreal
Copy link
Member

@sirreal sirreal commented May 20, 2020

Description

  • Type the package
  • Add types dependencies
  • Add node eslint config for this package. This made sense after introducing optional chain usage ?. without producing any errors or warnings. Fortunately, the issue surfaced unexpectedly in the size check action.
    This would be a good idea for all of the node-focused packages.

Part of #18838

How has this been tested?

Manual and automated testing of the plugin.

Types of changes

New feature: Include and publish TypeScript types.

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR.

@sirreal sirreal added [Status] In Progress Tracking issues with work in progress [Type] Code Quality Issues or PRs that relate to code quality [Tool] Dependency Extraction Webpack Plugin /packages/dependency-extraction-webpack-plugin labels May 20, 2020
@sirreal sirreal force-pushed the update/type-webpack-dependency-extraction-plugin branch from 0b16094 to 16f20bb Compare May 30, 2020 09:24
@github-actions
Copy link

github-actions bot commented Jun 1, 2020

Size Change: 0 B

Total Size: 1.12 MB

ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.62 kB 0 B
build/api-fetch/index.js 3.4 kB 0 B
build/autop/index.js 2.83 kB 0 B
build/blob/index.js 620 B 0 B
build/block-directory/index.js 6.48 kB 0 B
build/block-directory/style-rtl.css 787 B 0 B
build/block-directory/style.css 787 B 0 B
build/block-editor/index.js 106 kB 0 B
build/block-editor/style-rtl.css 11.3 kB 0 B
build/block-editor/style.css 11.3 kB 0 B
build/block-library/editor-rtl.css 7.87 kB 0 B
build/block-library/editor.css 7.88 kB 0 B
build/block-library/index.js 125 kB 0 B
build/block-library/style-rtl.css 7.68 kB 0 B
build/block-library/style.css 7.68 kB 0 B
build/block-library/theme-rtl.css 684 B 0 B
build/block-library/theme.css 686 B 0 B
build/block-serialization-default-parser/index.js 1.88 kB 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/blocks/index.js 48.1 kB 0 B
build/components/index.js 190 kB 0 B
build/components/style-rtl.css 19.5 kB 0 B
build/components/style.css 19.5 kB 0 B
build/compose/index.js 9.32 kB 0 B
build/core-data/index.js 11.4 kB 0 B
build/data-controls/index.js 1.29 kB 0 B
build/data/index.js 8.43 kB 0 B
build/date/index.js 5.47 kB 0 B
build/deprecated/index.js 772 B 0 B
build/dom-ready/index.js 568 B 0 B
build/dom/index.js 3.11 kB 0 B
build/edit-navigation/index.js 7.88 kB 0 B
build/edit-navigation/style-rtl.css 857 B 0 B
build/edit-navigation/style.css 856 B 0 B
build/edit-post/index.js 302 kB 0 B
build/edit-post/style-rtl.css 5.43 kB 0 B
build/edit-post/style.css 5.43 kB 0 B
build/edit-site/index.js 14.1 kB 0 B
build/edit-site/style-rtl.css 2.96 kB 0 B
build/edit-site/style.css 2.96 kB 0 B
build/edit-widgets/index.js 8.88 kB 0 B
build/edit-widgets/style-rtl.css 2.4 kB 0 B
build/edit-widgets/style.css 2.4 kB 0 B
build/editor/editor-styles-rtl.css 425 B 0 B
build/editor/editor-styles.css 428 B 0 B
build/editor/index.js 44.6 kB 0 B
build/editor/style-rtl.css 4.26 kB 0 B
build/editor/style.css 4.27 kB 0 B
build/element/index.js 4.64 kB 0 B
build/escape-html/index.js 733 B 0 B
build/format-library/index.js 7.71 kB 0 B
build/format-library/style-rtl.css 502 B 0 B
build/format-library/style.css 502 B 0 B
build/hooks/index.js 2.13 kB 0 B
build/html-entities/index.js 622 B 0 B
build/i18n/index.js 3.56 kB 0 B
build/is-shallow-equal/index.js 711 B 0 B
build/keyboard-shortcuts/index.js 2.51 kB 0 B
build/keycodes/index.js 1.94 kB 0 B
build/list-reusable-blocks/index.js 3.12 kB 0 B
build/list-reusable-blocks/style-rtl.css 226 B 0 B
build/list-reusable-blocks/style.css 226 B 0 B
build/media-utils/index.js 5.29 kB 0 B
build/notices/index.js 1.79 kB 0 B
build/nux/index.js 3.4 kB 0 B
build/nux/style-rtl.css 616 B 0 B
build/nux/style.css 613 B 0 B
build/plugins/index.js 2.56 kB 0 B
build/primitives/index.js 1.5 kB 0 B
build/priority-queue/index.js 789 B 0 B
build/redux-routine/index.js 2.85 kB 0 B
build/rich-text/index.js 14.8 kB 0 B
build/server-side-render/index.js 2.68 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.28 kB 0 B
build/url/index.js 4.02 kB 0 B
build/viewport/index.js 1.84 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.17 kB 0 B

compressed-size-action

@sirreal sirreal self-assigned this Jun 1, 2020
@sirreal sirreal marked this pull request as ready for review June 1, 2020 09:13
@sirreal sirreal requested a review from gziolo as a code owner June 1, 2020 09:13
@sirreal sirreal requested review from aduth and nb June 1, 2020 09:13
@sirreal
Copy link
Member Author

sirreal commented Jun 1, 2020

There's a fix for unrelated lint errors in #22785.

@sirreal sirreal force-pushed the update/type-webpack-dependency-extraction-plugin branch from ffc9eeb to e57cb92 Compare June 1, 2020 11:03
Comment on lines +2 to +3
// Use the default eslint parser. Prevent babel transforms.
"parser": "espree",
Copy link
Member

Choose a reason for hiding this comment

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

Is this to address the issue of the optional chaining false negative?

Alternatively, does the project-default babel-eslint parser respect parserOptions like ecmaVersion ? Still an imperfect solution, since it's hard to know how to associate "Node LTS 12.x" with a specific ecmaVersion value.

Copy link
Member Author

Choose a reason for hiding this comment

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

Is this to address the issue of the optional chaining false negative?

Exactly.

Alternatively, does the project-default babel-eslint parser respect parserOptions like ecmaVersion ? Still an imperfect solution, since it's hard to know how to associate "Node LTS 12.x" with a specific ecmaVersion value.

I don't know, I played with a few iterations of this and settled on one that appeared to work. I'm open to suggestions. It's probably worth solving at a repo-wide level as I believe other Node targeting packages are affected, e.g. project-management-automation may be susceptible to introduction of unsupported optional chaining as well. I believe the unit tests were passing for this, which suggests that the Jest setup may be transforming Node files and hiding the issue. I haven't confirmed.

Copy link
Member

Choose a reason for hiding this comment

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

It's probably worth solving at a repo-wide level as I believe other Node targeting packages are affected, e.g. project-management-automation may be susceptible to introduction of unsupported optional chaining as well.

Yeah, I've definitely encountered this myself, where it appears all well in the editor, but fails at runtime. I agree it could use a common solution amongst non-transpiled packages. Fine to leave it as a separate task if you'd rather it not block here.

Copy link
Member

Choose a reason for hiding this comment

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

I'm tinkering with this a bit locally. ecmaVersion alone doesn't seem to help much with babel-parser. I'd still think it might be worth specifying, depending if the default parser suddenly becomes updated to support optional chaining (possibly happening in #22771 with the ESLint 7.0 upgrade?)

Copy link
Member

Choose a reason for hiding this comment

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

Thinking about it a bit more, using the default espree parser might be an objectively good way to configure ESLint in packages which aren't processed by Babel, if one considers the need for babel-eslint to align to expectations of how the source code is transformed.

It should still make sense that the parser be configured to expectations of the Node runtime we're expecting.

The alternative would seem to be that we'd keep babel-eslint but find some way to "disable" plugins for language syntax we don't want to apply to packages which aren't processed by Babel. Doesn't seem like it's an especially simple task to accomplish.

Copy link
Member Author

Choose a reason for hiding this comment

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

Fine to leave it as a separate task if you'd rather it not block here.

There's no hurry to get this merged. I believe the package changes are finalized and I'm happy to leave it open to tweak the eslint setup. Would you like to take it over figuring out the eslint setup and merge when you're satisfied? My only concern is a lack of clarity leading the the PR being forgotten.

Thinking about it a bit more, using the default espree parser might be an objectively good way to configure ESLint in packages which aren't processed by Babel, if one considers the need for babel-eslint to align to expectations of how the source code is transformed.

This line of thinking makes a lot of sense to me. I didn't get into the pareserOptions/ecmaVersion because, as you say, those aren't tied to Node versions.

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've observed a lot of flakiness in the e2e tests and with them passing I'm going to go ahead and merge this 🙂

packages/dependency-extraction-webpack-plugin/lib/util.js Outdated Show resolved Hide resolved
@sirreal sirreal force-pushed the update/type-webpack-dependency-extraction-plugin branch from 9b9a7b3 to a44820e Compare June 1, 2020 20:47
@sirreal sirreal force-pushed the update/type-webpack-dependency-extraction-plugin branch from a44820e to b6a9bb1 Compare June 2, 2020 08:29
@sirreal sirreal merged commit 016a531 into master Jun 2, 2020
@sirreal sirreal deleted the update/type-webpack-dependency-extraction-plugin branch June 2, 2020 09:16
@github-actions github-actions bot added this to the Gutenberg 8.3 milestone Jun 2, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Status] In Progress Tracking issues with work in progress [Tool] Dependency Extraction Webpack Plugin /packages/dependency-extraction-webpack-plugin [Type] Code Quality Issues or PRs that relate to code quality
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants