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() 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, }, ], }, };