如何配置多个格式化程序以在 VSCode 中保存时按顺序运行?

Ben*_*ach 8 visual-studio-code vscode-extensions

我正在开发一个 Haskell 项目,该项目必须由以下两者格式化:

  • stylish-haskell(用于进口重新订购)
  • brittany(用于一般格式)

我可以为一种语言设置单一默认格式化程序:

"[haskell]": {
    "editor.defaultFormatter": "MaxGabriel.brittany"
}
Run Code Online (Sandbox Code Playgroud)

editor.action.formatDocument.multiple或者我可以使用(“在命令选项板中使用...设置文档格式”)从列表中选择一个。

但我需要在保存时一个接一个地运行它们。截至目前,我只能在保存时运行单个默认格式化程序。在这种情况下顺序并不重要,但在更一般的情况下可能会很重要。

我尝试设置editor.defaultFormatter格式化程序列表(这没有按预期工作),并构建了一个使用editor.action.formatDocument.multiple各种参数进行调用的本地扩展,它只是弹出一个可用格式化程序的下拉列表以供选择。

如何在保存时按顺序运行两个格式化程序?

Jot*_*222 7

虽然有点晚了,但对于新手来说,您还可以使用一个已经创建的扩展...顺便说一下,这要感谢这篇文章的所有答案。

请参阅多功能格式化程序

因此,您只需添加要在以下设置settings.json中运行的格式化程序:*.code-workspace


{
    "[haskell]": {
        "editor.defaultFormatter": "Jota0222.multi-formatter",
        "editor.formatOnSave": true
        "multiFormatter.formatterList": [
            "vigoo.stylish-haskell",
            "MaxGabriel.brittany"
        ],
    }
}

Run Code Online (Sandbox Code Playgroud)

使用该配置,stylish-haskell将首先运行,并Britanny在保存更改后立即运行。

PS:我确实是该解决方案的作者。我无意做任何推广,这只是上述答案的实现。所以我要感谢在我之前回答的人。

此外,该扩展是开源的,请随时检查代码并在 GitHub 上做出贡献


Gam*_*a11 4

我不认为这确实是官方支持的用例,但您可以通过让扩展执行以下操作来解决它:

  • 禁用"editor.formatOnSave"Haskell
  • 注册回调vscode.workspace.onDidSaveTextDocument,其中您:
    • 使用设置"editor.defaultFormatter"为第一个格式化程序WorkspaceConfigurationAPI
    • 称呼"editor.action.formatDocument"
    • "editor.defaultFormatter"为第二个格式化程序
    • 重拨"editor.action.formatDocument"

当然,这仅涉及formatOnSave格式化,而不formatOnPaste涉及 或formatOnType