【问题标题】:Prevent deleting dead code during Auto Format on Save?防止在保存时自动格式化期间删除死代码?
【发布时间】:2021-04-05 10:23:17
【问题描述】:

允许文件在保存操作时自动格式化,但停止/禁用/防止 VSCode 删除死代码的神奇配置是什么?

有时我想故意在函数中间抛出异常,出于调试目的,但为了不被删除,我不得不注释掉所有以下代码。

更糟糕的是,有时我在编辑器尚未从代码中的某些错误中恢复时保存,认为代码仍然包含错误,并导致代码删除,而这本来就不应该发生。为了恢复被错误删除的好代码,我发现自己拉起 git 太多次了。

是否有明确的“不删除死代码”选项可以开启?

更新:

  1. 从命令行运行 Prettier(文件的格式化程序)并没有删除死代码。
  2. 尝试禁用所有扩展也无济于事。死代码在保存时仍会被删除。

【问题讨论】:

  • 这似乎是您正在使用的特定格式化程序的具体功能。你知道它是哪一个吗?您可以运行“使用...格式化文档”命令以获取可用选项的列表。
  • 谢谢@ÁlvaroGonzález,我认为这是 VSCode 代码行为。我启用了“更漂亮”。如果这就是杀死我死代码的原因,那么我还找不到禁用它的方法。
  • 更新:@ÁlvaroGonzález 根据您的评论,我创建了一个示例并从命令行运行 Prettier。 Prettier 自动格式化文件,但没有删除死代码。似乎问题出在其他地方。

标签: visual-studio-code vscode-settings


【解决方案1】:

案件已解决。

我无法确定导致它的确切软件包,但它似乎与 ESLintPrettier 相关。

原来项目的 Github repo 包含一个 .vscode 目录,其 settings.json 包含以下配置:

{
  "editor.codeActionsOnSave": {
    "source.fixAll": true
  }
}

我已经看到帖子说要在 VSCode 的通用 settings.json 文件中添加 "source.fixAll": false,但是我这样做时没有效果。

将标志设置为 false 成功了

{
  "editor.codeActionsOnSave": {
    "source.fixAll": false
  }
}

注意:将上述块添加到一般settings.json 也没有效果。我必须修改本地的.vscode/settings.json 文件才能让它工作。

【讨论】:

  • 我建议您编辑答案并解释提供source.fixAll 设置的扩展程序,以便将来在这里搜索的任何人都可以轻松知道是否是他的情况。
  • @ÁlvaroGonzález 我更新了答案。它是 ESLint 或 Prettier,但我不能确切地说出是哪一个。这件事困扰了我好几个月。我发布了一个问题,然后分享了我的解决方案。不指定确切的相关包真的值得投反对票吗?
  • 谢谢!我不知道是谁干的,为什么干的,但他让我很生气。愚蠢的想法
【解决方案2】:

我将在这里分享我在 Github 上找到的内容,

因此,如果您替换您的 codeActionsOnSave 并使用 eslint 它应该会阻止 vscode 对规则 eslint(no-unreachable) 运行修复程序并在保存时删除您的代码(可能是因为像 Prettier 这样的另一个格式化程序运行它的修复程序)。

settings.json

{
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": true
  }
}

"editor.formatOnSave": [bool] 不是必需的。

检查您的工作区 settings.json 和您的用户 settings.json。

由于计算所有可能修复的复杂算法,您可能需要使用 "editor.codeActionsOnSaveTimeout": [number] (ms) 设置调整时间预算

{
  "editor.codeActionsOnSaveTimeout": 1200,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
}

来源:https://github.com/microsoft/vscode-eslint/issues/833

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 2018-08-05
    • 2011-02-20
    • 1970-01-01
    • 2016-12-11
    相关资源
    最近更新 更多