build(ci): refine autofix GH action
[poolifier.git] / eslint.config.js
1 import cspellConfigs from '@cspell/eslint-plugin/configs'
2 import js from '@eslint/js'
3 import { defineFlatConfig } from 'eslint-define-config'
4 import jsdoc from 'eslint-plugin-jsdoc'
5 import nodePlugin from 'eslint-plugin-n'
6 import simpleImportSort from 'eslint-plugin-simple-import-sort'
7 import globals from 'globals'
8 import neostandard from 'neostandard'
9 // eslint-disable-next-line n/no-extraneous-import
10 import tseslint from 'typescript-eslint'
11
12 export default defineFlatConfig([
13 {
14 ignores: ['docs/**', '**/dist/**', 'lib/**', 'outputs/**'],
15 },
16 cspellConfigs.recommended,
17 js.configs.recommended,
18 ...nodePlugin.configs['flat/mixed-esm-and-cjs'],
19 jsdoc.configs['flat/recommended-typescript'],
20 {
21 rules: {
22 'jsdoc/check-tag-names': [
23 'warn',
24 {
25 typed: true,
26 definedTags: ['defaultValue', 'experimental', 'typeParam'],
27 },
28 ],
29 },
30 },
31 ...tseslint.config(
32 ...tseslint.configs.strictTypeChecked,
33 ...tseslint.configs.stylisticTypeChecked
34 ),
35 ...neostandard({
36 ts: true,
37 globals: {
38 ...globals.node,
39 ...globals.mocha,
40 },
41 }),
42 {
43 languageOptions: {
44 parserOptions: {
45 project: true,
46 tsconfigRootDir: import.meta.dirname,
47 },
48 },
49 },
50 {
51 plugins: {
52 'simple-import-sort': simpleImportSort,
53 },
54 rules: {
55 '@cspell/spellchecker': [
56 'warn',
57 {
58 autoFix: true,
59 cspell: {
60 words: [
61 'Alessandro',
62 'Ardizio',
63 'Benoit',
64 'IWRR',
65 'Quadflieg',
66 'neostandard',
67 'poolifier',
68 'tseslint',
69 ],
70 },
71 },
72 ],
73 'simple-import-sort/imports': 'error',
74 'simple-import-sort/exports': 'error',
75 },
76 },
77 {
78 files: [
79 'src/pools/selection-strategies/fair-share-worker-choice-strategy.ts',
80 ],
81 rules: {
82 '@stylistic/operator-linebreak': 'off',
83 },
84 },
85 {
86 files: ['**/*.js', '**/*.mjs', '**/*.cjs'],
87 ...tseslint.configs.disableTypeChecked,
88 },
89 // examples specific configuration
90 {
91 files: ['examples/**/*.ts'],
92 rules: {
93 '@typescript-eslint/no-unsafe-argument': 'off',
94 '@typescript-eslint/no-unsafe-call': 'off',
95 '@typescript-eslint/no-unsafe-return': 'off',
96 '@typescript-eslint/no-unsafe-assignment': 'off',
97 '@typescript-eslint/no-unsafe-member-access': 'off',
98 '@typescript-eslint/no-unnecessary-type-assertion': 'off',
99 '@typescript-eslint/no-redundant-type-constituents': 'off',
100 },
101 },
102 {
103 files: ['examples/**/*.js', 'examples/**/*.cjs'],
104 rules: {
105 'n/no-missing-import': [
106 'error',
107 {
108 allowModules: ['ws'],
109 },
110 ],
111 '@typescript-eslint/no-require-imports': 'off',
112 },
113 },
114 // benchmarks specific configuration
115 {
116 files: ['benchmarks/**/*.cjs'],
117 rules: {
118 '@typescript-eslint/no-require-imports': 'off',
119 },
120 },
121 // tests specific configuration
122 {
123 files: ['tests/**/*.js', 'tests/**/*.mjs', 'tests/**/*.cjs'],
124 rules: {
125 '@typescript-eslint/no-require-imports': 'off',
126 '@typescript-eslint/no-empty-function': 'off',
127 },
128 },
129 ])