// @ts-check import { configs, configure, globals } from './eslint-ps-standard.mjs'; export default configure([ { ignores: [ "logs/", "node_modules/", "dist/", "data/**/learnsets.ts", "tools/set-import/importer.js", "tools/set-import/sets", "tools/modlog/converter.js", "server/global-variables.d.ts", ], }, { name: "JavaScript", files: [ '*.mjs', // look mom I'm linting myself! '**/*.js', ], extends: [configs.js], languageOptions: { globals: { ...globals.builtin, ...globals.node, ...globals.mocha, // globals in test Dex: false, toID: false, Teams: false, Config: false, Users: false, Rooms: false, Ladders: false, Chat: false, Punishments: false, LoginServer: false, }, }, rules: { "@stylistic/max-len": "off", "no-shadow": "off", // mostly just too lazy, someone should fix this sometime }, }, { name: "TypeScript", files: [ "config/*.ts", "data/**/*.ts", "lib/*.ts", "server/**/*.ts", "server/**/*.tsx", "sim/**/*.ts", "tools/set-import/*.ts", ], extends: [configs.ts], languageOptions: { parserOptions: { projectService: true, tsconfigRootDir: import.meta.dirname, }, }, rules: { // TEMPORARY // "@typescript-eslint/restrict-plus-operands": "off", // we use these for grouping // "@typescript-eslint/restrict-template-expressions": ["error", { // allow: [ // {name: ['Error', 'URL', 'URLSearchParams', 'unknown'], from: 'lib'}, // // {name: ['ModifiableValue'], from: 'file'}, // ], // allowBoolean: false, allowNever: false, allowNullish: false, allowRegExp: false, // }], "@typescript-eslint/restrict-template-expressions": "off", // hotpatching, of course "@typescript-eslint/no-require-imports": "off", // too new, let's give it more time "prefer-object-has-own": "off", // we do use these for documentation "@typescript-eslint/no-redundant-type-constituents": "off", // we actually pass around unbound methods a lot (event handlers in Sim, mainly) "@typescript-eslint/unbound-method": "off", // event handlers frequently don't have known types "@typescript-eslint/no-unsafe-function-type": "off", // too strict when there's no way to ensure that catch catches an error "@typescript-eslint/prefer-promise-reject-errors": "off", // we use import() everywhere "@typescript-eslint/consistent-type-imports": ["error", { disallowTypeAnnotations: false, fixStyle: "inline-type-imports" }], // TS has _way_ too many issues to require comments on all of them // most commonly: // - closed types https://github.com/microsoft/TypeScript/issues/12936 // - unknown property access "@typescript-eslint/ban-ts-comment": ["error", { 'ts-check': false, 'ts-expect-error': false, 'ts-ignore': true, 'ts-nocheck': true, }], // we're inconsistent about comma dangle in functions. TODO: fix later "@stylistic/comma-dangle": ["error", { "arrays": "always-multiline", "objects": "always-multiline", "imports": "always-multiline", "exports": "always-multiline", "functions": "only-multiline", "importAttributes": "always-multiline", "dynamicImports": "always-multiline", "enums": "always-multiline", "generics": "always-multiline", "tuples": "always-multiline", }], // there are a few of these that make sense, in scripts "no-useless-return": "off", }, }, ]);