我正在尝试采用一种自定义方式来实现转到定义,并且据我所知,这需要重写编辑器服务,尤其openEditor()是 和方法。findModel()
我尝试遵循此评论:
https://github.com/microsoft/monaco-editor/issues/291#issuecomment-450706479
但无法在摩纳哥的操场上运行它,因为findModel.
我尝试将它添加到游乐场,所以它看起来像这样:
monaco.languages.register({ id: 'mySpecialLanguage' });
monaco.languages.registerDefinitionProvider('mySpecialLanguage', {
provideDefinition: function(model, position, cancellationToken) {
return {
uri: monaco.Uri.parse('http://a/different/file.txt'),
range: new monaco.Range(3, 1, 3, 1)
};
}
});
var editorService = {
openEditor: function() {
alert(`open editor called!` + JSON.stringify(arguments));
},
resolveEditor: function() {
alert(`resolve editor called!` + JSON.stringify(arguments));
},
findModel:function(editor, data) {
alert(`resolve editor called!` + JSON.stringify(arguments));
}
};
monaco.editor.create(document.getElementById("container"), {
value: '\n\Go to definition on this text',
language: 'mySpecialLanguage'
}, { editorService: editorService });
Run Code Online (Sandbox Code Playgroud)
但这也不起作用,因为它不在这里运行 findModel 实现,并在控制台中记录模型不存在的错误。
所以我想看看第三个参数是什么monaco.editor.create()样子以及它应该如何表现。第三个参数是 (?Override: IEditorOverrideServices)。
摩纳哥文档没有帮助,而且它的 TypeScript 定义太浮夸:
export interface IEditorOverrideServices {
[index: string]: any;
}
Run Code Online (Sandbox Code Playgroud)
那么它到底应该如何使用呢?
我最后的解决方案是:
const editor = monaco.editor.create(document.getElementById("container")!, {
model: monaco.editor.createModel(value, 'python', monaco.Uri.parse('file:///users/gilad/monaco-languageclient/example/lib/python3/main.py')),
glyphMargin: true,
lightbulb: {
enabled: true
},
});
const editorService = (editor as any)._codeEditorService;
const openEditorBase = editorService.openCodeEditor.bind(editorService);
if(openEditorBase){
}
editorService.openCodeEditor = async (input: any, source: any, sideBySide: any) => {
debugger
const result = await openEditorBase(input, source);
if (result === null) {
const fullPath = input.resource.path
const lineNumber = input.options.selection.startLineNumber
alert("file is at " + fullPath + ":" + lineNumber )
}
return result; // always return the base result
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1688 次 |
| 最近记录: |