Scripts: Add TypeScript support to linting command #27143
Conversation
Size Change: +6.66 kB (0%) Total Size: 1.39 MB
|
Filename | Size | Change |
---|---|---|
build/autop/index.js |
2.84 kB | 0 B |
build/blob/index.js |
665 B | 0 B |
build/block-directory/style-rtl.css |
1.01 kB | 0 B |
build/block-directory/style.css |
1.01 kB | 0 B |
build/block-library/blocks/archives/editor-rtl.css |
61 B | 0 B |
build/block-library/blocks/archives/editor.css |
60 B | 0 B |
build/block-library/blocks/audio/editor-rtl.css |
58 B | 0 B |
build/block-library/blocks/audio/editor.css |
58 B | 0 B |
build/block-library/blocks/audio/style-rtl.css |
103 B | 0 B |
build/block-library/blocks/audio/style.css |
103 B | 0 B |
build/block-library/blocks/block/editor-rtl.css |
161 B | 0 B |
build/block-library/blocks/block/editor.css |
161 B | 0 B |
build/block-library/blocks/button/editor-rtl.css |
475 B | 0 B |
build/block-library/blocks/button/editor.css |
474 B | 0 B |
build/block-library/blocks/calendar/style-rtl.css |
208 B | 0 B |
build/block-library/blocks/calendar/style.css |
208 B | 0 B |
build/block-library/blocks/categories/editor-rtl.css |
84 B | 0 B |
build/block-library/blocks/categories/editor.css |
83 B | 0 B |
build/block-library/blocks/categories/style-rtl.css |
79 B | 0 B |
build/block-library/blocks/categories/style.css |
79 B | 0 B |
build/block-library/blocks/code/style-rtl.css |
90 B | 0 B |
build/block-library/blocks/code/style.css |
90 B | 0 B |
build/block-library/blocks/columns/editor-rtl.css |
190 B | 0 B |
build/block-library/blocks/columns/editor.css |
190 B | 0 B |
build/block-library/blocks/columns/style-rtl.css |
421 B | 0 B |
build/block-library/blocks/columns/style.css |
421 B | 0 B |
build/block-library/blocks/cover/editor-rtl.css |
390 B | 0 B |
build/block-library/blocks/cover/editor.css |
389 B | 0 B |
build/block-library/blocks/cover/style-rtl.css |
1.25 kB | 0 B |
build/block-library/blocks/cover/style.css |
1.25 kB | 0 B |
build/block-library/blocks/embed/editor-rtl.css |
486 B | 0 B |
build/block-library/blocks/embed/editor.css |
486 B | 0 B |
build/block-library/blocks/embed/style-rtl.css |
396 B | 0 B |
build/block-library/blocks/embed/style.css |
395 B | 0 B |
build/block-library/blocks/file/editor-rtl.css |
199 B | 0 B |
build/block-library/blocks/file/editor.css |
198 B | 0 B |
build/block-library/blocks/file/style-rtl.css |
248 B | 0 B |
build/block-library/blocks/file/style.css |
248 B | 0 B |
build/block-library/blocks/freeform/editor-rtl.css |
2.45 kB | 0 B |
build/block-library/blocks/freeform/editor.css |
2.45 kB | 0 B |
build/block-library/blocks/gallery/editor-rtl.css |
689 B | 0 B |
build/block-library/blocks/gallery/editor.css |
690 B | 0 B |
build/block-library/blocks/gallery/style-rtl.css |
1.07 kB | 0 B |
build/block-library/blocks/gallery/style.css |
1.06 kB | 0 B |
build/block-library/blocks/group/editor-rtl.css |
318 B | 0 B |
build/block-library/blocks/group/editor.css |
317 B | 0 B |
build/block-library/blocks/group/style-rtl.css |
57 B | 0 B |
build/block-library/blocks/group/style.css |
57 B | 0 B |
build/block-library/blocks/heading/editor-rtl.css |
129 B | 0 B |
build/block-library/blocks/heading/editor.css |
129 B | 0 B |
build/block-library/blocks/heading/style-rtl.css |
76 B | 0 B |
build/block-library/blocks/heading/style.css |
76 B | 0 B |
build/block-library/blocks/html/editor-rtl.css |
281 B | 0 B |
build/block-library/blocks/html/editor.css |
281 B | 0 B |
build/block-library/blocks/image/editor-rtl.css |
717 B | 0 B |
build/block-library/blocks/image/editor.css |
716 B | 0 B |
build/block-library/blocks/image/style-rtl.css |
477 B | 0 B |
build/block-library/blocks/image/style.css |
478 B | 0 B |
build/block-library/blocks/latest-comments/editor-rtl.css |
159 B | 0 B |
build/block-library/blocks/latest-comments/editor.css |
158 B | 0 B |
build/block-library/blocks/latest-comments/style-rtl.css |
269 B | 0 B |
build/block-library/blocks/latest-comments/style.css |
269 B | 0 B |
build/block-library/blocks/latest-posts/editor-rtl.css |
137 B | 0 B |
build/block-library/blocks/latest-posts/editor.css |
137 B | 0 B |
build/block-library/blocks/latest-posts/style-rtl.css |
523 B | 0 B |
build/block-library/blocks/latest-posts/style.css |
522 B | 0 B |
build/block-library/blocks/list/editor-rtl.css |
65 B | 0 B |
build/block-library/blocks/list/editor.css |
65 B | 0 B |
build/block-library/blocks/list/style-rtl.css |
63 B | 0 B |
build/block-library/blocks/list/style.css |
63 B | 0 B |
build/block-library/blocks/media-text/editor-rtl.css |
191 B | 0 B |
build/block-library/blocks/media-text/editor.css |
191 B | 0 B |
build/block-library/blocks/media-text/style-rtl.css |
535 B | 0 B |
build/block-library/blocks/media-text/style.css |
532 B | 0 B |
build/block-library/blocks/more/editor-rtl.css |
434 B | 0 B |
build/block-library/blocks/more/editor.css |
434 B | 0 B |
build/block-library/blocks/navigation-link/editor-rtl.css |
395 B | 0 B |
build/block-library/blocks/navigation-link/style-rtl.css |
704 B | 0 B |
build/block-library/blocks/navigation-link/style.css |
702 B | 0 B |
build/block-library/blocks/navigation/editor-rtl.css |
1.34 kB | 0 B |
build/block-library/blocks/navigation/editor.css |
1.34 kB | 0 B |
build/block-library/blocks/navigation/style-rtl.css |
195 B | 0 B |
build/block-library/blocks/navigation/style.css |
195 B | 0 B |
build/block-library/blocks/nextpage/editor-rtl.css |
395 B | 0 B |
build/block-library/blocks/nextpage/editor.css |
395 B | 0 B |
build/block-library/blocks/page-list/editor-rtl.css |
214 B | 0 B |
build/block-library/blocks/page-list/editor.css |
214 B | 0 B |
build/block-library/blocks/page-list/style-rtl.css |
527 B | 0 B |
build/block-library/blocks/page-list/style.css |
526 B | 0 B |
build/block-library/blocks/paragraph/editor-rtl.css |
109 B | 0 B |
build/block-library/blocks/paragraph/editor.css |
109 B | 0 B |
build/block-library/blocks/paragraph/style-rtl.css |
273 B | 0 B |
build/block-library/blocks/paragraph/style.css |
273 B | 0 B |
build/block-library/blocks/post-author/editor-rtl.css |
209 B | 0 B |
build/block-library/blocks/post-author/editor.css |
209 B | 0 B |
build/block-library/blocks/post-author/style-rtl.css |
183 B | 0 B |
build/block-library/blocks/post-author/style.css |
184 B | 0 B |
build/block-library/blocks/post-comments-form/style-rtl.css |
250 B | 0 B |
build/block-library/blocks/post-comments-form/style.css |
250 B | 0 B |
build/block-library/blocks/post-content/editor-rtl.css |
139 B | 0 B |
build/block-library/blocks/post-content/editor.css |
139 B | 0 B |
build/block-library/blocks/post-excerpt/editor-rtl.css |
73 B | 0 B |
build/block-library/blocks/post-excerpt/editor.css |
73 B | 0 B |
build/block-library/blocks/post-featured-image/editor-rtl.css |
338 B | 0 B |
build/block-library/blocks/post-featured-image/editor.css |
338 B | 0 B |
build/block-library/blocks/post-featured-image/style-rtl.css |
100 B | 0 B |
build/block-library/blocks/post-featured-image/style.css |
100 B | 0 B |
build/block-library/blocks/preformatted/style-rtl.css |
63 B | 0 B |
build/block-library/blocks/preformatted/style.css |
63 B | 0 B |
build/block-library/blocks/pullquote/editor-rtl.css |
183 B | 0 B |
build/block-library/blocks/pullquote/editor.css |
183 B | 0 B |
build/block-library/blocks/pullquote/style-rtl.css |
316 B | 0 B |
build/block-library/blocks/pullquote/style.css |
316 B | 0 B |
build/block-library/blocks/query-loop/editor-rtl.css |
90 B | 0 B |
build/block-library/blocks/query-loop/editor.css |
89 B | 0 B |
build/block-library/blocks/query-loop/style-rtl.css |
315 B | 0 B |
build/block-library/blocks/query-loop/style.css |
317 B | 0 B |
build/block-library/blocks/query-pagination-numbers/editor-rtl.css |
122 B | 0 B |
build/block-library/blocks/query-pagination-numbers/editor.css |
121 B | 0 B |
build/block-library/blocks/query-pagination/editor-rtl.css |
270 B | 0 B |
build/block-library/blocks/query-pagination/editor.css |
262 B | 0 B |
build/block-library/blocks/query-pagination/style-rtl.css |
168 B | 0 B |
build/block-library/blocks/query-pagination/style.css |
168 B | 0 B |
build/block-library/blocks/quote/editor-rtl.css |
61 B | 0 B |
build/block-library/blocks/quote/editor.css |
61 B | 0 B |
build/block-library/blocks/quote/style-rtl.css |
169 B | 0 B |
build/block-library/blocks/quote/style.css |
169 B | 0 B |
build/block-library/blocks/rss/editor-rtl.css |
201 B | 0 B |
build/block-library/blocks/rss/editor.css |
202 B | 0 B |
build/block-library/blocks/rss/style-rtl.css |
290 B | 0 B |
build/block-library/blocks/rss/style.css |
290 B | 0 B |
build/block-library/blocks/search/editor-rtl.css |
165 B | 0 B |
build/block-library/blocks/search/editor.css |
165 B | 0 B |
build/block-library/blocks/search/style-rtl.css |
342 B | 0 B |
build/block-library/blocks/search/style.css |
344 B | 0 B |
build/block-library/blocks/separator/editor-rtl.css |
99 B | 0 B |
build/block-library/blocks/separator/editor.css |
99 B | 0 B |
build/block-library/blocks/separator/style-rtl.css |
236 B | 0 B |
build/block-library/blocks/separator/style.css |
236 B | 0 B |
build/block-library/blocks/shortcode/editor-rtl.css |
504 B | 0 B |
build/block-library/blocks/shortcode/editor.css |
504 B | 0 B |
build/block-library/blocks/site-logo/editor-rtl.css |
201 B | 0 B |
build/block-library/blocks/site-logo/editor.css |
201 B | 0 B |
build/block-library/blocks/social-link/editor-rtl.css |
164 B | 0 B |
build/block-library/blocks/social-link/editor.css |
165 B | 0 B |
build/block-library/blocks/social-links/editor-rtl.css |
696 B | 0 B |
build/block-library/blocks/social-links/editor.css |
696 B | 0 B |
build/block-library/blocks/spacer/editor-rtl.css |
302 B | 0 B |
build/block-library/blocks/spacer/editor.css |
302 B | 0 B |
build/block-library/blocks/spacer/style-rtl.css |
48 B | 0 B |
build/block-library/blocks/spacer/style.css |
48 B | 0 B |
build/block-library/blocks/subhead/editor-rtl.css |
99 B | 0 B |
build/block-library/blocks/subhead/editor.css |
99 B | 0 B |
build/block-library/blocks/subhead/style-rtl.css |
80 B | 0 B |
build/block-library/blocks/subhead/style.css |
80 B | 0 B |
build/block-library/blocks/tag-cloud/editor-rtl.css |
118 B | 0 B |
build/block-library/blocks/tag-cloud/editor.css |
118 B | 0 B |
build/block-library/blocks/tag-cloud/style-rtl.css |
94 B | 0 B |
build/block-library/blocks/tag-cloud/style.css |
94 B | 0 B |
build/block-library/blocks/template-part/editor-rtl.css |
557 B | 0 B |
build/block-library/blocks/template-part/editor.css |
556 B | 0 B |
build/block-library/blocks/text-columns/editor-rtl.css |
95 B | 0 B |
build/block-library/blocks/text-columns/editor.css |
95 B | 0 B |
build/block-library/blocks/text-columns/style-rtl.css |
166 B | 0 B |
build/block-library/blocks/text-columns/style.css |
166 B | 0 B |
build/block-library/blocks/verse/editor-rtl.css |
62 B | 0 B |
build/block-library/blocks/verse/editor.css |
62 B | 0 B |
build/block-library/blocks/verse/style-rtl.css |
87 B | 0 B |
build/block-library/blocks/verse/style.css |
87 B | 0 B |
build/block-library/blocks/video/editor-rtl.css |
504 B | 0 B |
build/block-library/blocks/video/editor.css |
503 B | 0 B |
build/block-library/blocks/video/style-rtl.css |
193 B | 0 B |
build/block-library/blocks/video/style.css |
193 B | 0 B |
build/block-library/common-rtl.css |
1.08 kB | 0 B |
build/block-library/common.css |
1.08 kB | 0 B |
build/block-serialization-default-parser/index.js |
1.88 kB | 0 B |
build/block-serialization-spec-parser/index.js |
3.06 kB | 0 B |
build/components/style-rtl.css |
15.5 kB | 0 B |
build/components/style.css |
15.5 kB | 0 B |
build/customize-widgets/style-rtl.css |
168 B | 0 B |
build/customize-widgets/style.css |
168 B | 0 B |
build/dom-ready/index.js |
576 B | 0 B |
build/edit-navigation/style-rtl.css |
1.26 kB | 0 B |
build/edit-navigation/style.css |
1.25 kB | 0 B |
build/edit-post/style-rtl.css |
6.81 kB | 0 B |
build/edit-post/style.css |
6.8 kB | 0 B |
build/edit-site/style-rtl.css |
4.41 kB | 0 B |
build/edit-site/style.css |
4.41 kB | 0 B |
build/edit-widgets/style-rtl.css |
3.2 kB | 0 B |
build/edit-widgets/style.css |
3.2 kB | 0 B |
build/editor/editor-styles-rtl.css |
543 B | 0 B |
build/editor/editor-styles.css |
545 B | 0 B |
build/editor/style-rtl.css |
3.89 kB | 0 B |
build/editor/style.css |
3.89 kB | 0 B |
build/escape-html/index.js |
735 B | 0 B |
build/format-library/style-rtl.css |
637 B | 0 B |
build/format-library/style.css |
639 B | 0 B |
build/hooks/index.js |
2.28 kB | 0 B |
build/html-entities/index.js |
622 B | 0 B |
build/is-shallow-equal/index.js |
698 B | 0 B |
build/list-reusable-blocks/index.js |
3.14 kB | 0 B |
build/list-reusable-blocks/style-rtl.css |
629 B | 0 B |
build/list-reusable-blocks/style.css |
628 B | 0 B |
build/nux/style-rtl.css |
731 B | 0 B |
build/nux/style.css |
727 B | 0 B |
build/react-i18n/index.js |
1.45 kB | 0 B |
build/reusable-blocks/style-rtl.css |
225 B | 0 B |
build/reusable-blocks/style.css |
225 B | 0 B |
build/shortcode/index.js |
1.7 kB | 0 B |
build/warning/index.js |
1.14 kB | 0 B |
build/wordcount/index.js |
1.22 kB | 0 B |
packages/eslint-plugin/package.json
Outdated
@@ -31,12 +31,14 @@ | |||
], | |||
"main": "index.js", | |||
"dependencies": { | |||
"@typescript-eslint/eslint-plugin": "^4.8.2", | |||
"@typescript-eslint/parser": "^4.8.2", |
Parser is required for TS syntax.
This is where we are when calling
|
I fixed up some lint issues just to demo this. The when committing the react-i18n changes, lint-stages reports:
|
This is failing because some existing TS files have lint errors. There seem to be a lot of formatting issues at least. I'd appreciate if anyone wants to help with the cleanup. |
How many errors are we talking about? Should we start with enabling linting for TS only in one of the packages to keep this PR small? Do you feel comfortable allowing TS linting in |
*/ | ||
// Disable reason: Type-only import, this is fine. See https://github.com/typescript-eslint/typescript-eslint/issues/2661 | ||
// eslint-disable-next-line no-restricted-imports | ||
import type { ComponentType, PropsWithChildren } from 'react'; |
It depends how you look at this ESLint warning @wordpress/element
that acts as a proxy. It wouldn't be that bad idea to re-export React types used from @wordpress/element
to align with how you use code.
I agree up to a point.
We looked at doing that and it was a nightmare at the time and would've required a lot of maintenance effort for little or no benefit. There's no way to work nicely with types in the module import/export system in JSDoc. We would've had to manually re-export every single type (with their type arguments!) one by one via JSDoc.
Now that we're allowing some TypeScript, it may be more feasible to re-export all the types, but I haven't looked in many months. It still won't be as easy as something like export type * from 'react'
as far as I know.
Unless there is some way to let ESLint know that it should give itself a break when seeing import type
when processing no-restricted-imports
Let's see: eslint/eslint#13758, typescript-eslint/typescript-eslint#2661.
Maybe we should list React as peer dependency in that case? There are more packages that would require the same handling.
I reviewed all the changes again.
It won't scale with so many types required from React or Reakit
Should we at least disable this rule for all packages/**/types.ts
files? Ideally, the rule shouldn't error for type imports in the first place.
I think we should just disable those rules for packages/components
... G2 imports a lot from reakit as well, outside of typescript files.
We could as well remove those checks for react
and reakit
if that becomes an issue. Although, my initial comment still applies. Technically speaking both those libraries are implementation details and shouldn't leak outside of @wordpress/element
(react
) and @wordpress/components
(reakit
). If there is no way to re-export the types that are used in other packages, then we shouldn't fight with the linter and disable the rule as a primary solution. We better remove the rule that becomes hostile.
@sirreal There are a lot of unrelated linting errors in this PR right? |
There are 47 errors reported and as far as I can tell they are valid issues with TS files. |
Oh gotcha, I was mixing up errors and warnings! @sirreal I'm happy to tackle fixing the errors in the TS files. |
Hmmm, it looks like there's something funky going on here that I'm not quite sure of. Following the trail of errors from Also when I ran Something further is even more wrong. For the following code in export type Options< T extends As, P extends ViewOwnProps< {}, T > > = {
as: T;
name: string;
useHook: ( props: P ) => any;
memo?: boolean;
}; I am seeing the following error:
However, |
It's erroring in This is the failing line: export = DependencyExtractionWebpackPlugin; I don't think we should eslint lint there, it's not really an appropriate tool for linting declaration files. I think we should add |
This is ready for review. |
Why do you think that TS support for both @wordpress/eslint-plugin
and @wordpress/scripts
it's a breaking change rather than a new feature?
I might ask it a few weeks earlier. It isn't that important but I'm thinking about what could go wrong
I personally don't have enough expertise to tell that everything is perfect, but it is good enough for me to start using it with Gutenberg. I would defer the final call to @sirreal or someone with a better overview of how TS should be integrated in the project.
I'm not sure it is a breaking change, but I guess if someone had been using |
Yes, it might be an excellent reason to be cautious in case someone has integrated TS support themselves. That makes sense 👍🏻 In fact, we won't be able to publish a new version of both packages to npm until WordPress 5.7 is out which is on Match 9th, so we still might add more breaking changes to the mix |
My reasoning for the breaking change is that:
Either could mean that the upgrade requires some manual work to get this ready and is worth mentioning so folks no what to expect. Anything that may require work on the consumer's end to upgrade is my understanding of a breaking change.
I certainly don't know whether this is perfect, but it's at a point where it can start getting exercise. If we're blocked on package releases can we |
I can't approve this because I opened it, although @sarayourfriend has done a lot of the work |
Sure thing, we can do it as soon as there is the next Gutenberg plugin RC ready 👍🏻 |
We're implementing TS in WooCommerce Blocks feature plugin and definitely could benefit from this update (which looks good afaict). |
Description
With some TypeScript in Gutenberg, .ts and .tsx (TypeScript) files should undergo the similar formatting and linting to
.js
files.How has this been tested?
Change a .ts file, stage, and commit it.
Work on
@wordpress/react-i18n
and see that lint issues are reported correctly.Types of changes
Breaking change: Add lint setup and rules for TypeScript files.
Checklist:
The text was updated successfully, but these errors were encountered: