更漂亮的将 if / else 重新格式化为单行

Posted

技术标签:

【中文标题】更漂亮的将 if / else 重新格式化为单行【英文标题】:Prettier reformats if / else into single line 【发布时间】:2019-12-15 15:31:15 【问题描述】:

我正在一个使用 React 和 Typescript 的项目中尝试 Prettier。但是我在配置多行 i​​f / else 语句时遇到问题。

当我写作时:

if (x >=0) 
  // Do something

else 
  // Do something else

Prettier 将其重新格式化为:

if (x >=0) 
  // Do something
 else 
  // Do something else

我将此规则添加到我的 tslint 文件中:"one-line": false,但 Prettier 仍在格式化我的语句。

这是 Prettier 的核心规则,无法通过 tslint 配置更改还是我做错了什么?

我的 tslint.json 是:


  "extends": [
    "tslint:recommended",
    "tslint-react",
    "tslint-config-prettier"
  ],
  "rules": 
    "prettier": true,
    "interface-name": false,
    "no-console": [
      true,
      "log",
      "debug",
      "info",
      "time",
      "timeEnd",
      "trace"
    ],
    "one-line": false
  ,
  "rulesDirectory": [
    "tslint-plugin-prettier"
  ]

我的 .prettierrc 文件是:


  "trailingComma": "es5",
  "printWidth": 80,
  "semi": true,
  "tslintIntegration": true,
  "eslintIntegration": true,
  "jsxSingleQuote": true,
  "singleQuote": true

【问题讨论】:

Prettier 是一个固执己见的格式器,这意味着它不是可定制的,它旨在解决团队内部关于格式的无休止争论。 如果你想要更多的灵活性,除了它所防止的所有常见错误之外,ESLint 还可以自己创造奇迹! 我明白你的意思。我只是想,既然 Prettier 说单行错误来自 tslint,我可以更改它的配置并让它消失。 我同意。这很烦人! @KonradViltersten 我同意! 耸耸肩 最后,不得不同时处理不同的项目,我认为管理我的期望比维护每个项目的繁重配置更容易,所以我屈服于 Prettier。我们仍然使用 ESLint,但格式留给 Prettier。此外,在我多年来使用的不同 IDE 中,ESLint 与 Prettier 的自动格式化集成参差不齐,而且 ESLint 变得更糟(不再维护插件等)。 【参考方案1】:

在项目中将 Prettier 与 linter 结合使用时:

Prettier 将处理所有格式规则 代码质量规则将由 linter(例如 tslint)处理

更改 tslint 的配置进行格式化不会影响 prettier 的输出。 见Prettier vs Linters。

事实上,如果您不注意如何配置 tslint,最终可能会导致规则冲突。这就是为什么存在像 tslint-config-prettier 这样的包的原因。

Prettier 的配置选项很少,因为它是一种自以为是的格式化程序,如其Option Philosophy 中所述。

【讨论】:

以上是关于更漂亮的将 if / else 重新格式化为单行的主要内容,如果未能解决你的问题,请参考以下文章

保存时更漂亮的 VSCODE 重新格式化已停止工作

将 if 语句放在一行更漂亮

Android Studio 代码格式问题

如何将我的节点 winston JSON 输出更改为单行

没有 else 子句的单行 If 条件 [重复]

单行列表理解:if-else 变体