You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

138 lines
4.6 KiB

import globals from "globals";
import babelParser from "@babel/eslint-parser";
import tsParser from "@typescript-eslint/parser";
import tsPlugin from "@typescript-eslint/eslint-plugin";
import js from "@eslint/js";
export default [
{
files: ["**/*.js", "**/*.mjs", "**/*.jsx"],
languageOptions: {
globals: {
...globals.browser,
...globals.node,
},
parser: babelParser,
ecmaVersion: 2018,
sourceType: "module",
parserOptions: {
requireConfigFile: false,
babelOptions: {
babelrc: false,
configFile: false,
presets: ["@babel/preset-env"],
},
ecmaFeatures: {
modules: true,
destructuring: true,
classes: true,
forOf: true,
blockBindings: true,
arrowFunctions: true,
},
},
},
settings: {
ecmascript: 7,
},
rules: {
// Start with ESLint recommended rules
...js.configs.recommended.rules,
// Apply our custom overrides (keeping original project preferences)
"arrow-body-style": 0,
"prefer-arrow-callback": 0,
"arrow-parens": 0,
"no-param-reassign": 0,
"no-new": 0,
"consistent-return": 0,
"key-spacing": 0,
"no-multi-spaces": 0,
"no-underscore-dangle": 0,
"one-var": 0,
"global-require": 0,
"class-methods-use-this": 0,
"comma-dangle": ["error", {
arrays: "always-multiline",
objects: "always-multiline",
imports: "always-multiline",
exports: "always-multiline",
functions: "never",
}],
"func-names": 0,
"function-paren-newline": 0,
"indent": ["error", 2],
"new-cap": 0,
"no-plusplus": 0,
"no-return-assign": 0,
"quote-props": 0,
"template-curly-spacing": 0,
"no-unused-expressions": 0,
// Import rules (basic ones that don't require the import plugin)
"no-duplicate-imports": "error",
// Line ending for Unix/macOS (updated for current platform)
"linebreak-style": ["error", "unix"],
// Basic ES6+ rules that replace some airbnb functionality
"prefer-const": "warn",
"no-var": "error",
"prefer-template": "warn",
"object-shorthand": "warn",
},
},
{
files: ["**/*.ts", "**/*.tsx"],
languageOptions: {
globals: {
...globals.browser,
...globals.node,
},
parser: tsParser,
ecmaVersion: 2020,
sourceType: "module",
parserOptions: {
project: "./tsconfig.json",
ecmaFeatures: {
jsx: true,
},
},
},
plugins: {
"@typescript-eslint": tsPlugin,
},
rules: {
// TypeScript ESLint recommended rules
...tsPlugin.configs.recommended.rules,
// Apply our custom overrides for TypeScript
"@typescript-eslint/no-explicit-any": "warn",
"@typescript-eslint/no-unused-vars": "error",
"@typescript-eslint/explicit-function-return-type": "off",
"@typescript-eslint/explicit-module-boundary-types": "off",
"@typescript-eslint/no-inferrable-types": "off",
"@typescript-eslint/prefer-nullish-coalescing": "warn",
"@typescript-eslint/prefer-optional-chain": "warn",
"@typescript-eslint/no-unnecessary-type-assertion": "warn",
// Consistent with JS config
"comma-dangle": ["error", {
arrays: "always-multiline",
objects: "always-multiline",
imports: "always-multiline",
exports: "always-multiline",
functions: "never",
}],
"indent": ["error", 2],
"no-unused-expressions": "off",
"@typescript-eslint/no-unused-expressions": "off",
},
},
{
// Global ignores
ignores: ["dist/**/*", "node_modules/**/*", "*.min.js"],
},
];