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 Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

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

10000 руб.

02.09.2020    125106    683    389    

732

Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

18000 руб.

06.10.2023    7800    24    6    

42

Infostart УДиФ: Управление данными и формами 1С

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

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 руб.

10.11.2023    4301    12    2    

36

SALE! %

PowerTools

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

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

3600 2280 руб.

14.01.2013    178684    1084    0    

862

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

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

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

5000 руб.

07.02.2018    99665    239    97    

298

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18411    6    8    

40

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23867    16    15    

33

1С HTML Шаблоны / HTML Templates

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

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28332    3    10    

16
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. devtelscargo 11.05.22 12:46 Сейчас в теме
Наконец-то у кого-то дошли руки написать статью про этот чудо-инструмент)
ardn; mas_kot; +2 Ответить
2. nixel 1408 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 65 11.05.22 12:57 Сейчас в теме
(2) Спасибо, поправлю. В какой-то момент при экспериментах я заметил, что computeTrigger в Фениксе ни на что не влияет, но не стал удалять "мало ли что". А потом уже и забылось.
komatoza; +1 Ответить
4. Dem0 27.05.22 16:54 Сейчас в теме
Не понял, а как по проектам это все делить?
Вот есть у меня несколько конф. файлов. Захожу в bsl а у меня там список из трех элементов:

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


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

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

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

Может кто подсказать?
Прикрепленные файлы:
7. mas_kot 65 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 30.05.22 11:29 Сейчас в теме
Спасибо! Действительно в конф. файле у меня почему-то создалось 4 строки в перечне проектов. Убрал дубли.

Сейчас все работает, только вот как найти диагностику по выдаваемому сообщению?
Например я хочу отключить диагностику, которая выдает "Перенестите выражение на новую строку". При поиске в листе диагностик выдаваемого сообщения нет - есть только названия диагностик. И это не "maxLineLength" а что-то другое.
9. Dem0 30.05.22 11:30 Сейчас в теме
это условие написанное в одной строке "если ... тогда...конецесли; и оно короче 120 символов.
Но как по выдаваемому сообщению найти диагностику, чтобы потом ее отключить?
10. mas_kot 65 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 157 30.09.22 14:28 Сейчас в теме
У меня почему-то вдруг перестало работать, переустановка не помогает. Модуль выделяется, окно открывается, в настройках версия сервера есть, но в самом окне ни одной строчки.
,,,
Извиняюсь, не на ту кнопку жму
12. Dem1urg 387 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
orfos; mas_kot; +2 Ответить
Оставьте свое сообщение