簡體   English   中英

vscode如何自動跳轉到正確的定義

[英]vscode how to automatically jump to proper definition

//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”來跳轉顯示定義,但是定義是自動跳轉到“cursor a9 is”,而不是正確的“cursor 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);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM