UNPKG

@overlookmotel/eslint-config

Version:
163 lines (156 loc) 5.54 kB
/* -------------------- * `@overlookmotel/eslint-config` module * ------------------*/ 'use strict'; // Exports module.exports = { extends: [ 'airbnb-base', 'plugin:eslint-comments/recommended' ], parserOptions: { ecmaVersion: 'latest' }, // Parse `.mjs` files as ES Modules. // Would be ideal to also interpret `.js` files in a directory with `package.json` containing // `"type": "module"` as ESM, but this is not currently supported by ESLint. // https://github.com/eslint/eslint/issues/14727 overrides: [ { files: ['*.mjs'], parserOptions: { sourceType: 'module' } } ], plugins: ['jsdoc'], settings: { jsdoc: { preferredTypes: { // Use `{Object}` not `{object}` type for JSDoc params + return values object: {replacement: 'Object'} }, tagNamePreference: { // Use `@extends` for classes instead of `@augments` augments: 'extends' } } }, rules: { // Alterations of airbnb rules 'max-len': ['error', { code: 105, tabWidth: 2, ignoreStrings: true, ignoreTemplateLiterals: true, ignoreRegExpLiterals: true, ignoreUrls: true }], indent: ['error', 'tab', {SwitchCase: 1}], 'no-tabs': ['error', {allowIndentationTabs: true}], 'comma-dangle': ['error', 'never'], 'object-curly-spacing': ['error', 'never'], 'one-var': ['off'], 'no-plusplus': ['off'], 'no-restricted-syntax': ['off'], 'no-param-reassign': ['off'], 'no-use-before-define': ['error', {functions: false}], 'object-curly-newline': ['error', {multiline: true, consistent: true}], 'one-var-declaration-per-line': ['error', 'initializations'], 'prefer-destructuring': ['error', { VariableDeclarator: {array: false, object: true}, AssignmentExpression: {array: false, object: false} }, {enforceForRenamedProperties: false} ], 'no-invalid-this': ['error'], 'no-underscore-dangle': ['off'], 'space-before-function-paren': ['error', { anonymous: 'never', named: 'never', asyncArrow: 'always' }], 'func-names': ['off'], 'function-paren-newline': ['off'], 'function-call-argument-newline': ['off'], 'object-shorthand': ['error', 'always', { avoidQuotes: true, ignoreConstructors: true, avoidExplicitReturnArrows: true }], 'generator-star-spacing': ['error', { before: false, after: true, anonymous: {before: false, after: false}, method: {before: false, after: false} }], 'lines-between-class-members': ['error', 'always', {exceptAfterSingleLine: true}], 'no-console': ['error'], 'no-continue': ['off'], 'no-await-in-loop': ['off'], 'guard-for-in': ['off'], 'arrow-parens': ['error', 'as-needed', {requireForBlockBody: true}], 'max-classes-per-file': ['off'], 'no-nested-ternary': ['off'], 'no-return-await': ['off'], 'no-multi-assign': ['off'], // import rules 'import/extensions': ['error', 'ignorePackages'], 'import/no-unresolved': ['error', {commonjs: true}], // eslint-comments rules 'eslint-comments/no-unused-disable': ['error'], 'eslint-comments/disable-enable-pair': ['error', {allowWholeFile: true}], // jsdoc rules // Comprises all `eslint-plugin-jsdoc`'s rules, except those flagged as "Disabled" below. 'jsdoc/check-access': ['error'], 'jsdoc/check-alignment': ['error'], // Disabled as not currently compatible with ESLint 8. // See https://github.com/gajus/eslint-plugin-jsdoc/#eslint-plugin-jsdoc-rules-check-examples 'jsdoc/check-examples': ['off'], // Disabled // 'jsdoc/check-indentation': ['error'], // Disabled 'jsdoc/check-line-alignment': ['error'], 'jsdoc/check-param-names': ['error'], 'jsdoc/check-property-names': ['error'], 'jsdoc/check-syntax': ['error'], 'jsdoc/check-tag-names': ['error'], 'jsdoc/check-types': ['error'], 'jsdoc/check-values': ['error'], 'jsdoc/empty-tags': ['error'], 'jsdoc/implements-on-classes': ['error'], // 'jsdoc/match-description': ['error'], // Disabled 'jsdoc/multiline-blocks': ['error'], // 'jsdoc/newline-after-description': ['error'], // Disabled 'jsdoc/no-bad-blocks': ['error'], // 'jsdoc/no-defaults': ['error'], // Disabled // 'jsdoc/no-missing-syntax': ['error'], // Disabled 'jsdoc/no-multi-asterisks': ['error'], // 'jsdoc/no-restricted-syntax': ['error'], // Disabled // 'jsdoc/no-types': ['error'], // Disabled 'jsdoc/no-undefined-types': ['error', {definedTypes: ['Iterable']}], 'jsdoc/require-asterisk-prefix': ['error'], 'jsdoc/require-description': ['error'], // 'jsdoc/require-description-complete-sentence': ['error'], // Disabled // 'jsdoc/require-example': ['error'], // Disabled // 'jsdoc/require-file-overview': ['error'], // Disabled 'jsdoc/require-hyphen-before-param-description': ['error'], // 'jsdoc/require-jsdoc': ['error'], // Disabled 'jsdoc/require-param': ['error'], 'jsdoc/require-param-description': ['error'], 'jsdoc/require-param-name': ['error'], 'jsdoc/require-param-type': ['error'], 'jsdoc/require-property': ['error'], 'jsdoc/require-property-description': ['error'], 'jsdoc/require-property-name': ['error'], 'jsdoc/require-property-type': ['error'], 'jsdoc/require-returns': ['error', {forceRequireReturn: true, forceReturnsWithAsync: true}], 'jsdoc/require-returns-check': ['error'], 'jsdoc/require-returns-description': ['error'], 'jsdoc/require-returns-type': ['error'], 'jsdoc/require-throws': ['error'], 'jsdoc/require-yields': ['error'], 'jsdoc/require-yields-check': ['error'], 'jsdoc/tag-lines': ['error'], 'jsdoc/valid-types': ['error'] } };