Да, все любят диагностики. Качественный код, ругань в сонаре/среде разработки, все прекрасно.
Но я чуть больше кайфую, когда удается добавить какую-то новую фичу вне ядра диагностик.
Какие-то вещи в 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, но где именно зарыты эти плюсадины?
Нажимаем на линзу "Когнитивная сложность" над методом (хехе, привет, Саша!) и плюсадины и плюсдвадины рисуются прямо по коду. Согласитесь, это намного удобнее, чем глазами вычитывать длинное сообщение из сообщения от диагностики.