mirror of
https://github.com/antebudimir/eslint-plugin-vanilla-extract.git
synced 2025-12-31 17:03:32 +00:00
107 lines
3 KiB
JavaScript
107 lines
3 KiB
JavaScript
|
|
import path from 'path';
|
||
|
|
import { fileURLToPath } from 'url';
|
||
|
|
import { FlatCompat } from '@eslint/eslintrc';
|
||
|
|
import eslintPluginESLintPlugin from 'eslint-plugin-eslint-plugin';
|
||
|
|
import importPlugin from 'eslint-plugin-import';
|
||
|
|
import * as tseslint from 'typescript-eslint';
|
||
|
|
|
||
|
|
// mimic CommonJS variables
|
||
|
|
const __filename = fileURLToPath(import.meta.url);
|
||
|
|
const __dirname = path.dirname(__filename);
|
||
|
|
|
||
|
|
const compat = new FlatCompat({
|
||
|
|
baseDirectory: __dirname,
|
||
|
|
});
|
||
|
|
|
||
|
|
export default [
|
||
|
|
// mimic ESLintRC-style extends
|
||
|
|
// Prettier always must be last to override other style rules
|
||
|
|
...compat.extends('prettier'),
|
||
|
|
{
|
||
|
|
files: ['**/*.js', '**/*.ts', '**/*.cjs', '**/*.mjs'],
|
||
|
|
plugins: {
|
||
|
|
'eslint-plugin': eslintPluginESLintPlugin,
|
||
|
|
import: importPlugin,
|
||
|
|
},
|
||
|
|
settings: {
|
||
|
|
'import/parsers': {
|
||
|
|
'@typescript-eslint/parser': ['.ts'],
|
||
|
|
},
|
||
|
|
'import/resolver': {
|
||
|
|
typescript: {
|
||
|
|
alwaysTryTypes: true,
|
||
|
|
project: './tsconfig.json',
|
||
|
|
},
|
||
|
|
node: {
|
||
|
|
extensions: ['.js', '.ts'],
|
||
|
|
},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
rules: {
|
||
|
|
...eslintPluginESLintPlugin.configs.recommended.rules,
|
||
|
|
'eslint-plugin/prefer-message-ids': 'error',
|
||
|
|
'eslint-plugin/require-meta-type': 'error',
|
||
|
|
'eslint-plugin/require-meta-docs-description': 'error',
|
||
|
|
'eslint-plugin/consistent-output': 'error',
|
||
|
|
'import/order': [
|
||
|
|
'error',
|
||
|
|
{
|
||
|
|
groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index', 'type'],
|
||
|
|
pathGroups: [
|
||
|
|
{
|
||
|
|
pattern: '{@eslint/**,eslint,eslint-plugin-*}',
|
||
|
|
group: 'external',
|
||
|
|
position: 'before',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
pattern: '@vanilla-extract/**',
|
||
|
|
group: 'external',
|
||
|
|
position: 'after',
|
||
|
|
},
|
||
|
|
],
|
||
|
|
pathGroupsExcludedImportTypes: ['builtin', 'object'],
|
||
|
|
'newlines-between': 'never',
|
||
|
|
alphabetize: {
|
||
|
|
order: 'asc',
|
||
|
|
caseInsensitive: true,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
],
|
||
|
|
'import/no-unresolved': 'error',
|
||
|
|
'import/named': 'error',
|
||
|
|
'import/namespace': 'error',
|
||
|
|
'import/default': 'error',
|
||
|
|
'import/export': 'error',
|
||
|
|
},
|
||
|
|
},
|
||
|
|
...tseslint.configs.recommended,
|
||
|
|
|
||
|
|
{
|
||
|
|
files: ['**/*.{js,ts}'],
|
||
|
|
languageOptions: {
|
||
|
|
parser: tseslint.parser,
|
||
|
|
parserOptions: {
|
||
|
|
ecmaVersion: 'latest',
|
||
|
|
sourceType: 'module',
|
||
|
|
project: './tsconfig.json',
|
||
|
|
},
|
||
|
|
},
|
||
|
|
rules: {
|
||
|
|
// TypeScript rules
|
||
|
|
'@typescript-eslint/no-explicit-any': 'error',
|
||
|
|
'@typescript-eslint/no-unsafe-assignment': 'error',
|
||
|
|
'@typescript-eslint/no-unsafe-member-access': 'error',
|
||
|
|
'@typescript-eslint/no-empty-object-type': 'error',
|
||
|
|
'@typescript-eslint/no-unsafe-function-type': 'error',
|
||
|
|
'@typescript-eslint/no-unused-vars': 'warn',
|
||
|
|
'@typescript-eslint/no-wrapper-object-types': 'error',
|
||
|
|
|
||
|
|
// General rules
|
||
|
|
curly: 'error',
|
||
|
|
eqeqeq: 'error',
|
||
|
|
'no-console': 'warn',
|
||
|
|
'no-unused-vars': 'off',
|
||
|
|
},
|
||
|
|
},
|
||
|
|
];
|