Поиск идентификатора зависшего актива из расширения VS-кода

#regex #visual-studio-code

Вопрос:

Я пытаюсь отобразить миниатюру, когда идентификатор актива зависает над расширением 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(`lt;roblox-thumbnail-apigt;`);  const data = await response.json() as RobloxThumbnailResponse;  const image = data.data?.[0]?.imageUrl;  console.log(image);   const mdString = new vscode.MarkdownString(`Asset: ${id}nlt;img src="${image}" height="150px"gt;`);  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

Наведение указателя мыши на другой идентификатор актива также работает, как и ожидалось. зависание над вторым активом наведение строки на строку 10

Проблема в том, что при наведении курсора на что-либо еще всегда будет отображаться актив 1818 . зависание над чем-то, что не является активом зависаю print на строке 8

Я не уверен, как исправить это регулярное выражение, чтобы наведение курсора на что-то, что не является идентификатором ресурса, не совпадало с первым идентификатором ресурса в файле.

Комментарии:

1. rbxassetid://1818 соответствует вашему регулярному выражению.

2. Но как бы я сделал так, чтобы он совпадал только в том случае, если он зависает над идентификатором актива? Зависание других вещей все еще совпадает rbxassetid://1818 , и я не знаю, как это предотвратить.

Ответ №1:

По-видимому document.getWordRangeAtPosition() , может возвращать неопределенное значение, что, по-видимому, приводит document.getText() к совпадению всего документа. Я смог решить эту проблему, добавив это после вызова document.getWordRangeAtPosition .

 if (!range) {  return; }