文档格式化,是 VSCode 比较常用的功能,在文档上点击右键选择格式化文档。效果如下:
在 Monaco 通过 registerDocumentFormattingEditProvider 方法注册处理函数,实现 provider 方法。
provider 方法返回格式化好的代码。
TextEdit 包含两个字段:格式化后的代码和代码区域。
代码实现如下,如果要格式化代码,需要做代码解析,生成语法树,并进行换行等处理。这里只是个简单的示例。
export function documentFormat(editor, monaco){
function formatText(text) {
return text.split('\n\n').map(line => line.trim()).join('\n');
}
return monaco.languages.registerDocumentFormattingEditProvider('javascript',{
provideDocumentFormattingEdits: function(model, options, token) {
const text = model.getValue();
const formattedText = formatText(text);
return [{
range: model.getFullModelRange(),
text: formattedText
}];
}
})
}
有需要的同学可以参考 Prettier 的 Html Formatter。 https://github.com/prettier/prettier/blob/main/src/language-html/printer-html.js