The weeb for the next gen discord boat - Wamellow
wamellow.com
bot
discord
1import next from "@next/eslint-plugin-next";
2import stylistic from "@stylistic/eslint-plugin";
3import eslintPluginImport from "eslint-plugin-import-x";
4import react from "eslint-plugin-react";
5import reactCompiler from "eslint-plugin-react-compiler";
6import reactHooks from "eslint-plugin-react-hooks";
7import simpleImportSort from "eslint-plugin-simple-import-sort";
8import eslintPluginUnicorn from "eslint-plugin-unicorn";
9import tseslint from "typescript-eslint";
10
11export default tseslint.config(
12 ...tseslint.configs.recommended,
13 {
14 files: ["**/*.ts", "**/*.tsx"],
15 ignores: ["node_modules", ".next"],
16 languageOptions: {
17 parser: tseslint.parser,
18 parserOptions: {
19 project: "./tsconfig.json",
20 tsconfigRootDir: import.meta.dirname,
21 warnOnUnsupportedTypeScriptVersion: false
22 }
23 },
24 plugins: {
25 react,
26 "react-hooks": reactHooks,
27 "@next/next": next,
28 "react-compiler": reactCompiler,
29
30 "@stylistic": stylistic,
31 "@typescript-eslint": tseslint.plugin,
32 import: eslintPluginImport,
33 "simple-import-sort": simpleImportSort,
34 unicorn: eslintPluginUnicorn
35 },
36 rules: {
37 ...react.configs.recommended.rules,
38 ...react.configs['jsx-runtime'].rules,
39 ...reactHooks.configs.recommended.rules,
40 ...next.configs.recommended.rules,
41 ...next.configs["core-web-vitals"].rules,
42
43 // Fixes
44 "react/prop-types": "off",
45 "react-hooks/exhaustive-deps": "off",
46 "react-hooks/preserve-manual-memoization": "off",
47
48 // stylistic Rules
49 "@stylistic/array-bracket-newline": ["error", "consistent"],
50 "@stylistic/array-bracket-spacing": "error",
51 "@stylistic/array-element-newline": ["error", "consistent"],
52 "@stylistic/arrow-parens": ["error", "always"],
53 "@stylistic/block-spacing": "error",
54 "@stylistic/brace-style": "error",
55 "@stylistic/comma-dangle": ["error"],
56 "@stylistic/comma-spacing": "error",
57 "@stylistic/comma-style": "error",
58 "@stylistic/computed-property-spacing": "error",
59 "@stylistic/dot-location": ["error", "property"],
60 "@stylistic/eol-last": ["error", "never"],
61 "@stylistic/function-call-argument-newline": ["error", "consistent"],
62 "@stylistic/function-call-spacing": "error",
63 "@stylistic/indent": "error",
64 "@stylistic/key-spacing": "error",
65 "@stylistic/keyword-spacing": "error",
66 "@stylistic/member-delimiter-style": ["error", { singleline: { requireLast: true } }],
67 "@stylistic/new-parens": "error",
68 "@stylistic/no-extra-semi": "error",
69 "@stylistic/no-floating-decimal": "error",
70 "@stylistic/no-multi-spaces": "error",
71 "@stylistic/no-multiple-empty-lines": ["error", { max: 1, maxBOF: 0, maxEOF: 0 }],
72 "@stylistic/no-trailing-spaces": "error",
73 "@stylistic/no-whitespace-before-property": "error",
74 "@stylistic/object-curly-newline": "error",
75 "@stylistic/object-curly-spacing": ["error", "always"],
76 "@stylistic/rest-spread-spacing": "error",
77 "@stylistic/quote-props": ["error", "as-needed"],
78 "@stylistic/quotes": "error",
79 "@stylistic/semi": "error",
80 "@stylistic/semi-spacing": "error",
81 "@stylistic/semi-style": "error",
82 "@stylistic/space-before-blocks": "error",
83 "@stylistic/space-before-function-paren": ["error", { named: "never" }],
84 "@stylistic/space-in-parens": "error",
85 "@stylistic/space-infix-ops": "error",
86 "@stylistic/space-unary-ops": "error",
87 "@stylistic/spaced-comment": "error",
88 "@stylistic/switch-colon-spacing": "error",
89 "@stylistic/template-curly-spacing": "error",
90 "@stylistic/template-tag-spacing": "error",
91 "@stylistic/type-annotation-spacing": "error",
92 "@stylistic/type-generic-spacing": "error",
93 "@stylistic/type-named-tuple-spacing": "error",
94 "@stylistic/max-statements-per-line": ["error", { max: 1 }],
95 "@stylistic/multiline-comment-style": ["error", "separate-lines"],
96 "@stylistic/no-mixed-spaces-and-tabs": "error",
97 "@stylistic/no-tabs": "error",
98 "@stylistic/object-property-newline": ["error", { allowAllPropertiesOnSameLine: true }],
99 "@stylistic/one-var-declaration-per-line": "error",
100 "@stylistic/wrap-iife": ["error", "inside"],
101 // "@typescript-eslint/no-floating-promises": "error",
102 "@typescript-eslint/no-explicit-any": "error",
103 "@typescript-eslint/adjacent-overload-signatures": "error",
104 "@typescript-eslint/array-type": "error",
105 "@typescript-eslint/ban-ts-comment": "error",
106 "@typescript-eslint/no-wrapper-object-types": "error",
107 "@typescript-eslint/no-empty-object-type": "error",
108 "@typescript-eslint/no-unsafe-function-type": "error",
109 "@typescript-eslint/class-literal-property-style": "error",
110 "@typescript-eslint/consistent-type-definitions": "error",
111 "@typescript-eslint/consistent-type-exports": ["error", { fixMixedExportsWithInlineTypeSpecifier: true }],
112 "@typescript-eslint/consistent-type-imports": ["error", { fixStyle: "inline-type-imports" }],
113 // "@typescript-eslint/member-ordering": ["error", {
114 // default: {
115 // memberTypes: [
116 // "call-signature",
117 // "signature",
118 // "constructor",
119 // ["static-accessor", "static-field", "static-get", "static-method", "static-set"],
120 // ["accessor", "get", "method", "set"],
121 // "field"
122 // ],
123 // order: "alphabetically-case-insensitive"
124 // }
125 // }],
126 "@typescript-eslint/consistent-type-imports": "error",
127 "@typescript-eslint/method-signature-style": "error",
128 "@typescript-eslint/naming-convention": ["error", { selector: "typeLike", format: ["PascalCase"] }],
129 "@typescript-eslint/no-duplicate-enum-values": "error",
130 "@typescript-eslint/no-duplicate-type-constituents": "error",
131 "@typescript-eslint/no-empty-interface": "error",
132 "@typescript-eslint/no-import-type-side-effects": "error",
133 "@typescript-eslint/no-invalid-void-type": "error",
134 "@typescript-eslint/no-misused-new": "error",
135 "@typescript-eslint/no-redundant-type-constituents": "error",
136 "@typescript-eslint/no-require-imports": "error",
137 "@typescript-eslint/no-unnecessary-qualifier": "error",
138 "@typescript-eslint/no-unnecessary-type-arguments": "error",
139 "@typescript-eslint/no-unnecessary-type-constraint": "error",
140 "@typescript-eslint/no-unsafe-declaration-merging": "error",
141 "@typescript-eslint/no-unused-vars": ["error", {
142 args: "all",
143 argsIgnorePattern: "^_",
144 destructuredArrayIgnorePattern: "^_",
145 varsIgnorePattern: "^_"
146 }],
147 "@typescript-eslint/no-useless-empty-export": "error",
148 "@typescript-eslint/prefer-enum-initializers": "error",
149 "@typescript-eslint/prefer-function-type": "error",
150 "@typescript-eslint/triple-slash-reference": "error",
151 "@typescript-eslint/unified-signatures": "error",
152 "@typescript-eslint/consistent-generic-constructors": "error",
153 "@typescript-eslint/consistent-indexed-object-style": "error",
154 "@typescript-eslint/no-unused-expressions": "error",
155 "@typescript-eslint/require-await": "error",
156 "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error",
157 "@typescript-eslint/array-type": "error",
158 "@typescript-eslint/prefer-as-const": "error",
159 "@typescript-eslint/prefer-find": "error",
160 "@typescript-eslint/prefer-for-of": "error",
161 "@typescript-eslint/prefer-includes": "error",
162 "@typescript-eslint/prefer-reduce-type-parameter": "error",
163 "@typescript-eslint/prefer-return-this-type": "error",
164 "@typescript-eslint/prefer-string-starts-ends-with": "error",
165 "@typescript-eslint/prefer-ts-expect-error": "error",
166 "@typescript-eslint/restrict-plus-operands": "error",
167 "@typescript-eslint/no-confusing-void-expression": ["error", { ignoreArrowShorthand: true }],
168 "@typescript-eslint/no-meaningless-void-operator": "error",
169 "@typescript-eslint/no-mixed-enums": "error",
170 "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error",
171 "@typescript-eslint/no-unnecessary-type-assertion": "error",
172 "@typescript-eslint/unbound-method": "error",
173 "import/extensions": "off", // changed
174 "import/first": "error",
175 "import/newline-after-import": ["error", { considerComments: true }],
176 "import/no-absolute-path": "error",
177 "import/no-duplicates": "error",
178 "import/no-empty-named-blocks": "error",
179 "import/no-extraneous-dependencies": "error",
180 "import/no-relative-packages": "error",
181 "import/no-unused-modules": "error",
182 "import/no-self-import": "error",
183 "import/no-useless-path-segments": "error",
184 "import/no-cycle": ["error", { maxDepth: Infinity }],
185 "simple-import-sort/exports": "error",
186 "simple-import-sort/imports": ["error", { groups: [["^\\u0000", "^[^~./]"], ["^~"], ["^\\./", "^\\.\\./"]] }],
187 "unicorn/escape-case": "error",
188 // "unicorn/filename-case": ["error", { cases: { pascalCase: true, snakeCase: true, kebabCase: true } }],
189 "unicorn/no-hex-escape": "error",
190 "unicorn/no-zero-fractions": "error",
191 "unicorn/number-literal-case": "error",
192 "unicorn/numeric-separators-style": ["error", { number: { minimumDigits: 0 } }],
193 "unicorn/prefer-export-from": "error",
194 "unicorn/better-regex": "error",
195 "unicorn/catch-error-name": "error",
196 "unicorn/consistent-function-scoping": ["error", { checkArrowFunctions: false }],
197 "unicorn/empty-brace-spaces": "error",
198 "unicorn/error-message": "error",
199 "unicorn/new-for-builtins": "error",
200 "unicorn/no-array-callback-reference": "error",
201 "unicorn/no-array-for-each": "error",
202 "unicorn/no-array-push-push": "error",
203 "unicorn/no-console-spaces": "error",
204 "unicorn/no-for-loop": "error",
205 "unicorn/no-instanceof-array": "error",
206 "unicorn/no-negated-condition": "error",
207 "unicorn/no-new-array": "error",
208 "unicorn/no-new-buffer": "error",
209 "unicorn/no-object-as-default-parameter": "error",
210 "unicorn/no-static-only-class": "error",
211 "unicorn/no-thenable": "error",
212 "unicorn/no-this-assignment": "error",
213 "unicorn/no-unnecessary-await": "error",
214 "unicorn/no-unreadable-array-destructuring": "error",
215 "unicorn/no-unreadable-iife": "error",
216 "unicorn/no-useless-length-check": "error",
217 "unicorn/no-useless-promise-resolve-reject": "error",
218 "unicorn/no-useless-spread": "error",
219 "unicorn/no-useless-switch-case": "error",
220 "unicorn/prefer-array-find": "error",
221 "unicorn/prefer-array-flat": "error",
222 "unicorn/prefer-array-flat-map": "error",
223 "unicorn/prefer-array-index-of": "error",
224 "unicorn/prefer-array-some": "error",
225 "unicorn/prefer-at": "error",
226 "unicorn/prefer-date-now": "error",
227 "unicorn/prefer-default-parameters": "error",
228 "unicorn/prefer-includes": "error",
229 "unicorn/prefer-logical-operator-over-ternary": "error",
230 "unicorn/prefer-modern-math-apis": "error",
231 "unicorn/prefer-negative-index": "error",
232 "unicorn/prefer-number-properties": "error",
233 "unicorn/prefer-object-from-entries": "error",
234 "unicorn/prefer-optional-catch-binding": "error",
235 "unicorn/prefer-prototype-methods": "error",
236 "unicorn/prefer-regexp-test": "error",
237 "unicorn/prefer-set-has": "error",
238 "unicorn/prefer-spread": "error",
239 "unicorn/prefer-string-slice": "error",
240 "unicorn/prefer-string-starts-ends-with": "error",
241 "unicorn/prefer-string-trim-start-end": "error",
242 "unicorn/prefer-switch": "error",
243 "unicorn/prefer-type-error": "error",
244 "unicorn/require-number-to-fixed-digits-argument": "error",
245 "unicorn/throw-new-error": "error",
246 "no-dupe-else-if": "error",
247 "no-template-curly-in-string": "error",
248 "no-unexpected-multiline": "error",
249 "no-unreachable": "error",
250 "no-unreachable-loop": "error",
251 "default-case-last": "error",
252 "dot-notation": "error",
253 eqeqeq: "error",
254 // "new-cap": "error",
255 // "no-console": "error",
256 "no-empty": "error",
257 // "no-nested-ternary": "error",
258 "no-unneeded-ternary": "error",
259 "no-var": "error",
260 "for-direction": "error",
261 "no-constant-condition": "error",
262 "no-constructor-return": "error",
263 "no-duplicate-case": "error",
264 "no-else-return": "error",
265 "no-implicit-coercion": "error",
266 "no-lonely-if": "error",
267 "no-return-assign": "error",
268 "no-self-compare": "error",
269 "no-throw-literal": "error",
270 "no-undef-init": "error",
271 "no-unused-expressions": "off",
272 "no-useless-concat": "error",
273 "no-useless-return": "error",
274 "object-shorthand": "error",
275 "one-var": ["error", "never"],
276 "prefer-arrow-callback": "error",
277 "prefer-const": "error",
278 "prefer-destructuring": ["error", { object: true, array: false }],
279 "prefer-object-spread": "error",
280 "prefer-rest-params": "error",
281 "prefer-spread": "error",
282 radix: "error",
283 yoda: "error"
284 },
285 settings: {
286 react: {
287 version: "detect", // Automatically detects the React version
288 },
289 }
290 },
291 {
292 ignores: ["node_modules", ".next", "**/gt4.ts", "next-env.d.ts"]
293 }
294)