| module.exports = { |
| env: { |
| browser: true, |
| es2021: true, |
| node: true, |
| }, |
| extends: ['google'], |
| parser: '@typescript-eslint/parser', |
| parserOptions: { |
| ecmaVersion: 'latest', |
| sourceType: 'module', |
| project: './tsconfig.json', |
| }, |
| plugins: ['@typescript-eslint'], |
| rules: { |
| // We don't want to enforce jsdoc everywhere: |
| 'require-jsdoc': 'off', |
| |
| // Relax jsdoc requirements |
| 'valid-jsdoc': [ |
| 'error', |
| { |
| requireParamType: false, |
| requireReturnType: false, |
| requireReturn: false, |
| }, |
| ], |
| |
| // Formatting handled by prettier |
| 'indent': 'off', |
| 'max-len': 'off', |
| 'operator-linebreak': 'off', |
| 'quotes': 'off', |
| 'brace-style': 'off', |
| 'space-before-function-paren': 'off', |
| 'generator-star-spacing': 'off', |
| 'semi-spacing': 'off', |
| |
| // clang-format --js used to format EOL comments after (e.g.) an if like: |
| // if (foo) { // insightful comment |
| // with two spaces between the slash and the brace. Turn |
| // ignoreEOLComments on to allow that. We still want |
| // no-multi-spaces turned on in general as it fixes issues like: |
| // if (a === b) |
| 'no-multi-spaces': ['error', {ignoreEOLComments: true}], |
| |
| // Default no-unused-vars doesn't understand TypeScript enums. See: |
| // https://github.com/typescript-eslint/typescript-eslint/issues/2621 |
| 'no-unused-vars': 'off', |
| '@typescript-eslint/no-unused-vars': [ |
| 'error', |
| {argsIgnorePattern: '^_.*', varsIgnorePattern: '^_.*'}, |
| ], |
| |
| // new Array() is banned (use [] instead) but new Array<Foo>() is |
| // allowed since it can be clearer to put the type by the |
| // construtor. |
| 'no-array-constructor': 'off', |
| '@typescript-eslint/no-array-constructor': ['error'], |
| |
| // Rest parameters are not equivalent to 'arguments'. |
| // Rest parameters are arrays: https://developer.mozilla.org/en-US/docs/Web/ |
| // JavaScript/Reference/Functions/rest_parameters |
| // 'arguments' are objects: https://developer.mozilla.org/en-US/docs/Web/ |
| // JavaScript/Reference/Functions/arguments |
| 'prefer-rest-params': 'off', |
| |
| // We have a lot normal functions which are capitalised. |
| // TODO(hjd): Switch these to be lowercase and remove capIsNew. |
| // There are also some properties like: foo.factory these should |
| // stay. |
| 'new-cap': ['error', {capIsNew: false, properties: false}], |
| |
| // Don't allow new introduction of any it is most always a mistake. |
| '@typescript-eslint/no-explicit-any': 'error', |
| |
| // Prohibit numbers and strings from being used in boolean expressions. |
| '@typescript-eslint/strict-boolean-expressions': [ |
| 'error', |
| { |
| // Eventually we probably want to enable all of these, for now this |
| // tackles numbers and keeps the error count manageable. |
| allowAny: true, |
| allowNullableBoolean: true, |
| allowNullableString: true, |
| allowNumber: true, |
| allowString: true, |
| }, |
| ], |
| }, |
| }; |