В Монако я пытаюсь реализовать собственный CodeActionProvider для моего языка.
В приведенном ниже примере я могу получить что-то, работающее для одного редактора, но этот подход кажется странным.
CodeActionProvider зарегистрирован для языка, но команда, которая должна быть запущена, или, по крайней мере, ее идентификатор, специфична для экземпляра редактора.
Это создает зависимость между моим поставщиком языка и конкретным экземпляром редактора.
Практически, в моем сценарии мне нужно поддерживать несколько экземпляров редактора для одного и того же языка.Но также с архитектурной точки зрения я хочу иметь возможность отделить свои языковые поставщики от любого конкретного экземпляра редактора.
Есть ли способ добиться этого для CodeActionProvider?
Пример из github: https://github.com/Microsoft/monaco-editor/issues/964
var editor = monaco.editor.create(document.getElementById("container"), {
value: "{\n\t\"dependencies\": {\n\t\t\n\t}\n}\n",
language: "json"
});
var commandId = editor.addCommand(0, function() {
// services available in `ctx`
alert('my command is executing!');
}, '');
monaco.languages.registerCodeActionProvider('json', {
provideCodeActions: function(model, range, context, token) {
var command = {
id: commandId, // multiple editors will have a different commandId!
title: "Some command!"
};
return [{
command: command,
title: "Some command action!"
}];
}
});