UNPKG

@vitalik2060/demo-lint

Version:

198 lines (193 loc) 6.29 kB
module.exports = { parser: '@typescript-eslint/parser', parserOptions: { project: './tsconfig.json', sourceType: 'module', }, env: { node: true, }, plugins: ['@typescript-eslint', 'import', 'simple-import-sort', 'dirnames', 'unicorn'], settings: { 'import/resolver': { node: { extensions: ['.ts', '.tsx', '.js', '.jsx'], }, }, }, rules: { quotes: ['warn', 'single', { avoidEscape: true, allowTemplateLiterals: false }], 'padding-line-between-statements': [ 'warn', { blankLine: 'always', prev: ['const', 'let', 'var'], next: '*' }, { blankLine: 'always', prev: '*', next: 'return' }, { blankLine: 'any', prev: ['const', 'let', 'var'], next: ['const', 'let', 'var'], }, ], 'no-shadow': 'off', // Override default airbnb rules 'no-plusplus': ['error', { allowForLoopAfterthoughts: true }], 'no-negated-condition': 'warn', 'default-case': 'off', 'no-use-before-define': 'off', 'prefer-regex-literals': 'off', // code smell detection complexity: ['warn', 20], 'max-params': ['warn', 5], 'max-nested-callbacks': 'warn', 'no-restricted-properties': [ 'error', { object: 'it', property: 'only', message: "Did you forget to remove 'only' from this test?", }, { object: 'describe', property: 'only', message: "Did you forget to remove 'only' from this test?", }, { object: 'context', property: 'only', message: "Did you forget to remove 'only' from this test?", }, { object: 'test', property: 'only', message: "Did you forget to remove 'only' from this test?", }, ], // typescript '@typescript-eslint/explicit-module-boundary-types': 'off', '@typescript-eslint/explicit-function-return-type': 'off', '@typescript-eslint/array-type': [ 'error', { default: 'array-simple', readonly: 'array-simple' }, ], '@typescript-eslint/consistent-type-assertions': 'error', '@typescript-eslint/no-array-constructor': 'error', '@typescript-eslint/no-empty-interface': 'error', '@typescript-eslint/no-shadow': 'warn', '@typescript-eslint/no-explicit-any': 'warn', '@typescript-eslint/no-unused-vars': 'warn', '@typescript-eslint/no-use-before-define': [ 'error', { functions: false, classes: true, variables: true }, ], '@typescript-eslint/default-param-last': 'warn', '@typescript-eslint/consistent-type-imports': [ 'error', { prefer: 'type-imports', fixStyle: 'inline-type-imports', }, ], '@typescript-eslint/consistent-type-exports': [ 'error', { fixMixedExportsWithInlineTypeSpecifier: true, }, ], '@typescript-eslint/no-unnecessary-type-assertion': 'error', '@typescript-eslint/prefer-optional-chain': 'error', // Imports, file extensions 'import/no-extraneous-dependencies': [ 'error', { devDependencies: ['**/*.{stories,test,tests,spec}.{js,jsx,ts,tsx}'] }, ], 'import/no-cycle': [ 'error', { ignoreExternal: true, }, ], 'import/prefer-default-export': 'off', 'import/no-unresolved': 'off', 'import/extensions': 'off', 'import/no-useless-path-segments': [ 'error', { noUselessIndex: true, }, ], 'dirnames/match-kebab-case': 'error', 'unicorn/filename-case': [ 'error', { case: 'kebabCase', }, ], 'simple-import-sort/imports': [ 'warn', { groups: [ ['dotenv/config'], // Node.js builtins. You could also generate this regex if you use a `.js` config. // For example: `^(${require("module").builtinModules.join("|")})(/|$)` [ '^(assert|buffer|child_process|cluster|console|constants|crypto|dgram|dns|domain|events|fs|http|https|module|net|os|path|punycode|querystring|readline|repl|stream|string_decoder|sys|timers|tls|tty|url|util|vm|zlib|freelist|v8|process|async_hooks|http2|perf_hooks)(/.*|$)', ], // Packages. `react` related packages come first. ['^react', '^redux', '^@?\\w'], // Root path for project ['^#'], // Parent imports. Put `..` last. ['^\\.\\.(?!/?$)', '^\\.\\./?$'], // Other relative imports. Put same-folder imports and `.` last. ['^\\./(?=.*/)(?!/?$)', '^\\.(?!/?$)', '^\\./?$'], // Style imports. ['^.+\\.s?css$'], ], }, ], 'import/no-import-module-exports': 'off', 'no-restricted-imports': [ 'error', { paths: [ { name: 'lodash', message: 'Import specific parts of "lodash" explicitly, for example: `import isEqual from "lodash/isEqual"`. This will help ensure greater consistency in builds and make it easier to align versions across projects', }, ], patterns: [ { group: ['lodash.*'], message: 'Import specific parts of "lodash" explicitly, for example: `import isEqual from "lodash/isEqual"`. This will help ensure greater consistency in builds and make it easier to align versions across projects', }, ], }, ], 'no-restricted-syntax': [ 'error', { selector: 'TSTypeReference[typeName.name="PropsWithChildren"]', message: 'Do not use "PropsWithChildren". Use explicit children typing instead, for example: "children?: ReactNode";', }, { selector: 'Literal[value=/(?:[a-z][а-яё]|[а-яё][a-z])/i]', message: 'Detected mixed language layout within a single word. For example, "case" (first character in ru-encoding)', }, ], 'import/consistent-type-specifier-style': ['error', 'prefer-inline'], 'import/no-duplicates': ['error', { 'prefer-inline': true, considerQueryString: true }], }, overrides: [ { files: ['*.{test,tests,spec}.{js,jsx,ts,tsx}'], env: { node: true, jest: true, browser: true, }, }, ], };