@wistia/oxlint-config 1.8.0 → 1.9.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 +5 -5
- package/rules/playwright.mjs +54 -0
- package/rules/react.mjs +4 -0
- package/rules/storybook.mjs +5 -0
- package/rules/styled-components.mjs +18 -0
- package/rules/testing-library.mjs +5 -0
- package/rules/vitest.mjs +10 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wistia/oxlint-config",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"description": "Wistia's Oxlint configurations",
|
|
5
5
|
"packageManager": "yarn@4.17.1",
|
|
6
6
|
"type": "module",
|
|
@@ -71,15 +71,15 @@
|
|
|
71
71
|
}
|
|
72
72
|
},
|
|
73
73
|
"dependencies": {
|
|
74
|
-
"@eslint-react/eslint-plugin": "^5.
|
|
75
|
-
"@vitest/eslint-plugin": "^1.6.
|
|
74
|
+
"@eslint-react/eslint-plugin": "^5.11.3",
|
|
75
|
+
"@vitest/eslint-plugin": "^1.6.21",
|
|
76
76
|
"confusing-browser-globals": "^1.0.11",
|
|
77
77
|
"eslint-plugin-barrel-files": "^3.0.1",
|
|
78
78
|
"eslint-plugin-import-x": "^4.17.1",
|
|
79
79
|
"eslint-plugin-jest-dom": "^5.5.0",
|
|
80
80
|
"eslint-plugin-n": "^18.2.1",
|
|
81
81
|
"eslint-plugin-no-only-tests": "^3.4.0",
|
|
82
|
-
"eslint-plugin-playwright": "^2.10.
|
|
82
|
+
"eslint-plugin-playwright": "^2.10.5",
|
|
83
83
|
"eslint-plugin-storybook": "^10.4.6",
|
|
84
84
|
"eslint-plugin-styled-components": "^0.0.0",
|
|
85
85
|
"eslint-plugin-styled-components-a11y": "^2.2.1",
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
"oxlint": "^1.73.0",
|
|
95
95
|
"oxlint-tsgolint": "^0.24.0",
|
|
96
96
|
"storybook": "^10.4.6",
|
|
97
|
-
"vitest": "^4.1.
|
|
97
|
+
"vitest": "^4.1.10"
|
|
98
98
|
},
|
|
99
99
|
"engines": {
|
|
100
100
|
"node": "^20.19.0 || ^22.13.0 || >=24 || >=26"
|
package/rules/playwright.mjs
CHANGED
|
@@ -191,5 +191,59 @@ export const playwrightRules = {
|
|
|
191
191
|
// Require toThrow message
|
|
192
192
|
// https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/require-to-throw-message.md
|
|
193
193
|
'eslint-plugin-playwright/require-to-throw-message': 'error',
|
|
194
|
+
|
|
195
|
+
// Disallow duplicate slow() annotations
|
|
196
|
+
// https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-duplicate-slow.md
|
|
197
|
+
'eslint-plugin-playwright/no-duplicate-slow': 'error',
|
|
198
|
+
|
|
199
|
+
// Enforce blank lines between test blocks
|
|
200
|
+
// https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/consistent-spacing-between-blocks.md
|
|
201
|
+
// Decision: style preference, left to a formatter
|
|
202
|
+
'eslint-plugin-playwright/consistent-spacing-between-blocks': 'off',
|
|
203
|
+
|
|
204
|
+
// Disallow setup and teardown hooks
|
|
205
|
+
// https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-hooks.md
|
|
206
|
+
// Decision: too strict for general use
|
|
207
|
+
'eslint-plugin-playwright/no-hooks': 'off',
|
|
208
|
+
|
|
209
|
+
// Disallow configured locators
|
|
210
|
+
// https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-restricted-locators.md
|
|
211
|
+
// Decision: no-op without project-specific options
|
|
212
|
+
'eslint-plugin-playwright/no-restricted-locators': 'off',
|
|
213
|
+
|
|
214
|
+
// Disallow configured matchers
|
|
215
|
+
// https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-restricted-matchers.md
|
|
216
|
+
// Decision: no-op without project-specific options
|
|
217
|
+
'eslint-plugin-playwright/no-restricted-matchers': 'off',
|
|
218
|
+
|
|
219
|
+
// Disallow configured ARIA roles in locators
|
|
220
|
+
// https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-restricted-roles.md
|
|
221
|
+
// Decision: no-op without project-specific options
|
|
222
|
+
'eslint-plugin-playwright/no-restricted-roles': 'off',
|
|
223
|
+
|
|
224
|
+
// Disallow skipped tests
|
|
225
|
+
// https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-skipped-test.md
|
|
226
|
+
// Decision: skipping tests is legitimate, matching vitest/no-disabled-tests
|
|
227
|
+
'eslint-plugin-playwright/no-skipped-test': 'off',
|
|
228
|
+
|
|
229
|
+
// Enforce lowercase titles
|
|
230
|
+
// https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/prefer-lowercase-title.md
|
|
231
|
+
// Decision: too opinionated for general use, matching vitest/prefer-lowercase-title
|
|
232
|
+
'eslint-plugin-playwright/prefer-lowercase-title': 'off',
|
|
233
|
+
|
|
234
|
+
// Require soft assertions
|
|
235
|
+
// https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/require-soft-assertions.md
|
|
236
|
+
// Decision: too strict for general use
|
|
237
|
+
'eslint-plugin-playwright/require-soft-assertions': 'off',
|
|
238
|
+
|
|
239
|
+
// Require tags on all tests
|
|
240
|
+
// https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/require-tags.md
|
|
241
|
+
// Decision: too strict for general use
|
|
242
|
+
'eslint-plugin-playwright/require-tags': 'off',
|
|
243
|
+
|
|
244
|
+
// Require explicit timeout on toPass()
|
|
245
|
+
// https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/require-to-pass-timeout.md
|
|
246
|
+
// Decision: too strict for general use, matching vitest/require-test-timeout
|
|
247
|
+
'eslint-plugin-playwright/require-to-pass-timeout': 'off',
|
|
194
248
|
},
|
|
195
249
|
};
|
package/rules/react.mjs
CHANGED
|
@@ -661,6 +661,10 @@ export const reactRules = {
|
|
|
661
661
|
// https://eslint-react.xyz/docs/rules/web-api-no-leaked-resize-observer
|
|
662
662
|
'@eslint-react/web-api-no-leaked-resize-observer': 'error',
|
|
663
663
|
|
|
664
|
+
// Prevent leaked IntersectionObserver instances
|
|
665
|
+
// https://eslint-react.xyz/docs/rules/web-api-no-leaked-intersection-observer
|
|
666
|
+
'@eslint-react/web-api-no-leaked-intersection-observer': 'error',
|
|
667
|
+
|
|
664
668
|
// Prevent leaked setTimeout calls
|
|
665
669
|
// https://eslint-react.xyz/docs/rules/web-api-no-leaked-timeout
|
|
666
670
|
'@eslint-react/web-api-no-leaked-timeout': 'error',
|
package/rules/storybook.mjs
CHANGED
|
@@ -44,6 +44,11 @@ export const storybookRules = {
|
|
|
44
44
|
// https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-renderer-packages.md
|
|
45
45
|
'eslint-plugin-storybook/no-renderer-packages': 'error',
|
|
46
46
|
|
|
47
|
+
// Disallow title property in meta (forces CSF3 auto-generated titles)
|
|
48
|
+
// https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-title-property-in-meta.md
|
|
49
|
+
// Decision: explicit titles are a legitimate pattern
|
|
50
|
+
'eslint-plugin-storybook/no-title-property-in-meta': 'off',
|
|
51
|
+
|
|
47
52
|
// No uninstalled addons
|
|
48
53
|
// https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-uninstalled-addons.md
|
|
49
54
|
'eslint-plugin-storybook/no-uninstalled-addons': 'error',
|
|
@@ -4,6 +4,10 @@ import { resolvePlugin } from '../resolve-plugin.mjs';
|
|
|
4
4
|
export const styledComponentsRules = {
|
|
5
5
|
jsPlugins: [resolvePlugin('eslint-plugin-styled-components-a11y')],
|
|
6
6
|
rules: {
|
|
7
|
+
// Enforce emojis are wrapped and given accessible text
|
|
8
|
+
// Decision: deprecated in jsx-a11y
|
|
9
|
+
'eslint-plugin-styled-components-a11y/accessible-emoji': 'off',
|
|
10
|
+
|
|
7
11
|
// Enforce that all elements that require alternative text have meaningful information
|
|
8
12
|
// https://github.com/brendanmorrell/eslint-plugin-styled-components-a11y/blob/master/docs/rules/alt-text.md
|
|
9
13
|
'eslint-plugin-styled-components-a11y/alt-text': 'error',
|
|
@@ -98,6 +102,16 @@ export const styledComponentsRules = {
|
|
|
98
102
|
// Enforce label-control association
|
|
99
103
|
'eslint-plugin-styled-components-a11y/label-has-associated-control': 'error',
|
|
100
104
|
|
|
105
|
+
// Enforce label has htmlFor
|
|
106
|
+
// Decision: deprecated in jsx-a11y, superseded by label-has-associated-control
|
|
107
|
+
'eslint-plugin-styled-components-a11y/label-has-for': 'off',
|
|
108
|
+
|
|
109
|
+
// Enforce lang attribute has a valid value
|
|
110
|
+
// Decision: broken in the plugin — exported but missing from its internal
|
|
111
|
+
// ruleNameToTypeDict, so its create() crashes (path.join on undefined) and
|
|
112
|
+
// oxlint reports a JS-plugin runtime error on every linted file
|
|
113
|
+
'eslint-plugin-styled-components-a11y/lang': 'off',
|
|
114
|
+
|
|
101
115
|
// Enforce that media elements have captions
|
|
102
116
|
'eslint-plugin-styled-components-a11y/media-has-caption': 'error',
|
|
103
117
|
|
|
@@ -132,6 +146,10 @@ export const styledComponentsRules = {
|
|
|
132
146
|
// Enforce tabIndex value is not greater than zero
|
|
133
147
|
'eslint-plugin-styled-components-a11y/no-noninteractive-tabindex': 'error',
|
|
134
148
|
|
|
149
|
+
// Disallow onChange without onBlur
|
|
150
|
+
// Decision: deprecated in jsx-a11y
|
|
151
|
+
'eslint-plugin-styled-components-a11y/no-onchange': 'off',
|
|
152
|
+
|
|
135
153
|
// Enforce explicit role is not redundant
|
|
136
154
|
'eslint-plugin-styled-components-a11y/no-redundant-roles': 'error',
|
|
137
155
|
|
|
@@ -97,6 +97,11 @@ export const testingLibraryRules = {
|
|
|
97
97
|
// https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/prefer-find-by.md
|
|
98
98
|
'eslint-plugin-testing-library/prefer-find-by': 'error',
|
|
99
99
|
|
|
100
|
+
// Prefer implicit assertions from getBy* queries over explicit ones
|
|
101
|
+
// https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/prefer-implicit-assert.md
|
|
102
|
+
// Decision: conflicts with explicit jest-dom assertions
|
|
103
|
+
'eslint-plugin-testing-library/prefer-implicit-assert': 'off',
|
|
104
|
+
|
|
100
105
|
// Ensure appropriate get*/query* queries are used with their respective matchers
|
|
101
106
|
// https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/prefer-presence-queries.md
|
|
102
107
|
'eslint-plugin-testing-library/prefer-presence-queries': 'error',
|
package/rules/vitest.mjs
CHANGED
|
@@ -704,5 +704,15 @@ export const vitestRules = {
|
|
|
704
704
|
// https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/valid-title.md
|
|
705
705
|
// Decision: handled by native vitest/valid-title
|
|
706
706
|
'vitest-js/valid-title': 'off',
|
|
707
|
+
|
|
708
|
+
// Prefer mockReturnValue() over mockImplementation() returning a value
|
|
709
|
+
// https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-mock-return-shorthand.md
|
|
710
|
+
// Decision: handled by native vitest/prefer-mock-return-shorthand
|
|
711
|
+
'vitest-js/prefer-mock-return-shorthand': 'off',
|
|
712
|
+
|
|
713
|
+
// Report todo tests
|
|
714
|
+
// https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/warn-todo.md
|
|
715
|
+
// Decision: handled by native vitest/warn-todo
|
|
716
|
+
'vitest-js/warn-todo': 'off',
|
|
707
717
|
},
|
|
708
718
|
};
|