@wordpress/eslint-plugin 25.4.1 → 25.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/eslint-plugin",
3
- "version": "25.4.1",
3
+ "version": "25.5.0",
4
4
  "description": "ESLint plugin for WordPress development.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -44,9 +44,9 @@
44
44
  "@babel/eslint-parser": "^7.28.6",
45
45
  "@eslint-community/eslint-plugin-eslint-comments": "^4.7.0",
46
46
  "@eslint/compat": "^2.0.0",
47
- "@wordpress/babel-preset-default": "^8.48.1",
48
- "@wordpress/prettier-config": "^4.48.1",
49
- "@wordpress/theme": "^0.15.1",
47
+ "@wordpress/babel-preset-default": "^8.49.0",
48
+ "@wordpress/prettier-config": "^4.49.0",
49
+ "@wordpress/theme": "^0.16.0",
50
50
  "cosmiconfig": "^7.0.0",
51
51
  "eslint-config-prettier": "^10.0.0",
52
52
  "eslint-import-resolver-typescript": "^4.4.4",
@@ -64,7 +64,8 @@
64
64
  },
65
65
  "devDependencies": {
66
66
  "@types/eslint": "^9",
67
- "@types/estree": "^1.0.5"
67
+ "@types/estree": "^1.0.5",
68
+ "eslint": "^10.0.0"
68
69
  },
69
70
  "peerDependencies": {
70
71
  "@babel/core": ">=7",
@@ -83,5 +84,5 @@
83
84
  "publishConfig": {
84
85
  "access": "public"
85
86
  },
86
- "gitHead": "99df7432c5c7cb83ba41146fd1f57f3c19004305"
87
+ "gitHead": "0e7112a4f4fde4ea15bd9060489b8f6fe11eb6ca"
87
88
  }
@@ -112,7 +112,6 @@ ruleTester.run( 'components-no-missing-40px-size-prop', rule, {
112
112
  import {
113
113
  BorderBoxControl,
114
114
  BorderControl,
115
- BoxControl,
116
115
  ComboboxControl,
117
116
  CustomSelectControl,
118
117
  FontAppearanceControl,
@@ -125,14 +124,12 @@ ruleTester.run( 'components-no-missing-40px-size-prop', rule, {
125
124
  NumberControl,
126
125
  RangeControl,
127
126
  SelectControl,
128
- TextControl,
129
127
  ToggleGroupControl,
130
128
  UnitControl,
131
129
  } from '@wordpress/components';
132
130
  <>
133
131
  <BorderBoxControl __next40pxDefaultSize />
134
132
  <BorderControl __next40pxDefaultSize />
135
- <BoxControl __next40pxDefaultSize />
136
133
  <ComboboxControl __next40pxDefaultSize />
137
134
  <CustomSelectControl __next40pxDefaultSize />
138
135
  <FontAppearanceControl __next40pxDefaultSize />
@@ -145,7 +142,6 @@ ruleTester.run( 'components-no-missing-40px-size-prop', rule, {
145
142
  <NumberControl __next40pxDefaultSize />
146
143
  <RangeControl __next40pxDefaultSize />
147
144
  <SelectControl __next40pxDefaultSize />
148
- <TextControl __next40pxDefaultSize />
149
145
  <ToggleGroupControl __next40pxDefaultSize />
150
146
  <UnitControl __next40pxDefaultSize />
151
147
  </>
@@ -208,13 +204,13 @@ ruleTester.run( 'components-no-missing-40px-size-prop', rule, {
208
204
  // Aliased import without __next40pxDefaultSize
209
205
  {
210
206
  code: `
211
- import { TextControl as MyTextControl } from '@wordpress/components';
212
- <MyTextControl />
207
+ import { InputControl as MyInputControl } from '@wordpress/components';
208
+ <MyInputControl />
213
209
  `,
214
210
  errors: [
215
211
  {
216
212
  messageId: 'missingProp',
217
- data: { component: 'TextControl' },
213
+ data: { component: 'InputControl' },
218
214
  },
219
215
  ],
220
216
  },
@@ -32,7 +32,7 @@ ruleTester.run( 'no-ds-tokens', rule, {
32
32
  ],
33
33
  invalid: [
34
34
  {
35
- code: `const style = 'color: var(--wpds-color-fg-content-neutral)';`,
35
+ code: `const style = 'color: var(--wpds-color-foreground-content-neutral)';`,
36
36
  errors: [
37
37
  {
38
38
  messageId: 'disallowed',
@@ -40,7 +40,7 @@ ruleTester.run( 'no-ds-tokens', rule, {
40
40
  ],
41
41
  },
42
42
  {
43
- code: 'const style = `color: var(--wpds-color-fg-content-neutral)`;',
43
+ code: 'const style = `color: var(--wpds-color-foreground-content-neutral)`;',
44
44
  errors: [
45
45
  {
46
46
  messageId: 'disallowed',
@@ -48,7 +48,7 @@ ruleTester.run( 'no-ds-tokens', rule, {
48
48
  ],
49
49
  },
50
50
  {
51
- code: `<div style={ { color: 'var(--wpds-color-fg-content-neutral)' } } />`,
51
+ code: `<div style={ { color: 'var(--wpds-color-foreground-content-neutral)' } } />`,
52
52
  errors: [
53
53
  {
54
54
  messageId: 'disallowed',
@@ -64,7 +64,7 @@ ruleTester.run( 'no-ds-tokens', rule, {
64
64
  ],
65
65
  },
66
66
  {
67
- code: `const token = '--wpds-color-fg-content-neutral';`,
67
+ code: `const token = '--wpds-color-foreground-content-neutral';`,
68
68
  errors: [
69
69
  {
70
70
  messageId: 'disallowed',
@@ -72,7 +72,7 @@ ruleTester.run( 'no-ds-tokens', rule, {
72
72
  ],
73
73
  },
74
74
  {
75
- code: 'const style = `--wpds-color-fg-content-neutral: red`;',
75
+ code: 'const style = `--wpds-color-foreground-content-neutral: red`;',
76
76
  errors: [
77
77
  {
78
78
  messageId: 'disallowed',
@@ -18,7 +18,7 @@ ruleTester.run( 'no-setting-ds-tokens', rule, {
18
18
  code: `<div style={ { '--my-custom-prop': 'value' } } />`,
19
19
  },
20
20
  {
21
- code: `<div style={ { color: 'var(--wpds-color-fg-content-neutral)' } } />`,
21
+ code: `<div style={ { color: 'var(--wpds-color-foreground-content-neutral)' } } />`,
22
22
  },
23
23
  {
24
24
  code: `<div style={ { '--other-prefix-token': '10px' } } />`,
@@ -30,10 +30,10 @@ ruleTester.run( 'no-setting-ds-tokens', rule, {
30
30
  code: `const styles = { '--my-custom-prop': 'value' };`,
31
31
  },
32
32
  {
33
- code: `const styles = { color: 'var(--wpds-color-fg-content-neutral)' };`,
33
+ code: `const styles = { color: 'var(--wpds-color-foreground-content-neutral)' };`,
34
34
  },
35
35
  {
36
- code: `const { '--wpds-color-fg-content-neutral': neutralColor } = styles;`,
36
+ code: `const { '--wpds-color-foreground-content-neutral': neutralColor } = styles;`,
37
37
  },
38
38
  {
39
39
  code: `const css = '--my-custom-prop: red;';`,
@@ -50,7 +50,7 @@ ruleTester.run( 'no-setting-ds-tokens', rule, {
50
50
  ],
51
51
  invalid: [
52
52
  {
53
- code: `<div style={ { '--wpds-color-fg-content-neutral': 'red' } } />`,
53
+ code: `<div style={ { '--wpds-color-foreground-content-neutral': 'red' } } />`,
54
54
  errors: [
55
55
  {
56
56
  messageId: 'disallowedSet',
@@ -66,7 +66,7 @@ ruleTester.run( 'no-setting-ds-tokens', rule, {
66
66
  ],
67
67
  },
68
68
  {
69
- code: `const styles = { '--wpds-color-fg-content-neutral': 'red' };`,
69
+ code: `const styles = { '--wpds-color-foreground-content-neutral': 'red' };`,
70
70
  errors: [
71
71
  {
72
72
  messageId: 'disallowedSet',
@@ -82,7 +82,7 @@ ruleTester.run( 'no-setting-ds-tokens', rule, {
82
82
  ],
83
83
  },
84
84
  {
85
- code: `const config = { inner: { '--wpds-color-fg-content-neutral': 'red' } };`,
85
+ code: `const config = { inner: { '--wpds-color-foreground-content-neutral': 'red' } };`,
86
86
  errors: [
87
87
  {
88
88
  messageId: 'disallowedSet',
@@ -90,7 +90,7 @@ ruleTester.run( 'no-setting-ds-tokens', rule, {
90
90
  ],
91
91
  },
92
92
  {
93
- code: `const css = '--wpds-color-fg-content-neutral: red;';`,
93
+ code: `const css = '--wpds-color-foreground-content-neutral: red;';`,
94
94
  errors: [
95
95
  {
96
96
  messageId: 'disallowedSet',
@@ -98,7 +98,7 @@ ruleTester.run( 'no-setting-ds-tokens', rule, {
98
98
  ],
99
99
  },
100
100
  {
101
- code: 'const css = `--wpds-color-fg-content-neutral: red;`;',
101
+ code: 'const css = `--wpds-color-foreground-content-neutral: red;`;',
102
102
  errors: [
103
103
  {
104
104
  messageId: 'disallowedSet',
@@ -106,7 +106,7 @@ ruleTester.run( 'no-setting-ds-tokens', rule, {
106
106
  ],
107
107
  },
108
108
  {
109
- code: 'const css = `--wpds-color-fg-content-neutral: ${ value };`;',
109
+ code: 'const css = `--wpds-color-foreground-content-neutral: ${ value };`;',
110
110
  errors: [
111
111
  {
112
112
  messageId: 'disallowedSet',
@@ -24,34 +24,34 @@ ruleTester.run( 'no-unknown-ds-tokens', rule, {
24
24
  code: `<div style={ { color: 'var(--other-prefix-token)' } } />`,
25
25
  },
26
26
  {
27
- code: `<div style={ { color: 'var(--wpds-color-fg-content-neutral)' } } />`,
27
+ code: `<div style={ { color: 'var(--wpds-color-foreground-content-neutral)' } } />`,
28
28
  },
29
29
  {
30
- code: '<div style={ { color: `var(--wpds-color-fg-content-neutral)` } } />',
30
+ code: '<div style={ { color: `var(--wpds-color-foreground-content-neutral)` } } />',
31
31
  },
32
32
  {
33
- code: `const token = 'var(--wpds-color-fg-content-neutral)';`,
33
+ code: `const token = 'var(--wpds-color-foreground-content-neutral)';`,
34
34
  },
35
35
  {
36
36
  code: `const name = 'something--wpds-color';`,
37
37
  },
38
38
  {
39
- code: '`${ prefix }: var(--wpds-color-fg-content-neutral)`',
39
+ code: '`${ prefix }: var(--wpds-color-foreground-content-neutral)`',
40
40
  },
41
41
  {
42
- code: '`var(--wpds-color-fg-content-neutral) ${ suffix }`',
42
+ code: '`var(--wpds-color-foreground-content-neutral) ${ suffix }`',
43
43
  },
44
44
  {
45
- code: `const style = { '--wpds-color-fg-content-neutral': 'red' };`,
45
+ code: `const style = { '--wpds-color-foreground-content-neutral': 'red' };`,
46
46
  },
47
47
  {
48
- code: `const css = '--wpds-color-fg-content-neutral: red;';`,
48
+ code: `const css = '--wpds-color-foreground-content-neutral: red;';`,
49
49
  },
50
50
  {
51
- code: 'const css = `--wpds-color-fg-content-neutral: red;`;',
51
+ code: 'const css = `--wpds-color-foreground-content-neutral: red;`;',
52
52
  },
53
53
  {
54
- code: 'const css = `--wpds-color-fg-content-neutral: ${ value };`;',
54
+ code: 'const css = `--wpds-color-foreground-content-neutral: ${ value };`;',
55
55
  },
56
56
  ],
57
57
  invalid: [
@@ -168,78 +168,78 @@ ruleTester.run( 'no-unknown-ds-tokens', rule, {
168
168
  ],
169
169
  },
170
170
  {
171
- code: `const token = '--wpds-color-fg-content-neutral';`,
171
+ code: `const token = '--wpds-color-foreground-content-neutral';`,
172
172
  errors: [
173
173
  {
174
174
  messageId: 'bareToken',
175
175
  data: {
176
- tokenNames: "'--wpds-color-fg-content-neutral'",
176
+ tokenNames: "'--wpds-color-foreground-content-neutral'",
177
177
  },
178
178
  },
179
179
  ],
180
180
  },
181
181
  {
182
- code: 'const token = `--wpds-color-fg-content-neutral`;',
182
+ code: 'const token = `--wpds-color-foreground-content-neutral`;',
183
183
  errors: [
184
184
  {
185
185
  messageId: 'bareToken',
186
186
  data: {
187
- tokenNames: "'--wpds-color-fg-content-neutral'",
187
+ tokenNames: "'--wpds-color-foreground-content-neutral'",
188
188
  },
189
189
  },
190
190
  ],
191
191
  },
192
192
  {
193
- code: '<div style={ { gap: `--wpds-color-fg-content-neutral` } } />',
193
+ code: '<div style={ { gap: `--wpds-color-foreground-content-neutral` } } />',
194
194
  errors: [
195
195
  {
196
196
  messageId: 'bareToken',
197
197
  data: {
198
- tokenNames: "'--wpds-color-fg-content-neutral'",
198
+ tokenNames: "'--wpds-color-foreground-content-neutral'",
199
199
  },
200
200
  },
201
201
  ],
202
202
  },
203
203
  {
204
- code: '`${ prefix }: --wpds-color-fg-content-neutral`',
204
+ code: '`${ prefix }: --wpds-color-foreground-content-neutral`',
205
205
  errors: [
206
206
  {
207
207
  messageId: 'bareToken',
208
208
  data: {
209
- tokenNames: "'--wpds-color-fg-content-neutral'",
209
+ tokenNames: "'--wpds-color-foreground-content-neutral'",
210
210
  },
211
211
  },
212
212
  ],
213
213
  },
214
214
  {
215
- code: '`var(--wpds-color-fg-content-neutral) --wpds-color-fg-content-neutral ${ x }`',
215
+ code: '`var(--wpds-color-foreground-content-neutral) --wpds-color-foreground-content-neutral ${ x }`',
216
216
  errors: [
217
217
  {
218
218
  messageId: 'bareToken',
219
219
  data: {
220
- tokenNames: "'--wpds-color-fg-content-neutral'",
220
+ tokenNames: "'--wpds-color-foreground-content-neutral'",
221
221
  },
222
222
  },
223
223
  ],
224
224
  },
225
225
  {
226
- code: `const css = '--wpds-color-fg-content-neutral: red; color: --wpds-color-bg-surface-neutral;';`,
226
+ code: `const css = '--wpds-color-foreground-content-neutral: red; color: --wpds-color-background-surface-neutral;';`,
227
227
  errors: [
228
228
  {
229
229
  messageId: 'bareToken',
230
230
  data: {
231
- tokenNames: "'--wpds-color-bg-surface-neutral'",
231
+ tokenNames: "'--wpds-color-background-surface-neutral'",
232
232
  },
233
233
  },
234
234
  ],
235
235
  },
236
236
  {
237
- code: `const css = '--wpds-color-fg-content-neutral: red; background: --wpds-color-fg-content-neutral;';`,
237
+ code: `const css = '--wpds-color-foreground-content-neutral: red; background: --wpds-color-foreground-content-neutral;';`,
238
238
  errors: [
239
239
  {
240
240
  messageId: 'bareToken',
241
241
  data: {
242
- tokenNames: "'--wpds-color-fg-content-neutral'",
242
+ tokenNames: "'--wpds-color-foreground-content-neutral'",
243
243
  },
244
244
  },
245
245
  ],
@@ -24,7 +24,7 @@ ruleTester.run( 'use-recommended-components', rule, {
24
24
  "import { Link } from '@wordpress/ui';",
25
25
  "import { Stack } from '@wordpress/ui';",
26
26
  "import { Text } from '@wordpress/ui';",
27
- "import { Badge, Icon, Link, Stack, Tabs, Text } from '@wordpress/ui';",
27
+ "import { Badge, Icon, Link, Stack, Tabs, Text, Tooltip } from '@wordpress/ui';",
28
28
 
29
29
  // Unlocked private APIs are only checked for denied names.
30
30
  "import { privateApis } from '@wordpress/components'; import { unlock } from '../../lock-unlock'; const { SomethingElse } = unlock( privateApis );",
@@ -114,6 +114,14 @@ ruleTester.run( 'use-recommended-components', rule, {
114
114
  },
115
115
  ],
116
116
  },
117
+ {
118
+ code: "import { Tooltip } from '@wordpress/components';",
119
+ errors: [
120
+ {
121
+ message: 'Use `Tooltip` from `@wordpress/ui` instead.',
122
+ },
123
+ ],
124
+ },
117
125
  ],
118
126
  } );
119
127
 
@@ -14,7 +14,6 @@ const { hasTruthyJsxAttribute } = require( '../utils' );
14
14
  const COMPONENTS_REQUIRING_40PX = new Set( [
15
15
  'BorderBoxControl',
16
16
  'BorderControl',
17
- 'BoxControl',
18
17
  'Button',
19
18
  'ClipboardButton',
20
19
  'ComboboxControl',
@@ -31,7 +30,6 @@ const COMPONENTS_REQUIRING_40PX = new Set( [
31
30
  'Radio',
32
31
  'RangeControl',
33
32
  'SelectControl',
34
- 'TextControl',
35
33
  'TreeSelect',
36
34
  'ToggleGroupControl',
37
35
  'UnitControl',
@@ -26,6 +26,7 @@ const ALLOWLIST = {
26
26
  'Stack',
27
27
  'Tabs',
28
28
  'Text',
29
+ 'Tooltip',
29
30
  'VisuallyHidden',
30
31
  ],
31
32
  message:
@@ -60,6 +61,7 @@ const DENYLIST = {
60
61
  CardMedia: 'Use `Card.FullBleed` from `@wordpress/ui` instead.',
61
62
  TabPanel: 'Use `Tabs` from `@wordpress/ui` instead.',
62
63
  Tabs: 'Use `Tabs` from `@wordpress/ui` instead.',
64
+ Tooltip: 'Use `Tooltip` from `@wordpress/ui` instead.',
63
65
  VisuallyHidden: 'Use `{{ name }}` from `@wordpress/ui` instead.',
64
66
  },
65
67
  };