| // To make use of this eslint config file run: |
| // |
| // npm ci |
| // |
| // Then install eslint support in your IDE of choice. |
| module.exports = { |
| root: true, |
| env: { |
| browser: true, |
| es6: true, |
| }, |
| extends: ['airbnb-base'], |
| globals: { |
| Atomics: 'readonly', |
| SharedArrayBuffer: 'readonly', |
| }, |
| parserOptions: { |
| ecmaVersion: 2018, |
| sourceType: 'module', |
| }, |
| ignorePatterns: ['dist/', 'build/', '_bazel*'], |
| rules: { |
| camelcase: ['off'], |
| 'class-methods-use-this': ['off'], |
| 'func-names': ['off'], |
| 'import/prefer-default-export': ['off'], |
| 'max-classes-per-file': ['off'], |
| 'max-len': ['off'], |
| 'no-alert': ['off'], |
| 'no-bitwise': ['warn'], |
| 'no-continue': ['off'], |
| 'no-lone-blocks': ['off'], |
| 'no-param-reassign': ['off'], |
| 'no-plusplus': ['off'], |
| 'no-restricted-syntax': ['warn'], |
| 'no-return-assign': ['off'], |
| 'no-shadow': ['warn'], |
| 'no-underscore-dangle': ['off'], |
| 'no-use-before-define': ['error', { functions: false, variables: false }], |
| 'object-shorthand': ['off'], |
| 'prefer-destructuring': ['off'], |
| 'prefer-object-spread': ['off'], |
| 'space-before-function-paren': [ |
| 'error', |
| { anonymous: 'never', named: 'never', asyncArrow: 'always' }, |
| ], |
| }, |
| overrides: [ |
| { |
| files: ['*.ts', '*.tsx'], |
| parser: '@typescript-eslint/parser', |
| |
| // Start with the recommended rules, but turn some of them off in the |
| // 'rules' section below. |
| extends: ['plugin:@typescript-eslint/recommended'], |
| settings: { |
| 'import/resolver': { |
| node: { |
| extensions: ['.js', '.jsx', '.ts', '.tsx'], |
| }, |
| }, |
| }, |
| plugins: ['@typescript-eslint'], |
| rules: { |
| // Allow ! non-null assertions. |
| '@typescript-eslint/no-non-null-assertion': 'off', |
| |
| // Require a consistent member declaration order |
| '@typescript-eslint/member-ordering': 'off', |
| |
| // Don't require the .ts extension for imports. |
| 'import/extensions': 'off', |
| |
| // Sometimes we need to import an interface, but also we need the |
| // side-effects to run, e.g. to register an element, which requires two |
| // import statements. |
| // |
| // https://github.com/Microsoft/TypeScript/wiki/FAQ#why-are-imports-being-elided-in-my-emit |
| // https://github.com/microsoft/TypeScript/issues/9191 |
| 'import/no-duplicates': 'off', |
| |
| // a: string = 'foo' might be redundant, but it's not harmful. |
| '@typescript-eslint/no-inferrable-types': 'off', |
| |
| '@typescript-eslint/type-annotation-spacing': [ |
| 'error', |
| { |
| before: false, |
| after: true, |
| }, |
| ], |
| |
| // note you must disable the base rule as it can report incorrect errors |
| 'lines-between-class-members': 'off', |
| '@typescript-eslint/lines-between-class-members': [ |
| 'error', |
| 'always', |
| { exceptAfterOverload: true }, |
| ], |
| |
| // note you must disable the base rule as it can report incorrect errors |
| 'space-before-function-paren': 'off', |
| '@typescript-eslint/space-before-function-paren': [ |
| 'error', |
| { |
| anonymous: 'never', |
| named: 'never', |
| asyncArrow: 'always', |
| }, |
| ], |
| |
| // We already disallow implicit-any, explicit is fine. |
| '@typescript-eslint/no-explicit-any': 'off', |
| }, |
| }, |
| { |
| files: ['*_test.ts'], |
| rules: { |
| // Prevents Chai.js assertions such as expect(foo).to.be.true from causing "Expected an |
| // assignment or function call and instead saw an expression." linting errors. |
| 'no-unused-expressions': 'off', |
| }, |
| }, |
| ], |
| }; |