ESLint 和 Prettier 冲突,无法为代码块禁用 Prettier

cdp*_*sch 6 javascript eslint prettier

我们的项目使用 Prettier 和 ESLint。通常它们一起工作得很好,但我们遇到了一个问题,即两者发生冲突。我不知道为什么,我不知道如何修复它,而且我无法禁用更漂亮的线路,因为我收到错误。

我们设置的相关部分

// .prettierrc
  "printWidth": 80,
  "tabWidth": 2,
  "useTabs": false,
  "semi": true,
  "singleQuote": true,
  "trailingComma": "es5",
  "arrowParens": "always"

// eslintrc.js
  extends: ['airbnb', 'eslint-config-prettier', 'prettier/react'],
  plugins: [
    'eslint-plugin-prettier',
    'redux-saga',
    'react',
    'react-hooks',
    'jsx-a11y',
  ],
  rules: {
    'prettier/prettier': ['error'],
    indent: [
      2,
      2,
      {
        SwitchCase: 1,
      },
    ],
    'max-len': 0,
Run Code Online (Sandbox Code Playgroud)

这是代码,添加了注释以指示问题:

    const options =
      children === undefined
        ? items.map((item) => (
          // Prettier complains about the next four lines
          <option key={uuidv1()} value={item}>
            {item}
          </option>
        ))
        : children;
Run Code Online (Sandbox Code Playgroud)

Prettier 想要这些线条另外两个空间。

错误截图

ESLint 喜欢他们所在的地方。我倾向于同意 ESLint。如果我为 Prettier 自动格式化,ESLint 会抱怨并希望将其改回来。我正在使用 VSCode。我们的代码库中的其他任何地方都没有发生过这样的冲突。

我尝试只为这些行禁用 prettier,但是使用 eslint 的自动禁用选项会添加// eslint-disable-next-line prettier/prettier,这会导致应用程序以Definition for rule 'prettier/prettier' was not found. // prettier-ignore由于 JSX,尝试添加是不可能的。

我不明白为什么 Prettier 想要 ESLint 所说的。我们能够修复它的唯一方法是'prettier/prettier': ['error'],完全从我们的 ESLint 配置中删除,这似乎不合适。

建议?

2019年 10 月 10 日更新- 感谢用户 chazsolo 的建议,我修改了函数的格式以获取此信息,它没有任何 linting 问题:

const dropDownOptions =
  children ||
  items.map((item) => (
    <option key={uuidv1()} value={item.value || item}>
      {item.text || item}
    </option>
  ));
Run Code Online (Sandbox Code Playgroud)

对于这个问题,这是一个可行的解决方法,但我没有回答这个问题,因为我仍然觉得我的代码是完全有效的,不应该发生这种冲突。

该解决方法也仅适用于我检查的值children是否为 false。我们有另一个条件,它是匹配的,我不能以同样的方式将它短路。所有这些问题都涉及到.map().

// Can't short-circuit here
var === SOME_ENUM
  ? filteredItems.map((item) => (
      // some JSX
    ))
  : filteredItems.map((item) => (
      // some other JSX
    ));
Run Code Online (Sandbox Code Playgroud)

我可以在 map 函数内移动条件,但这会导致每个循环检查条件。

这个问题已经出现了很多,我可能会以这种速度在 Prettier 中为它创建一个问题,因为它很烦人。

bra*_*hex 4

我的基本设置对于 .eslintrc.json 中的 vue/ts 运行良好。你应该在插件中添加 prettier

{
  "parser": "vue-eslint-parser",
  "parserOptions": { 
    "parser": "@typescript-eslint/parser" 
  },
  "plugins": ["@typescript-eslint", "prettier"],
  "rules": {
    "semi": ["error", "never"],
    "quotes": ["error", "single"],
    "prettier/prettier": "error"
  }
}
Run Code Online (Sandbox Code Playgroud)