@ilya_goncharov_y/customeslint
v1.0.10
Published
Custom ESLint configuration for React and TypeScript projects
Downloads
129
Maintainers
Readme
Custom ESLint Configuration
Кастомная конфигурация ESLint для проектов на React и TypeScript.
Этот пакет предоставляет готовую конфигурацию ESLint для работы с JavaScript, TypeScript, React и хуками React. Он обеспечивает единообразие в коде и помогает избегать распространенных ошибок.
Особенности
- Рекомендуемые конфигурации:
- JavaScript
(js.configs.recommended) - React-хуки
(plugin:react-hooks/recommended) - TypeScript
(plugin:@typescript-eslint/recommended)
- Поддержка ECMAScript 2021 и модулей ES.
- Интеграция с плагинами:
- TypeScript
(@typescript-eslint) - Управление импортами
(eslint-plugin-import) - Хуки React
(eslint-plugin-react-hooks)
- Комплексные правила для обеспечения единообразного стиля кода.
Детали конфигурации
Общие настройки
js.configs.recommended- Рекомендуемые настройки для JavaScript от ESLint.plugin:react-hooks/recommended- Рекомендуемые правила для работы с хуками React.plugin:@typescript-eslint/recommended- Рекомендуемые правила для TypeScript.
Настройки для файлов
- Применяется к файлам с расширениями:
*.js,*.jsx,*.ts,*.tsx. - Используется парсер:
@typescript-eslint/parser. ecmaVersion: 2021- Поддержка синтаксиса ECMAScript 2021.sourceType: 'module'- Поддержка модулей ES.
Плагины
@typescript-eslint- Для проверки TypeScript.eslint-plugin-import- Для управления порядком импортов.eslint-plugin-react-hooks- Для проверки правил использования хуков React.
Правила
Хуки React
react-hooks/exhaustive-deps: warn- Предупреждать, если зависимости в хуках указаны неверно.react-hooks/rules-of-hooks: error- Выдавать ошибку, если хуки используются не по правилам.
TypeScript
@typescript-eslint/explicit-module-boundary-types: off- Отключить обязательное указание типов для входных и выходных данных функций.@typescript-eslint/no-explicit-any: off- Разрешить использование типаany.@typescript-eslint/no-unused-vars: warn- Предупреждать о неиспользуемых переменных, игнорируя переменные, начинающиеся с_.
Общие правила
no-console: warn- Предупреждать при использованииconsole.prefer-const: warn- Рекомендовать использоватьconst, если переменная не изменяется.quotes: warn, 'single'- Требовать использование одинарных кавычек для строк.indent: warn, 2- Требовать отступ в 2 пробела.max-len: warn, { code: 120 }- Предупреждать, если длина строки превышает 120 символов.comma-dangle: warn, 'always-multiline'- Требовать запятые в конце многострочных конструкций.semi: warn, 'always'- Требовать точки с запятой в конце выражений.
Импорты
import/order- Настроить порядок импортов:
builtin– Встроенные модули (например,fs,path).external– Внешние библиотеки.internal– Внутренние модули проекта.parent– Модули из родительских директорий.sibling– Модули из соседних директорий.index– Импорты изindex.js.object– Импорты объектов.type– Импорты типов.newlines-between: always-and-inside-groups- Требовать пустые строки между группами импортов.
Настройки React
react.version: 'detect'- Автоматически определять версию React для корректной работы правил.
Использование
1) Установите пакет:
# npm
npm i @ilya_goncharov_y/customeslint --save-dev
# pnpm
pnpm i @ilya_goncharov_y/customeslint --save-dev
# yarn
yarn add @ilya_goncharov_y/customeslint --save-dev2) Настройте ESLint в проекте: Создайте файл eslint.config.js в корне проекта:
import eslintConfig from '@ilya_goncharov_y/customeslint';
export default eslintConfig;3) Запустите ESLint:
npx eslint .Пример конфигурации
Вот полная конфигурация, экспортируемая этим пакетом:
export default [
js.configs.recommended,
...compat.extends('plugin:react-hooks/recommended'),
...compat.extends('plugin:@typescript-eslint/recommended'),
{
files: ['**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx'],
languageOptions: {
parser: parser,
ecmaVersion: 2021,
sourceType: 'module',
},
plugins: {
'@typescript-eslint': typescriptEslint,
import: importPlugin,
'react-hooks': reactHooks,
},
rules: {
'react-hooks/exhaustive-deps': 'warn',
'react-hooks/rules-of-hooks': 'error',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }],
'no-console': 'warn',
'prefer-const': 'warn',
quotes: ['warn', 'single'],
indent: ['warn', 2],
'max-len': ['warn', { code: 120 }],
'comma-dangle': ['warn', 'always-multiline'],
semi: ['warn', 'always'],
'import/order': [
'warn',
{
groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index', 'object', 'type'],
'newlines-between': 'always-and-inside-groups',
},
],
},
settings: {
react: {
version: 'detect',
},
},
},
];