module.exports = { root: true, extends: ['@storybook/eslint-config-storybook'], rules: { 'import/extensions': [ 'error', 'never', { ignorePackages: true, md: 'always', svg: 'always', json: 'always', tag: 'always' }, ], 'import/no-unresolved': ['error', { ignore: ['@storybook'] }], 'react/state-in-constructor': 'off', 'react/static-property-placement': 'off', 'react/jsx-props-no-spreading': 'off', 'react/jsx-fragments': 'off', '@typescript-eslint/ban-ts-ignore': 'off', '@typescript-eslint/no-object-literal-type-assertion': 'off', 'react/sort-comp': [ 'error', { order: [ 'staticLifecycle', 'static-methods', 'instance-variables', 'lifecycle', '/^on.+$/', '/^(get|set)(?!(DerivedStateFromProps|SnapshotBeforeUpdate$)).+$/', 'instance-methods', 'instance-variables', 'everything-else', 'render', ], groups: { staticLifecycle: ['displayName', 'propTypes', 'defaultProps', 'getDerivedStateFromProps'], }, }, ], 'max-classes-per-file': 'off', }, overrides: [ { files: [ '**/__tests__/**', '**/*.test.*', '**/*.stories.*', '**/storyshots/**/stories/**', 'docs/src/new-components/lib/StoryLinkWrapper.js', 'docs/src/stories/**', ], rules: { '@typescript-eslint/no-empty-function': 'off', 'import/no-extraneous-dependencies': 'off', }, }, { files: '**/.storybook/config.js', rules: { 'global-require': 'off' } }, { files: ['**/*.stories.*'], rules: { 'no-console': 'off', }, }, { files: ['**/*.tsx', '**/*.ts'], rules: { 'react/prop-types': 'off', // we should use types 'no-dupe-class-members': 'off', // this is called overloads in typescript }, }, { files: ['**/*.d.ts'], rules: { 'vars-on-top': 'off', 'no-var': 'off', // this is how typescript works 'spaced-comment': 'off', }, }, ], };