Skip to content

Re-configure eslint #81

@StyleShit

Description

@StyleShit
  • update to the latest versions
  • make it much stricter
export default defineConfig(
	// Base rules.
	eslint.configs.recommended,
	tseslint.configs.strictTypeChecked,

	// Overrides.
	{
		linterOptions: {
			reportUnusedDisableDirectives: 'error',
			reportUnusedInlineConfigs: 'error',
		},

		languageOptions: {
			globals: globals.builtin,

			parserOptions: {
				projectService: true,
			},
		},

		plugins: {
			unicorn,
			'import-x': importX,
		},

		settings: {
			'import-x/resolver-next': [createTypeScriptImportResolver(), createNodeResolver()],
		},

		rules: {
			// Stricter ESLint core rules.
			eqeqeq: 'error',
			curly: ['error', 'all'],
			'no-eval': 'error',
			'no-implied-eval': 'error',
			'no-lone-blocks': 'error',
			'no-unassigned-vars': 'error',
			'no-unreachable-loop': 'error',
			'no-useless-assignment': 'error',
			'no-useless-call': 'error',
			'no-useless-computed-key': 'error',
			'no-useless-concat': 'error',
			'no-useless-rename': 'error',
			'no-var': 'error',
			'object-shorthand': 'error',
			'prefer-arrow-callback': 'error',
			'prefer-const': 'error',
			'prefer-rest-params': 'error',
			radix: 'error',

			// Slightly loosened TSESLint rules.
			'@typescript-eslint/no-misused-promises': [
				'error',
				{
					checksVoidReturn: false,
				},
			],

			'@typescript-eslint/no-confusing-void-expression': [
				'error',
				{
					ignoreArrowShorthand: true,
				},
			],

			// Stylistic rules.
			'@typescript-eslint/consistent-type-imports': [
				'error',
				{
					fixStyle: 'inline-type-imports',
				},
			],

			'@typescript-eslint/naming-convention': [
				'error',
				{
					selector: 'typeLike',
					format: ['PascalCase'],
				},
			],

			'no-restricted-syntax': [
				'error',
				{
					selector: 'TSEnumDeclaration',
					message: 'Enums are not allowed. Use union types instead.',
				},
			],

			'unicorn/filename-case': [
				'error',
				{
					case: 'kebabCase',
				},
			],

			// Import rules.
			'import-x/no-cycle': 'error',
			'import-x/no-unresolved': 'error',
			'import-x/no-extraneous-dependencies': 'error',
			'import-x/no-duplicates': ['error', { 'prefer-inline': true }],
		},
	},

	// Production files.
	{
		files: ['**/src/*.[tj]s?(x)'],
		rules: {
			// Disallow importing dev dependencies in production files.
			'import-x/no-extraneous-dependencies': [
				'error',
				{
					devDependencies: false,
					includeTypes: true,
				},
			],
		},
	},

	globalIgnores(['**/dist', '**/.turbo']),
);

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions