Phoenix BSL: правим ошибки "не отходя от кассы"

11.05.22

Разработка - Инструментарий разработчика

Простой инструмент проверки кода без длинных мануалов и многочасовых конвейеров.

Введение

Во время разработки не всегда удаётся следить за качеством кода и соответствием его стандартам. Да, есть АПК и SonarQube, но проверка происходить только после того как код помещается в хранилище или в git, что откладывает время обнаружения ошибок и отодвигает сроки закрытия технического долга. Более того, не все проекты подразумевают контур тестирования. В связи с этим в какой-то момент начались поиски решения, позволяющего:

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

  2. Сделать это не прибегая к сложным процедурам выгрузки/загрузки исходников, разворачиванию Сонара или АПК непосредственно у разработчика, а также не смотря пока в сторону EDT, внедрение которого требует перестроения вообще всей цепочки работы от разработки до релиза.

Буквально несколько минут поиска информации и изучения материала привели к репозиторию https://github.com/otymko/phoenixbsl. Phoenix BSL (далее, для упрощения жизни писателю и читателю - просто Феникс) - OpenSource-проект, разрабатываемый сообществом (а точнее, самыми активными его представителями) и предназначенный для анализа кода 1С непосредственно в модулях при работе в конфигураторе. Представляет собой приложение, запускаемое параллельно с конфигуратором и проверяющее код при вызове комбинации клавиш CTRL + I. Проект основан на другом OpenSource-проекте BSL Language Server (далее BSL LS), который уже дал старт проверке кода 1С в SonarQube, подсветке и проверке кода 1С в VSCode, а также просто подсветке кода в различных текстовых редакторах.

 

Phoenix BSL

Не будем подробно останавливаться на процессах установки и функциональности Феникса, чтобы не переписывать readme из репозитория, тем более там всё очень подробно расписано, а среди вариантов установки доступен вариант и в msi, так что установка и настройка сводится в двум кликам, в отличие от того же Sonarqube, например. Только укажу, что Феникс не покрывает весь спектр ошибок, доступных, например в SonarQube или АПК, ввиду того, что сейчас программа не понимает какой модуль перед ней, а связи с этим не будет и проверок, завязанных на типе модуля (общий модуль, модуль объекта или модуль формы) - например нет проверки использования устаревшего свойства «ЭтаФорма». Но разработка по продукту ещё ведётся (на подходе версия 0.5), так что идеи, пожелания и жалобы можно кидать в раздел "Досад" репозитория.

А сам я остановлюсь подробнее на возможностях, помогающих работать с программой более гибко и продуктивно.

 

Расширяем возможности, не обновляя программу

Как уже упоминалось, Феникс создан на основе BSL LS. В состав программы уже входит BSL LS актуальной на момент сборки версии (ну или чуть более старой). Но архитектура приложения построена так, мы можем обновить BSL Server отдельно, не дожидаясь пока разработчики включать новые диагностики в программу. Что нам это даст? Новые диагностики кода и более корректная работа старых. 

Откроем настройки установленного приложения. Сделать это можно через пункт "Настройки", щёлкнув ПКМ по значку в трее. Посмотреть версию BSL LS идущую в комплекте с программой можно на вкладке "BSL Language Server". 

Откроем список релизов BSL LS https://github.com/1c-syntax/bsl-language-server/releases и обнаруживаем там уже версию 0.20.0 - что ж, давайте её установим. Переходим чуть ниже по странице версии, находим "Assets" - список вариантов распространения дистрибутива.  И тут есть два варианта - в зависимости от вашей операционной системы и желания копаться в дополнительных настройках: 

  1. Только для Windows - скачиваем bsl-language-server_win.zip. Распаковываем в любую удобную папку - здесь сразу порекомендую подойти к этому делу осознанно и сразу выделить каталог с нормальным названием, который не нужно будет потом долго искать - он нам потом ещё понадобится. Можете просто сделать на диске D каталог "phoenix_conf" и в него положить распакованный архив. После этого возвращаемся в настройки Phoenix и заполняем поле "Путь к BSL LS". В качестве пути указываем полный путь до .exe файла BSL LS. Обратите внимание, что в пути используются "обычный слэш", а не "обратный" как в Windows.
    Нажимаете "Сохранить"

     
  2. Для Linux и Windows - скачиваем bsl-language-server-0.20.0-exec.jar. Перемещаем в удобную папку. Теперь в настройка Phoenix нам нужно указать сразу несколько настроек 
    - чек-бокс "Использовать BSL LS jar"
    - "Путь к Java" - естественно у вас должен быть установлен java в системе. Указать его можно как через переменную среды, так и просто указать прямой путь до java.exe (используя "обычный слэш")
    - "Путь к BSL LS" - полный путь до скачанного вами jar-файла (используя "обычный слэш")
    Нажимаете "Сохранить"


Независимо от выбранного способа, подтверждением, что всё сделано правильно, будет номер новой версии на вкладке "BSL Language Server".

В противном случае там будет светится либо старая версия, либо "Неопределено"

Обновили сервер - получили новые диагностики. 

 

Настраиваем диагностики

BSL Language Server (далее BSL LS) предоставляет возможность изменения настроек, заложенных разработчиками, с помощью конфигурационного файла в формате json. Сразу оговорюсь, что всё что описывается дальше, тестировалось на 1C (BSL) Community Plugin. В другом плагине BSL от "Серебряной пули" 1C (BSL) Plugin от SilverBulleters проверить, к сожалению, не могу.

В настройках программы есть пункты, касающиеся настроек BSL LS. По умолчанию Феникс осуществляет проверки по настройкам, указанным в корне программы, но их можно переопределить установив чекбокс "Свои настройки BSL LS". Путь к настройкам можно указать как относительный (относительно директории программы, как собственно и указаны "дефолтные" настройки), так и абсолютный - только не забыть изменить обратный слэш, используемый в Windows, на обычный.

 

 

Более того, можно создать разные конфигурационные файлы под разные проекты и переключаться между ними "на лету" меняя путь к конфигурационному файлу. Перезагрузка программы не требуется, потому что Феникс считывает настройки во время проверки модуля.

 

 

Про конфигурационный файл

Он представляет собой файл json c именем ".bsl-language-server.json". Базовая структура файла представлена ниже. При такой настройке проверки работают так, как заложены в BSL LS.

{ 
  "$schema": "https://1c-syntax.github.io/bsl-language-server/configuration/schema.json", 
  "language": "ru", 
  "diagnostics": { 
    "computeTrigger": "onType", 
    "parameters": { 
    } 
  } 
}

Какие диагностики включены по-умолчанию, а какие нет, их имена для конфигурационного файла, а также перечень параметров диагностик, можно посмотреть на странице BSL LS: https://1c-syntax.github.io/bsl-language-server/diagnostics/. Имейте в виду, что это диагностики BSL LS и некоторая часть из них не работает в Фениксе (вспоминаем про упомянутый выше контекст модуля). Так же учитывайте то, что перечень диагностик приведён для BSL LS последнего релиза, который может не совпадать с версией BSL LS встроенным в Феникс. Поэтому самый надёжный способ для начала работы: заменить файл указанным выше примером и, уже в процессе, по ходу выявления новых ошибок в коде, заниматься или подстройкой диагностик по параметрам или исправлениями в коде. 

Сами настройки диагностик добавляются в блок "parameters". Например, мы хотим сделать что-то с ограничением длины строки. Находим её в списке диагностик (ищем просто "Ctrl+F" по ключевым словам - например, "длина"). Конфигурационный файл знает эту диагностику под именем LineLength. Для того чтобы отключить её вообще , мы можем просто указать "LineLength": false

"parameters": {
    "LineLength": false
}

Либо если мы хотим просто увеличить ограничение со стандартных 120-ти символов, то можем использовать параметр "maxLineLength" и тогда в конфигурационном файле это будет выглядеть вот так:

"parameters": {
    "LineLength": {
        "maxLineLength": 200
    }
}

Или, например диагностика "Возможна опечатка" (Typo), что актуально для процедур и функций в наших конфигурациях и на проектах, когда используется какой-либо префикс. Для неё можно указать исключения:

"parameters": {
    "Typo": {
        "userWordsToIgnore": "абв,abc" 
    }
}

Таким образом можно настроить проверки под каждый проект, в связи с актуальностью на нём тех или иных стандартов, и использовать, переключаясь между ними.

Ниже пример конфигурационного файла, увеличивающего ограничение строк до 160-ти, ругающийся только на опечатки в словах длиной более 3-х символов, с отключенной проверкой "нельзя использовать в идентификаторе одновременно латиницу и кириллицу", а также  пропускающим ошибку "Длина метода"


{
    "$schema": "https://1c-syntax.github.io/bsl-language-server/configuration/schema.json",
    "language": "ru",
    "diagnostics": {
        "computeTrigger": "onType",
        "parameters": {
            "LineLength": {
                "maxLineLength": 160
            },
            "Typo": {
                "minWordLength": 3,
                "userWordsToIgnore": "абв,abc"
            },
            "LatinAndCyrillicSymbolInWord": false,
            "MethodSize": false
        }
    }
}

Кстати, этот же конфигурационный файл вы можете использовать также для диагностик в SonarQube или же в VS Code, при работе с кодом 1С или Onescript.

 

Заключение

По итогу мы получаем:

  • довольно простой в обращении инструмент проверки кода, позволяющий влиять на качество кода уже здесь и сейчас на проекте или отдельно взятой обработке для собственных нужд.

  • BSL LS, лежащий в основе, позволяет иметь для проекта единый настроенный файл диагностик и использовать его как в момент создания кода, так и при общей проверке конфигурации в SonarQube.

 

Полезные ссылки:

https://github.com/otymko/phoenixbsl - репозиторий проекта Phoenix BSL (документация, поддержка)

https://1c-syntax.github.io/bsl-language-server/features/ConfigurationFile/ - про файл конфигурирования BSL LS

https://1c-syntax.github.io/bsl-language-server/diagnostics/ - список диагностик BSL LS, а описания и параметры для конфигурационного файла.

https://t.me/bsl_language_server - telegram-канал BSL LS, а также продуктов на связанных с ним: Phoenix BSL, SonarQube

https://www.youtube.com/watch?v=by3OPvkaKco - небольшое вводное видео по Phoenix BSL с Олегом Тымко в главной роли

https://www.youtube.com/watch?v=bom-lgOq-5Y - другое небольшое вводное видео.

https://www.youtube.com/watch?v=UwCIyTktujo - немного про настройку диагностик применительно к Phoenix BSL

//infostart.ru/1c/articles/1420861/ - "Как контролировать качество внешних обработок, отчетов, правил обмена, расширений 1С и поставить это на поток" - статья Олега Тымко, где упоминается ещё ряд инструментов для упрощения работы разработчика.

Рефакторинг код-ревью качество кода Phoenix BSL

См. также

INFOSTART TECH EVENT 2023, 11-13 октября, Санкт-Петербург

Инструментарий разработчика Мобильная разработка DevOps и автоматизация разработки Администрирование СУБД Мероприятия Россия Платные (руб)

XIII конференция по управлению и технологиям автоматизации учета на платформе 1С:Предприятие, которая пройдет в Санкт-Петербурге и соберет 1500 участников из разных регионов России и мира.

4000 руб.

09.12.2022    30068    12    0    

440

Онлайн-интенсив "DevOps для 1С". с 4 сентября по 17 октября 2023 г.

Инструментарий разработчика DevOps и автоматизация разработки DevOps для 1С Платные (руб)

Данный онлайн-курс (интенсив) предусматривает изучение процессов, инструментов и методик DevOps, их применение при разработке на платформе 1С. 

18000 руб.

20.06.2023    9931    40    2    

122

SALE! %

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

12000 10000 руб.

02.09.2020    93803    478    380    

533

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2520 руб.

14.01.2013    170314    1052    0    

793

Автоматизация труда программиста. Библиотека прикладных функций

Инструментарий разработчика Платформа 1С v8.3 Платформа 1C v8.2 Платформа 1С v8.1 Конфигурации 1cv8 Платные (руб)

Программист - это человек, непрерывно принимающий решения. Написание кода не является процессом принятия решения - это всего лишь трансляция ваших желаний. Если вас периодически тяготит написание сотен строк кода ради решения задач, то прошу обратить внимание. Данный продукт позволит существенно сократить время на рутинные операции при разработке. За счет библиотечной реализации сокращается объём кода, а его читаемость повышается. К библиотеке прилагается документация API и шаблоны кода для наиболее популярных методов.

4200 руб.

16.04.2021    12575    3    9    

9

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    96542    234    97    

286

Менеджер конфигураций 1С

Инструментарий разработчика Платные (руб)

Менеджер конфигураций 1С — альтернативный стартер информационных баз 1С:Предприятие.

1439 руб.

21.02.2023    5285    2    33    

14

Программное формирование существующих печатных форм

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Получение списка печатных форм, формирование выбранной печатной формы и сохранение ее в файл.

1 стартмани

17.12.2021    14134    39    RocKeR_13    5    

46
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. devtelscargo 11.05.22 12:46 Сейчас в теме
Наконец-то у кого-то дошли руки написать статью про этот чудо-инструмент)
ardn; mas_kot; +2 Ответить
2. nixel 1349 11.05.22 12:49 Сейчас в теме
Пара комментариев:

Базовая структура файла представлена ниже. При такой настройке проверки работают так, как заложены в BSL LS.

{
"$schema": "https://1c-syntax.github.io/bsl-language-server/configuration/schema.json",
"language": "ru",
"diagnostics": {
"computeTrigger": "onType",
"parameters": {
}
}
}


Не совсем верно. В базовой настройке computeTrigger установлен в значение onSave. Да и для PhoenixBSL значение onType не имеет смысла, т.к. он использует синхронную pull-модель получения диагностик, а не асинхронную на базе computeTrigger. Так что этот параметр вовсе можно убрать.

Так же учитывайте то, что перечень диагностик приведён для BSL LS последнего релиза, который может не совпадать с версией BSL LS встроенным в Феникс.


Фениксу в настройках можно указать использовать конкретную версию BSL LS вместо вшитой в него. Сам BSL LS можно скачать с https://github.com/1c-syntax/bsl-language-server/releases

(релиз 0.20 на подходе, вуху!)
sleemp; user1233751; begemot; kuntashov; +4 Ответить
3. mas_kot 54 11.05.22 12:57 Сейчас в теме
(2) Спасибо, поправлю. В какой-то момент при экспериментах я заметил, что computeTrigger в Фениксе ни на что не влияет, но не стал удалять "мало ли что". А потом уже и забылось.
komatoza; +1 Ответить
4. Dem0 18 27.05.22 16:54 Сейчас в теме
Не понял, а как по проектам это все делить?
Вот есть у меня несколько конф. файлов. Захожу в bsl а у меня там список из трех элементов:

-"Базовый проект";
-"Базовый проект";
-"Базовый проект";
И что-то настройки не применяются..
5. mas_kot 54 27.05.22 17:27 Сейчас в теме
(4)
...переключаться между ними "на лету" меняя путь к конфигурационному файлу


Выбор проекта, где написано "базовый проект" - это настройка не работает в комьюнити BSL Server. Она для версии от "серебряной пули" - в специальном конфиге прописывается привязка к проекту в сонаре и там работает с помощью этого меню. Для простых "смертных" - смена пути к конфигу напрямую в поле "Путь к настройкам..." (Скриншот 2). Работает без перезагрузки самой программы.
6. Dem0 18 28.05.22 14:58 Сейчас в теме
Ничего не понимаю:

1. Создал файл настроек, указал что не хочу видеть некоторую диагностику, а он опять ее выводит:

2. И еще ботва какая-то - Базовый проект задублировался 3 или 4 раза.

Может кто подсказать?
Прикрепленные файлы:
7. mas_kot 54 28.05.22 15:07 Сейчас в теме
(6) Пункт "Базовый проект" не относится к настройке с комьюнити BSL Server. Он предназначен для другого https://github.com/otymko/phoenixbsl#%D0%BF%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D0%B0-sonarlint

В твоём же случае подскажи сначала, что у тебя указано в поле "Путь к настройка BSL server"? У тебя там должен быть указан путь к этой настройке. Иначе будет просто браться стандартная настройка которая лежит где-то в глубинах каталогов.
Прикрепленные файлы:
8. Dem0 18 30.05.22 11:29 Сейчас в теме
Спасибо! Действительно в конф. файле у меня почему-то создалось 4 строки в перечне проектов. Убрал дубли.

Сейчас все работает, только вот как найти диагностику по выдаваемому сообщению?
Например я хочу отключить диагностику, которая выдает "Перенестите выражение на новую строку". При поиске в листе диагностик выдаваемого сообщения нет - есть только названия диагностик. И это не "maxLineLength" а что-то другое.
9. Dem0 18 30.05.22 11:30 Сейчас в теме
это условие написанное в одной строке "если ... тогда...конецесли; и оно короче 120 символов.
Но как по выдаваемому сообщению найти диагностику, чтобы потом ее отключить?
10. mas_kot 54 30.05.22 20:57 Сейчас в теме
(9) Тут, к сожалению, действовать только поиском по странице https://1c-syntax.github.io/bsl-language-server/diagnostics/
Например, в вашем случае, если поиском Ctrl + F поискать слово "перенос", то поиск приведёт к диагностике https://1c-syntax.github.io/bsl-language-server/diagnostics/IncorrectLineBreak/
11. alexey_kurdyukov 141 30.09.22 14:28 Сейчас в теме
У меня почему-то вдруг перестало работать, переустановка не помогает. Модуль выделяется, окно открывается, в настройках версия сервера есть, но в самом окне ни одной строчки.
,,,
Извиняюсь, не на ту кнопку жму
12. Dem1urg 378 27.06.23 17:18 Сейчас в теме
Вышел 21 релиз BSL. Добавлен ряд новых диагностик, улучшена работа ряда существующих.

Новые диагностики
Передача параметров между клиентом и сервером (TransferringParametersBetweenClientAndServer);
Использование привилегированного режима (SetPrivilegedMode);
Использование системной информации (UseSystemInformation) (выключена по умолчанию);
Обработчик регламентного задания (ScheduledJobHandler);
Обращение к отсутствующему методу общего модуля (MissingCommonModuleMethod);
Перезапись параметров метода (RewriteMethodParameter);
Пропущен обязательный параметр метода (MissedRequiredParameter);
Повторное добавление/вставка значений в коллекцию (DuplicatedInsertionIntoCollection);
Запрет незаполненных значений (DenyIncompleteValues) (выключена по умолчанию);

Изменения в существующих диагностиках
RefOveruse - исправлено множество false positive;
UsageWriteLogEvent - исправлен false positive при использовании менеджера ошибок, появившегося в платформе 8.3.17;
QueryToMissingMetadata - исправлен false positive, срабатывавший на обращении к метаданным с отличающимся регистром букв;
UnusedParameters - исправлено падение диагностики;
IncorrectLineBreak - теперь диагностика по умолчанию позволяет иметь висячую запятую;
CommentedCode - добавлен параметр exclusionPrefixes для указания префиксов для исключения срабатывания диагностики;
UnusedLocalMethod - исправлен false positive на обработчиках оповещения.

Ссылка на git-hub
Оставьте свое сообщение