当资产id从VS代码扩展处悬停时,我试图显示缩略图。
let disposable = vscode.languages.registerHoverProvider(['lua', 'luau'], {
async provideHover(document, position, token) {
const range = document.getWordRangeAtPosition(position, /rbxassetid:\/\/\d+/);
const word = document.getText(range);
const id = /rbxassetid:\/\/(\d+)/.exec(word)?.[1];
console.log(`Found ${id}, fetching thumbnail info...`);
const response = await fetch(`<roblox-thumbnail-api>`);
const data = await response.json() as RobloxThumbnailResponse;
const image = data.data?.[0]?.imageUrl;
console.log(image);
const mdString = new vscode.MarkdownString(`Asset: ${id}\n<img src="${image}" height="150px">`);
mdString.supportHtml = true;
return new vscode.Hover(mdString);
}
});这主要是工作,但徘徊在一些不匹配的东西,如rbxassetid://1818仍然会显示一个缩略图。
我正在使用这个小luautest.luau脚本来测试我的扩展。
-- some random stuff that isn't using asset ids
for i=1, 10 do
print(i)
end
print("rbxassetid://1818") -- an asset id
-- some more stuff that isn't using asset ids
for i=10, 1, -1 do
print(i)
end
print("rbxassetid://7200003285") -- another asset id
-- some more random stuff that isn't using asset ids
for i=1, 10 do
print(i)
end悬停在rbxassetid://1818上就像预期的那样工作。

将字符串悬停在第5行
悬停在另一个资产id上也会像预期的那样工作。

将字符串悬停在第10行
问题是,徘徊在其他任何东西上总是会显示资产1818。

在第8行悬停print
我不知道如何修复这个RegEx,这样悬停在不是资产id的东西上就不匹配文件中的第一个资产id。
发布于 2021-11-25 05:24:41
显然,document.getWordRangeAtPosition()可以返回未定义的内容,这似乎会导致document.getText()与整个文档匹配。我能够通过在调用document.getWordRangeAtPosition之后添加这个问题来解决这个问题。
if (!range) {
return;
}https://stackoverflow.com/questions/70083495
复制相似问题