Monaco 中使用 DeclarationProvider,Declaration(声明) 是定义,就像方法的定义,Definition(定义) 是实现,例如 function 的实现。
- 方法声明
int add(int a, int b);
- 方法定义
function add(a, b) { // This is a function definition
return a + b;
}
在方法上点击 Definition
注册 DeclarationProvider 和 注册 DefinitionProvider 接口参数和返回值都是一致的
返回 Definition
实现代码, 返回值为
- uri:文件地址
- range:跳转位置
export function declarationProvider(editor, monaco){
return monaco.languages.registerDeclarationProvider('javascript', {
provideDeclaration: function(model, position) {
// Find the word at the position
const word = model.getWordAtPosition(position);
if (!word) {
return { declarations: [] };
}
const wordRange = new monaco.Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn);
// Define the declaration location
const declarationLocation = {
uri: model.uri,
range: new monaco.Range(1, 1, 1, 10) // Dummy range for the example
};
const declarationLocation1 = {
uri: model.uri,
range: new monaco.Range(4, 1, 4, 10) // Dummy range for the example
};
return [declarationLocation, declarationLocation1]
}
});
}
最终效果