Skip to content

Commit e54e7d2

Browse files
committed
Add additional eslint plugins and rules.
1 parent b1a6203 commit e54e7d2

34 files changed

+354
-83
lines changed

config/webpack-css.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
import path from 'path'
2-
import type { Configuration, EntryObject } from 'webpack'
3-
import type { Config as PostCssConfig } from 'postcss-load-config'
42
import libsass from 'sass'
53
import cssnano from 'cssnano'
64
import autoprefixer from 'autoprefixer'
@@ -9,6 +7,8 @@ import MiniCssExtractPlugin from 'mini-css-extract-plugin'
97
import RemoveEmptyScriptsPlugin from 'webpack-remove-empty-scripts'
108
import WebpackRTLPlugin from 'webpack-rtl-plugin'
119
import { glob } from 'glob'
10+
import type { Config as PostCssConfig } from 'postcss-load-config'
11+
import type { Configuration, EntryObject } from 'webpack'
1212

1313
const postcssOptions: PostCssConfig = {
1414
plugins: [

config/webpack-js.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import type { Configuration } from 'webpack'
2-
import { DefinePlugin } from 'webpack'
31
import { join, resolve } from 'path'
2+
import { DefinePlugin } from 'webpack'
43
import ESLintPlugin from 'eslint-webpack-plugin'
54
import RemoveEmptyScriptsPlugin from 'webpack-remove-empty-scripts'
65
import { toCamelCase } from '../src/js/utils/text'
76
import { dependencies } from '../package.json'
7+
import type { Configuration } from 'webpack'
88

99
const SOURCE_DIR = './src/js'
1010
const DEST_DIR = './src/dist'

eslint.config.mjs

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,32 @@
11
// @ts-check
22

3-
import eslint from '@eslint/js'
43
import globals from 'globals'
4+
import eslintJs from '@eslint/js'
5+
import eslintTs from 'typescript-eslint'
56
import stylistic from '@stylistic/eslint-plugin'
6-
import typescript from 'typescript-eslint'
77
import react from 'eslint-plugin-react'
8+
import { fixupPluginRules } from '@eslint/compat'
9+
import { FlatCompat } from '@eslint/eslintrc'
810

9-
export default typescript.config(
10-
eslint.configs.recommended,
11-
...typescript.configs.strictTypeChecked,
12-
...typescript.configs.stylisticTypeChecked,
11+
const compat = new FlatCompat({
12+
baseDirectory: import.meta.dirname,
13+
recommendedConfig: eslintJs.configs.recommended
14+
})
15+
16+
const legacyPlugin = (name, alias = name) =>
17+
fixupPluginRules(compat.plugins(name)[0]?.plugins?.[alias])
18+
19+
export default eslintTs.config(
20+
eslintJs.configs.recommended,
21+
...eslintTs.configs.strictTypeChecked,
22+
...eslintTs.configs.stylisticTypeChecked,
23+
...compat.extends('plugin:import/typescript'),
24+
...compat.extends('plugin:react-hooks/recommended'),
1325
react.configs.flat.recommended,
1426
{
1527
ignores: ['bundle/*', 'src/dist/*', 'src/vendor/*', 'svn/*', 'eslint.config.mjs']
1628
},
1729
{
18-
plugins: {
19-
'@stylistic': stylistic,
20-
'react': react
21-
},
2230
languageOptions: {
2331
ecmaVersion: 2018,
2432
globals: { ...globals.browser },
@@ -29,8 +37,21 @@ export default typescript.config(
2937
projectService: { allowDefaultProject: ['eslint.config.mjs'] }
3038
}
3139
},
40+
plugins: {
41+
'@stylistic': stylistic,
42+
'react': react,
43+
'import': legacyPlugin('eslint-plugin-import', 'import')
44+
},
3245
settings: {
33-
react: { version: 'detect' }
46+
'react': {
47+
version: 'detect'
48+
},
49+
'import/resolver': {
50+
typescript: {
51+
alwaysTryTypes: true,
52+
project: './tsconfig.json',
53+
}
54+
}
3455
},
3556
rules: {
3657
'@stylistic/array-bracket-newline': ['error', 'consistent'],
@@ -82,6 +103,17 @@ export default typescript.config(
82103
'dot-notation': 'error',
83104
'eqeqeq': ['error', 'always'],
84105
'func-style': ['error', 'expression'],
106+
'import/export': 'error',
107+
'import/named': 'error',
108+
'import/no-duplicates': 'warn',
109+
'import/no-namespace': 'error',
110+
'import/no-unresolved': 'error',
111+
'import/no-useless-path-segments': 'warn',
112+
'import/order': ['error', {
113+
'groups': ['builtin', 'external', 'internal', 'parent', 'sibling', 'index', 'object', 'type'],
114+
'newlines-between': 'never',
115+
'alphabetize': { orderImportKind: 'asc' }
116+
}],
85117
'max-lines-per-function': ['warn', { skipBlankLines: true, skipComments: true }],
86118
'no-invalid-this': 'error',
87119
'no-magic-numbers': ['error', { ignore: [-1, 0, 1] }],
@@ -90,6 +122,7 @@ export default typescript.config(
90122
'one-var': ['error', 'never'],
91123
'prefer-named-capture-group': 'error',
92124
'prefer-template': 'error',
125+
'sort-imports': ['error', { ignoreDeclarationSort: true }],
93126
'yoda': ['error', 'always']
94127
}
95128
},

0 commit comments

Comments
 (0)