ESLint нарушено: Правила с предложениями должны установить для свойства «meta.hasSuggestions` значение» true`

#reactjs #react-hooks #eslint #eslintrc

Вопрос:

Я использую VSCode, и когда я добавляю строку 'react-hooks/exhaustive-deps': 'warn' в свой .eslintrc.js, Я получаю следующее в выводе ESLint:

 Rules with suggestions must set the `meta.hasSuggestions` property to `true`. Occurred while linting
C:Usersfilepath.jsx:72 Rule: "react-hooks/exhaustive-deps"
 

Это разрушает все остальные накладки. Я попытался добавить следующее к своему .eslintrc.js:

 meta: {
    hasSuggestions: true
},
 

что приводит меня к следующей ошибке:

 UnhandledPromiseRejectionWarning: Error: ESLint configuration in .eslintrc.js is invalid:
    - Unexpected top-level property "meta".
 

Любая помощь будет признательна.

Вот мой .eslintrc.js:

 module.exports = {
    env: {
        browser: true,
        es2021: true,
    },
    extends: ['eslint:recommended', 'plugin:react/recommended', 'plugin:react-hooks/recommended'],
    settings: {
        'react': {
            'version': 'detect'
        }
    },
    parserOptions: {
        ecmaFeatures: {
            jsx: true,
        },
        ecmaVersion: 13,
        sourceType: 'module',
    },
    plugins: ['react-hooks', 'react'],
    rules: {
        'react/prop-types': [0],
        quotes: ['error', 'single'],
        semi: [1],
        'react/jsx-indent': [1],
        'no-multi-spaces': [1],
        'indent': [2],
        'react/jsx-newline': [2, { prevent: true }],
        'no-trailing-spaces': [1],
        'no-multiple-empty-lines': [1, { max: 1 }],
        'space-infix-ops': [1],
        'object-curly-spacing': [1, 'always'],
        'comma-spacing': [1],
        'react-hooks/rules-of-hooks': 'error',
        'react/self-closing-comp': 1,
        'react/jsx-closing-tag-location': 1,
        'no-unreachable': 1,
        'react-hooks/exhaustive-deps': 'warn'
    },
};
 

Вот мой пакет.json:

 {
  "name": "app",
  "private": true,
  "dependencies": {
    "@babel/preset-react": "^7.14.5",
    "@emotion/react": "^11.4.1",
    "@emotion/styled": "^11.3.0",
    "@mui/icons-material": "^5.0.4",
    "@mui/material": "^5.0.3",
    "@mui/styles": "^5.0.1",
    "@rails/actioncable": "^6.1.4-1",
    "@rails/activestorage": "^6.1.4-1",
    "@rails/ujs": "^6.1.4-1",
    "@rails/webpacker": "^6.0.0-rc.5",
    "babel-plugin-macros": "^3.1.0",
    "prop-types": "^15.7.2",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react-on-rails": "12.3.0",
    "react-player": "^2.9.0",
    "turbolinks": "^5.2.0",
    "webpack": "^5.53.0",
    "webpack-cli": "^4.8.0"
  },
  "version": "0.1.0",
  "babel": {
    "presets": [
      "./node_modules/@rails/webpacker/package/babel/preset.js"
    ]
  },
  "browserslist": [
    "defaults"
  ],
  "devDependencies": {
    "@webpack-cli/serve": "^1.6.0",
    "eslint": "^8.0.0",
    "eslint-plugin-react": "^7.26.1",
    "eslint-plugin-react-hooks": "^4.2.0",
    "webpack-dev-server": "^4.3.1"
  }
}

 

Ответ №1:

ESLint 8.0.0 поставляется с кардинальным изменением правил, которые содержат предложения. Нет ничего, что вы могли бы вложить в свое .eslintrc.js чтобы заставить его работать, если вы используете правила, которые не были обновлены для работы после этого изменения.

Что вы можете сделать:

  • Используйте ESLint 7 до тех пор, пока плагин не будет обновлен для работы с ESLint 8.
  • В случае eslint-plugin-react-hooks , если нарушающее правило уже было обновлено (проверьте эту строку на GitHub), просто с тех пор не было стабильного выпуска пакета. Однако были ежедневные альфа-релизы, на момент написания последней версии 4.2.1-alpha-c3a19e5af-20211014 . Если вам действительно нужны и ESLint 8, и этот плагин, вы можете использовать альфа-версию до выхода следующей стабильной версии.

Комментарии:

1. Проблема с реакцией здесь: github.com/facebook/react/issues/22545

2. npm install -D eslint-plugin-react-hooks@next в данный момент это сработало бы.

3. @next сработал для меня, спасибо!