| module.exports = { | |
|   env: { | |
|     es6: true | |
|   }, | |
|   parserOptions: { | |
|     ecmaVersion: 6, | |
|     sourceType: 'module', | |
|     ecmaFeatures: { | |
|       generators: false, | |
|       objectLiteralDuplicateProperties: false | |
|     } | |
|   }, | |
| 
 | |
|   rules: { | |
|     // enforces no braces where they can be omitted | |
|     // https://eslint.org/docs/rules/arrow-body-style | |
|     // TODO: enable requireReturnForObjectLiteral? | |
|     'arrow-body-style': ['error', 'as-needed', { | |
|       requireReturnForObjectLiteral: false, | |
|     }], | |
| 
 | |
|     // require parens in arrow function arguments | |
|     // https://eslint.org/docs/rules/arrow-parens | |
|     'arrow-parens': ['error', 'always'], | |
| 
 | |
|     // require space before/after arrow function's arrow | |
|     // https://eslint.org/docs/rules/arrow-spacing | |
|     'arrow-spacing': ['error', { before: true, after: true }], | |
| 
 | |
|     // verify super() callings in constructors | |
|     'constructor-super': 'error', | |
| 
 | |
|     // enforce the spacing around the * in generator functions | |
|     // https://eslint.org/docs/rules/generator-star-spacing | |
|     'generator-star-spacing': ['error', { before: false, after: true }], | |
| 
 | |
|     // disallow modifying variables of class declarations | |
|     // https://eslint.org/docs/rules/no-class-assign | |
|     'no-class-assign': 'error', | |
| 
 | |
|     // disallow arrow functions where they could be confused with comparisons | |
|     // https://eslint.org/docs/rules/no-confusing-arrow | |
|     'no-confusing-arrow': ['error', { | |
|       allowParens: true, | |
|     }], | |
| 
 | |
|     // disallow modifying variables that are declared using const | |
|     'no-const-assign': 'error', | |
| 
 | |
|     // disallow duplicate class members | |
|     // https://eslint.org/docs/rules/no-dupe-class-members | |
|     'no-dupe-class-members': 'error', | |
| 
 | |
|     // disallow importing from the same path more than once | |
|     // https://eslint.org/docs/rules/no-duplicate-imports | |
|     // replaced by https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md | |
|     'no-duplicate-imports': 'off', | |
| 
 | |
|     // disallow symbol constructor | |
|     // https://eslint.org/docs/rules/no-new-symbol | |
|     'no-new-symbol': 'error', | |
| 
 | |
|     // Disallow specified names in exports | |
|     // https://eslint.org/docs/rules/no-restricted-exports | |
|     'no-restricted-exports': ['error', { | |
|       restrictedNamedExports: [ | |
|         'default', // use `export default` to provide a default export | |
|         'then', // this will cause tons of confusion when your module is dynamically `import()`ed, and will break in most node ESM versions | |
|       ], | |
|     }], | |
| 
 | |
|     // disallow specific imports | |
|     // https://eslint.org/docs/rules/no-restricted-imports | |
|     'no-restricted-imports': ['off', { | |
|       paths: [], | |
|       patterns: [] | |
|     }], | |
| 
 | |
|     // disallow to use this/super before super() calling in constructors. | |
|     // https://eslint.org/docs/rules/no-this-before-super | |
|     'no-this-before-super': 'error', | |
| 
 | |
|     // disallow useless computed property keys | |
|     // https://eslint.org/docs/rules/no-useless-computed-key | |
|     'no-useless-computed-key': 'error', | |
| 
 | |
|     // disallow unnecessary constructor | |
|     // https://eslint.org/docs/rules/no-useless-constructor | |
|     'no-useless-constructor': 'error', | |
| 
 | |
|     // disallow renaming import, export, and destructured assignments to the same name | |
|     // https://eslint.org/docs/rules/no-useless-rename | |
|     'no-useless-rename': ['error', { | |
|       ignoreDestructuring: false, | |
|       ignoreImport: false, | |
|       ignoreExport: false, | |
|     }], | |
| 
 | |
|     // require let or const instead of var | |
|     'no-var': 'error', | |
| 
 | |
|     // require method and property shorthand syntax for object literals | |
|     // https://eslint.org/docs/rules/object-shorthand | |
|     'object-shorthand': ['error', 'always', { | |
|       ignoreConstructors: false, | |
|       avoidQuotes: true, | |
|     }], | |
| 
 | |
|     // suggest using arrow functions as callbacks | |
|     'prefer-arrow-callback': ['error', { | |
|       allowNamedFunctions: false, | |
|       allowUnboundThis: true, | |
|     }], | |
| 
 | |
|     // suggest using of const declaration for variables that are never modified after declared | |
|     'prefer-const': ['error', { | |
|       destructuring: 'any', | |
|       ignoreReadBeforeAssign: true, | |
|     }], | |
| 
 | |
|     // Prefer destructuring from arrays and objects | |
|     // https://eslint.org/docs/rules/prefer-destructuring | |
|     'prefer-destructuring': ['error', { | |
|       VariableDeclarator: { | |
|         array: false, | |
|         object: true, | |
|       }, | |
|       AssignmentExpression: { | |
|         array: true, | |
|         object: false, | |
|       }, | |
|     }, { | |
|       enforceForRenamedProperties: false, | |
|     }], | |
| 
 | |
|     // disallow parseInt() in favor of binary, octal, and hexadecimal literals | |
|     // https://eslint.org/docs/rules/prefer-numeric-literals | |
|     'prefer-numeric-literals': 'error', | |
| 
 | |
|     // suggest using Reflect methods where applicable | |
|     // https://eslint.org/docs/rules/prefer-reflect | |
|     'prefer-reflect': 'off', | |
| 
 | |
|     // use rest parameters instead of arguments | |
|     // https://eslint.org/docs/rules/prefer-rest-params | |
|     'prefer-rest-params': 'error', | |
| 
 | |
|     // suggest using the spread syntax instead of .apply() | |
|     // https://eslint.org/docs/rules/prefer-spread | |
|     'prefer-spread': 'error', | |
| 
 | |
|     // suggest using template literals instead of string concatenation | |
|     // https://eslint.org/docs/rules/prefer-template | |
|     'prefer-template': 'error', | |
| 
 | |
|     // disallow generator functions that do not have yield | |
|     // https://eslint.org/docs/rules/require-yield | |
|     'require-yield': 'error', | |
| 
 | |
|     // enforce spacing between object rest-spread | |
|     // https://eslint.org/docs/rules/rest-spread-spacing | |
|     'rest-spread-spacing': ['error', 'never'], | |
| 
 | |
|     // import sorting | |
|     // https://eslint.org/docs/rules/sort-imports | |
|     'sort-imports': ['off', { | |
|       ignoreCase: false, | |
|       ignoreDeclarationSort: false, | |
|       ignoreMemberSort: false, | |
|       memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'], | |
|     }], | |
| 
 | |
|     // require a Symbol description | |
|     // https://eslint.org/docs/rules/symbol-description | |
|     'symbol-description': 'error', | |
| 
 | |
|     // enforce usage of spacing in template strings | |
|     // https://eslint.org/docs/rules/template-curly-spacing | |
|     'template-curly-spacing': 'error', | |
| 
 | |
|     // enforce spacing around the * in yield* expressions | |
|     // https://eslint.org/docs/rules/yield-star-spacing | |
|     'yield-star-spacing': ['error', 'after'] | |
|   } | |
| };
 |