visual-studio-code - 如何添加作为终端命令的语言格式化程序?
问题描述
我们有一个语言格式命令mint format src/main.mint
,可以就地编辑文件。是否有适当的方法将此操作注册为文档格式化程序,以便在有人按下 Shift+Option+F 时触发它?
解决方案
您可以将文件复制到临时目录,使用命令行工具对其进行修改,然后将其读取并提供给 VSCode
格式化程序.ts
import vscode = require("vscode");
import cp = require("child_process");
import fs = require("fs");
import { getDirtyFile } from "./utils";
export class MintFormattingProvider
implements vscode.DocumentFormattingEditProvider {
public provideDocumentFormattingEdits(
document: vscode.TextDocument,
options: vscode.FormattingOptions,
token: vscode.CancellationToken
): vscode.TextEdit[] | Thenable<vscode.TextEdit[]> {
return new Promise((resolve, reject) => {
let file = getDirtyFile(document);
let res = cp.spawnSync("mint", ["format", file], {
cwd: vscode.workspace.rootPath,
});
if (res.status !== 0) {
reject(res.error);
} else {
if (!fs.existsSync(file)) {
reject(file + " file not found");
} else {
let content = fs.readFileSync(file, "utf-8");
let range = document.validateRange(
new vscode.Range(
new vscode.Position(0, 0),
new vscode.Position(1000000, 1000000)
)
);
resolve([vscode.TextEdit.replace(range, content)]);
}
}
});
}
}
实用程序.ts
import fs = require("fs");
import path = require("path");
import os = require("os");
import vscode = require("vscode");
/**
* Returns temporary file path of edited document.
*/
export function getDirtyFile(document: vscode.TextDocument): string {
var dirtyFilePath = path.normalize(
path.join(os.tmpdir(), "vscodemintdirty.mint")
);
fs.writeFileSync(dirtyFilePath, document.getText());
return dirtyFilePath;
}
export function createAndShowOutputWindow(): vscode.OutputChannel {
var channel = vscode.window.createOutputChannel("mint");
channel.show();
return channel;
}
推荐阅读
- mysql - 按日期和所有唯一值的总和分组
- python - 如何在列表中保存日期时间对象(python、csv)
- linux - 我在哪里可以找到 OpenEmbedded 层索引中未列出的 Yocto“子”包,如“kbd-keymaps”?
- swift - 如何从枚举中获取字符串
- javascript - 如何正确设置 vue.config.js?
- bash - 如何使用 shell 脚本截断无关的输出?
- javascript - 带有 Promise 包装器的 setTimeout 在 Jest async/await 中无法按预期工作
- java - 以下警告是否会在我的 JOGL (JogAmp) 应用程序中引起任何问题?
- python - np.where 在新图像上没有按预期工作
- javascript - 从角度打字稿调用javascript的问题