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

Autocompletion support for useSelect (via jsDoc annotations) #41596

Merged
merged 16 commits into from
Jun 23, 2022

Conversation

adamziel
Copy link
Contributor

@adamziel adamziel commented Jun 8, 2022

What?

This PR adds TypeScript type definitions to useSelect via jsDoc annotations. Effectively, it give us autocompletion support:

CleanShot.2022-06-09.at.16.36.16.mp4

It's a step towards #39081, only it focuses just on useSelect

Importing caveat

Using the annotations in the same file where they're defined works flawlessly. However, after importing useSelect in another file, autocompletion doesn't work correctly. I believe it's because DefinitelyTyped definition get in the way. Once I removed (from ~/Library/Caches/typescript/4.8/node_modules/@types/wordpress__data/index.d.ts), the return value of createReduxStore became simply any:

CleanShot 2022-06-09 at 16 38 31@2x

To confirm that hypothesis, I set up a separate repository with clean slate and no Lerna packages. Suddenly, all the annotations worked flawlessly when imported. I would like to make it work across Gutenberg packages but let's explore that in follow-up PR.

Test plan

Open the test_jsdoc.js file shipped with this PR and confirm autocompletion behaves like on the screencast above. Of course, this file needs to be removed before this PR is merged.

IDE tests:

✅ I tried it in VisualStudio code, where it worked perfectly
I then tried it in PHPStorm, and it didn't work at all After updating PHPStorm and its configuration, everything worked perfectly just like in VSCode.

Other considerations

I went through the following resources which I'm documenting here for posterity:

CC @dmsnell @sarayourfriend @sirreal @jsnajdr

@github-actions
Copy link

github-actions bot commented Jun 8, 2022

Size Change: +8.89 kB (+1%)

Total Size: 1.25 MB

Filename Size Change
build/a11y/index.min.js 982 B -11 B (-1%)
build/annotations/index.min.js 2.76 kB +11 B (0%)
build/api-fetch/index.min.js 2.26 kB -10 B (0%)
build/autop/index.min.js 2.14 kB -8 B (0%)
build/blob/index.min.js 475 B -12 B (-2%)
build/block-directory/index.min.js 6.58 kB +77 B (+1%)
build/block-directory/style-rtl.css 990 B -22 B (-2%)
build/block-directory/style.css 991 B -21 B (-2%)
build/block-editor/index.min.js 152 kB +1.07 kB (+1%)
build/block-editor/style-rtl.css 14.5 kB -56 B (0%)
build/block-editor/style.css 14.5 kB -56 B (0%)
build/block-library/blocks/audio/style-rtl.css 103 B -8 B (-7%)
build/block-library/blocks/audio/style.css 103 B -8 B (-7%)
build/block-library/blocks/audio/theme-rtl.css 110 B -15 B (-12%) 👏
build/block-library/blocks/audio/theme.css 110 B -15 B (-12%) 👏
build/block-library/blocks/button/editor-rtl.css 441 B -4 B (-1%)
build/block-library/blocks/button/editor.css 441 B -4 B (-1%)
build/block-library/blocks/button/style-rtl.css 514 B -46 B (-8%)
build/block-library/blocks/button/style.css 514 B -46 B (-8%)
build/block-library/blocks/cover/editor-rtl.css 615 B +17 B (+3%)
build/block-library/blocks/cover/editor.css 616 B +17 B (+3%)
build/block-library/blocks/cover/style-rtl.css 1.55 kB -7 B (0%)
build/block-library/blocks/cover/style.css 1.55 kB -7 B (0%)
build/block-library/blocks/embed/style-rtl.css 410 B -7 B (-2%)
build/block-library/blocks/embed/style.css 410 B -7 B (-2%)
build/block-library/blocks/embed/theme-rtl.css 110 B -14 B (-11%) 👏
build/block-library/blocks/embed/theme.css 110 B -14 B (-11%) 👏
build/block-library/blocks/file/style-rtl.css 224 B -28 B (-11%) 👏
build/block-library/blocks/file/style.css 225 B -28 B (-11%) 👏
build/block-library/blocks/file/view.min.js 346 B -7 B (-2%)
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB -2 B (0%)
build/block-library/blocks/gallery/editor-rtl.css 948 B -13 B (-1%)
build/block-library/blocks/gallery/editor.css 950 B -14 B (-1%)
build/block-library/blocks/gallery/style-rtl.css 1.5 kB -19 B (-1%)
build/block-library/blocks/gallery/style.css 1.49 kB -19 B (-1%)
build/block-library/blocks/gallery/theme-rtl.css 108 B -14 B (-11%) 👏
build/block-library/blocks/gallery/theme.css 108 B -14 B (-11%) 👏
build/block-library/blocks/html/editor-rtl.css 327 B -5 B (-2%)
build/block-library/blocks/html/editor.css 329 B -4 B (-1%)
build/block-library/blocks/image/style-rtl.css 524 B -5 B (-1%)
build/block-library/blocks/image/style.css 530 B -5 B (-1%)
build/block-library/blocks/image/theme-rtl.css 110 B -14 B (-11%) 👏
build/block-library/blocks/image/theme.css 110 B -14 B (-11%) 👏
build/block-library/blocks/navigation-link/editor-rtl.css 705 B -3 B (0%)
build/block-library/blocks/navigation-link/editor.css 703 B -3 B (0%)
build/block-library/blocks/navigation-submenu/editor-rtl.css 296 B -3 B (-1%)
build/block-library/blocks/navigation-submenu/editor.css 295 B -4 B (-1%)
build/block-library/blocks/navigation-submenu/view.min.js 402 B +27 B (+7%) 🔍
build/block-library/blocks/navigation/editor-rtl.css 2.03 kB -1 B (0%)
build/block-library/blocks/navigation/editor.css 2.04 kB +1 B (0%)
build/block-library/blocks/navigation/style-rtl.css 1.96 kB +15 B (+1%)
build/block-library/blocks/navigation/style.css 1.95 kB +16 B (+1%)
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB -2 B (0%)
build/block-library/blocks/navigation/view.min.js 423 B +28 B (+7%) 🔍
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B +27 B (+39%) 🚨
build/block-library/blocks/post-comments-form/editor.css 96 B +27 B (+39%) 🚨
build/block-library/blocks/post-featured-image/editor-rtl.css 605 B -116 B (-16%) 👏
build/block-library/blocks/post-featured-image/editor.css 605 B -116 B (-16%) 👏
build/block-library/blocks/post-template/style-rtl.css 282 B -41 B (-13%) 👏
build/block-library/blocks/post-template/style.css 282 B -41 B (-13%) 👏
build/block-library/blocks/search/style-rtl.css 379 B -23 B (-6%)
build/block-library/blocks/search/style.css 380 B -23 B (-6%)
build/block-library/blocks/shortcode/editor-rtl.css 464 B -10 B (-2%)
build/block-library/blocks/shortcode/editor.css 464 B -10 B (-2%)
build/block-library/blocks/site-logo/editor-rtl.css 708 B -51 B (-7%)
build/block-library/blocks/site-logo/editor.css 708 B -51 B (-7%)
build/block-library/blocks/spacer/editor-rtl.css 322 B -10 B (-3%)
build/block-library/blocks/spacer/editor.css 322 B -10 B (-3%)
build/block-library/blocks/table/editor-rtl.css 494 B -10 B (-2%)
build/block-library/blocks/table/editor.css 494 B -10 B (-2%)
build/block-library/blocks/table/style-rtl.css 611 B -14 B (-2%)
build/block-library/blocks/table/style.css 609 B -16 B (-3%)
build/block-library/blocks/table/theme-rtl.css 175 B -13 B (-7%)
build/block-library/blocks/table/theme.css 175 B -13 B (-7%)
build/block-library/blocks/video/style-rtl.css 159 B -14 B (-8%)
build/block-library/blocks/video/style.css 159 B -14 B (-8%)
build/block-library/blocks/video/theme-rtl.css 110 B -14 B (-11%) 👏
build/block-library/blocks/video/theme.css 110 B -14 B (-11%) 👏
build/block-library/common-rtl.css 987 B -6 B (-1%)
build/block-library/common.css 984 B -6 B (-1%)
build/block-library/editor-rtl.css 10.2 kB -73 B (-1%)
build/block-library/editor.css 10.2 kB -74 B (-1%)
build/block-library/index.min.js 183 kB +2.28 kB (+1%)
build/block-library/style-rtl.css 11.4 kB -118 B (-1%)
build/block-library/style.css 11.4 kB -120 B (-1%)
build/block-library/theme-rtl.css 677 B -12 B (-2%)
build/block-library/theme.css 682 B -12 B (-2%)
build/block-serialization-default-parser/index.min.js 1.11 kB -8 B (-1%)
build/block-serialization-spec-parser/index.min.js 2.83 kB -1 B (0%)
build/blocks/index.min.js 47 kB -42 B (0%)
build/components/index.min.js 229 kB +2.02 kB (+1%)
build/components/style-rtl.css 14 kB +112 B (+1%)
build/components/style.css 14 kB +110 B (+1%)
build/compose/index.min.js 11.7 kB -7 B (0%)
build/core-data/index.min.js 14.7 kB +119 B (+1%)
build/customize-widgets/index.min.js 11.2 kB +3 B (0%)
build/data-controls/index.min.js 653 B -10 B (-2%)
build/data/index.min.js 7.95 kB -29 B (0%)
build/date/index.min.js 32 kB +5 B (0%)
build/deprecated/index.min.js 507 B -11 B (-2%)
build/dom-ready/index.min.js 324 B -12 B (-4%)
build/dom/index.min.js 4.65 kB -34 B (-1%)
build/edit-navigation/index.min.js 16 kB -28 B (0%)
build/edit-navigation/style-rtl.css 4.03 kB -15 B (0%)
build/edit-navigation/style.css 4.04 kB -16 B (0%)
build/edit-post/index.min.js 30.4 kB +36 B (0%)
build/edit-post/style-rtl.css 7.08 kB -1 B (0%)
build/edit-post/style.css 7.08 kB -1 B (0%)
build/edit-site/index.min.js 50.7 kB +2.78 kB (+6%) 🔍
build/edit-site/style-rtl.css 8.14 kB +410 B (+5%) 🔍
build/edit-site/style.css 8.12 kB +415 B (+5%) 🔍
build/edit-widgets/index.min.js 16.4 kB -7 B (0%)
build/edit-widgets/style-rtl.css 4.39 kB -18 B (0%)
build/edit-widgets/style.css 4.38 kB -18 B (0%)
build/editor/index.min.js 38.6 kB +190 B (0%)
build/editor/style-rtl.css 3.63 kB -78 B (-2%)
build/editor/style.css 3.62 kB -78 B (-2%)
build/element/index.min.js 4.27 kB -38 B (-1%)
build/escape-html/index.min.js 537 B -11 B (-2%)
build/format-library/index.min.js 6.62 kB +2 B (0%)
build/hooks/index.min.js 1.64 kB -28 B (-2%)
build/html-entities/index.min.js 448 B -6 B (-1%)
build/i18n/index.min.js 3.77 kB -17 B (0%)
build/is-shallow-equal/index.min.js 527 B -8 B (-1%)
build/keyboard-shortcuts/index.min.js 1.79 kB -9 B (0%)
build/keycodes/index.min.js 1.38 kB -36 B (-3%)
build/list-reusable-blocks/index.min.js 1.74 kB -4 B (0%)
build/media-utils/index.min.js 2.9 kB +3 B (0%)
build/notices/index.min.js 945 B -12 B (-1%)
build/nux/index.min.js 2.05 kB -15 B (-1%)
build/nux/style-rtl.css 732 B -12 B (-2%)
build/nux/style.css 728 B -13 B (-2%)
build/plugins/index.min.js 1.94 kB -41 B (-2%)
build/preferences-persistence/index.min.js 2.22 kB -9 B (0%)
build/preferences/index.min.js 1.3 kB -15 B (-1%)
build/primitives/index.min.js 933 B -16 B (-2%)
build/priority-queue/index.min.js 612 B -16 B (-3%)
build/react-i18n/index.min.js 696 B -8 B (-1%)
build/react-refresh-entry/index.min.js 8.44 kB -5 B (0%)
build/react-refresh-runtime/index.min.js 7.31 kB +2 B (0%)
build/redux-routine/index.min.js 2.69 kB -1 B (0%)
build/reusable-blocks/index.min.js 2.22 kB -27 B (-1%)
build/rich-text/index.min.js 11.1 kB -35 B (0%)
build/server-side-render/index.min.js 1.61 kB -1 B (0%)
build/shortcode/index.min.js 1.52 kB -8 B (-1%)
build/token-list/index.min.js 644 B -24 B (-4%)
build/url/index.min.js 3.61 kB +1.62 kB (+81%) 🆘
build/viewport/index.min.js 1.08 kB -8 B (-1%)
build/warning/index.min.js 268 B -12 B (-4%)
build/widgets/index.min.js 7.19 kB -13 B (0%)
build/widgets/style-rtl.css 1.16 kB -3 B (0%)
build/widgets/style.css 1.16 kB -3 B (0%)
build/wordcount/index.min.js 1.06 kB -11 B (-1%)
ℹ️ View Unchanged
Filename Size
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 65 B
build/block-library/blocks/archives/style.css 65 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 59 B
build/block-library/blocks/avatar/style.css 59 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/buttons/editor-rtl.css 292 B
build/block-library/blocks/buttons/editor.css 292 B
build/block-library/blocks/buttons/style-rtl.css 275 B
build/block-library/blocks/buttons/style.css 275 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 103 B
build/block-library/blocks/code/style.css 103 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 406 B
build/block-library/blocks/columns/style.css 406 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 127 B
build/block-library/blocks/comment-template/style.css 127 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 95 B
build/block-library/blocks/comments/editor.css 95 B
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/group/editor-rtl.css 333 B
build/block-library/blocks/group/editor.css 333 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 76 B
build/block-library/blocks/heading/style.css 76 B
build/block-library/blocks/image/editor-rtl.css 738 B
build/block-library/blocks/image/editor.css 737 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 199 B
build/block-library/blocks/latest-posts/editor.css 198 B
build/block-library/blocks/latest-posts/style-rtl.css 463 B
build/block-library/blocks/latest-posts/style.css 462 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 493 B
build/block-library/blocks/media-text/style.css 490 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 363 B
build/block-library/blocks/page-list/editor.css 363 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 260 B
build/block-library/blocks/paragraph/style.css 260 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/style-rtl.css 495 B
build/block-library/blocks/post-comments-form/style.css 495 B
build/block-library/blocks/post-comments/editor-rtl.css 77 B
build/block-library/blocks/post-comments/editor.css 77 B
build/block-library/blocks/post-comments/style-rtl.css 628 B
build/block-library/blocks/post-comments/style.css 628 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/style-rtl.css 153 B
build/block-library/blocks/post-featured-image/style.css 153 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 80 B
build/block-library/blocks/post-title/style.css 80 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 370 B
build/block-library/blocks/pullquote/style.css 370 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 234 B
build/block-library/blocks/query-pagination/style.css 231 B
build/block-library/blocks/query/editor-rtl.css 369 B
build/block-library/blocks/query/editor.css 369 B
build/block-library/blocks/quote/style-rtl.css 213 B
build/block-library/blocks/quote/style.css 213 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 233 B
build/block-library/blocks/separator/style.css 233 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/site-logo/style-rtl.css 192 B
build/block-library/blocks/site-logo/style.css 192 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 84 B
build/block-library/blocks/site-title/editor.css 84 B
build/block-library/blocks/social-link/editor-rtl.css 177 B
build/block-library/blocks/social-link/editor.css 177 B
build/block-library/blocks/social-links/editor-rtl.css 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.37 kB
build/block-library/blocks/social-links/style.css 1.36 kB
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/tag-cloud/style-rtl.css 226 B
build/block-library/blocks/tag-cloud/style.css 227 B
build/block-library/blocks/template-part/editor-rtl.css 149 B
build/block-library/blocks/template-part/editor.css 149 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 561 B
build/block-library/blocks/video/editor.css 563 B
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/customize-widgets/style-rtl.css 1.4 kB
build/customize-widgets/style.css 1.4 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/list-reusable-blocks/style-rtl.css 835 B
build/list-reusable-blocks/style.css 835 B
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/vendors/react-dom.min.js 38.5 kB
build/vendors/react.min.js 4.34 kB

compressed-size-action

@adamziel adamziel changed the title Explore jsDoc annotations for select() in @wordpress/data Minimalistic jsDoc annotations for useSelect in @wordpress/data Jun 8, 2022
@adamziel adamziel self-assigned this Jun 8, 2022
@adamziel adamziel added [Package] Data /packages/data Developer Experience Ideas about improving block and theme developer experience labels Jun 8, 2022
@adamziel adamziel changed the title Minimalistic jsDoc annotations for useSelect in @wordpress/data [TypeScript] jsDoc types for useSelect in @wordpress/data Jun 8, 2022
@adamziel adamziel marked this pull request as ready for review June 8, 2022 15:09
@adamziel adamziel requested a review from nerrad as a code owner June 8, 2022 15:09
@adamziel
Copy link
Contributor Author

adamziel commented Jun 8, 2022

Edit: This was a super long comment exploring different ways to infer argument types in jsDoc. Turns out I was sent down the wrong path, so I moved it all to a gist. My IDE picked up the DefinitelyTyped types from the following directory and refused to cooperate:

~/Library/Caches/typescript/4.8/node_modules/@types/wordpress__data/index.d.ts

@adamziel
Copy link
Contributor Author

adamziel commented Jun 10, 2022

I ironed out all the kinks in this PR:

  • It worked when I tried it in PHPStorm and VSCode!
  • Autocompletion worked perfectly across imports when I moved these changes to a separate clean-slate repo. Let's keep this PR focused on types and figure out any configuration updates in a separate PR.

It's ready for a review!

@adamziel adamziel changed the title [TypeScript] jsDoc types for useSelect in @wordpress/data Autocompletion support for useSelect (via jsDoc annotations) Jun 10, 2022
...args: infer P
) => infer R
? ( ...args: P ) => R
: F;
Copy link
Member

Choose a reason for hiding this comment

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

what was the issue with this inference? is it that we lose the generic type parameters through this inference? so if we had const get<T> = (state, id): T => state[id]; that it widens to any?

Copy link
Contributor Author

@adamziel adamziel Jun 15, 2022

Choose a reason for hiding this comment

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

More or less:

type BadlyInferredSignature = CurriedState<
    <K extends string | number>(
        state: any,
        kind: K,
        key: K extends string ? 'one value' : false
    ) => K
>
// BadlyInferredSignature evaluates to:
// (kind: string number, key: false | "one value") => string number

The only solution I found is quite convoluted so I went for shipping the simple Curry type in this PR. We can always ship an updated version in a follow-up PR.


_Returns_

- `Function`: A custom react hook.
- `UseSelectReturn<T>`: A custom react hook.
Copy link
Member

Choose a reason for hiding this comment

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

unfortunately until we get hyperlinked or better-resolved types I feel like this is just as useless as Function before it. not a knock against this PR - nothing I think we can do about it now. maybe it's a little better since you can search for UseSelectReturn in the code…

@adamziel
Copy link
Contributor Author

@dmsnell I just addressed your feedback! @sarayourfriend would you also like to take a look at this one?

@sarayourfriend
Copy link
Contributor

Hi Adam, sorry for the delay. I've been traveling and have been overwhelmed with other work. I am taking a look at this today.

Copy link
Contributor

@sarayourfriend sarayourfriend left a comment

Choose a reason for hiding this comment

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

LGTM!

packages/data/src/components/use-select/index.js Outdated Show resolved Hide resolved
@adamziel adamziel merged commit a9900bf into trunk Jun 23, 2022
@adamziel adamziel deleted the ts/wordpress-data-select-type branch June 23, 2022 10:04
@github-actions github-actions bot added this to the Gutenberg 13.6 milestone Jun 23, 2022
@mburridge mburridge added the Needs Dev Note Requires a developer note for a major WordPress release cycle label Sep 14, 2022
@mburridge
Copy link
Contributor

Added the Needs Dev Note label in case this needs a dev note (either individual or as part of a "misc" dev note) for WP 6.1 release.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Developer Experience Ideas about improving block and theme developer experience Needs Dev Note Requires a developer note for a major WordPress release cycle [Package] Data /packages/data
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants