207 lines
5.5 KiB
JavaScript

module.exports = {
extends: ['airbnb-base'],
parser: '@babel/eslint-parser',
parserOptions: {
ecmaFeatures: {
jsx: true
},
babelOptions: {
plugins: [
'@babel/plugin-syntax-import-assertions',
],
},
},
plugins: [
'@babel',
'jsdoc',
],
env: {
browser: true,
commonjs: true,
jasmine: true,
jest: true,
es6: true,
},
rules: {
'arrow-parens': [
'error',
'as-needed',
{ requireForBlockBody: true }
],
'arrow-body-style': 'off',
'class-methods-use-this': 'off',
'comma-dangle': 'off',
'consistent-return': 'off',
curly: ['error', 'all'],
'func-names': 'off',
'import/no-extraneous-dependencies': 'off',
'import/prefer-default-export': 'off',
indent: [
'error',
2,
{
SwitchCase: 1,
FunctionDeclaration: { parameters: 'first' },
FunctionExpression: { parameters: 'first' }
}
],
'max-len': [
'error',
{
code: 120,
ignoreComments: true,
ignorePattern: '^\\s*x?it\\s*\\(', // Ignore long test names (e.q: `it("something long")`).
}
],
'newline-per-chained-call': 'off',
'no-constant-condition': [
'error',
{ checkLoops: false }
],
'no-eq-null': 'error',
'no-mixed-operators': [
'error',
{ groups: [['+', '-', '*', '/', '%', '**']] }
],
'no-multiple-empty-lines': [
'error',
{ max: 1 }
],
'no-param-reassign': 'off',
'no-plusplus': [
'error',
{ allowForLoopAfterthoughts: true }
],
'no-restricted-globals': [
'error',
'Handsontable',
'window',
'document',
{
name: 'console',
message: [
'Using the `console` object is not allowed within Handsontable.',
'Please use one of the helpers from the `src/helpers/console.js` file instead.'
].join(''),
},
],
'no-underscore-dangle': 'off',
'no-use-before-define': [
'error',
{
functions: false,
classes: false
}
],
'no-void': 'off',
'padded-blocks': 'off',
quotes: ['error', 'single'],
'space-before-function-paren': ['error', 'never'],
'padding-line-between-statements': [
'error',
{ blankLine: 'always', prev: '*', next: 'return' },
{ blankLine: 'always', prev: '*', next: ['if', 'for', 'switch', 'while'] },
{ blankLine: 'any', prev: 'block-like', next: ['if', 'for', 'switch', 'while'] },
{ blankLine: 'always', prev: ['const', 'let', 'var'], next: '*' },
{ blankLine: 'any', prev: ['const', 'let', 'var'], next: ['const', 'let', 'var'] }
],
'jsdoc/check-access': 'error',
'jsdoc/check-alignment': 'error',
'jsdoc/check-examples': 'off',
'jsdoc/check-indentation': 'off',
'jsdoc/check-param-names': 'error',
'jsdoc/check-property-names': 'error',
'jsdoc/check-syntax': 'error',
'jsdoc/check-tag-names': [
'error',
{
definedTags: [
'plugin',
'util',
'experimental',
'deprecated',
'preserve',
'core',
'TODO',
'category',
'package',
'template',
]
}
],
'jsdoc/check-types': 'error',
'jsdoc/check-values': 'error',
'jsdoc/empty-tags': 'error',
'jsdoc/implements-on-classes': 'error',
'jsdoc/match-description': 'off',
'jsdoc/newline-after-description': 'error',
'jsdoc/no-bad-blocks': 'off',
'jsdoc/no-defaults': 'off',
'jsdoc/no-types': 'off',
'jsdoc/no-undefined-types': 'off',
'jsdoc/require-description-complete-sentence': 'error',
'jsdoc/require-description': 'off',
'jsdoc/require-example': 'off',
'jsdoc/require-file-overview': 'off',
'jsdoc/require-hyphen-before-param-description': 'off',
'jsdoc/require-jsdoc': 'error',
'jsdoc/require-param-description': 'error',
'jsdoc/require-param-name': 'error',
'jsdoc/require-param-type': 'error',
'jsdoc/require-param': 'error',
'jsdoc/require-property-description': 'error',
'jsdoc/require-property-name': 'error',
'jsdoc/require-property-type': 'error',
'jsdoc/require-property': 'error',
'jsdoc/require-returns-check': 'error',
'jsdoc/require-returns-description': 'off',
'jsdoc/require-returns-type': 'error',
'jsdoc/require-returns': 'error',
'jsdoc/valid-types': 'error',
// TODO: To be reviewed:
'operator-linebreak': 'off',
'object-curly-newline': 'off',
'prefer-destructuring': 'off',
'implicit-arrow-linebreak': 'off',
'function-paren-newline': 'off',
'max-classes-per-file': 'off',
'import/no-useless-path-segments': 'off',
'lines-between-class-members': 'off',
'semi-style': 'off',
'no-else-return': 'off',
'import/no-cycle': 'off',
'no-lone-blocks': 'off',
'getter-return': 'off',
'switch-colon-spacing': 'off',
'operator-assignment': 'off',
},
overrides: [
{
files: [
'scripts/**/*.mjs',
'scripts/**/*.js',
],
rules: {
'import/extensions': [
'error',
'never',
{
js: ['error', 'always'],
mjs: ['error', 'always'],
json: ['error', 'always'],
}
],
'no-restricted-globals': 'off',
'no-console': 'off',
'no-await-in-loop': 'off',
'no-restricted-syntax': [
'error',
'ForInStatement',
'LabeledStatement',
'WithStatement',
]
}
},
],
};