UNPKG

@fe-boilerplate/eslint-config

Version:
246 lines (244 loc) 7.66 kB
const { filePatterns } = require('../configs/file-patterns') /** * Fine-tune naming convention react typescript jsx (function components) * @link https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/docs/rules/naming-convention.mdx */ module.exports = { env: { browser: true, es6: true, node: true, }, extends: [ 'eslint:recommended', 'plugin:@typescript-eslint/recommended-type-checked', 'plugin:@typescript-eslint/stylistic-type-checked', 'plugin:unicorn/recommended', ], overrides: [ { files: ['tailwind.config.ts', 'tailwind.config.js', '.eslintrc.cjs', 'lint-staged.config.js'], rules: { '@typescript-eslint/no-require-imports': 'off', 'unicorn/prefer-module': 'off', }, }, { files: filePatterns.test, rules: { '@typescript-eslint/require-await': 'off', '@typescript-eslint/ban-ts-comment': 'off', '@typescript-eslint/no-empty-function': 'off', '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/no-non-null-assertion': 'off', '@typescript-eslint/no-object-literal-type-assertion': 'off', '@typescript-eslint/no-unsafe-assignment': 'off', '@typescript-eslint/no-unsafe-member-access': 'off', // https://github.com/jest-community/eslint-plugin-jest/blob/main/docs/rules/unbound-method.md '@typescript-eslint/unbound-method': 'off', 'require-await': 'off', 'unicorn/no-null': 'off', 'unicorn/no-useless-undefined': 'off', 'unicorn/prefer-number-properties': 'off', 'unicorn/error-message': 'off', 'unicorn/consistent-function-scoping': 'off', 'unicorn/no-await-expression-member': 'off', 'unicorn/prefer-add-event-listener': 'off', }, }, { files: ['*.d.ts'], rules: { '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/no-import-type-side-effects': 'off', '@typescript-eslint/no-empty-object-type': 'off', }, }, { extends: ['plugin:@typescript-eslint/disable-type-checked'], files: ['*.mjs'], parserOptions: { ecmaVersion: 'latest', sourceType: 'module', }, rules: { '@typescript-eslint/require-await': 'off', '@typescript-eslint/consistent-type-exports': 'off', '@typescript-eslint/consistent-type-imports': 'off', '@typescript-eslint/explicit-module-boundary-types': 'off', '@typescript-eslint/no-unsafe-call': 'off', '@typescript-eslint/no-unsafe-member-access': 'off', '@typescript-eslint/no-unsafe-return': 'off', }, }, { extends: ['plugin:@typescript-eslint/disable-type-checked'], // javascript commonjs files: ['*.js', '*.cjs'], parser: 'espree', parserOptions: { ecmaVersion: 'latest', }, rules: { '@typescript-eslint/ban-ts-comment': 'off', '@typescript-eslint/consistent-type-exports': 'off', '@typescript-eslint/consistent-type-imports': 'off', '@typescript-eslint/explicit-module-boundary-types': 'off', '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/no-var-requires': 'off', 'require-await': 'off', 'unicorn/prefer-module': 'off', }, }, ], parser: '@typescript-eslint/parser', parserOptions: { ecmaFeatures: { globalReturn: false, jsx: true, }, ecmaVersion: 'latest', parserOptions: { projectService: true, tsconfigRootDir: __dirname, }, sourceType: 'module', }, plugins: ['unused-imports'], rules: { '@typescript-eslint/require-await': 'off', '@typescript-eslint/ban-ts-comment': [ 'error', { minimumDescriptionLength: 10, 'ts-check': false, 'ts-expect-error': 'allow-with-description', 'ts-ignore': true, 'ts-nocheck': true, }, ], // https://www.totaltypescript.com/method-shorthand-syntax-considered-harmful '@typescript-eslint/method-signature-style': ['error', 'property'], // https://sindresorhus.com/blog/goodbye-nodejs-buffer '@typescript-eslint/no-restricted-types': [ 'error', { types: { Buffer: { message: 'Use Uint8Array instead.', suggest: ['Uint8Array'], }, }, }, ], '@typescript-eslint/consistent-type-definitions': 'off', '@typescript-eslint/consistent-type-exports': 'error', '@typescript-eslint/consistent-type-imports': [ 'error', { fixStyle: 'inline-type-imports', prefer: 'type-imports' }, ], '@typescript-eslint/no-empty-function': ['error', { allow: ['private-constructors'] }], '@typescript-eslint/no-explicit-any': ['error', { ignoreRestArgs: false }], '@typescript-eslint/no-import-type-side-effects': 'error', '@typescript-eslint/no-misused-promises': [ 'error', { checksVoidReturn: { arguments: false, attributes: false, }, }, ], 'unused-imports/no-unused-imports': 'error', // Typescript-elint will do 'no-unused-vars': 'off', '@typescript-eslint/no-unused-vars': [ 'warn', { argsIgnorePattern: '^_', varsIgnorePattern: '^_', }, ], '@typescript-eslint/restrict-template-expressions': [ 'error', { allowAny: true, allowBoolean: true, allowNever: true, allowNullish: true, allowNumber: true, }, ], '@typescript-eslint/unbound-method': ['error', { ignoreStatic: true }], 'linebreak-style': ['error', 'unix'], 'no-constant-binary-expression': 'error', 'no-duplicate-imports': 'off', // is handled via 'import-x/no-duplicates' 'no-throw-literal': 'off', // is enabled via '@typescript-eslint/only-throw-error' 'no-empty': [ 'error', { allowEmptyCatch: true, }, ], 'no-empty-function': 'off', // https://sindresorhus.com/blog/goodbye-nodejs-buffer 'no-restricted-globals': [ 'error', { message: 'Use Uint8Array instead.', name: 'Buffer', }, ], // https://sindresorhus.com/blog/goodbye-nodejs-buffer 'no-restricted-imports': [ 'error', { message: 'Use Uint8Array instead.', name: 'buffer', }, { message: 'Use Uint8Array instead.', name: 'node:buffer', }, ], 'require-await': 'off', 'spaced-comment': [ 'error', 'always', { block: { balanced: true, exceptions: ['*'], markers: ['!'], }, line: { exceptions: ['-', '+'], markers: ['/'], }, }, ], 'sort-imports': 'off', // Disabled as it makes too many assumptions - enable per-project 'unicorn/no-static-only-class': 'off', 'unicorn/no-array-for-each': 'off', 'unicorn/switch-case-braces': 'off', // Can potentially break your code 'unicorn/prefer-spread': 'off', 'unicorn/filename-case': 'off', 'unicorn/prevent-abbreviations': 'off', 'unicorn/catch-error-name': 'off', 'unicorn/prefer-set-has': 'off', 'unicorn/no-null': 'off', // https://typescript-eslint.io/rules/default-param-last/ 'default-param-last': 'off', '@typescript-eslint/default-param-last': 'error', }, settings: { 'import/parsers': { '@typescript-eslint/parser': ['.ts', '.tsx', '.mts'], }, 'import/resolver': { typescript: {}, }, }, }