typescript - vscode如何自动跳转到正确的定义
问题描述
//extension.ts
export function activate(context: vscode.ExtensionContext) {
console.log('Congratulations, your extension "helloworld" is now active!');
context.subscriptions.push(vscode.languages.registerDefinitionProvider(
{language: "plsql"}, new GoDefinitionProvider() ));
}
class GoDefinitionProvider implements vscode.DefinitionProvider {
public provideDefinition(
document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken):
Thenable<vscode.Definition>{
return new Promise((resolve, reject) =>{
let definitions:vscode.Definition = [];
for (let i = 0; i < document.lineCount; i++) {
let eachLine = document.lineAt(i).text.toLowerCase().trim();
if (eachLine.startsWith("cursor")) {
definitions.push({
uri: document.uri,
range: document.lineAt(i).range
});
}
}
resolve(definitions);
});
}
}
// testing.txt
cursor a1 is
cursor a2 is
cursor a3 is
cursor a4 is
cursor a5 is
cursor a6 is
cursor a7 is
cursor a8 is
cursor a9 is
a1
a2
a3
a4
a5
a6
a7
a8
a9
例如,现在我们要选择“a4”跳转显示定义,但定义是自动跳转到“光标a9 is”,而不是正确的“光标a4 is”。
结果图片:https ://i.imgur.com/RNAvWMN.png
如何实现自动跳转到正确的定义?以上是extension.ts的源码,供大家参考。
解决方案
您的代码中的问题是,您返回定义数组,而不是单个定义位置。
return new Promise((resolve, reject) =>{
const range = document.getWordRangeAtPosition(position);
const selectedWord = document.getText(range);
let definitions:vscode.Definition = [];
for (let i = 0; i < document.lineCount; i++) {
let eachLine = document.lineAt(i).text.toLowerCase().trim();
if (eachLine.startsWith("cursor")) {
if ( eachLine.includes(selectedWord)) //only selectedWord
definitions.push({
uri: document.uri,
range: document.lineAt(i).range
});
}
}
}
resolve(definitions);
});
推荐阅读
- azure - 在 Azure 上首次请求 .net core api 时响应持续时间长
- r - 定义我想在散点图中包含哪些物种
- amazon-web-services - 限制 SQS 事件触发器的 Lambda 执行率
- python - 我收到 TypeError: cannot concatenate object of type '
'; 只有 Series 和 DataFrame obj 是有效的 - javascript - 悬停和选择器
- javascript - JavaScript:关闭浏览器时如何提示自定义消息框?
- wordpress - 没有任何代码行的 Wordpress 类别列表
- javascript - jQuery slideDown 仅在重新加载后第一次回弹
- python - pytest 函数不返回要在同一 pytest 文件中的以下函数中使用的数据?
- pyomo - Gurobipy vs Pyomo 差异