Вопрос или проблема
Привет, ребята. Я не знаю, что не работает в автоматическом исправлении Eslint. (Eslint работает хорошо, предупреждения и ошибки — всё в порядке, но я упомянул, что только автоматическое исправление не работает.) Вот мой код. Я работаю с React (Ts) и использую .vscode/setting.json (не хочу исправлять настройки VSC в direct setting.json)
// О спецификации:
"@typescript-eslint/eslint-plugin": "^8.7.0",
"@typescript-eslint/parser": "^8.7.0",
"eslint": "^8.31.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-prefer-arrow": "^1.2.3",
"eslint-plugin-prettier": "^5.2.1",
"prettier": "^3.3.3"
Версия, просто ссылка, и вот мой вопросный код..
// .vscode/setting.json
{
"editor.formatOnSave": false,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"eslint.enable": true,
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact"
],
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
},
"[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
},
}
// root/.eslintrc.js
module.exports = {
parser: '@typescript-eslint/parser',
root: true,
env: {
browser: true,
es2021: true,
node: true,
},
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:react/recommended',
'plugin:prettier/recommended'
],
plugins: ['@typescript-eslint',
'react',
'prettier',
'react-hooks',
'prefer-arrow',
'import',
],
ignorePatterns: ['dist', 'node_modules', '.eslintrc.cjs', '.vscode', 'tailwind.config.js', 'postcss.config.js', `craco.config.js`],
env: {
browser: true,
es2021: true,
},
settings: {
react: {
version: 'detect',
},
'import/resolver': {
node: {
extensions: ['.js', '.jsx', '.ts', '.tsx'],
},
},
},
rules: {
'prettier/prettier': 'error',
'camelcase': ['error', { properties: 'always' }],
'prefer-arrow/prefer-arrow-functions': 'error',
'prefer-arrow/prefer-arrow-functions': [
'error',
{
disallowPrototype: true,
singleReturnOnly: false,
classPropertiesAllowed: false,
},
],
'react/function-component-definition': [
'error',
{
namedComponents: 'arrow-function',
unnamedComponents: 'arrow-function',
},
],
'react/jsx-filename-extension': [
2,
{ extensions: ['.js', '.jsx', '.ts', '.tsx'] },
],
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'react/jsx-filename-extension': ['warn', { extensions: ['.tsx'] }],
'react/button-has-type': 'off',
'jsx-a11y/anchor-has-content': 'off',
'no-console': 'off',
'no-unused-vars': 'off',
'@typescript-eslint/no-unused-vars': [
'error',
{
vars: 'all',
args: 'after-used',
ignoreRestSiblings: true,
},
],
'linebreak-style': 'off',
'prettier/prettier': [
'error',
{
endOfLine: 'auto',
singleQuote: true,
semi: true,
trailingComma: 'all',
printWidth: 80,
},
],
'quotes': ['error', 'single', { 'avoidEscape': true }],
'semi': ['error', 'always'],
}
};
Пожалуйста, научите меня и ответьте, в чем проблема. Я жду ваших комментариев.
Автоматическое исправление Eslint, я не думаю, что есть конфликт между ESLint и Prettier относительно автоматического исправления. Я не очень хорошо разбираюсь в setting.json.
.
Ответ или решение
Проблема с автофиксацией ESLint в Visual Studio Code
Здравствуйте! Давайте разберемся с вашей проблемой, связанной с автофиксацией ESLint в Visual Studio Code (VSC) при использовании React и TypeScript. Из вашего описания видно, что ESLint работает корректно, вы получаете предупреждения и ошибки, но автофиксация не срабатывает. Мы рассмотрим настройки и возможные причины этой проблемы.
Настройки VSC
Ваш файл .vscode/settings.json
выглядит довольно хорошо, но давайте проверим его настройки на предмет возможных проблем:
{
"editor.formatOnSave": false,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"eslint.enable": true,
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact"
],
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
},
"[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
}
}
-
autoFix ESLint: У вас включена опция
source.fixAll.eslint
, что верно. Однако проверьте, выполняется ли автофиксация по команде "Сохранить" (save
). У вас установленоeditor.formatOnSave
вfalse
, это может помешать автофиксации, если у вас также настроен prettier, который прежде чем отправить окончательный вариант к ESLint, может перезаписывать изменения. -
Порядок влечения: Убедитесь, что у вас не возникает конфликта между ESLint и Prettier. Обычно, если включен
editor.formatOnSave
для Prettier, это может привести к конфликтам с автофиксацией ESLint.
Настройки ESLint
В вашем файле конфигурации .eslintrc.js
нет явных конфликтов, которые указали бы на проблему. Однако можно сделать следующее:
- Проверьте, правильно ли настроены плагины, установлены ли они в проекте, и убедитесь, что версии соответствуют друг другу. Например, если вы используете
@typescript-eslint
, убедитесь, что все необходимые плагины и парсеры установлены.
Рекомендации по настройкам
-
Измените порядок форматов: Попробуйте установить
editor.formatOnSave
вtrue
дляtypescript
иtypescriptreact
, чтобы избежать конфликтов, а затем если форматируется, оставить только одно место для всех автофиксов. К примеру:{ "editor.formatOnSave": true, "editor.codeActionsOnSave": { "source.fixAll": true // Включает фиксацию как ESLint так и Prettier }, }
-
Проверьте глобальные настройки VSC: Убедитесь, что в общих настройках VSC (на уровне пользователя) нет настроек, перезаписывающих ваши локальные настройки проекта.
-
Логи ESLint: Включите вывод сообщений ESLint в консоль. Это можно сделать, добавив в вашу конфигурацию ESLint следующее:
"eslint.debug": true
Это позволит вам увидеть, что происходит за кулисами и выявить возможные ошибки.
-
Поддержка редактора: Убедитесь, что расширение ESLint включено и обновлено последней стабильной версией.
Заключение
Если вышеописанные шаги не решают проблему, попробуйте переустановить расширения ESLint и Prettier. Также полезно проверить, без каких-либо расширений проблема наблюдается, что может помочь выявить конфликтующие плагины. Надеюсь, эти рекомендации помогут вам настроить автофиксацию ESLint в Visual Studio Code и решить вашу проблему. Удачи в разработке вашего проекта на React с TypeScript!