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

См. также

SALE! 15%

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

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

10000 руб.

02.09.2020    159433    872    399    

861

SALE! 15%

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 7140 руб.

20.08.2024    7771    55    22    

66

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

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    23435    68    45    

117

SALE! 15%

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

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

10000 8500 руб.

10.11.2023    10429    36    24    

61

SALE! 15%

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

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

22200 19980 руб.

06.10.2023    15400    35    7    

70

SALE! 35%

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

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

4800 3120 руб.

14.01.2013    187985    1138    0    

912

SALE! 15%

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 12750 руб.

07.10.2021    17303    6    32    

42

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

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

1800 руб.

21.02.2023    7695    8    35    

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

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


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

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

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

Может кто подсказать?
Прикрепленные файлы:
7. mas_kot 77 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 77 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 165 30.09.22 14:28 Сейчас в теме
У меня почему-то вдруг перестало работать, переустановка не помогает. Модуль выделяется, окно открывается, в настройках версия сервера есть, но в самом окне ни одной строчки.
,,,
Извиняюсь, не на ту кнопку жму
12. Dem1urg 392 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 Ответить
Оставьте свое сообщение