BSL Language Server три года! 🎉
Ровно три года назад, спустя неделю робких попыток разработать плагин для 1С в IntelliJ IDEA, нам с
@Labotamy пришла в голову идея попробовать реализовать ядро поддержки языка отдельно от IDE в виде Language Server - специализированного программного продукта, взаимодействующего со средой разработки по унифицированному протоколу, без привязки к конкретным особенностям среды, будь то Sublime Text или Visual Studio Code.
Исторический коммит, в котором появился класс BSLLanguageServer, можно посмотреть тут:
https://github.com/1c-syntax/intellij-language-1c-bsl/commit/ba0e40e928616ea78011f7c8d0d4fe226df6ee0dЧто он делал? Да ничего, даже выключаться толком не мог, не говоря уже о том, что IDEA не могла к нему подключиться.
В ночь на 24 июля (
https://github.com/1c-syntax/intellij-language-1c-bsl/commit/c0547e949f4bf46633c900ef711da521a7712b73) оно уже пыталось барахтаться, подключаясь через LSP-плагин для IDEA, а 25 июля начало жить в виде самостоятельного модуля, а затем и в виде отдельного проекта (
https://github.com/1c-syntax/bsl-language-server/commit/4227866d46aff6db4101c8a0acb25619d45d1597).
Что произошло с проектом за три года? Парадоксально, но первая тестовая фича, подключенная в BSL LS - автодополнение кода строкой "hello world!" - так и не докатилась до релиза. Автодополнения все еще нет.
Зато есть:
* любимые и ненавидимые многими диагностики - BSL LS очень любит орать по поводу и иногда без повода;
* всплывающая подсказка при наведении на методы конфигурации и локальные методы в oscript;
* переходы к определению методов и поиск мест использования;
* иерархия вызовов методов с возможностью навигации;
* древовидное дерево областей/методов/переменных текущего модуля и их список во всем проекте;
* некоторое количество "быстрых исправлений" и "быстрых действий", которые могут помочь быстро поправить ошибку в коде;
*
бесявые счетчики цикломатической и когнитивной сложностей над методами;
* форматирование модуля и выделенного текста - хоть и с огрехами, но все же работает;
* сворачивание областей, методов, блоков кода, комментариев и пакетов запроса.
Что еще будет?
Работа с платформенным контекстом. Чтобы BSL LS знал, что такое
Новый Массив, какие у него есть методы, что там можно показать после точки для
Справочники и вообще. Обещанного три года ждут, прошло как раз три года, значит, пора делать! :)
Что будет в следующем релизе?
Нечеловеческими усилиями
@theEvilBeaver в ядре BSL LS появился умный вычислитель выражений с учетом приоритетов операций (умножение, деление, и/или и прочее) и почти финализирован Control Flow Graph вместе с новой версией диагностики на
Возврат во всех ветках кода. Это охренеть как круто и большой респект!
Это если из полезного. А из безполезного в след релизе BSL LS научится показывать прямо в редакторе кода окошко с предпросмотром цветов, создаваемых через конструктор
Новый Цвет() или обращение к системному перечислению WebЦвета. Еще и конвертировать их туда обратно, и подставлять значения выбранного цвета из палитры внутрь конструктора. Зачем? Все по заветам Андрея: "Because it's fucking awesome!"
Спасибо всем вам за поддержку и за эти годы вместе. С Днем рождения нас! Ура!