const path = require("path");
module.exports = {
ignorePatterns: [".eslintrc.js", "frontend/**/*"],
env: {
browser: true,
es6: true,
node: true
},
// noInlineConfig: true, // disallows using /* eslint-disable */ comments
parser: "@typescript-eslint/parser",
parserOptions: {
project: path.join(__dirname, "tsconfig.json"),
sourceType: "module",
},
plugins: ["@ubccpsc310/descriptive"],
extends: [
// disables any rules that conflict with `prettier`
"prettier",
],
overrides: [
{
files: ["**/*.spec.ts"],
rules: {
"@ubccpsc310/descriptive/max-lines": "off",
"max-lines": "off",
// `describe` functions exceed this limit easily
"@ubccpsc310/descriptive/max-lines-per-function": "off",
"max-lines-per-function": "off",
// `describe`/`it` have 3 additional callbacks (if they want to have two nested describes)
"@ubccpsc310/descriptive/max-nested-callbacks": ["error", 3 + 2],
"max-nested-callbacks": ["error", 3 + 2],
},
},
],
rules: {
// safety rules
"@ubccpsc310/descriptive/ban-tslint-comment": "error",
"@ubccpsc310/descriptive/no-eval": "error",
// normal rules
"@ubccpsc310/descriptive/await-thenable": "error",
"@ubccpsc310/descriptive/consistent-generic-constructors": "error",
"@ubccpsc310/descriptive/dot-notation": "error",
"@ubccpsc310/descriptive/eqeqeq": "error",
"@ubccpsc310/descriptive/explicit-function-return-type": "error",
"@ubccpsc310/descriptive/explicit-member-accessibility": [
"error",
{
overrides: {
constructors: "off",
},
},
],
"@ubccpsc310/descriptive/max-len": [
"error",
{
code: 120,
ignoreComments: true,
ignoreUrls: true,
ignoreStrings: true,
},
],
"@ubccpsc310/descriptive/max-lines": [
"error",
{
max: 300,
skipComments: true,
skipBlankLines: true,
},
],
"@ubccpsc310/descriptive/max-lines-per-function": [
"error",
{
max: 35,
skipComments: true,
skipBlankLines: true,
},
],
"@ubccpsc310/descriptive/max-nested-callbacks": ["error", 2],
"@ubccpsc310/descriptive/naming-convention": [
"error",
{
selector: "typeLike",
format: ["PascalCase"],
},
{
selector: "variable",
format: ["camelCase", "PascalCase", "UPPER_CASE"],
},
],
"@ubccpsc310/descriptive/no-async-promise-executor": "error",
"@ubccpsc310/descriptive/no-await-in-loop": "error",
"@ubccpsc310/descriptive/no-console": "warn",
"@ubccpsc310/descriptive/no-floating-promises": [
"error",
{
ignoreIIFE: true,
},
],
"@ubccpsc310/descriptive/no-magic-numbers": [
"error",
{
ignoreClassFieldInitialValues: true,
ignoreDefaultValues: true,
ignore: [-2, -1, 0, 1, 2, 10, 100],
ignoreArrayIndexes: true,
},
],
"@ubccpsc310/descriptive/no-misused-promises": [
"error",
{
checksConditionals: true,
checksVoidReturn: false,
},
],
"@ubccpsc310/descriptive/no-shadow": "error",
"@ubccpsc310/descriptive/no-unused-vars": [
"error",
{
args: "none",
argsIgnorePattern: "^_",
caughtErrors: "all",
caughtErrorsIgnorePattern: "^_",
destructuredArrayIgnorePattern: "^_",
varsIgnorePattern: "^_",
ignoreRestSiblings: true,
},
],
"@ubccpsc310/descriptive/no-var": "error",
"@ubccpsc310/descriptive/prefer-const": "error",
"@ubccpsc310/descriptive/prefer-for-of": "error",
"@ubccpsc310/descriptive/prefer-optional-chain": "error",
"@ubccpsc310/descriptive/promise-function-async": "error",
},
};