Skip to content

Commit b9d07c8

Browse files
authored
chore(lint): Use shared eslint config (#1724)
1 parent ea434ed commit b9d07c8

29 files changed

Lines changed: 3409 additions & 1682 deletions

biome.json

Lines changed: 72 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1,119 +1,105 @@
11
{
2-
"$schema": "https://biomejs.dev/schemas/2.3.6/schema.json",
3-
"vcs": { "enabled": true, "clientKind": "git", "useIgnoreFile": true },
4-
"files": { "ignoreUnknown": false },
5-
"formatter": {
2+
"$schema": "https://biomejs.dev/schemas/2.4.5/schema.json",
3+
"vcs": {
64
"enabled": true,
5+
"clientKind": "git",
6+
"useIgnoreFile": true
7+
},
8+
"files": {
9+
"ignoreUnknown": true,
10+
"includes": ["**/*.ts", "**/*.{md,json,yml,js}", "!**/.*"]
11+
},
12+
"formatter": {
713
"indentStyle": "space",
814
"indentWidth": 4
915
},
1016
"linter": {
11-
"enabled": true,
1217
"rules": {
13-
"recommended": false,
14-
"complexity": {
15-
"noAdjacentSpacesInRegex": "error",
16-
"noExtraBooleanCast": "error",
17-
"noUselessCatch": "error",
18-
"noUselessEscapeInRegex": "error",
19-
"useArrowFunction": "error"
18+
"recommended": true,
19+
"suspicious": {
20+
"noAssignInExpressions": "off",
21+
"noConstantBinaryExpressions": "error",
22+
"useAwait": "error"
2023
},
21-
"correctness": {
22-
"noConstAssign": "error",
23-
"noConstantCondition": "error",
24-
"noEmptyCharacterClassInRegex": "error",
25-
"noEmptyPattern": "error",
26-
"noGlobalObjectCalls": "error",
27-
"noInnerDeclarations": "error",
28-
"noInvalidConstructorSuper": "error",
29-
"noInvalidUseBeforeDeclaration": "error",
30-
"noNonoctalDecimalEscape": "error",
31-
"noPrecisionLoss": "error",
32-
"noSelfAssign": "error",
33-
"noSetterReturn": "error",
34-
"noSwitchDeclarations": "error",
35-
"noUndeclaredVariables": "error",
36-
"noUnreachable": "error",
37-
"noUnreachableSuper": "error",
38-
"noUnsafeFinally": "error",
39-
"noUnsafeOptionalChaining": "error",
40-
"noUnusedLabels": "error",
41-
"noUnusedVariables": "error",
42-
"useIsNan": "error",
43-
"useValidForDirection": "error",
44-
"useValidTypeof": "error",
45-
"useYield": "error"
24+
"complexity": {
25+
"noUselessStringConcat": "error",
26+
"noUselessUndefined": "error",
27+
"useSimplifiedLogicExpression": "error",
28+
"useWhile": "error"
4629
},
47-
"nursery": {
48-
"useExhaustiveSwitchCases": "error"
30+
"performance": {
31+
"useTopLevelRegex": "error"
4932
},
5033
"style": {
34+
"noInferrableTypes": "error",
35+
"noNegationElse": "error",
36+
"noUnusedTemplateLiteral": "error",
5137
"noUselessElse": "error",
5238
"noYodaExpression": "error",
53-
"useBlockStatements": "error",
54-
"useConst": "error",
55-
"useImportType": {
56-
"level": "error",
57-
"options": { "style": "inlineType" }
58-
},
39+
"useAsConstAssertion": "error",
40+
"useCollapsedElseIf": "error",
41+
"useCollapsedIf": "error",
42+
"useConsistentArrayType": "error",
43+
"useConsistentArrowReturn": "error",
44+
"useConsistentMemberAccessibility": "error",
5945
"useConsistentObjectDefinitions": "error",
60-
"useReadonlyClassProperties": "error",
61-
"useShorthandFunctionType": "error",
62-
"useSingleVarDeclarator": "error",
63-
"useTemplate": "error"
64-
},
65-
"suspicious": {
66-
"noAssignInExpressions": "error",
67-
"noAsyncPromiseExecutor": "error",
68-
"noCatchAssign": "error",
69-
"noClassAssign": "error",
70-
"noCompareNegZero": "error",
71-
"noControlCharactersInRegex": "error",
72-
"noDebugger": "error",
73-
"noDoubleEquals": "error",
74-
"noDuplicateCase": "error",
75-
"noDuplicateClassMembers": "error",
76-
"noDuplicateElseIf": "error",
77-
"noDuplicateObjectKeys": "error",
78-
"noDuplicateParameters": "error",
79-
"noEmptyBlockStatements": "error",
80-
"noFallthroughSwitchClause": "error",
81-
"noFunctionAssign": "error",
82-
"noGlobalAssign": "error",
83-
"noImportAssign": "error",
84-
"noIrregularWhitespace": "error",
85-
"noMisleadingCharacterClass": "error",
86-
"noPrototypeBuiltins": "error",
87-
"noRedeclare": "error",
88-
"noShadowRestrictedNames": "error",
89-
"noSparseArray": "error",
90-
"noUnsafeNegation": "error",
91-
"noUselessRegexBackrefs": "error",
92-
"noVar": "error",
93-
"noWith": "error",
94-
"useGetterReturn": "error"
46+
"useConsistentTypeDefinitions": "error",
47+
"useDefaultParameterLast": "error",
48+
"useExplicitLengthCheck": "error",
49+
"useFilenamingConvention": "error",
50+
"useNumberNamespace": "error",
51+
"useNumericSeparators": "error",
52+
"useObjectSpread": "error",
53+
"useShorthandAssign": "error",
54+
"useUnifiedTypeSignatures": "error"
55+
}
56+
}
57+
},
58+
"assist": {
59+
"actions": {
60+
"source": {
61+
"organizeImports": "on"
9562
}
9663
}
9764
},
9865
"overrides": [
9966
{
10067
"includes": ["**/*.test.ts", "**/*.spec.ts", "test/**/*.ts"],
68+
"linter": {
69+
"rules": {
70+
"suspicious": {
71+
"noDeprecatedImports": "off",
72+
"noMisplacedAssertion": "off",
73+
"noSkippedTests": "off"
74+
}
75+
}
76+
},
10177
"javascript": {
10278
"globals": [
10379
"jest",
10480
"describe",
10581
"it",
10682
"beforeEach",
10783
"afterEach",
108-
"expect"
84+
"expect",
85+
"vi"
10986
]
11087
}
88+
},
89+
{
90+
"includes": ["**/*.ts", "**/*.cts", "**/*.mts", "**/*.tsx"],
91+
"linter": {
92+
"rules": {
93+
"complexity": {
94+
"useLiteralKeys": "off"
95+
}
96+
}
97+
}
11198
}
11299
],
113-
114-
"html": { "formatter": { "selfCloseVoidElements": "always" } },
115-
"assist": {
116-
"enabled": true,
117-
"actions": { "source": { "organizeImports": "on" } }
100+
"html": {
101+
"formatter": {
102+
"selfCloseVoidElements": "always"
103+
}
118104
}
119105
}

eslint.config.mjs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import { fileURLToPath } from "node:url";
2+
import { includeIgnoreFile } from "@eslint/compat";
3+
import feedicFlatConfig from "@feedic/eslint-config";
4+
import { commonTypeScriptRules } from "@feedic/eslint-config/typescript";
5+
import { defineConfig } from "eslint/config";
6+
import eslintConfigBiome from "eslint-config-biome";
7+
import globals from "globals";
8+
import tseslint from "typescript-eslint";
9+
10+
const gitignorePath = fileURLToPath(new URL(".gitignore", import.meta.url));
11+
12+
export default defineConfig([
13+
includeIgnoreFile(gitignorePath),
14+
{
15+
linterOptions: {
16+
reportUnusedDisableDirectives: "error",
17+
},
18+
},
19+
{
20+
ignores: ["eslint.config.{js,cjs,mjs}", "vitest.config.ts"],
21+
},
22+
...feedicFlatConfig,
23+
{
24+
files: ["**/*.{c,m,}ts"],
25+
extends: [...tseslint.configs.recommended],
26+
languageOptions: {
27+
parser: tseslint.parser,
28+
parserOptions: {
29+
sourceType: "module",
30+
project: "./tsconfig.eslint.json",
31+
},
32+
},
33+
rules: {
34+
...commonTypeScriptRules,
35+
"unicorn/no-array-callback-reference": 0,
36+
"unicorn/prefer-string-raw": 0,
37+
},
38+
},
39+
{
40+
files: ["**/*.{test,spec}.ts", "test/**/*.ts"],
41+
languageOptions: {
42+
globals: globals.vitest,
43+
},
44+
rules: {
45+
"n/no-unpublished-import": 0,
46+
"unicorn/prefer-query-selector": 0,
47+
},
48+
},
49+
eslintConfigBiome,
50+
]);

0 commit comments

Comments
 (0)