flotilla/eslint.config.js
2026-09-21 10:53:27 -07:00

73 lines
2.1 KiB
JavaScript

import js from "@eslint/js"
import ts from "typescript-eslint"
import svelte from "eslint-plugin-svelte"
import prettier from "eslint-config-prettier"
import globals from "globals"
/** @type {import('eslint').Linter.Config[]} */
export default [
js.configs.recommended,
...ts.configs.recommended,
...svelte.configs["flat/recommended"],
prettier,
...svelte.configs["flat/prettier"],
{
languageOptions: {
globals: {
...globals.browser,
...globals.node,
},
},
},
{
files: ["**/*.svelte"],
languageOptions: {
parserOptions: {
parser: ts.parser,
},
},
rules: {
// eslint doesn't see type parameters declared by <script generics="...">
"no-undef": "off",
// A `$bindable()` prop with no fallback reads as an assignment nothing consumes, since the
// parent is what consumes it.
"no-useless-assignment": "off",
},
},
{
ignores: ["build/", ".svelte-kit/", "dist/"],
},
{
rules: {
"a11y-click-events-have-key-events": "off",
"a11y-autofocus": "off",
"no-constant-condition": "off",
"no-unused-vars": "off",
"no-useless-escape": "off",
"no-extra-semi": "off",
"no-async-promise-executor": "off",
curly: ["error", "all"],
"prefer-const": ["error", {destructuring: "all"}],
"no-eq-null": "error",
"no-restricted-syntax": [
"error",
{
selector:
"Literal[raw='null']:not(CallExpression[callee.property.name='stringify'] > Literal)",
message: "Use undefined instead of null.",
},
],
"svelte/valid-compile": "off",
"svelte/no-at-html-tags": "off",
"svelte/no-navigation-without-resolve": "off",
"svelte/prefer-svelte-reactivity": "off",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-extra-semi": "off",
"@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/no-unused-vars": [
"error",
{args: "none", destructuredArrayIgnorePattern: "^_d?$", caughtErrors: "none"},
],
},
},
]