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

时间:2019-08-22 20:30:31

标签: visual-studio-code vscode-extensions

我正在处理必须由 both 格式化的Haskell项目:

  • stylish-haskell(用于导入重新排序)
  • brittany(用于常规格式)

我可以为一种语言设置单个默认格式器:

"[haskell]": {
    "editor.defaultFormatter": "MaxGabriel.brittany"
}

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

但是我需要保存两个文件,一个接一个地运行。截至目前,我只能在保存时运行单个默认格式化程序。在这种情况下,顺序无关紧要,但在更一般的情况下,顺序可能会如此。

我尝试将editor.defaultFormatter设置为格式器列表(这没有按预期工作),并构建了一个本地扩展程序,该扩展程序使用各种参数调用editor.action.formatDocument.multiple,这只会弹出一个可用格式器的下拉列表。

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

2 个答案:

答案 0 :(得分:1)

我认为这不是真正受官方支持的用例,但是您可以通过扩展执行以下操作来解决此问题:

  • 为Haskell禁用"editor.formatOnSave"
  • vscode.workspace.onDidSaveTextDocument注册一个回调,其中:
    • 使用WorkspaceConfiguration API将"editor.defaultFormatter"设置为第一个格式化程序
    • 致电"editor.action.formatDocument"
    • "editor.defaultFormatter"设置为第二个格式化程序
    • 再次致电"editor.action.formatDocument"

当然,这仅涉及formatOnSave格式,而不涉及formatOnPasteformatOnType

答案 1 :(得分:0)

最后的想法:看看Run on Save extension并以格式化程序而不是以扩展名的形式执行脚本。

上一个修改:

如果格式化程序没有提供命令(请参阅注释中的讨论,某些命令确实起作用),brittany却没有,请尝试执行以下操作:

{
    "label": "brittany format step",
    "type": "shell",
    "command": "brittany ${file}",
    "problemMatcher": []
}