@unshared/eslint-config 0.0.20 → 0.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.
- package/dist/index.cjs +253 -566
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.js +255 -568
- package/dist/index.js.map +1 -1
- package/package.json +18 -18
package/dist/index.cjs
CHANGED
@@ -1,180 +1,87 @@
|
|
1
1
|
"use strict";
|
2
|
-
var pluginAntfu = require("eslint-plugin-antfu"), eslintCommentsPlugin = require("eslint-plugin-eslint-comments"), pluginJsdoc = require("eslint-plugin-jsdoc"),
|
3
|
-
function antfu(
|
2
|
+
var pluginAntfu = require("eslint-plugin-antfu"), eslintCommentsPlugin = require("eslint-plugin-eslint-comments"), pluginJsdoc = require("eslint-plugin-jsdoc"), pluginJsonc = require("eslint-plugin-jsonc"), nodePlugin = require("eslint-plugin-n"), pluginSonarjs = require("eslint-plugin-sonarjs"), javascript = require("@eslint/js"), stylistic = require("@stylistic/eslint-plugin"), toArray = require("@unshared/collection/toArray"), perfectionist = require("eslint-plugin-perfectionist"), tslint = require("typescript-eslint"), unicornPlugin = require("eslint-plugin-unicorn"), vitestPlugin = require("@vitest/eslint-plugin"), eslintMergeProcessors = require("eslint-merge-processors"), vuePlugin = require("eslint-plugin-vue"), vueProcessorBlocks = require("eslint-processor-vue-blocks"), vueParser = require("vue-eslint-parser"), pluginYml = require("eslint-plugin-yml");
|
3
|
+
function antfu() {
|
4
4
|
return [
|
5
5
|
{
|
6
6
|
plugins: {
|
7
7
|
antfu: pluginAntfu
|
8
8
|
},
|
9
9
|
rules: {
|
10
|
+
// --- Enforce consistent line breaks for chaining member access.
|
11
|
+
"antfu/consistent-chaining": "error",
|
12
|
+
// --- Enforce consistent line breaks inside braces of object/array/named imports/exports and function parameters.
|
10
13
|
"antfu/consistent-list-newline": "error",
|
11
|
-
|
12
|
-
* Auto-fix import duplication. The TypeScript compiler already detects and removes
|
13
|
-
* duplicate imports, but this rule can be used to fix the issue automatically in the editor.
|
14
|
-
*
|
15
|
-
* @see https://github.com/antfu/eslint-plugin-antfu/blob/main/src/rules/import-dedupe.md
|
16
|
-
*/
|
14
|
+
// --- Deduplicate imports.
|
17
15
|
"antfu/import-dedupe": "error",
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
* an outer scope.
|
25
|
-
*
|
26
|
-
* @see https://github.com/antfu/eslint-plugin-antfu/blob/main/src/rules/top-level-function.md
|
27
|
-
*/
|
28
|
-
"antfu/top-level-function": "error",
|
29
|
-
/**
|
30
|
-
* Enforce consistent line breaks inside braces of object/array/named imports/exports and
|
31
|
-
* function parameters. Reduces the cognitive load of reasoning about code style.
|
32
|
-
*
|
33
|
-
* @see https://github.com/antfu/eslint-plugin-antfu/blob/main/src/rules/consistent-list-newline.md
|
34
|
-
*/
|
35
|
-
"object-curly-newline": "off",
|
36
|
-
/** User-defined rules */
|
37
|
-
...options.rules
|
16
|
+
// --- Avoid importing from 'dist' directories.
|
17
|
+
"antfu/no-import-dist": "error",
|
18
|
+
// --- Enforce `export default` insteand of `export = {}`.
|
19
|
+
"antfu/no-ts-export-equal": "error",
|
20
|
+
// --- Enforce `function()` instead of `() => {}` for top-level functions.
|
21
|
+
"antfu/top-level-function": "error"
|
38
22
|
}
|
39
23
|
}
|
40
24
|
];
|
41
25
|
}
|
42
|
-
function eslintComments(
|
26
|
+
function eslintComments() {
|
43
27
|
return [
|
44
28
|
{
|
45
29
|
plugins: {
|
46
30
|
"eslint-comments": eslintCommentsPlugin
|
47
31
|
},
|
48
32
|
rules: {
|
49
|
-
|
50
|
-
* Allow multiple rules directive in a single comment. This
|
51
|
-
* reduces the number of comments in the code.
|
52
|
-
*
|
53
|
-
* @see https://mysticatea.github.io/eslint-plugin-eslint-comments/rules/disable-enable-pair
|
54
|
-
*/
|
33
|
+
// --- Allow disable without having to enable again.
|
55
34
|
"eslint-comments/disable-enable-pair": "off",
|
56
|
-
|
57
|
-
* `eslint-enable` directive-comments can enable rules which are disabled by different
|
58
|
-
* eslint-disable directive-comments. It can enable a rule unintentionally. This rule
|
59
|
-
* will report such cases.
|
60
|
-
*
|
61
|
-
* @see https://mysticatea.github.io/eslint-plugin-eslint-comments/rules/no-aggregating-enable
|
62
|
-
*/
|
35
|
+
// --- Disallow eslint-disable comments without rule names. This ensures that we cannot
|
63
36
|
"eslint-comments/no-aggregating-enable": "error",
|
64
|
-
|
65
|
-
* Disallow duplicate eslint-disable comments. This rule will report when there are
|
66
|
-
* multiple eslint-disable comments for the same rule, either in the same line or enabled
|
67
|
-
* by different eslint-disable comments.
|
68
|
-
*
|
69
|
-
* @see https://mysticatea.github.io/eslint-plugin-eslint-comments/rules/no-duplicate-disable
|
70
|
-
*/
|
71
|
-
"eslint-comments/no-duplicate-disable": "error",
|
72
|
-
/**
|
73
|
-
* Disallow eslint-disable comments without rule names. This ensures that we cannot
|
74
|
-
* disable all rules in a file using eslint-disable comment.
|
75
|
-
*
|
76
|
-
* @see https://mysticatea.github.io/eslint-plugin-eslint-comments/rules/no-unlimited-disable
|
77
|
-
*/
|
37
|
+
// --- Disable must specify rule names.
|
78
38
|
"eslint-comments/no-unlimited-disable": "error",
|
79
|
-
|
80
|
-
|
81
|
-
* to prevent unnecessary comments in the code.
|
82
|
-
*
|
83
|
-
* @see https://mysticatea.github.io/eslint-plugin-eslint-comments/rules/no-unused-disable
|
84
|
-
*/
|
39
|
+
// --- Prevent superfluous eslint comments.
|
40
|
+
"eslint-comments/no-duplicate-disable": "error",
|
85
41
|
"eslint-comments/no-unused-disable": "error",
|
86
|
-
|
87
|
-
...options.rules
|
42
|
+
"eslint-comments/no-unused-enable": "error"
|
88
43
|
}
|
89
44
|
}
|
90
45
|
];
|
91
46
|
}
|
92
|
-
function jsdoc(
|
47
|
+
function jsdoc() {
|
93
48
|
return [
|
94
|
-
pluginJsdoc.configs["flat/recommended-typescript-
|
49
|
+
pluginJsdoc.configs["flat/recommended-typescript-error"],
|
95
50
|
{
|
96
51
|
files: [
|
97
52
|
"**/*.{ts,mts,cts,tsx,d.ts}",
|
98
53
|
"**/*.{js,mjs,cjs,jsx}",
|
99
54
|
"**/*.vue"
|
100
55
|
],
|
56
|
+
plugins: {
|
57
|
+
jsdoc: pluginJsdoc
|
58
|
+
},
|
101
59
|
rules: {
|
102
|
-
|
103
|
-
* Enforce a consistent padding of the block description.
|
104
|
-
*
|
105
|
-
* @see https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/check-alignment.md#readme
|
106
|
-
*/
|
107
|
-
"jsdoc/check-alignment": "error",
|
108
|
-
/**
|
109
|
-
* Normalize the indentation in the JSdoc comment to improve readability.
|
110
|
-
*
|
111
|
-
* @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-indentation.md#readme
|
112
|
-
*/
|
113
|
-
"jsdoc/check-indentation": "error",
|
114
|
-
/**
|
115
|
-
* Enforce a strict set of tags for the JSDoc comment. This rule also includes
|
116
|
-
* some custom tags that are used in our projects.
|
117
|
-
*
|
118
|
-
* @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.README/rules/check-tag-names.md
|
119
|
-
*/
|
60
|
+
// --- Redudant with TypeScript.
|
120
61
|
"jsdoc/require-jsdoc": "off",
|
121
62
|
"jsdoc/require-param-type": "off",
|
122
|
-
"jsdoc/
|
123
|
-
|
124
|
-
"category"
|
125
|
-
]
|
126
|
-
}],
|
127
|
-
/**
|
128
|
-
* Checks for multi-line-style comments which fail to meet the criteria of a jsdoc block,
|
129
|
-
* namely that it should begin with two and only two asterisks.
|
130
|
-
*
|
131
|
-
* @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-bad-blocks.md
|
132
|
-
*/
|
63
|
+
"jsdoc/require-returns-type": "off",
|
64
|
+
// --- Reports malformed JSDoc comments.
|
133
65
|
"jsdoc/no-bad-blocks": "error",
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
* @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-hyphen-before-param-description
|
140
|
-
*/
|
66
|
+
"jsdoc/check-alignment": "error",
|
67
|
+
"jsdoc/check-indentation": "error",
|
68
|
+
// --- Reports invalid block tag names.
|
69
|
+
"jsdoc/check-tag-names": ["error", { definedTags: ["category"] }],
|
70
|
+
// --- Do not use hyphens before param descriptions.
|
141
71
|
"jsdoc/require-hyphen-before-param-description": ["error", "never"],
|
142
|
-
|
143
|
-
|
144
|
-
*
|
145
|
-
* @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-param-type.md
|
146
|
-
*/
|
147
|
-
"jsdoc/require-returns-type": "off",
|
148
|
-
/**
|
149
|
-
* Enforce a new-line between the JSDoc summary and tags. Aims to improve
|
150
|
-
* readability by separating the summary and tags.
|
151
|
-
*
|
152
|
-
* @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/tag-lines.md
|
153
|
-
*/
|
154
|
-
"jsdoc/tag-lines": ["error", "any", { startLines: 1 }],
|
155
|
-
/** User-defined rules */
|
156
|
-
...options.rules
|
72
|
+
// --- Newline after description.
|
73
|
+
"jsdoc/tag-lines": ["error", "any", { startLines: 1 }]
|
157
74
|
}
|
158
75
|
}
|
159
76
|
];
|
160
77
|
}
|
161
|
-
function
|
78
|
+
function json() {
|
162
79
|
return [
|
163
|
-
...
|
80
|
+
...pluginJsonc.configs["flat/recommended-with-json"],
|
164
81
|
{
|
165
|
-
files: [
|
166
|
-
"**/*.json",
|
167
|
-
"**/*.json5"
|
168
|
-
],
|
169
82
|
rules: {
|
170
|
-
|
171
|
-
|
172
|
-
*
|
173
|
-
* @see https://ota-meshi.github.io/eslint-plugin-jsonc/rules/auto.html
|
174
|
-
*/
|
175
|
-
"jsonc/auto": "error",
|
176
|
-
/** User-defined rules */
|
177
|
-
...options.rules
|
83
|
+
// --- Automatically apply jsonc rules similar to your configured ESLint core rules to JSON.
|
84
|
+
"jsonc/auto": "error"
|
178
85
|
}
|
179
86
|
}
|
180
87
|
];
|
@@ -381,106 +288,89 @@ function jsonTsconfig() {
|
|
381
288
|
}
|
382
289
|
];
|
383
290
|
}
|
384
|
-
function node(
|
291
|
+
function node() {
|
385
292
|
return [
|
293
|
+
nodePlugin.configs["flat/recommended"],
|
386
294
|
{
|
387
|
-
|
388
|
-
|
295
|
+
settings: {
|
296
|
+
node: {
|
297
|
+
version: ">=20.0.0"
|
298
|
+
}
|
389
299
|
},
|
390
300
|
rules: {
|
391
|
-
|
392
|
-
/**
|
393
|
-
* Disallow the use of extraneous imports. This rule helps prevent the
|
394
|
-
* use of third-party modules that are not listed in the project's
|
395
|
-
* dependencies.
|
396
|
-
*
|
397
|
-
* @see https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-extraneous-import.md
|
398
|
-
*/
|
399
|
-
"n/no-extraneous-import": "error",
|
400
|
-
/**
|
401
|
-
* Disable the no-missing-import as module resolution is already checked
|
402
|
-
* by other tools and IDEs extensively. This rule is redundant.
|
403
|
-
*
|
404
|
-
* @see https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-missing-import.md
|
405
|
-
*/
|
301
|
+
// --- Redundant with TypeScript module resolution.
|
406
302
|
"n/no-missing-import": "off",
|
407
303
|
"n/no-missing-require": "off",
|
408
304
|
"n/no-unpublished-import": "off",
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
* @see https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-sync.md
|
413
|
-
* @see https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-promises/fs.md
|
414
|
-
* @see https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-promises/dns.md
|
415
|
-
*/
|
416
|
-
"n/no-sync": "off",
|
417
|
-
"n/prefer-promises/fs": "error",
|
418
|
-
"n/prefer-promises/dns": "error",
|
419
|
-
/**
|
420
|
-
* Allow the use of features up to Node.js version 20. This will allow
|
421
|
-
* the use of newer ECMAScript features and Node.js APIs.
|
422
|
-
*
|
423
|
-
* @see https://github.com/eslint-community/eslint-plugin-n/tree/master/docs/rules
|
424
|
-
*/
|
305
|
+
// --- Enforce async functions over synchronous functions.
|
306
|
+
"n/no-sync": ["error", { allowAtRootLevel: !0 }],
|
307
|
+
// --- Enforce the use of ECMAScript features.
|
425
308
|
"n/no-unsupported-features/es-syntax": "error",
|
426
309
|
"n/no-unsupported-features/es-builtins": "error",
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
310
|
+
// --- Ignore experimental warnings.
|
311
|
+
"n/no-unsupported-features/node-builtins": "off",
|
312
|
+
// --- Prefer the use of global objects over built-in modules.
|
313
|
+
"n/prefer-global/buffer": "error",
|
314
|
+
"n/prefer-global/console": "error",
|
315
|
+
"n/prefer-global/process": "error",
|
316
|
+
"n/prefer-global/text-decoder": "error",
|
317
|
+
"n/prefer-global/text-encoder": "error",
|
318
|
+
"n/prefer-global/url": "error",
|
319
|
+
"n/prefer-global/url-search-params": "error",
|
320
|
+
// --- Prefer the use of the `node:` protocol for built-in modules.
|
435
321
|
"n/prefer-node-protocol": "error",
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
322
|
+
// --- Prefer the use of promises over callbacks.
|
323
|
+
"n/prefer-promises/fs": "error",
|
324
|
+
"n/prefer-promises/dns": "error"
|
325
|
+
}
|
326
|
+
},
|
327
|
+
{
|
328
|
+
files: [
|
329
|
+
"**/*.test.ts",
|
330
|
+
"**/*.spec.ts"
|
331
|
+
],
|
332
|
+
rules: {
|
333
|
+
// --- Disable the no-sync rule for tests.
|
334
|
+
"n/no-sync": "off"
|
443
335
|
}
|
444
336
|
}
|
445
337
|
];
|
446
338
|
}
|
447
|
-
function sonarjs(
|
339
|
+
function sonarjs() {
|
448
340
|
return [
|
449
341
|
pluginSonarjs.configs.recommended,
|
450
342
|
{
|
451
343
|
rules: {
|
452
|
-
|
453
|
-
* Cognitive Complexity is a measure of how hard the control flow of a function
|
454
|
-
* is to understand. Functions with high Cognitive Complexity will be difficult
|
455
|
-
* to maintain.
|
456
|
-
*
|
457
|
-
* @see https://github.com/SonarSource/eslint-plugin-sonarjs/blob/master/docs/rules/cognitive-complexity.md
|
458
|
-
*/
|
344
|
+
// --- Increase the default threshold to 30.
|
459
345
|
"sonarjs/cognitive-complexity": ["error", 30],
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
* updated in a single place.
|
465
|
-
*
|
466
|
-
* @see https://github.com/SonarSource/eslint-plugin-sonarjs/blob/master/docs/rules/no-duplicate-string.md
|
467
|
-
*/
|
468
|
-
"sonarjs/no-duplicate-string": ["error", {
|
469
|
-
threshold: 10
|
470
|
-
}],
|
471
|
-
/**
|
472
|
-
* Those rules are crashing ESLint at startup, so they are disabled for now.
|
473
|
-
*/
|
474
|
-
"sonarjs/no-empty-collection": "off",
|
475
|
-
"sonarjs/no-extra-arguments": "off",
|
476
|
-
"sonarjs/no-gratuitous-expressions": "off",
|
477
|
-
"sonarjs/no-one-iteration-loop": "off",
|
478
|
-
"sonarjs/no-redundant-jump": "off",
|
479
|
-
"sonarjs/no-unused-collection": "off",
|
346
|
+
// --- Increase the default threshold to 10.
|
347
|
+
"sonarjs/no-duplicate-string": ["error", { threshold: 10 }],
|
348
|
+
// --- Disable unnecessary rules.
|
349
|
+
"sonarjs/use-type-alias": "off",
|
480
350
|
"sonarjs/no-use-of-empty-return-value": "off",
|
481
|
-
"sonarjs/
|
482
|
-
|
483
|
-
|
351
|
+
"sonarjs/no-nested-functions": "off",
|
352
|
+
// --- Disable rules that are already covered by TypeScript.
|
353
|
+
"sonarjs/no-extra-arguments": "off",
|
354
|
+
"sonarjs/function-return-type": "off",
|
355
|
+
"sonarjs/no-misused-promises": "off",
|
356
|
+
"sonarjs/no-invariant-returns": "off",
|
357
|
+
"sonarjs/no-unused-expressions": "off",
|
358
|
+
"sonarjs/different-types-comparison": "off",
|
359
|
+
// --- Allow control characters in regex.
|
360
|
+
"sonarjs/sonar-no-control-regex": "off"
|
361
|
+
}
|
362
|
+
},
|
363
|
+
{
|
364
|
+
files: [
|
365
|
+
"**/*.test.ts",
|
366
|
+
"**/*.spec.ts"
|
367
|
+
],
|
368
|
+
rules: {
|
369
|
+
// --- Disable unnecessary rules for test files.
|
370
|
+
"sonarjs/cognitive-complexity": "off",
|
371
|
+
"sonarjs/no-duplicate-string": "off",
|
372
|
+
"sonarjs/no-useless-constructor": "off",
|
373
|
+
"sonarjs/public-static-readonly": "off"
|
484
374
|
}
|
485
375
|
}
|
486
376
|
];
|
@@ -492,6 +382,7 @@ function getConfigRules(config) {
|
|
492
382
|
function typescript(options) {
|
493
383
|
return [
|
494
384
|
javascript.configs.recommended,
|
385
|
+
// stylistic.configs['recommended-flat'],
|
495
386
|
{
|
496
387
|
languageOptions: {
|
497
388
|
// @ts-expect-error: ignore
|
@@ -500,7 +391,7 @@ function typescript(options) {
|
|
500
391
|
ecmaVersion: "latest",
|
501
392
|
sourceType: "module",
|
502
393
|
project: toArray.toArray(options.tsConfigPath ?? "./tsconfig.json"),
|
503
|
-
tsconfigRootDir:
|
394
|
+
tsconfigRootDir: process.cwd()
|
504
395
|
}
|
505
396
|
},
|
506
397
|
plugins: {
|
@@ -510,7 +401,8 @@ function typescript(options) {
|
|
510
401
|
},
|
511
402
|
files: [
|
512
403
|
"**/*.{ts,tsx,cts,mts}",
|
513
|
-
"**/*.{js,jsx,cjs,mjs}"
|
404
|
+
"**/*.{js,jsx,cjs,mjs}",
|
405
|
+
"**/*.vue"
|
514
406
|
],
|
515
407
|
rules: {
|
516
408
|
/**
|
@@ -519,25 +411,11 @@ function typescript(options) {
|
|
519
411
|
*/
|
520
412
|
...getConfigRules(tslint.configs.recommendedTypeChecked),
|
521
413
|
...getConfigRules(tslint.configs.stylisticTypeChecked),
|
522
|
-
|
523
|
-
* Age-old debate over how to style braces. This rule aims to reduce the
|
524
|
-
* cognitive load of reasoning about code by enforcing a consistent style.
|
525
|
-
*
|
526
|
-
* @see https://eslint.style/rules/default/brace-style
|
527
|
-
*/
|
414
|
+
// --- Enforce stroustrup brace style.
|
528
415
|
"brace-style": "off",
|
529
416
|
"@typescript-eslint/brace-style": "off",
|
530
|
-
"@stylistic/brace-style": ["error", "stroustrup", {
|
531
|
-
|
532
|
-
}],
|
533
|
-
/**
|
534
|
-
* Enforce an indent of 2 spaces. Aims to reduce visual noise and maintain
|
535
|
-
* readability of code when viewed on GitHub or GitLab.
|
536
|
-
*
|
537
|
-
* @see https://eslint.style/rules/default/no-tabs
|
538
|
-
* @see https://eslint.style/rules/default/indent
|
539
|
-
* @see https://eslint.style/rules/default/indent-binary-ops
|
540
|
-
*/
|
417
|
+
"@stylistic/brace-style": ["error", "stroustrup", { allowSingleLine: !0 }],
|
418
|
+
// --- Enforce 2 spaces for indentation and disallow tabs.
|
541
419
|
"no-tabs": "off",
|
542
420
|
indent: "off",
|
543
421
|
"indent-binary-ops": "off",
|
@@ -547,67 +425,24 @@ function typescript(options) {
|
|
547
425
|
"@stylistic/no-tabs": "error",
|
548
426
|
"@stylistic/indent": ["error", 2],
|
549
427
|
"@stylistic/indent-binary-ops": ["error", 2],
|
550
|
-
|
551
|
-
* Enforce no semi-colons. This rule aims to maintain consistency around the
|
552
|
-
* use or omission of trailing semicolons. Helps reduce the visual noise in
|
553
|
-
* the codebase. Also helps to prevent errors when refactoring and adding
|
554
|
-
* new lines.
|
555
|
-
*
|
556
|
-
* @see https://eslint.style/rules/default/semi
|
557
|
-
*/
|
428
|
+
// --- No semicolons.
|
558
429
|
semi: "off",
|
559
430
|
"@typescript-eslint/semi": "off",
|
560
431
|
"@stylistic/semi": ["error", "never"],
|
561
|
-
|
562
|
-
* Enforce a consistent linebreak style and ensure no leading line breaks
|
563
|
-
* and a single trailing line break. This rule aims to maintain consistency
|
564
|
-
* around the use of line breaks in the codebase and reduce the amount of
|
565
|
-
* diff churn when making changes.
|
566
|
-
*
|
567
|
-
* @see https://eslint.style/rules/default/linebreak-style
|
568
|
-
*/
|
432
|
+
// --- Consistent line breaks.
|
569
433
|
"eol-last": "off",
|
570
434
|
"no-multiple-empty-lines": "off",
|
571
435
|
"@stylistic/eol-last": ["error", "always"],
|
572
|
-
"@stylistic/no-multiple-empty-lines": ["error", {
|
573
|
-
|
574
|
-
maxBOF: 0,
|
575
|
-
maxEOF: 0
|
576
|
-
}],
|
577
|
-
/**
|
578
|
-
* Enforce a trailing comma after the last element or property in a multiline
|
579
|
-
* list of properties or elements. This rule improves the clarity of diffs
|
580
|
-
* when an item is added or removed from an object or array.
|
581
|
-
*
|
582
|
-
* @see https://eslint.style/rules/default/comma-dangle
|
583
|
-
* @see https://eslint.style/rules/default/comma-spacing
|
584
|
-
*/
|
436
|
+
"@stylistic/no-multiple-empty-lines": ["error", { max: 1, maxBOF: 0, maxEOF: 0 }],
|
437
|
+
// --- Enforce dangling commas in multiline object literals.
|
585
438
|
"comma-dangle": "off",
|
586
439
|
"@typescript-eslint/comma-dangle": "off",
|
587
440
|
"@stylistic/comma-dangle": ["error", "always-multiline"],
|
588
|
-
|
589
|
-
* This rule requires empty lines before and/or after comments. It is disabled
|
590
|
-
* however when in an object literal, array, or type literal.
|
591
|
-
*
|
592
|
-
* @see https://eslint.style/rules/default/lines-around-comment
|
593
|
-
*/
|
594
|
-
/**
|
595
|
-
* Normalize type declaration and definition. This reduces the cognitive load
|
596
|
-
* of reasoning about code by enforcing a consistent style.
|
597
|
-
*
|
598
|
-
* @see https://typescript-eslint.io/rules/consistent-indexed-object-style
|
599
|
-
*/
|
441
|
+
// --- Enforce type interfaces over type aliases.
|
600
442
|
"@typescript-eslint/consistent-indexed-object-style": ["error", "record"],
|
601
443
|
"@typescript-eslint/consistent-type-definitions": ["error", "interface"],
|
602
444
|
"@typescript-eslint/array-type": ["error", { default: "array-simple", readonly: "array-simple" }],
|
603
|
-
|
604
|
-
* Enforce sequential declarations in the same block. This rule aims to
|
605
|
-
* enforce a top to bottom ordering of variable and type declarations.
|
606
|
-
* This reduces the likelihood of a developer skipping over a declaration
|
607
|
-
* when modifying code.
|
608
|
-
*
|
609
|
-
* @see https://typescript-eslint.io/rules/no-use-before-define
|
610
|
-
*/
|
445
|
+
// --- Enforce declaration and usage from top to bottom.
|
611
446
|
"no-use-before-define": "off",
|
612
447
|
"@typescript-eslint/no-use-before-define": ["error", {
|
613
448
|
enums: !0,
|
@@ -617,17 +452,7 @@ function typescript(options) {
|
|
617
452
|
functions: !1,
|
618
453
|
ignoreTypeReferences: !0
|
619
454
|
}],
|
620
|
-
|
621
|
-
* Enforce a consistent spacing around various places where spaces are optional.
|
622
|
-
* This rule aims to maintain consistency around the use of spaces in the codebase
|
623
|
-
* and reduce the amount of diff churn when making changes.
|
624
|
-
*
|
625
|
-
* @see https://eslint.style/rules/default/key-spacing
|
626
|
-
* @see https://eslint.style/rules/default/comma-spacing
|
627
|
-
* @see https://eslint.style/rules/default/block-spacing
|
628
|
-
* @see https://eslint.style/rules/default/arrow-spacing
|
629
|
-
* @see https://eslint.style/rules/default/object-curly-spacing
|
630
|
-
*/
|
455
|
+
// --- Consistent spacing and line breaks between tokens.
|
631
456
|
"key-spacing": "off",
|
632
457
|
"comma-spacing": "off",
|
633
458
|
"block-spacing": "off",
|
@@ -697,15 +522,7 @@ function typescript(options) {
|
|
697
522
|
returnType: { before: !1, after: !0 }
|
698
523
|
}
|
699
524
|
}],
|
700
|
-
|
701
|
-
* Enforce the use of `@ts-expect-error` over `@ts-ignore` to silence TypeScript
|
702
|
-
* errors. This rule aims to ensure that TypeScript errors are never silenced
|
703
|
-
* without explanation or justification. When an error is fixed, the
|
704
|
-
* `@ts-expect-error` forces the developer to remove the comment.
|
705
|
-
*
|
706
|
-
* @see https://typescript-eslint.io/rules/prefer-ts-expect-error
|
707
|
-
* @see https://typescript-eslint.io/rules/ban-ts-comment
|
708
|
-
*/
|
525
|
+
// --- Enforce `@ts-expect-error` over `@ts-ignore`.
|
709
526
|
"@typescript-eslint/prefer-ts-expect-error": "error",
|
710
527
|
"@typescript-eslint/ban-ts-comment": ["error", {
|
711
528
|
"ts-check": !1,
|
@@ -870,93 +687,32 @@ function typescript(options) {
|
|
870
687
|
}
|
871
688
|
];
|
872
689
|
}
|
873
|
-
|
874
|
-
function unicorn(options) {
|
690
|
+
function unicorn() {
|
875
691
|
return [
|
692
|
+
unicornPlugin.configs["flat/recommended"],
|
876
693
|
{
|
877
|
-
plugins: {
|
878
|
-
unicorn: unicornPlugin
|
879
|
-
},
|
880
694
|
rules: {
|
881
|
-
|
882
|
-
|
883
|
-
|
884
|
-
* aims to improve readability and consistency of regexes while also
|
885
|
-
* mitigating regex denial of service attacks by disallowing potentially
|
886
|
-
* catastrophic backtracking.
|
887
|
-
*
|
888
|
-
* @see https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/better-regex.md
|
889
|
-
*/
|
695
|
+
// --- Allow any kind of import style.
|
696
|
+
"unicorn/import-style": "off",
|
697
|
+
// --- Improve regexes by making them shorter, consistent, and safer.
|
890
698
|
"unicorn/better-regex": "error",
|
891
|
-
|
892
|
-
|
893
|
-
|
894
|
-
|
895
|
-
|
896
|
-
|
897
|
-
|
898
|
-
*/
|
899
|
-
"unicorn/catch-error-name": ["error", {
|
900
|
-
name: "error"
|
901
|
-
}],
|
902
|
-
/**
|
903
|
-
* Enforce the use of camelCase or PascalCase when naming folders, files and
|
904
|
-
* variables. This rule aims to enforce a consistent naming convention for
|
905
|
-
* filenames, directory names, and variable names.
|
906
|
-
*
|
907
|
-
* @see https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/filename-case.md
|
908
|
-
*/
|
699
|
+
// --- Use destructured variables over properties.
|
700
|
+
"unicorn/consistent-destructuring": "error",
|
701
|
+
// --- Enforce consistent function scoping except for arrow functions.
|
702
|
+
"unicorn/consistent-function-scoping": ["error", { checkArrowFunctions: !1 }],
|
703
|
+
// --- Disable switch-case fallthrough.
|
704
|
+
"unicorn/prefer-switch": "off",
|
705
|
+
// --- Enforce camelCase & PascalCase in filenames. Exepct non TS/JS files.
|
909
706
|
"unicorn/filename-case": ["error", {
|
910
|
-
|
911
|
-
|
912
|
-
|
913
|
-
},
|
914
|
-
ignore: [
|
915
|
-
"^[A-Z]+(.md)?$"
|
916
|
-
]
|
707
|
+
multipleFileExtensions: !1,
|
708
|
+
cases: { camelCase: !0, pascalCase: !0 },
|
709
|
+
ignore: [/\.json$/, /\.md$/, /\.yml$/, /\.yaml$/]
|
917
710
|
}],
|
918
|
-
|
919
|
-
* Disable the recommended import style rules. We want to be able to use both
|
920
|
-
* named and default imports in our codebase.
|
921
|
-
*
|
922
|
-
* @see https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/import-style.md
|
923
|
-
*/
|
924
|
-
"unicorn/import-style": "off",
|
925
|
-
/**
|
926
|
-
* Disallow unsafe regular expressions. Regular expressions can be unsafe
|
927
|
-
* when they are too complex and can cause catastrophic backtracking. This
|
928
|
-
* rule disallows regular expressions that can lead to catastrophic
|
929
|
-
*
|
930
|
-
* @see https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/no-unsafe-regex.md
|
931
|
-
*/
|
932
|
-
"unicorn/no-unsafe-regex": "error",
|
933
|
-
/**
|
934
|
-
* Enforces a convention of grouping digits using numeric separators.
|
935
|
-
* Long numbers can become really hard to read, so cutting it into groups
|
936
|
-
* of digits, separated with a _, is important to keep your code clear.
|
937
|
-
*
|
938
|
-
* @see https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/numeric-separators-style.md
|
939
|
-
*/
|
711
|
+
// --- Improve readability by using numeric separators.
|
940
712
|
"unicorn/numeric-separators-style": ["error", {
|
941
713
|
onlyIfContainsSeparator: !0
|
942
714
|
}],
|
943
|
-
|
944
|
-
"unicorn/consistent-function-scoping": "off",
|
945
|
-
"unicorn/error-message": "error",
|
946
|
-
"unicorn/escape-case": "error",
|
947
|
-
"unicorn/no-array-callback-reference": "off",
|
948
|
-
"unicorn/no-array-for-each": "off",
|
949
|
-
"unicorn/no-array-instanceof": "error",
|
950
|
-
"unicorn/no-new-buffer": "error",
|
951
|
-
"unicorn/no-static-only-class": "off",
|
952
|
-
"unicorn/prefer-code-point": "off",
|
953
|
-
"unicorn/prefer-exponentiation-operator": "error",
|
954
|
-
"unicorn/prefer-includes": "error",
|
955
|
-
"unicorn/prefer-module": "off",
|
956
|
-
"unicorn/prefer-starts-ends-with": "error",
|
957
|
-
"unicorn/prefer-switch": "off",
|
958
|
-
"unicorn/prefer-text-content": "error",
|
959
|
-
"unicorn/prefer-type-error": "error",
|
715
|
+
// --- Enforce long variable names when they are meaningful.
|
960
716
|
"unicorn/prevent-abbreviations": ["error", {
|
961
717
|
allowList: {
|
962
718
|
args: !0,
|
@@ -974,110 +730,50 @@ function unicorn(options) {
|
|
974
730
|
y: !0,
|
975
731
|
z: !0
|
976
732
|
}
|
977
|
-
}]
|
978
|
-
|
979
|
-
|
980
|
-
|
981
|
-
|
733
|
+
}]
|
734
|
+
}
|
735
|
+
},
|
736
|
+
{
|
737
|
+
files: [
|
738
|
+
"**/*.test.ts",
|
739
|
+
"**/*.spec.ts"
|
740
|
+
],
|
741
|
+
rules: {
|
742
|
+
// --- Disable unnecessary rules for test files.
|
743
|
+
"unicorn/no-null": "off",
|
744
|
+
"unicorn/no-useless-undefined": "off",
|
745
|
+
"unicorn/no-static-only-class": "off"
|
746
|
+
}
|
982
747
|
}
|
983
748
|
];
|
984
749
|
}
|
985
|
-
function vitest(
|
750
|
+
function vitest() {
|
986
751
|
return [
|
752
|
+
vitestPlugin.configs.recommended,
|
987
753
|
{
|
988
|
-
plugins: {
|
989
|
-
vitest: vitestPlugin
|
990
|
-
},
|
991
|
-
files: [
|
992
|
-
"**/*.{ts,mts,cts,tsx,d.ts}",
|
993
|
-
"**/*.{js,mjs,cjs,jsx}"
|
994
|
-
],
|
995
|
-
settings: {
|
996
|
-
vitest: {
|
997
|
-
typecheck: !0
|
998
|
-
}
|
999
|
-
},
|
1000
|
-
languageOptions: {
|
1001
|
-
globals: {
|
1002
|
-
...vitestPlugin.environments.env.globals,
|
1003
|
-
expectTypeOf: !0
|
1004
|
-
}
|
1005
|
-
},
|
1006
754
|
rules: {
|
1007
|
-
|
1008
|
-
* Inject all configuration from eslint-plugin-vitest.
|
1009
|
-
*
|
1010
|
-
* @see https://github.com/veritem/eslint-plugin-vitest/tree/main?tab=readme-ov-file#rules
|
1011
|
-
*/
|
1012
|
-
...vitestPlugin.configs.all.rules,
|
1013
|
-
/**
|
1014
|
-
* This rule aims to enforce having at least one expectation
|
1015
|
-
* in test body to ensure that the test is actually testing something.
|
1016
|
-
*
|
1017
|
-
* @see https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/expect-expect.md
|
1018
|
-
*/
|
755
|
+
// --- Add the `expectTypeOf` function to the list of assert functions.
|
1019
756
|
"vitest/expect-expect": ["error", {
|
1020
|
-
assertFunctionNames: [
|
1021
|
-
"expect",
|
1022
|
-
"expectTypeOf"
|
1023
|
-
]
|
757
|
+
assertFunctionNames: ["expect", "expectTypeOf"]
|
1024
758
|
}],
|
1025
|
-
|
1026
|
-
|
1027
|
-
|
1028
|
-
* the rule that prevents the use of if-else statements in tests as we want
|
1029
|
-
* to use it to test type predicates.
|
1030
|
-
*
|
1031
|
-
* @see https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-conditional-in-test.md
|
1032
|
-
*/
|
1033
|
-
"vitest/no-conditional-in-test": "off",
|
1034
|
-
"vitest/no-conditional-tests": "off",
|
1035
|
-
/**
|
1036
|
-
* Since we use in-source testing, we need to disable the rule as it may prevent
|
1037
|
-
* us from using top level evaluation that are not part of the test suite.
|
1038
|
-
*
|
1039
|
-
* @see https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-hooks.md
|
1040
|
-
*/
|
1041
|
-
"vitest/require-hook": "off",
|
1042
|
-
"vitest/no-hooks": "off",
|
1043
|
-
/**
|
1044
|
-
* Disable the rule that enforces the use of `expect.assertions` in tests.
|
1045
|
-
* As much as this rule enforces a best-practice, it is not always necessary.
|
1046
|
-
*
|
1047
|
-
* @see https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-expect-assertions.md
|
1048
|
-
*/
|
1049
|
-
"vitest/prefer-expect-assertions": "off",
|
1050
|
-
/**
|
1051
|
-
* Some functions may have a single test case, and it is not necessary
|
1052
|
-
* to wrap them in a describe block.
|
1053
|
-
*
|
1054
|
-
* @see https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/require-top-level-describe.md
|
1055
|
-
*/
|
1056
|
-
"vitest/require-top-level-describe": "off",
|
1057
|
-
/**
|
1058
|
-
* Enforce rule titles starts with 'should'. This is a convention
|
1059
|
-
* to force the developer to write the test in a way that it reads
|
1060
|
-
* like a sentence.
|
1061
|
-
*
|
1062
|
-
* @see https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/valid-title.md
|
1063
|
-
*/
|
759
|
+
// --- Enforce a single top-level describe block.
|
760
|
+
"vitest/require-top-level-describe": ["error", { maxNumberOfTopLevelDescribes: 1 }],
|
761
|
+
// --- Enforce 'should' as the prefix for test titles.
|
1064
762
|
"vitest/valid-title": ["error", {
|
1065
763
|
ignoreTypeOfDescribeName: !0,
|
1066
|
-
mustMatch: {
|
1067
|
-
test: ["^should"]
|
1068
|
-
}
|
764
|
+
mustMatch: { test: ["^should"] }
|
1069
765
|
}],
|
1070
|
-
|
1071
|
-
* Disable the prefer-truthy/false rule as we want to allow the use of strict equality checks
|
1072
|
-
* with boolean values.
|
1073
|
-
*
|
1074
|
-
* @see https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-be-truthy.md
|
1075
|
-
* @see https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-be-falsy.md
|
1076
|
-
*/
|
766
|
+
// --- Prefer strict equality checks.
|
1077
767
|
"vitest/prefer-to-be-truthy": "off",
|
1078
768
|
"vitest/prefer-to-be-falsy": "off",
|
1079
|
-
|
1080
|
-
|
769
|
+
/// --- Loosen the rules for test files.
|
770
|
+
"vitest/no-hooks": "off",
|
771
|
+
"vitest/require-hook": "off",
|
772
|
+
"vitest/no-conditional-in-test": "off",
|
773
|
+
"vitest/no-conditional-tests": "off",
|
774
|
+
"vitest/prefer-expect-assertions": "off",
|
775
|
+
"vitest/padding-around-all": "off",
|
776
|
+
"vitest/padding-around-expect-groups": "off"
|
1081
777
|
}
|
1082
778
|
}
|
1083
779
|
];
|
@@ -1085,7 +781,7 @@ function vitest(options) {
|
|
1085
781
|
function vue(options) {
|
1086
782
|
const TYPESCRIPT_CONFIG = typescript(options).at(1);
|
1087
783
|
return [
|
1088
|
-
...vuePlugin.configs
|
784
|
+
...vuePlugin.configs["flat/recommended"],
|
1089
785
|
{
|
1090
786
|
plugins: {
|
1091
787
|
vue: vuePlugin,
|
@@ -1116,109 +812,48 @@ function vue(options) {
|
|
1116
812
|
}
|
1117
813
|
},
|
1118
814
|
processor: eslintMergeProcessors.mergeProcessors([
|
1119
|
-
|
1120
|
-
vuePlugin.processors[".vue"],
|
815
|
+
vuePlugin.processors.vue,
|
1121
816
|
vueProcessorBlocks()
|
1122
817
|
]),
|
1123
818
|
files: [
|
1124
|
-
"**/*.vue"
|
819
|
+
"**/*.vue",
|
820
|
+
"**/*.ts"
|
1125
821
|
],
|
1126
822
|
rules: {
|
1127
|
-
|
1128
|
-
//
|
1129
|
-
|
1130
|
-
//
|
1131
|
-
...vuePlugin.configs["flat/strongly-recommended"].rules,
|
1132
|
-
// @ts-expect-error: ignore
|
1133
|
-
...vuePlugin.configs["flat/essential"].rules,
|
1134
|
-
/**
|
1135
|
-
* Disable some TypeScript rules that may conflict with the Vue SFC parser.
|
1136
|
-
*/
|
1137
|
-
"@typescript-eslint/no-unsafe-call": "off",
|
1138
|
-
"@typescript-eslint/no-unsafe-return": "off",
|
1139
|
-
"@typescript-eslint/no-misused-promises": "off",
|
1140
|
-
"@typescript-eslint/no-unsafe-assignment": "off",
|
1141
|
-
"@typescript-eslint/no-unsafe-member-access": "off",
|
1142
|
-
/**
|
1143
|
-
* Enforces consistent usage of type imports. This rule will enforce the use
|
1144
|
-
* of `type` imports to make it easier for the Vue SFC compiler to analyze
|
1145
|
-
* the code and infer the dependency graph correctly.
|
1146
|
-
*
|
1147
|
-
* @see https://typescript-eslint.io/rules/consistent-type-imports
|
1148
|
-
* @see https://vuejs.github.io/vetur/guide/FAQ.html#why-does-vetur-show-cannot-find-module-xxx
|
1149
|
-
*/
|
1150
|
-
// '@typescript-eslint/consistent-type-imports': ['error', {
|
1151
|
-
// disallowTypeAnnotations: false,
|
1152
|
-
// fixStyle: 'inline-type-imports',
|
1153
|
-
// prefer: 'type-imports',
|
1154
|
-
// }],
|
1155
|
-
/**
|
1156
|
-
* Enforce the order of the top-level properties in the component. This rule
|
1157
|
-
* helps to maintain consistency and readability by enforcing a predictable
|
1158
|
-
* order of the top-level properties in the component.
|
1159
|
-
*
|
1160
|
-
* @see https://eslint.vuejs.org/rules/ordered-component-elements.html
|
1161
|
-
*/
|
1162
|
-
"vue/block-order": ["error", {
|
1163
|
-
order: [
|
1164
|
-
"docs",
|
1165
|
-
"script",
|
1166
|
-
"template",
|
1167
|
-
"style"
|
1168
|
-
]
|
1169
|
-
}],
|
1170
|
-
/**
|
1171
|
-
* Enforce use of the Composition API and TypeScript. This rule forbids the
|
1172
|
-
* use of the Options API and JavaScript in Vue components for better
|
1173
|
-
* consistency and maintainability.
|
1174
|
-
*
|
1175
|
-
* @see https://eslint.vuejs.org/rules/vue/prefer-define-options.html
|
1176
|
-
* @see https://eslint.vuejs.org/rules/vue/component-api-style.html
|
1177
|
-
*/
|
823
|
+
"vue/return-in-computed-property": "off",
|
824
|
+
// --- Allow multiple component definitions in a single file.
|
825
|
+
"vue/one-component-per-file": "off",
|
826
|
+
// --- Enforce Component API style.
|
1178
827
|
"vue/prefer-define-options": "error",
|
1179
|
-
"vue/component-api-style": ["error", ["script-setup"]],
|
1180
|
-
|
1181
|
-
|
1182
|
-
|
1183
|
-
* conflicts with existing and future HTML elements.
|
1184
|
-
*
|
1185
|
-
* @see https://eslint.vuejs.org/rules/component-name-in-template-casing.html
|
1186
|
-
*/
|
828
|
+
"vue/component-api-style": ["error", ["script-setup", "composition"]],
|
829
|
+
// --- Enforce PascalCase components and allow reserved and single-word names.
|
830
|
+
"vue/multi-word-component-names": "off",
|
831
|
+
"vue/no-reserved-component-names": "off",
|
1187
832
|
"vue/component-name-in-template-casing": ["error", "PascalCase", {
|
1188
833
|
ignores: [String.raw`/\./`],
|
1189
834
|
registeredComponentsOnly: !1
|
1190
835
|
}],
|
1191
|
-
|
1192
|
-
|
1193
|
-
|
1194
|
-
|
1195
|
-
|
1196
|
-
|
836
|
+
// --- Consistent spacing around HTML comments.
|
837
|
+
"vue/html-comment-indent": ["error", 2],
|
838
|
+
"vue/multiline-html-element-content-newline": ["error", {
|
839
|
+
allowEmptyLines: !0,
|
840
|
+
ignores: [],
|
841
|
+
ignoreWhenEmpty: !0
|
842
|
+
}],
|
1197
843
|
"vue/html-comment-content-spacing": ["error", "always"],
|
1198
844
|
"vue/html-comment-content-newline": ["error", {
|
1199
845
|
multiline: "always",
|
1200
846
|
singleline: "never"
|
1201
847
|
}],
|
1202
|
-
|
1203
|
-
|
1204
|
-
|
1205
|
-
*
|
1206
|
-
* @see https://eslint.vuejs.org/rules/block-spacing.html
|
1207
|
-
* @see https://eslint.vuejs.org/rules/padding-line-between-blocks.html
|
1208
|
-
* @see https://eslint.vuejs.org/rules/padding-line-between-tags.html
|
1209
|
-
*/
|
848
|
+
// --- Consistent block order in Vue components.
|
849
|
+
"vue/block-order": ["error", { order: ["script", "template", "style", "i18n"] }],
|
850
|
+
// --- Consistent spacing in and around the block.
|
1210
851
|
"vue/block-spacing": ["error", "always"],
|
1211
852
|
"vue/padding-line-between-blocks": ["error", "always"],
|
1212
853
|
"vue/padding-line-between-tags": ["error", [
|
1213
854
|
{ blankLine: "consistent", next: "*", prev: "*" },
|
1214
855
|
{ blankLine: "always", next: "*", prev: "comment" }
|
1215
856
|
]],
|
1216
|
-
"vue/html-comment-indent": ["error", 2],
|
1217
|
-
"vue/multiline-html-element-content-newline": ["error", {
|
1218
|
-
allowEmptyLines: !0,
|
1219
|
-
ignores: [],
|
1220
|
-
ignoreWhenEmpty: !0
|
1221
|
-
}],
|
1222
857
|
/**
|
1223
858
|
* Enforce consistent spacing and newlines in the template. This rule helps
|
1224
859
|
* to maintain consistency and readability by enforcing a predictable
|
@@ -1247,8 +882,6 @@ function vue(options) {
|
|
1247
882
|
*
|
1248
883
|
* @see https://eslint.vuejs.org/rules/multi-word-component-names.html
|
1249
884
|
*/
|
1250
|
-
"vue/multi-word-component-names": "off",
|
1251
|
-
"vue/no-reserved-component-names": "off",
|
1252
885
|
/**
|
1253
886
|
* Reports the destructuring or member expression of props passed to setup
|
1254
887
|
* causing the value to lose reactivity. This rule helps to avoid common
|
@@ -1320,7 +953,6 @@ function vue(options) {
|
|
1320
953
|
"vue/block-lang": ["error", {
|
1321
954
|
script: { lang: "ts" }
|
1322
955
|
}],
|
1323
|
-
"vue/return-in-computed-property": "off",
|
1324
956
|
"vue/no-sparse-arrays": "error",
|
1325
957
|
"vue/no-unused-emit-declarations": "error",
|
1326
958
|
"vue/no-use-v-else-with-v-for": "error",
|
@@ -1391,34 +1023,89 @@ function vue(options) {
|
|
1391
1023
|
"vue/space-in-parens": ["error", "never"],
|
1392
1024
|
"vue/space-infix-ops": "error",
|
1393
1025
|
"vue/space-unary-ops": ["error", { nonwords: !1, words: !0 }],
|
1394
|
-
"vue/template-curly-spacing": "error"
|
1395
|
-
|
1396
|
-
|
1026
|
+
"vue/template-curly-spacing": "error"
|
1027
|
+
}
|
1028
|
+
},
|
1029
|
+
// --- Disable some TypeScript rules that may conflict with the Vue SFC parser.
|
1030
|
+
{
|
1031
|
+
files: [
|
1032
|
+
"**/*.vue"
|
1033
|
+
],
|
1034
|
+
rules: {
|
1035
|
+
"@typescript-eslint/no-unsafe-call": "off",
|
1036
|
+
"@typescript-eslint/no-unsafe-return": "off",
|
1037
|
+
"@typescript-eslint/no-unsafe-argument": "off",
|
1038
|
+
"@typescript-eslint/no-unsafe-assignment": "off",
|
1039
|
+
"@typescript-eslint/no-unsafe-member-access": "off",
|
1040
|
+
"@typescript-eslint/no-misused-promises": "off"
|
1041
|
+
}
|
1042
|
+
},
|
1043
|
+
// --- Disable in test files.
|
1044
|
+
{
|
1045
|
+
files: [
|
1046
|
+
"**/*.test.ts",
|
1047
|
+
"**/*.spec.ts"
|
1048
|
+
],
|
1049
|
+
rules: {
|
1050
|
+
"vue/one-component-per-file": "off"
|
1051
|
+
}
|
1052
|
+
}
|
1053
|
+
];
|
1054
|
+
}
|
1055
|
+
function yml() {
|
1056
|
+
return [
|
1057
|
+
...pluginYml.configs["flat/standard"],
|
1058
|
+
...pluginYml.configs["flat/recommended"],
|
1059
|
+
{
|
1060
|
+
rules: {
|
1061
|
+
// --- Force single quotes.
|
1062
|
+
"yml/quotes": ["error", {
|
1063
|
+
avoidEscape: !0,
|
1064
|
+
prefer: "single"
|
1065
|
+
}],
|
1066
|
+
// --- Remove trailing zeros in numbers.
|
1067
|
+
"yml/no-trailing-zeros": "error",
|
1068
|
+
// --- Prevent empty keys.
|
1069
|
+
"yml/require-string-key": "error",
|
1070
|
+
// --- Prevent empty values or weird newlines in mappings.
|
1071
|
+
"yml/block-mapping-colon-indicator-newline": "error",
|
1072
|
+
// --- No more than one empty line.
|
1073
|
+
"yml/no-multiple-empty-lines": ["error", {
|
1074
|
+
max: 1,
|
1075
|
+
maxBOF: 0,
|
1076
|
+
maxEOF: 0
|
1077
|
+
}],
|
1078
|
+
// --- Sort environemnt variables alphabetically.
|
1079
|
+
"yml/sort-sequence-values": ["error", {
|
1080
|
+
pathPattern: "^env$",
|
1081
|
+
order: { type: "asc" }
|
1082
|
+
}]
|
1397
1083
|
}
|
1398
1084
|
}
|
1399
1085
|
];
|
1400
1086
|
}
|
1401
1087
|
function all(options = {}) {
|
1402
1088
|
return [
|
1403
|
-
...antfu(
|
1404
|
-
...eslintComments(
|
1405
|
-
...jsdoc(
|
1406
|
-
...
|
1089
|
+
...antfu(),
|
1090
|
+
...eslintComments(),
|
1091
|
+
...jsdoc(),
|
1092
|
+
...json(),
|
1407
1093
|
...jsonPackage(),
|
1408
1094
|
...jsonTsconfig(),
|
1409
|
-
...node(
|
1410
|
-
...sonarjs(
|
1095
|
+
...node(),
|
1096
|
+
...sonarjs(),
|
1411
1097
|
...typescript(options),
|
1412
|
-
...unicorn(
|
1413
|
-
...vitest(
|
1098
|
+
...unicorn(),
|
1099
|
+
...vitest(),
|
1414
1100
|
...vue(options),
|
1101
|
+
...yml(),
|
1415
1102
|
{
|
1416
1103
|
ignores: [
|
1417
1104
|
"**/dist",
|
1418
1105
|
"**/bin",
|
1419
1106
|
"**/node_modules",
|
1420
1107
|
"**/.nuxt",
|
1421
|
-
"
|
1108
|
+
"**/.output",
|
1422
1109
|
"**/coverage",
|
1423
1110
|
"**/public",
|
1424
1111
|
"**/__wip__",
|