Monaco 重命名是编辑器标配,可以重命名变量名称。重命名包括两部分,首先是列出 Rename 的名称,第二步是重命名后文字和对应位置信息,用于替换。先看一下效果:
通过 registerRenameProvider 注册 RenameProvider 的处理函数。
右键变量名称点击重命名,resolveRenameLocation 返回名称,provideRenameEdits 返回最终更新文字和对应的位置信息。
provideRenameEdits
返回修改文字和对应位置信息 WorkspaceEdit
IWorkspaceTextEdit 包含以下信息,versionId 直接通过 model.getVersionId 获取当前版本号
TextEdit 包含文字和位置信息
resolveRenameLocation
返回 Rename 变量名和显示位置
代码实现如下
export function renameProvider(
editor: monacoEditor.editor.IStandaloneCodeEditor,
monaco: typeof monacoEditor
) {
return monaco.languages.registerRenameProvider("mySpecialLanguage", {
provideRenameEdits: function (model, position, newName, token) {
var word = model.getWordAtPosition(position);
if (!word) {
return {
edits: [ ]
};
}
var range = new monaco.Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn);
// Example of a basic rename operation
return {
edits: [
{
resource: model.uri,
versionId: model.getVersionId(),
textEdit: {
range: range,
text: newName
}
}
]
};
},
resolveRenameLocation: function(model, position, token) {
var word = model.getWordAtPosition(position);
if (!word) {
return null;
}
return {
range: new monaco.Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn),
text: word.word
};
}
})
}