UNPKG

@gitlab/eslint-plugin

Version:

GitLab package for our custom eslint rules

141 lines (138 loc) 4.16 kB
const confusingBrowserGlobals = require('confusing-browser-globals'); const globals = require('globals'); const unicornPlugin = require('eslint-plugin-unicorn'); const promisePlugin = require('eslint-plugin-promise'); const importPlugin = require('eslint-plugin-import'); // Import all the base configurations const bestPracticesConfig = require('../../lib/configs/base/best-practices'); const errorsConfig = require('../../lib/configs/base/errors'); const nodeConfig = require('../../lib/configs/base/node'); const styleConfig = require('../../lib/configs/base/style'); const variablesConfig = require('../../lib/configs/base/variables'); const es6Config = require('../../lib/configs/base/es6'); const importsConfig = require('../../lib/configs/base/imports'); const strictConfig = require('../../lib/configs/base/strict'); /* This plugin contains rules related to GitLab JavaScript style guide Vue specific rules are in lib/configs/vue.js */ module.exports = { languageOptions: { globals: { ...globals.browser, ...globals.es2020, ...globals.node, ...globals.es6, }, ecmaVersion: 'latest', sourceType: 'module', parserOptions: { parser: 'espree', }, }, plugins: { unicorn: unicornPlugin, promise: promisePlugin, import: importPlugin, }, settings: { // Merge import settings from imports config ...importsConfig.settings, }, rules: { ...promisePlugin.configs['flat/recommended'].rules, // Merge all rules from the base configurations ...bestPracticesConfig.rules, ...errorsConfig.rules, ...nodeConfig.rules, ...styleConfig.rules, ...variablesConfig.rules, ...es6Config.rules, ...importsConfig.rules, ...strictConfig.rules, // Override specific rules from base configs // Promise rule customizations 'promise/catch-or-return': [ 'error', { allowFinally: true, }, ], camelcase: [ 'error', { properties: 'never', ignoreDestructuring: true, }, ], 'default-param-last': 'off', 'arrow-body-style': 'off', 'unicorn/filename-case': ['error', { case: 'snakeCase' }], 'unicorn/no-array-callback-reference': 'error', 'import/prefer-default-export': 'off', 'import/no-default-export': 'error', 'import/no-deprecated': 'error', 'import/no-dynamic-require': ['error', { esmodule: true }], 'no-implicit-coercion': [ 'error', { boolean: true, number: true, string: true, }, ], 'no-param-reassign': [ 'error', { props: true, ignorePropertyModificationsFor: ['acc', 'accumulator', 'el', 'element', 'state'], }, ], 'no-restricted-exports': [ 'error', { restrictedNamedExports: [ 'then', // avoid confusion when used with dynamic `import()` promise ], }, ], 'no-restricted-syntax': 'off', 'no-sequences': [ 'error', { allowInParentheses: false, }, ], 'no-restricted-globals': [ 'error', { name: 'isFinite', message: 'Use Number.isFinite instead https://github.com/airbnb/javascript#standard-library--isfinite', }, { name: 'isNaN', message: 'Use Number.isNaN instead https://github.com/airbnb/javascript#standard-library--isnan', }, { name: 'escape', message: "The global `escape` function is unsafe. Did you mean to use `encodeURI`, `encodeURIComponent` or lodash's `escape` instead?", }, { name: 'unescape', message: "The global `unescape` function is unsafe. Did you mean to use `decodeURI`, `decodeURIComponent` or lodash's `unescape` instead?", }, ].concat(confusingBrowserGlobals), 'import/order': [ 'error', { groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'], }, ], // https://docs.gitlab.com/ee/development/fe_guide/style/javascript.html#limit-number-of-parameters 'max-params': ['error', { max: 3 }], }, };