@nitra/eslint-config 3.6.1 → 3.6.3
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/index.js +49 -12
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -2,8 +2,8 @@ import e18ePlugin from '@e18e/eslint-plugin'
|
|
|
2
2
|
import { fixupPluginRules } from '@eslint/compat'
|
|
3
3
|
import js from '@eslint/js'
|
|
4
4
|
import graphqlEslintPlugin from '@graphql-eslint/eslint-plugin'
|
|
5
|
-
import { graphqlCodefileProcessor, graphqlParserWithConfigAnchor } from './graphql-eslint-anchor.js'
|
|
6
5
|
import microsoftSdl from '@microsoft/eslint-plugin-sdl'
|
|
6
|
+
import { mergeProcessors } from 'eslint-merge-processors'
|
|
7
7
|
import { flatConfigs as importXFlatConfigs } from 'eslint-plugin-import-x'
|
|
8
8
|
import jsdocPlugin from 'eslint-plugin-jsdoc'
|
|
9
9
|
import { configs as jsoncConfigs } from 'eslint-plugin-jsonc'
|
|
@@ -14,15 +14,34 @@ import securityPlugin from 'eslint-plugin-security'
|
|
|
14
14
|
import sonarjsPlugin from 'eslint-plugin-sonarjs'
|
|
15
15
|
import unicornPlugin from 'eslint-plugin-unicorn'
|
|
16
16
|
import vuePlugin from 'eslint-plugin-vue'
|
|
17
|
-
import vueEslintParser from 'vue-eslint-parser'
|
|
18
17
|
import { configs as ymlConfigs } from 'eslint-plugin-yml'
|
|
19
|
-
import { mergeProcessors } from 'eslint-merge-processors'
|
|
20
18
|
import processorVueBlocks from 'eslint-processor-vue-blocks'
|
|
21
19
|
import globals from 'globals'
|
|
20
|
+
import vueEslintParser from 'vue-eslint-parser'
|
|
21
|
+
import { graphqlCodefileProcessor, graphqlParserWithConfigAnchor } from './graphql-eslint-anchor.js'
|
|
22
22
|
|
|
23
23
|
/** Glob-патерни файлів для eslint-plugin-unicorn (JS-подібні джерела; без сирих YAML/Markdown). */
|
|
24
24
|
const UNICORN_FILES = ['**/*.{js,mjs,cjs,vue}']
|
|
25
25
|
|
|
26
|
+
/** Узгоджені опції `no-unused-vars` для `.js` і Vue SFC (`eslint-plugin-oxlint` не вимикає це правило для `.vue`, тож oxlint CLI його там не покриває). */
|
|
27
|
+
const NO_UNUSED_VARS_RULE = ['error', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }]
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Частина ядра `eslint:recommended`, яку не вимикає `eslint-plugin-oxlint` flat/recommended (oxlint не заявляє заміну
|
|
31
|
+
* цих правил у ESLint) і яка не ввімкнена в oxlint за кореневим `.oxlintrc.json` — для `<script>` у `.vue` їх
|
|
32
|
+
* лишаємо на ESLint після oxlint. Решту з recommended для SFC покриває oxlint CLI з вашого `.oxlintrc.json`.
|
|
33
|
+
*/
|
|
34
|
+
const VUE_SCRIPT_ESLINT_RECOMMENDED_GAP_RULES = {
|
|
35
|
+
'getter-return': 'error',
|
|
36
|
+
'no-dupe-args': 'error',
|
|
37
|
+
'no-octal': 'error',
|
|
38
|
+
'no-undef': 'error',
|
|
39
|
+
'no-unreachable': 'error',
|
|
40
|
+
'no-useless-assignment': 'error',
|
|
41
|
+
'preserve-caught-error': 'error',
|
|
42
|
+
'no-unused-vars': NO_UNUSED_VARS_RULE
|
|
43
|
+
}
|
|
44
|
+
|
|
26
45
|
/** Пресет recommended `@e18e/eslint-plugin` (flat). */
|
|
27
46
|
// @ts-expect-error типізація плагіна не гарантує `configs.recommended`; у runtime поле є.
|
|
28
47
|
const e18eRecommendedFlat = /** @type {import('eslint').Linter.FlatConfig} */ (e18ePlugin.configs.recommended)
|
|
@@ -122,7 +141,7 @@ const all = [
|
|
|
122
141
|
},
|
|
123
142
|
rules: {
|
|
124
143
|
...js.configs.recommended.rules,
|
|
125
|
-
'no-unused-vars':
|
|
144
|
+
'no-unused-vars': NO_UNUSED_VARS_RULE
|
|
126
145
|
}
|
|
127
146
|
},
|
|
128
147
|
// Unicorn правила (лише JS-подібні файли — узгоджено з блоком рекомендованих правил ESLint)
|
|
@@ -178,13 +197,7 @@ const all = [
|
|
|
178
197
|
* для них немає `defineTemplateBodyVisitor`, тож `sonarjs/unused-import` хибно скаржиться на імпорти лише для шаблону.
|
|
179
198
|
*/
|
|
180
199
|
{
|
|
181
|
-
files: [
|
|
182
|
-
'**/*.vue/**/*.js',
|
|
183
|
-
'**/*.vue/**/*.mjs',
|
|
184
|
-
'**/*.vue/**/*.cjs',
|
|
185
|
-
'**/*.vue/**/*.ts',
|
|
186
|
-
'**/*.vue/**/*.tsx'
|
|
187
|
-
],
|
|
200
|
+
files: ['**/*.vue/**/*.js', '**/*.vue/**/*.mjs', '**/*.vue/**/*.cjs', '**/*.vue/**/*.ts', '**/*.vue/**/*.tsx'],
|
|
188
201
|
rules: {
|
|
189
202
|
'sonarjs/unused-import': 'off'
|
|
190
203
|
}
|
|
@@ -243,7 +256,10 @@ const vueAllVite = [
|
|
|
243
256
|
ref: 'readonly',
|
|
244
257
|
useQuery: 'readonly',
|
|
245
258
|
watch: 'readonly',
|
|
246
|
-
computed: 'readonly'
|
|
259
|
+
computed: 'readonly',
|
|
260
|
+
|
|
261
|
+
// Макроси `<script setup>` (джерело списку — `globals` / `vue` у vue-eslint-parser).
|
|
262
|
+
...globals.vue
|
|
247
263
|
}
|
|
248
264
|
}
|
|
249
265
|
}
|
|
@@ -330,6 +346,26 @@ function pushGraphqlVueMergedProcessorLast(result, dirs) {
|
|
|
330
346
|
})
|
|
331
347
|
}
|
|
332
348
|
|
|
349
|
+
/**
|
|
350
|
+
* Після oxlint додає для `.vue` правила з `eslint:recommended`, які не делегує `eslint-plugin-oxlint` і які
|
|
351
|
+
* не ввімкнені в oxlint за `.oxlintrc.json` (див. `VUE_SCRIPT_ESLINT_RECOMMENDED_GAP_RULES`).
|
|
352
|
+
* @param {import('eslint').Linter.FlatConfig[]} result масив конфігів
|
|
353
|
+
* @param {string[]} dirs кореневі директорії Vue-пакетів (ті самі аргументи dirs, що й у pushVueConfigs)
|
|
354
|
+
*/
|
|
355
|
+
function pushVueScriptEslintRecommendedGapsAfterOxlint(result, dirs) {
|
|
356
|
+
if (!dirs?.length) {
|
|
357
|
+
return
|
|
358
|
+
}
|
|
359
|
+
result.push({
|
|
360
|
+
name: 'nitra/vue-script-eslint-recommended-oxlint-gaps',
|
|
361
|
+
files: dirs.map(name => `${name}/**/*.vue`),
|
|
362
|
+
// Правила з `eslint:recommended` + `no-unused-vars` з опціями; тип `RuleConfig` у ESLint 10 вимагає кортеж, тож подвійне приведення.
|
|
363
|
+
rules: /** @type {import('eslint').Linter.RulesRecord} */ (
|
|
364
|
+
/** @type {unknown} */ (VUE_SCRIPT_ESLINT_RECOMMENDED_GAP_RULES)
|
|
365
|
+
)
|
|
366
|
+
})
|
|
367
|
+
}
|
|
368
|
+
|
|
333
369
|
/**
|
|
334
370
|
* Додає до result конфіги для Vue-проєктів (vite, .vue, .js).
|
|
335
371
|
* @param {import('eslint').Linter.FlatConfig[]} result масив конфігів
|
|
@@ -408,6 +444,7 @@ export function getConfig(params = { node: [], vue: [], vue2: [] }) {
|
|
|
408
444
|
|
|
409
445
|
if (graphqlVueDirsLast.length) {
|
|
410
446
|
pushGraphqlVueMergedProcessorLast(result, graphqlVueDirsLast)
|
|
447
|
+
pushVueScriptEslintRecommendedGapsAfterOxlint(result, graphqlVueDirsLast)
|
|
411
448
|
}
|
|
412
449
|
|
|
413
450
|
return result
|