@wkovacs64/eslint-config 7.0.2 → 7.2.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.
Files changed (3) hide show
  1. package/README.md +7 -11
  2. package/index.js +30 -23
  3. package/package.json +3 -3
package/README.md CHANGED
@@ -11,14 +11,13 @@ This is my personal [ESLint][eslint] configuration.
11
11
  npm install --save-dev @wkovacs64/eslint-config
12
12
  ```
13
13
 
14
- > Be sure to install the appropriately versioned `eslint` peer dependency as
15
- > well.
14
+ > Be sure to install the appropriately versioned `eslint` peer dependency as well.
16
15
 
17
16
  ### Usage
18
17
 
19
- Follow the ESLint documentation on [shared configurations][eslint-sharing]. See
20
- the documentation on [ignoring files][eslint-ignores] if you need to ignore
21
- anything the config doesn't already ignore by default.
18
+ Follow the ESLint documentation on [shared configurations][eslint-sharing]. See the documentation on
19
+ [ignoring files][eslint-ignores] if you need to ignore anything the config doesn't already ignore by
20
+ default.
22
21
 
23
22
  ### Examples
24
23
 
@@ -48,17 +47,14 @@ export default config;
48
47
  }
49
48
  ```
50
49
 
51
- [npm-image]:
52
- https://img.shields.io/npm/v/@wkovacs64/eslint-config.svg?style=flat-square
50
+ [npm-image]: https://img.shields.io/npm/v/@wkovacs64/eslint-config.svg?style=flat-square
53
51
  [npm-url]: https://www.npmjs.com/package/@wkovacs64/eslint-config
54
52
  [ci-image]:
55
53
  https://img.shields.io/github/actions/workflow/status/wKovacs64/eslint-config/ci.yml?logo=github&style=flat-square
56
54
  [ci-url]: https://github.com/wKovacs64/eslint-config/actions?query=workflow%3Aci
57
- [changesets-image]:
58
- https://img.shields.io/badge/maintained%20with-changesets-blue?style=flat-square
55
+ [changesets-image]: https://img.shields.io/badge/maintained%20with-changesets-blue?style=flat-square
59
56
  [changesets-url]: https://github.com/changesets/changesets
60
57
  [eslint]: https://eslint.org/
61
58
  [eslint-sharing]:
62
59
  https://eslint.org/docs/latest/use/configure/configuration-files#using-a-shareable-configuration-package
63
- [eslint-ignores]:
64
- https://eslint.org/docs/latest/use/configure/migration-guide#ignoring-files
60
+ [eslint-ignores]: https://eslint.org/docs/latest/use/configure/migration-guide#ignoring-files
package/index.js CHANGED
@@ -5,6 +5,8 @@
5
5
  import globals from 'globals';
6
6
  import eslint from '@eslint/js';
7
7
  import tseslint from 'typescript-eslint';
8
+ import reactPlugin from 'eslint-plugin-react';
9
+ import jsxA11yPlugin from 'eslint-plugin-jsx-a11y';
8
10
  import playwright from 'eslint-plugin-playwright';
9
11
 
10
12
  const ERROR = 'error';
@@ -26,7 +28,7 @@ const hasPlaywright = await has('playwright');
26
28
 
27
29
  const vitestFiles = ['**/__tests__/**/*', '**/*.test.*'];
28
30
  const testFiles = ['**/tests/**', '**/#tests/**', ...vitestFiles];
29
- const playwrightFiles = ['**/playwright/tests/**'];
31
+ const playwrightFiles = ['**/playwright/**/*.(spec|test).*'];
30
32
 
31
33
  export const config = [
32
34
  {
@@ -66,14 +68,7 @@ export const config = [
66
68
  { pattern: '#*/**', group: 'internal' },
67
69
  { pattern: '~/**', group: 'internal' },
68
70
  ],
69
- groups: [
70
- 'builtin',
71
- 'external',
72
- 'internal',
73
- 'parent',
74
- 'sibling',
75
- 'index',
76
- ],
71
+ groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'],
77
72
  },
78
73
  ],
79
74
  },
@@ -82,10 +77,10 @@ export const config = [
82
77
  // JSX/TSX files
83
78
  hasReact
84
79
  ? {
85
- files: ['**/*.tsx', '**/*.jsx'].filter(Boolean),
80
+ files: ['**/*.tsx', '**/*.jsx'],
86
81
  plugins: {
87
- react: (await import('eslint-plugin-react')).default,
88
- 'jsx-a11y': (await import('eslint-plugin-jsx-a11y')).default,
82
+ react: reactPlugin,
83
+ 'jsx-a11y': jsxA11yPlugin,
89
84
  },
90
85
  languageOptions: {
91
86
  parserOptions: {
@@ -95,6 +90,8 @@ export const config = [
95
90
  },
96
91
  },
97
92
  rules: {
93
+ ...reactPlugin.configs.recommended.rules,
94
+ ...jsxA11yPlugin.configs.recommended.rules,
98
95
  'react/function-component-definition': [
99
96
  'error',
100
97
  {
@@ -102,7 +99,8 @@ export const config = [
102
99
  unnamedComponents: 'arrow-function',
103
100
  },
104
101
  ],
105
- 'react/jsx-key': WARN,
102
+ 'react/react-in-jsx-scope': OFF,
103
+ 'react/prop-types': OFF,
106
104
  'jsx-a11y/label-has-associated-control': [
107
105
  ERROR,
108
106
  {
@@ -118,8 +116,7 @@ export const config = [
118
116
  }
119
117
  : null,
120
118
 
121
- // react-hook rules are applicable in ts/js/tsx/jsx, but only with React as a
122
- // dep
119
+ // react-hook rules are applicable in ts/js/tsx/jsx, but only with React as a dep
123
120
  hasReact
124
121
  ? {
125
122
  files: ['**/*.ts?(x)', '**/*.js?(x)'],
@@ -133,14 +130,18 @@ export const config = [
133
130
  }
134
131
  : null,
135
132
 
136
- // JS and JSX files
133
+ // JS, JSX, and CJS files
137
134
  {
138
- files: ['**/*.js?(x)'],
135
+ files: ['**/*.{js,jsx,cjs}'],
136
+ // most of these rules are useful for JS but not TS because TS handles these better
139
137
  rules: {
140
- // most of these rules are useful for JS but not TS because TS handles these better
141
- // if it weren't for https://github.com/import-js/eslint-plugin-import/issues/2132
142
- // we could enable this :(
143
- // 'import/no-unresolved': ERROR,
138
+ // Blocked by https://github.com/import-js/eslint-plugin-import/issues/2132
139
+ // 'import/no-unresolved': [
140
+ // ERROR,
141
+ // {
142
+ // ignore: ['^#icons/icon', '^~/icons/icon', './icons-sprite.svg'],
143
+ // },
144
+ // ],
144
145
  'no-unused-vars': [
145
146
  WARN,
146
147
  {
@@ -252,6 +253,13 @@ export const config = [
252
253
  '@typescript-eslint/require-await': OFF,
253
254
  '@typescript-eslint/unified-signatures': 'warn',
254
255
  },
256
+ settings: {
257
+ 'import/resolver': {
258
+ typescript: {
259
+ alwaysTryTypes: true,
260
+ },
261
+ },
262
+ },
255
263
  }
256
264
  : null,
257
265
 
@@ -281,8 +289,7 @@ export const config = [
281
289
  files: testFiles,
282
290
  ignores: [...playwrightFiles],
283
291
  plugins: {
284
- 'testing-library': (await import('eslint-plugin-testing-library'))
285
- .default,
292
+ 'testing-library': (await import('eslint-plugin-testing-library')).default,
286
293
  },
287
294
  rules: {
288
295
  // 'testing-library/await-async-events': ERROR,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wkovacs64/eslint-config",
3
- "version": "7.0.2",
3
+ "version": "7.2.0",
4
4
  "description": "@wKovacs64 ESLint config",
5
5
  "keywords": [
6
6
  "eslint",
@@ -65,10 +65,10 @@
65
65
  "@changesets/changelog-github": "0.5.0",
66
66
  "@changesets/cli": "2.27.5",
67
67
  "@types/eslint__js": "8.42.3",
68
- "@types/node": "20.13.0",
68
+ "@types/node": "20.14.1",
69
69
  "@types/react": "18.3.3",
70
70
  "@types/react-dom": "18.3.0",
71
- "@wkovacs64/prettier-config": "4.0.0",
71
+ "@wkovacs64/prettier-config": "4.1.0",
72
72
  "eslint": "8.57.0",
73
73
  "prettier": "3.3.0",
74
74
  "typescript": "5.4.5"