Связаться со мной - @nixel2007.
Никита Федькин (ранее Грызлов).
На канале не публикуется платная реклама.
Post #262
2.14K
Я часто повторяю фразу, уже ставшую моей внутренней мантрой: "BSL LS - это не только диагностики".
Да, все любят диагностики. Качественный код, ругань в сонаре/среде разработки, все прекрасно.
Но я чуть больше кайфую, когда удается добавить какую-то новую фичу вне ядра диагностик.
Какие-то вещи в Language Server Protocol сделаны очень хорошо и просто.
Например, запрос получения областей, которые можно свернуть
Дай области в таком-то документе? Держи области! Оттуда досюда комментарий, а оттеда доседа -
Какие-то вещи сделаны удивительно, например, уведомление о закрытии документа не означает, что документ был физически закрыт в редакторе. Или что он вообще был в нем открыт. Речь лишь про владение содержимым этого документа - должен ли сервер ждать данные от клиента или может зачитать их с диска по URI.
Ряд вещей сделан просто очень-очень странно, например, уведомление об обновлении конфигурации сервера. Казалось бы, штука нужная, но описана она настолько размыто и неспецифицировано с точки зрения IDE, что каждый редактор сам придумывает, как ему хранить у себя настройки сервера. Это приводит к тому, что при работе с одним и тем же сервером с двух разных IDE, сервер приходится настраивать по-разному. Благо, эту проблему мы решили на своей стороне, сделав единый конфигурационный файл, с которым может работать любая IDE, поддерживающая LSP. Дажене совсем IDE плагин для SonarQube может использовать этот файл для настройки правил в обход "Профиля Качества".
К чему я это все?
В готовящейся версии протокола под номером 3.17 завезли ряд новых и крайне интересных фич. И хотя в чейнджлоге протокола это еще не отражено, т.к. они пока в состоянии proposed, уже есть черновые реализации как для ядра сервера под typescript, откуда берет свое начало LSP, так и под java, на которой базируется BSL Language Server.
Например...
Сколько раз на дню при чтении кода вы думаете о том, что не помните, что за параметр такой пропущен в вызове функции, и какие у него значение по умолчанию? Не ошибся ли я, впаяв "Отказ" поле четвертой запятой? Или он должен быть предыдущим параметром? Где-то IDE поможет при наведении мышкой, где-то же надо будет проваливаться по F12... Вот было бы здорово видеть имена этих параметров сразу на ревью?
Не знаю как у вас, а у меня это - постоянная боль. Да, какие-то вызовы (привет ОбщегоНазначения.СообщитьПользователю) ты считываешь с экрана уже на автоматизме, но чуть в сторону и снова вопросычто за хе про параметры.
Если вы работали когда-нибудь в IntelliJ IDEA или каких-то других редакторах (попродвинутее конфигуратора), то наверное могли заметить штуку под названием inlay hint. Когда прямо в тексте программы IDE добавляет какую-то информацию. О типе переменной или о имени параметра...
Вот как раз такую штуку и добавили в LSP! Пара робких попыток завести это дело, и вот уже в 1сном коде я точно могу быть уверенным, что Отказ - это таки пятый параметр в СообщитьПользователю. А вот этот пропущенный параметр - это ПутьКДанным, и его сейчас заполнять не нужно - в него по умолчанию передастся пустая строка.
А еще на такую подсказку можно навести мышкой и посмотреть описание параметра!
Да, пока это счастье работает только с методами самой конфигурации, но и Москва не сразу строилась, и BSL LS когда-нибудь таки обзаведется контекстом платформы (sigh...).
Что еще можно сделать с такими подсказочками?
Некоторые пользователи жаловались, что в VSCode неудобно смотреть данные о когнитивной/цикломатической сложностях. Да, сложность метода - 3861, но где именно зарыты эти плюсадины?
Нажимаем на линзу "Когнитивная сложность" над методом (хехе, привет, Саша!) и плюсадины и плюсдвадины рисуются прямо по коду. Согласитесь, это намного удобнее, чем глазами вычитывать длинное сообщение из сообщения от диагностики.
microsoft.github.io Specification This document describes the current 3.18.x version of the language server protocol and is under development. An implementation for node of the 3.18.x version... Да, все любят диагностики. Качественный код, ругань в сонаре/среде разработки, все прекрасно.
Но я чуть больше кайфую, когда удается добавить какую-то новую фичу вне ядра диагностик.
Какие-то вещи в Language Server Protocol сделаны очень хорошо и просто.
Например, запрос получения областей, которые можно свернуть
Дай области в таком-то документе? Держи области! Оттуда досюда комментарий, а оттеда доседа -
#Область. Красота. Немного прикинуть мозгами, и вот сворачиваются уже не только Если/КонецЕсли, но и пакеты запросов.Какие-то вещи сделаны удивительно, например, уведомление о закрытии документа не означает, что документ был физически закрыт в редакторе. Или что он вообще был в нем открыт. Речь лишь про владение содержимым этого документа - должен ли сервер ждать данные от клиента или может зачитать их с диска по URI.
Ряд вещей сделан просто очень-очень странно, например, уведомление об обновлении конфигурации сервера. Казалось бы, штука нужная, но описана она настолько размыто и неспецифицировано с точки зрения IDE, что каждый редактор сам придумывает, как ему хранить у себя настройки сервера. Это приводит к тому, что при работе с одним и тем же сервером с двух разных IDE, сервер приходится настраивать по-разному. Благо, эту проблему мы решили на своей стороне, сделав единый конфигурационный файл, с которым может работать любая IDE, поддерживающая LSP. Даже
К чему я это все?
В готовящейся версии протокола под номером 3.17 завезли ряд новых и крайне интересных фич. И хотя в чейнджлоге протокола это еще не отражено, т.к. они пока в состоянии proposed, уже есть черновые реализации как для ядра сервера под typescript, откуда берет свое начало LSP, так и под java, на которой базируется BSL Language Server.
Например...
Сколько раз на дню при чтении кода вы думаете о том, что не помните, что за параметр такой пропущен в вызове функции, и какие у него значение по умолчанию? Не ошибся ли я, впаяв "Отказ" поле четвертой запятой? Или он должен быть предыдущим параметром? Где-то IDE поможет при наведении мышкой, где-то же надо будет проваливаться по F12... Вот было бы здорово видеть имена этих параметров сразу на ревью?
Не знаю как у вас, а у меня это - постоянная боль. Да, какие-то вызовы (привет ОбщегоНазначения.СообщитьПользователю) ты считываешь с экрана уже на автоматизме, но чуть в сторону и снова вопросы
Если вы работали когда-нибудь в IntelliJ IDEA или каких-то других редакторах (попродвинутее конфигуратора), то наверное могли заметить штуку под названием inlay hint. Когда прямо в тексте программы IDE добавляет какую-то информацию. О типе переменной или о имени параметра...
Вот как раз такую штуку и добавили в LSP! Пара робких попыток завести это дело, и вот уже в 1сном коде я точно могу быть уверенным, что Отказ - это таки пятый параметр в СообщитьПользователю. А вот этот пропущенный параметр - это ПутьКДанным, и его сейчас заполнять не нужно - в него по умолчанию передастся пустая строка.
А еще на такую подсказку можно навести мышкой и посмотреть описание параметра!
Да, пока это счастье работает только с методами самой конфигурации, но и Москва не сразу строилась, и BSL LS когда-нибудь таки обзаведется контекстом платформы (sigh...).
Что еще можно сделать с такими подсказочками?
Некоторые пользователи жаловались, что в VSCode неудобно смотреть данные о когнитивной/цикломатической сложностях. Да, сложность метода - 3861, но где именно зарыты эти плюсадины?
Нажимаем на линзу "Когнитивная сложность" над методом (хехе, привет, Саша!) и плюсадины и плюсдвадины рисуются прямо по коду. Согласитесь, это намного удобнее, чем глазами вычитывать длинное сообщение из сообщения от диагностики.
- 🔥 20
- 👍 10








