Правильный способ вставки встроенных функций в расширение кода VS - PullRequest
0 голосов
/ 08 июня 2018

Введение

В настоящее время я занимаюсь разработкой приложения на основе модуля Bluegiga BLE-112.Модуль программируется на языке сценариев BGScript.Однако единственным редактором, который я нашел и который поддерживает BGScript, является Notepad ++, который мне не подходит.Поэтому я начал разработку собственного расширения для кода Visual Studio (одно из доступных на рынке расширений не работает).Я уже прошел через colorizer и анализ ошибок, теперь я создаю деталь с предложениями кода.

Основная проблема

Я хотел бы получить все функции, перечисления и события, встроенные в язык , перечислены при наборе текста.Я обнаружил, что фрагменты кода могут быть способом достижения этого.Пример фрагмента в формате JSON, который работает, как я ожидаю, выглядит следующим образом.

"call attclient_indicate_confirm": {
    "prefix": "call attclient_indicate_confirm",
    "body": [
        "call attclient_indicate_confirm(${1:connection})(${2:result})"
    ],
    "description": "Send a acknowledge a received indication from a remote device."
}

call - ключевое слово, указывающее, что в этой строке вызывается функция.Когда фрагмент, подобный этому, хранится в правильном файле JSON, все работает нормально - я начинаю набирать call, VS Code предлагает фрагменты кода, и я могу его использовать.

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

Мой вопрос: есть ли способыкроме фрагментов кода, которые могут быть реализованы внутри расширения кода Visual Studio, для создания предложений по перечислениям на языке BGScript?

1 Ответ

0 голосов
/ 09 июня 2018

Да, вы можете зарегистрировать CompletionItemProvider через registerCompletionItemProvider() (см. languages пространство имен ).Это должно охватывать все ваши варианты использования, так как элементы завершения могут также использовать вставку фрагмента, сделав их insertText a SnippetString.

Часто это (вместе с другими поставщиками) реализуется через уровень абстракции, называемый Протокол Language Server вместо непосредственного использования API VSCode, что делает его независимым от редактора.

...