ldc-laravel-base-project/eslint.config.js
2026-07-09 17:32:17 +02:00

113 lines
2.7 KiB
JavaScript

import eslintReact from "@eslint-react/eslint-plugin";
import { createTypeScriptImportResolver } from "eslint-import-resolver-typescript";
import importX from "eslint-plugin-import-x";
import prettier from "eslint-plugin-prettier/recommended";
import reactHooks from "eslint-plugin-react-hooks";
import globals from "globals";
import tseslint from "typescript-eslint";
export default tseslint.config(
{
files: ["resources/ts/**/*.{ts,tsx,js,jsx}"],
},
{
ignores: [
"node_modules/**",
"public/**",
"vendor/**",
"packages/**",
"resources/ts/components/ui/**",
],
},
tseslint.configs.recommended,
tseslint.configs.strictTypeChecked,
tseslint.configs.stylisticTypeChecked,
{
languageOptions: {
globals: {
...globals.browser,
...globals.es2021,
...globals.node,
},
parserOptions: {
ecmaVersion: 2020,
sourceType: "module",
ecmaFeatures: { jsx: true },
projectService: true,
tsconfigRootDir: import.meta.dirname,
},
},
},
{
settings: {
react: { version: "19.0" },
},
rules: {
"react/jsx-filename-extension": "off",
"react/prop-types": "off",
"react/require-default-props": "off",
},
},
reactHooks.configs.flat.recommended,
{
plugins: {
"import-x": importX,
"@eslint-react": eslintReact,
},
settings: {
"import-x/resolver-next": [
createTypeScriptImportResolver({
project: "./tsconfig.json",
}),
],
},
rules: {
...eslintReact.configs.recommended.rules,
...importX.configs.recommended.rules,
...importX.configs.typescript.rules,
"import-x/extensions": [
"error",
"ignorePackages",
{ ts: "never", tsx: "never", js: "never", jsx: "never" },
],
"import-x/order": [
"error",
{
groups: [
"builtin",
"external",
"internal",
"parent",
"sibling",
"index",
],
"newlines-between": "always",
alphabetize: { order: "asc", caseInsensitive: true },
},
],
},
},
{
rules: {
"@typescript-eslint/no-unused-vars": [
"error",
{ argsIgnorePattern: "^_", varsIgnorePattern: "^_" },
],
"@typescript-eslint/consistent-type-imports": [
"error",
{ prefer: "type-imports", fixStyle: "inline-type-imports" },
],
"@typescript-eslint/no-explicit-any": "warn",
},
},
{
rules: {
"no-console": ["warn", { allow: ["warn", "error"] }],
},
},
{
files: ["*.js", "*.ts", "*.cjs", "*.mjs"],
extends: [tseslint.configs.disableTypeChecked],
},
prettier,
);