I'm trying to have a custom way of implementing go-to-definition and that requires to override the editor-services, especially openEditor(), and findModel() methods, as far as I saw.
I tried following this comment:
https://github.com/microsoft/monaco-editor/issues/291#issuecomment-450706479
But couldn't run it in monaco's playground since there's no override for findModel.
I tried to add it to the playground so it would look like that:
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 });
But that doesn't work either, as it doesn't run the findModel implementation here and logs in the console the error that the model doesn't exist.
So I was looking to see how does the third argument in monaco.editor.create() looks like and how it should behave. That third argument is (?Override: IEditorOverrideServices).
The monaco docs aren't helpful and the TypeScript definition of it is too vauge:
export interface IEditorOverrideServices {
[index: string]: any;
}
So how should it really be used?