CourseInsights / .eslintrc.js
.eslintrc.js
Raw
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",
	},
};