Как стать автором
Обновить

Пишем простые расширения VS Code для автоматизации задач командной строки

Время на прочтение9 мин
Количество просмотров12K
Всего голосов 18: ↑17 и ↓1+17
Комментарии14

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

Расширения в VS Code пишутся на Typescript

JavaScript уже запретили?

нет, не запретили, не стал сильно вдаваться в этот вопрос, так-то, если заморочиться, то можно на чём угодно, по идее, писать, но Typescript будет поудобнее, разве нет?

то можно на чём угодно, по идее, писать

Даже на C++? Расскажите как - мне интересно.

Ну, например, есть такая разновидность расширений - сервер поддержки языка, они работают по определённому протоколу и поэтому абсолютно неважно, на чём они написанны, такая же история и с расширениями типа адаптер отладки.
Опять же, если очень хочется, то можно что-то в ноду завернуть, но это потребует усилий для поддержки на разных платформах. Но, тем не менее, чем-то таким занимается Микрософт в своих расширениях для cmake и c++, если ничего не путаю. В принципе, этому можно посвятить отдельную серию статей, если будет запрос от трудящихся :)

На чём угодно, если оно компилируется в javascript. В том числе и на С++, и на Rust. Я сам вот например собираюсь писать расширение на scala. Единственная возникающая тут проблема это так называемые фасадные библиотеки. Т.е. библиотеки (для С++ это просто заголовочные файлы), удобно описывающие интерфейсы vscode API, в системе типов выбранного языка. Но у scala с этим очень хорошо, фактически там напрямую используются типизированные библиотеки typescript.

Расширение на scala? Очень интересно, а какого рода расширение?
А про библиотеки для С++ - к сожалению, заголовочными файлами тут не обойтись) или я что-то недопонял?)

Расширение на scala? Очень интересно, а какого рода расширение?

Система разработки для своего процессора, встраиваемого в проекты на FPGA. Ассемблер с настраиваемой системой команд, микроассемблер(генератор микрокода), отладчик-эмулятор, отладчик для реального железа. Поскольку процессор пишется на Chisel, который scala-библиотека, я решил пусть и всё будет на scala. Вот примеры расширений на scala:

https://github.com/pme123/vscode-scalajs-hello это проект на sbt

https://github.com/incrementum/vscode-extension-scala-mill это на mill

А про библиотеки для С++ - к сожалению, заголовочными файлами тут не обойтись) или я что-то недопонял?)

Да нет, тут всё прозрачно. С++ прекрасно компилируется в javascript, см. например https://emscripten.org/index.html . Да и у ванильного clang есть бэкэнд, генерирующий javascript https://habr.com/ru/articles/454868/ . Это означает, что всё что Вы напишете на С++ в итоге превратится в javascript и сможет быть выполнено средой vscode. Единственная проблема - расширение должно взаимодействовать со средой. Т.е. как-то вызывать функции её API. Для scala эта проблема давно решена. Есть конвертер интерфейсных библиотек typescript в scala. Да, иногда приходится дорабатывать напильником. Но вобщем-то работает достаточно стабильно. Существует ли такая штука для С++ - не знаю. Если да, то вообще без проблем. Конвертируешь нужные библиотеки typescript в файлы описания классов С++ и вперед. Если нет, придется либо написать такой конвертер самому, либо писать соответствующие h-ники ручками.

Ой, как же хорош Emacs, когда читаешь как писать плагины для других редакторов)

Но пост был познавательным, Я охренел

спасибо, а что именно удивило, если не секрет?

Ну.. Я не думал до этого как работает система плагинов в современных редакторах, а это ну довольно легко, точно легче, чем я(пользователь Emacs) думал — просто регистрируешь команды в json, встроенные UI компоненты легко расширяются. Но в Emacs ещё легче)

Ответ на сообщение ниже: Это не похоже на разработку пакетов в Emacs. Emacs это по сути просто REPL, где ты выполняешь код, например, определяет функцию и можешь моментально юзать, никаких стандартов только фантазия

про REPL надо подумать...но чисто теоретически не вижу проблем пока
с точки зрения структурирования: ну, хорошо, мы можем там запускать свои программы на Лиспе, которые имеют доступ ко всем ресурсам Emacs, я правильно понимаю?

откомментировал ниже, может это похоже на Emacs?

спасибо большое за статью. Как раз задумывался над какими-то механизмами, которые бы облегчали запоминание всевозможных команд, которых ныне огромное количество. Имею в виду в основном фронтовые фреймворки, где у каждого своя специфика и документация. Было бы здорово через подобные плагины сделать простой способ по выполнению частых команд. подскажите, а для именно для VSCode какие-то ещё есть варианты языков для написания расширений? или в основном Typescript как некий бестпрактис?

Есть такая вещь как Задания (Tasks) , на уровне конфигурационных файлов можно всё сделать, в описании есть опять про TypeScript, но его совершенно необязательно использовать. Или можно взять расширение, которое помогает с ними работать, например, TaskList, описание есть здесь, поставить можно прямо из Кода. Может допишу тут про это подробнее, если есть запрос.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий