使用React代码(JSX)的Eslint(Airbnb)缩进问题

时间:2018-08-20 09:14:59

标签: reactjs visual-studio-code eslint eslint-config-airbnb

我正在解决我的 eslint 的一个小问题,它似乎在大多数情况下都可以正常工作,但是在某些情况下,它不能与React代码配合使用。

以下面的代码为例:

const cellPLay = (name, src) => (
  <Table.Cell>
    <Modal trigger={<Button icon><Icon name="video play" size="large" /></Button>}>
      <Modal.Header>
        {name}
      </Modal.Header>
      <Modal.Content image>
        <Modal.Description>
          <video src={src} controls style={{ width: 910 }} />
        </Modal.Description>
      </Modal.Content>
    </Modal>
  </Table.Cell>
);

给出这样的错误:

  

/my-path/MyFile.js:18:7:   预期缩进8个空格字符,但发现6。   [错误/反应/ jsx-indent]

出于某种原因, eslint 认为应该在 Modal.Header 之后缩进 Modal.Content ,但是即使我修复了所有缩进问它说某些结束标记的缩进是错误的:

  

预期的结束标记以匹配开始的缩进

我的eslint配置文件:

{
  "extends": "./my-eslint/index.js"
}

实际的附加代码:

module.exports = {
  extends: require.resolve('eslint-config-airbnb'),
  env: {
    browser: true,
    jest: true,
    es6: true,
  },
  parserOptions: {
    ecmaVersion: 8,
    sourceType: 'module',
    ecmaFeatures: {
      jsx: true,
    },
  },
  rules: {
    strict: 'error',
    'react/jsx-filename-extension': [1, { extensions: ['.js', '.jsx'] }],
    'no-plusplus': 'off',
    'jsx-a11y/media-has-caption': 'off',
    'jsx-a11y/anchor-is-valid': [
      'error',
      {
        components: ['Link'],
        specialLink: ['to'],
      },
    ],
  },
};

我尝试手动添加jsx缩进规则

'react/jsx-indent': [2, 2],

没有解决。

还有其他想法吗?

顺便说一句,VSCode在缩进方面做得正确,但是当我手动运行 eslint 时,它会失败,并且由于正在运行代码样式自动化,因此我需要对其进行修复。我遵循了一些答案,并在VSCode上安装了漂亮的代码,看来现在它们可以到达同一页面,但是我需要解决缩进问题。

更新1 按照@ a-jar-of-clay的建议,我尝试将软件包升级,将eslint升级到5.4.0,将airbnb升级到17.1.0,将airbnb-base升级到13.1.0

现在我收到了新的错误消息,可能是由于某些不兼容性造成的:

  

错误:config-airbnb / rules / react.js:规则配置   “ react / jsx-no-bind”无效:值   {“ ignoreRefs”:true,“ allowArrowFunctions”:true,“ allowFunctions”:false,“ allowBind”:false,“ ignoreDOMComponents”:true}   不应具有其他属性。

更新2 按照@ matt-dell的要求,我用来手动运行的命令是:

./node_modules/.bin/eslint --fix --format unix  --config my-eslint/index.js

这肯定是我的配置,因为它在我更改某些规则时会做出反应。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,并通过一些软件包进行了修复: 通过使用eslint插件并扩展了react-app eslint,它已得到修复。

package.json

    "babel-eslint": "^7.2.3",

    "eslint": "^4.19.1",
    "eslint-config-react-app": "^2.1.0",
    "eslint-plugin-flowtype": "^2.50.1",
    "eslint-plugin-import": "^2.14.0",
    "eslint-plugin-jsx-a11y": "^5.1.1",
    "eslint-plugin-react": "^7.11.1",

.eslintrc.js

 "env": {
    "browser": true,
    "es6": true
},
"extends": ["react-app", "eslint:recommended"],
"parserOptions": {
    "ecmaFeatures": {
        "experimentalObjectRestSpread": true,
        "jsx": true
    },
    "sourceType": "module"
},
"globals": {
    "React": true
},
"plugins": [
    "react"
],
"rules": {/* define your rules here...*/}

祝你好运!