From 4bfa523cc8a30c72c0654a28315dec32c2bd9fec Mon Sep 17 00:00:00 2001 From: Jon Surrell Date: Fri, 21 Jun 2024 09:17:42 +0200 Subject: [PATCH 1/4] Add method-signature-style TypeScript lint rule This subtle change can dramatically change the type system's behavior. ```ts type Rec = Record; interface Post extends Rec { status: string; } interface Base { isEligibleMethod(item: T): boolean; isEligibleFunc: (item: T) => boolean; } const base: Base = { // Using the "method" type syntax above weakens the type checking. // This is not a type error!!! isEligibleMethod: (item: Post) => item.status.startsWith('eli:'), // This is a type error as expected. isEligibleFunc: (item: Post) => item.status.startsWith('foo'), } ``` See https://typescript-eslint.io/rules/method-signature-style --- packages/eslint-plugin/configs/recommended.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/eslint-plugin/configs/recommended.js b/packages/eslint-plugin/configs/recommended.js index 72425c493fe41..28c6812fc3f84 100644 --- a/packages/eslint-plugin/configs/recommended.js +++ b/packages/eslint-plugin/configs/recommended.js @@ -60,6 +60,7 @@ if ( isPackageInstalled( 'typescript' ) ) { // no-shadow doesn't work correctly in TS, so let's use a TS-dedicated version instead. 'no-shadow': 'off', '@typescript-eslint/no-shadow': 'error', + '@typescript-eslint/method-signature-style': 'error', }, }, ]; From 7627583c8ed79cbc70a5045fe8d49d740ed1d1ac Mon Sep 17 00:00:00 2001 From: Jon Surrell Date: Fri, 21 Jun 2024 09:29:18 +0200 Subject: [PATCH 2/4] Add changelog --- packages/eslint-plugin/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/eslint-plugin/CHANGELOG.md b/packages/eslint-plugin/CHANGELOG.md index 35abe863afb3e..d6763095ba4a2 100644 --- a/packages/eslint-plugin/CHANGELOG.md +++ b/packages/eslint-plugin/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Breaking Changes + +- Add [`@typescript-eslint/method-signature-style` rule](https://typescript-eslint.io/rules/method-signature-style) to the recommended TypeScript ruleset ([#62718](https://github.com/WordPress/gutenberg/pull/62718)). + ## 19.2.0 (2024-06-26) ## 19.1.0 (2024-06-15) From 77369cc9e6c4fb4d3e9c94d22f7b31a88260cffe Mon Sep 17 00:00:00 2001 From: Jon Surrell Date: Fri, 21 Jun 2024 09:33:08 +0200 Subject: [PATCH 3/4] Fix lints --- packages/components/src/menu-items-choice/types.ts | 3 ++- .../components/src/resizable-box/resize-tooltip/utils.ts | 2 +- packages/compose/src/utils/debounce/index.ts | 4 ++-- packages/compose/src/utils/observable-map/index.ts | 8 ++++---- packages/dataviews/src/types.ts | 2 +- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/components/src/menu-items-choice/types.ts b/packages/components/src/menu-items-choice/types.ts index 87d8e7687a4fb..a722d5e03709e 100644 --- a/packages/components/src/menu-items-choice/types.ts +++ b/packages/components/src/menu-items-choice/types.ts @@ -20,7 +20,8 @@ export type MenuItemsChoiceProps = { * Callback function to be called with the selected choice when user * selects a new choice. */ - onSelect( value: string ): void; + onSelect: ( value: string ) => void; + /** * Callback function to be called with a choice when user * hovers over a new choice (will be empty on mouse leave). diff --git a/packages/components/src/resizable-box/resize-tooltip/utils.ts b/packages/components/src/resizable-box/resize-tooltip/utils.ts index 09484baaf6a78..895f521c80ae2 100644 --- a/packages/components/src/resizable-box/resize-tooltip/utils.ts +++ b/packages/components/src/resizable-box/resize-tooltip/utils.ts @@ -25,7 +25,7 @@ interface UseResizeLabelProps { interface UseResizeLabelArgs { axis?: Axis; fadeTimeout: number; - onResize( data: { width: number | null; height: number | null } ): void; + onResize: ( data: { width: number | null; height: number | null } ) => void; position: Position; showPx: boolean; } diff --git a/packages/compose/src/utils/debounce/index.ts b/packages/compose/src/utils/debounce/index.ts index ea9d97050baa4..d86fefeea8791 100644 --- a/packages/compose/src/utils/debounce/index.ts +++ b/packages/compose/src/utils/debounce/index.ts @@ -59,7 +59,7 @@ export interface DebouncedFunc< T extends ( ...args: any[] ) => any > { /** * Throw away any pending invocation of the debounced function. */ - cancel(): void; + cancel: () => void; /** * If there is a pending invocation of the debounced function, invoke it immediately and return @@ -68,7 +68,7 @@ export interface DebouncedFunc< T extends ( ...args: any[] ) => any > { * Otherwise, return the value from the last invocation, or undefined if the debounced function * was never invoked. */ - flush(): ReturnType< T > | undefined; + flush: () => ReturnType< T > | undefined; } /** diff --git a/packages/compose/src/utils/observable-map/index.ts b/packages/compose/src/utils/observable-map/index.ts index 3442c1a3f94c8..904b8df7ec670 100644 --- a/packages/compose/src/utils/observable-map/index.ts +++ b/packages/compose/src/utils/observable-map/index.ts @@ -1,8 +1,8 @@ export type ObservableMap< K, V > = { - get( name: K ): V | undefined; - set( name: K, value: V ): void; - delete( name: K ): void; - subscribe( name: K, listener: () => void ): () => void; + get: ( name: K ) => V | undefined; + set: ( name: K, value: V ) => void; + delete: ( name: K ) => void; + subscribe: ( name: K, listener: () => void ) => () => void; }; /** diff --git a/packages/dataviews/src/types.ts b/packages/dataviews/src/types.ts index 9e140f686d65f..9c611b3882a7e 100644 --- a/packages/dataviews/src/types.ts +++ b/packages/dataviews/src/types.ts @@ -406,7 +406,7 @@ export interface ViewBaseProps< Item > { fields: NormalizedField< Item >[]; getItemId: ( item: Item ) => string; isLoading?: boolean; - onChangeView( view: View ): void; + onChangeView: ( view: View ) => void; onSelectionChange: SetSelection; selection: string[]; setOpenedFilter: ( fieldId: string ) => void; From 853ee41c73d26ba50ab3c6783e0fd15abe5e4a6b Mon Sep 17 00:00:00 2001 From: Jon Surrell Date: Fri, 21 Jun 2024 09:39:16 +0200 Subject: [PATCH 4/4] Add changelog entries --- packages/components/CHANGELOG.md | 1 + packages/compose/CHANGELOG.md | 4 ++++ packages/dataviews/CHANGELOG.md | 6 +++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/components/CHANGELOG.md b/packages/components/CHANGELOG.md index b43368905e8ab..21cf827da05de 100644 --- a/packages/components/CHANGELOG.md +++ b/packages/components/CHANGELOG.md @@ -36,6 +36,7 @@ - `CustomSelectControlV2`: fix trigger button font size. ([#63131](https://github.com/WordPress/gutenberg/pull/63131)) - Extract `TimeInput` component from `TimePicker` ([#60613](https://github.com/WordPress/gutenberg/pull/60613)). - `TimeInput`: Add `label` prop ([#63106](https://github.com/WordPress/gutenberg/pull/63106)). +- Method style type signatures have been changed to function style ([#62718](https://github.com/WordPress/gutenberg/pull/62718)). ## 28.2.0 (2024-06-26) diff --git a/packages/compose/CHANGELOG.md b/packages/compose/CHANGELOG.md index 7c29649f5bce8..6e620f05d5757 100644 --- a/packages/compose/CHANGELOG.md +++ b/packages/compose/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Internal + +- Method style type signatures have been changed to function style ([#62718](https://github.com/WordPress/gutenberg/pull/62718)). + ## 7.2.0 (2024-06-26) ## 7.1.0 (2024-06-15) diff --git a/packages/dataviews/CHANGELOG.md b/packages/dataviews/CHANGELOG.md index be0b434483599..595a3e5171984 100644 --- a/packages/dataviews/CHANGELOG.md +++ b/packages/dataviews/CHANGELOG.md @@ -4,7 +4,11 @@ ### New features -- Added a new `DataForm` component to render controls from a given configuration (fields, form), and data. +- Added a new `DataForm` component to render controls from a given configuration (fields, form), and data. + +### Internal + +- Method style type signatures have been changed to function style ([#62718](https://github.com/WordPress/gutenberg/pull/62718)). ## 2.2.0 (2024-06-26)