forked from aeharding/voyager
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patheslint.config.js
121 lines (116 loc) · 2.96 KB
/
eslint.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
// @ts-check
import eslint from "@eslint/js";
import eslintConfigPrettier from "eslint-config-prettier";
import reactPlugin from "eslint-plugin-react";
import pluginReactCompiler from "eslint-plugin-react-compiler";
import reactHooksPlugin from "eslint-plugin-react-hooks";
import vitestPlugin from "eslint-plugin-vitest";
import tseslint from "typescript-eslint";
import compilerOptions from "./compilerOptions.js";
export default tseslint.config(
eslint.configs.recommended,
...tseslint.configs.recommended,
eslintConfigPrettier,
// @ts-expect-error Malformed types
reactPlugin.configs.flat.recommended,
// @ts-expect-error Malformed types
reactPlugin.configs.flat["jsx-runtime"],
{
// TODO replace with https://github.com/facebook/react/pull/30774
name: "react-hooks/recommended",
plugins: { "react-hooks": reactHooksPlugin },
rules: reactHooksPlugin.configs.recommended.rules,
},
{
plugins: {
"react-compiler": pluginReactCompiler,
},
rules: {
"react-compiler/react-compiler": ["error", compilerOptions],
},
},
{
files: ["src/**"],
languageOptions: {
globals: {
APP_VERSION: true,
BUILD_FOSS_ONLY: true,
},
},
},
{
settings: {
react: {
version: "detect",
},
},
rules: {
"react/prop-types": "off",
"react/jsx-fragments": ["warn", "syntax"],
"react/jsx-curly-brace-presence": ["warn", "never"],
"react/no-unknown-property": [
"error",
{
ignore: ["css"],
},
],
"@typescript-eslint/no-empty-object-type": "off",
"@typescript-eslint/no-unused-vars": [
"warn",
{
destructuredArrayIgnorePattern: "^_",
caughtErrorsIgnorePattern: "^_",
},
],
"no-nested-ternary": "warn",
"no-unreachable": "warn",
"linebreak-style": ["warn", "unix"],
eqeqeq: ["warn", "smart"],
"no-console": [
"warn",
{
allow: ["warn", "error", "info"],
},
],
"no-restricted-syntax": [
"warn",
{
selector: "TSEnumDeclaration",
message: "Don't declare enums",
},
],
"no-restricted-imports": [
"warn",
{
paths: [
{
name: "@ionic/react",
importNames: ["IonHeader"],
message: "Please use AppHeader instead.",
},
{
name: "react",
importNames: ["forwardRef"],
message: "Please use ref prop directly.",
},
],
patterns: [
{
regex: "\\.\\.\\/\\w+\\/",
message: "Import via absolute path (e.g. #/helpers/myHelper)",
},
],
},
],
},
},
{
files: ["**/*.test.ts", "**/*.test.tsx"],
plugins: {
vitest: vitestPlugin,
},
rules: {
...vitestPlugin.configs.recommended.rules,
},
},
);