Автоисправление ESlint в VSC

Вопрос или проблема

Привет, ребята. Я не знаю, что не работает в автоматическом исправлении 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, убедитесь, что все необходимые плагины и парсеры установлены.

Рекомендации по настройкам

  1. Измените порядок форматов: Попробуйте установить editor.formatOnSave в true для typescript и typescriptreact, чтобы избежать конфликтов, а затем если форматируется, оставить только одно место для всех автофиксов. К примеру:

    {
     "editor.formatOnSave": true,
     "editor.codeActionsOnSave": {
       "source.fixAll": true // Включает фиксацию как ESLint так и Prettier
     },
    }
  2. Проверьте глобальные настройки VSC: Убедитесь, что в общих настройках VSC (на уровне пользователя) нет настроек, перезаписывающих ваши локальные настройки проекта.

  3. Логи ESLint: Включите вывод сообщений ESLint в консоль. Это можно сделать, добавив в вашу конфигурацию ESLint следующее:

    "eslint.debug": true

    Это позволит вам увидеть, что происходит за кулисами и выявить возможные ошибки.

  4. Поддержка редактора: Убедитесь, что расширение ESLint включено и обновлено последней стабильной версией.

Заключение

Если вышеописанные шаги не решают проблему, попробуйте переустановить расширения ESLint и Prettier. Также полезно проверить, без каких-либо расширений проблема наблюдается, что может помочь выявить конфликтующие плагины. Надеюсь, эти рекомендации помогут вам настроить автофиксацию ESLint в Visual Studio Code и решить вашу проблему. Удачи в разработке вашего проекта на React с TypeScript!

Оцените материал
Добавить комментарий

Капча загружается...