Получить фрагмент кода Visual Studio программно с помощью API - PullRequest
2 голосов
/ 09 ноября 2019

Можно ли получить список доступных областей действия для фрагментов?

Есть ли какая-либо встроенная функция, которая будет контролировать, какие файлы создавать и где?

Enter image description here

1 Ответ

0 голосов
/ 11 ноября 2019

Фрагменты относятся к языкам и вводятся в VS Code как глобальный или локальный для рабочей области. Языки могут быть добавлены в VS Code с помощью исключений. Обычно путем объявления языка в package.json, добавления файлов синтаксиса и фрагментов. Обновление: Вот руководство , как добавить фрагмент к любому языку через ваше расширение . Если вы следуете руководству и добавите фрагмент в текущее рабочее пространство, вы заметите, что файл с расширением .code-snippets создается в папке .vscode в рабочем пространстве. Поэтому вы можете перечислять все такие файлы, используя API vscode.workspace.workspaceFolders и fs.readDir.

    vscode.workspace.workspaceFolders!.forEach(workspaceFolder => {
        const snippetFiles = fs.readdirSync(path.join(workspaceFolder.uri.fsPath, '.vscode'))
            .filter(el => /\.code-snippets$/.test(el));
    });

Аналогично, глобальные фрагменты добавляются в виде файлов .code-snippets в папку профиля пользователя - в Windows это выглядит такэто: C:\Users\currentUser\AppData\Roaming\Code\User\snippets\*.code-snippets. В обоих местах можно сканировать файлы *.code-snippets, а также программно добавлять такие файлы в эти папки.

Ниже приведена документация о том, как добавлять фрагменты в область с помощью файла . Кажется, что нет никакого открытого API для перечисления всех таких файлов фрагментов программным способом.

Но если вы хотите получить список языков на скриншоте, который вы разместили, используйте этот API:

vscode.languages.getLanguages()

Это может помочь, если вы объясните, что выпытаясь достичь. Вы хотите узнать, откуда исходит конкретный фрагмент, чтобы изменить его? Хотите добавить фрагмент к языку в этом списке? Или к языку, которого нет в этом списке?

...