【发布时间】:2020-08-08 03:53:50
【问题描述】:
我正在尝试使用动态 sn-ps 构建 VSCode 扩展。我查看了这个 StackOverflow 答案:Dynamic snippet evaluation in VSCode,然后尝试使用 CompletionItemProvider (https://code.visualstudio.com/api/references/vscode-api#CompletionItemProvider) 并查看了 Microsoft https://github.com/microsoft/vscode-extension-samples/tree/master/completions-sample/src 这个示例
现在我的动态 sn-p 扩展程序调用一个 API(我制作并且工作正常),然后检索数据。但是 CompletionItem 没有出现在 VSCode 上
这是扩展的代码
const provider1 = vscode.languages.registerCompletionItemProvider('plaintext', {
async provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken, context: vscode.CompletionContext) {
const linePrefix = document.lineAt(position).text.substr(0, position.character);
console.log(linePrefix);
console.log("in provide")
const val = await callToAPIAndRetrieve("sa")
console.log(val)
// a simple completion item which inserts `Hello World!`
const simpleCompletion = new vscode.CompletionItem(val);
return [simpleCompletion];
}
},'');
context.subscriptions.push(provider1);
扩展已注册,所有其他功能都可以使用。唯一的问题是这个完成
这里的变量val 填充了我要添加的字符串。我的假设是它与 async 函数有关。如果我对其进行硬编码,它可以正常工作。所以我怀疑async await 可能是问题所在
任何帮助表示赞赏
编辑
这是callToAPIAndRetrieve的代码:
async function callToAPIAndRetrieve(term: string): Promise<string> {
const apiKey = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1OTU0MTI5NTQsIm5iZiI6MTU5NTQxMjk1NCwianRpIjoiY2EzOThjZDctMmEzOS00NzNjLTlmMGEtM2RjNTEyMTkwOTdiIiwiZXhwIjoxNjI2OTQ4OTU0LCJpZGVudGl0eSI6IkdldENvZGVUZXN0IiwiZnJlc2giOmZhbHNlLCJ0eXBlIjoiYWNjZXNzIn0.Rmjxa4zfzuGGW-DrHEasGfBJ0xZZdVmHGuDyemrrn6s";
var url = "https://getcode.herokuapp.com/api/snippets/2";
const response = await fetch(url,{
method:"GET",
headers:{
"Authorization":"Bearer "+apiKey
}
});
const json = await response.json();
console.log(json.snippet.code)
return (json.snippet.code)
}
编辑我根据答案编辑了代码,现在我得到了这些日志(这意味着它可以工作)但仍然存在完成项未显示的问题
ex
Object
sdfg
这里ex是我输入的字符串,sdfg是要建议的代码sn-p
【问题讨论】:
标签: typescript visual-studio-code vscode-extensions