Как проверять код на языке 1С с помощью BSL Language Server

13.01.23

Разработка - Рефакторинг и качество кода

Некоторые разработчики на платформе 1С не проверяют свой код ни на соответствие стандартам 1С, ни на самые распространённые ошибки кодирования. И если раньше они могли оправдываться отсутствием инструментов для этого, то с появлением BSL Language Server оправданий больше нет.

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

В этой статье я рассматриваю только ручную проверку, как минимум с этого стоит начать, а потом уже озадачиваться пайплайнами CI/CD с OneScript, Jenkins и SonarCube.

 

Что такое BSL Language Server

BSL Language Server - это инструмент для статического анализа кода на языке 1С.

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

Сам по себе он представляет консольное Java-приложение, предназначенное для запуска из командной оболочки, при этом анализировать нужно заранее сохранённые файлы в указанной директории.

Использовать приложение из командной строки для ручного анализа кода неудобно, поэтому на базе BSL Language Server появились и другие инструменты, с возможностью анализа кода на языке 1С из интерфейса приложений.

О некоторых подобных инструментах для ручного анализа кода были публикации и здесь, например:

Все они предполагают использование каких-то "кастомных" инструментов на базе BSL Language Server.

Но на мой взгляд, самым простым и доступным для использования вариантом является расширение Language 1C (BSL) для VS Code.

 

Использование расширения для VS Code

 

Установка VS Code

Поскольку расширение предназначено для редактора Visual Studio Code, предварительно нужно установить сам редактор:

  1. Скачать редактор по ссылке.
  2. Установить редактор в каталог своего пользователя - можно устанавливать без полномочий администратора компьютера.

 

Установка расширений

Нужно установить следующие расширения.

Ссылки приведены на страницы в маркетплейсе, сами расширения можно установить прямо из VS Code через панель расширений (значок  в панели слева или сочетание клавиш Ctrl + Shift + X, а дальше поиск по наименованию).

  • Language 1C (BSL) - расширение, добавляющее поддержку языка 1С и языка запросов 1С в VS Code, в его составе есть BSL Language Server.
    Не помню, нужно ли устанавливать для него OneScript, если что, можно скачать здесь.
  • Russian Language Pack for Visual Studio Code - включает поддержку русского языка в интерфейсе VS Code.
    Если хорошо ориентируетесь в английском интерфейсе, можно не устанавливать.
  • Необязательные, но желательные расширения для исправления орфографических ошибок:
    • Code Spell Checker - базовая проверка орфографии в редакторе.
      Обязателен в случае установки следующего расширения.
    • Russian - Code Spell Checker - проверка орфографии на русском языке.

 

Как проверять код

Для проверки кода 1С в редакторе VS Code с помощью плагина Language 1C (BSL) не обязательно сохранять файл с кодом.

Достаточно:

  1. Скопировать код из модуля в конфигураторе 1С.
  2. Создать новый (пустой) файл в VS Code (меню File - New Text File или сочетание клавиш Ctrl + N).
  3. Указать для файла язык 1C BSL (bsl).
    Сделать это можно двумя способами:
    • Выбрать язык в нижней панели справа:

       
    • С помощью сочетания клавиш Ctrl + K M (то есть нажать одновременно Ctrl и K, а после отдельно нажать M).
      При этом отобразится окно выбора языка из списка, нужно выбрать 1C BSL (bsl):

       
  4. Вставить скопированный ранее код на языке 1С в VS Code в окно файла с выбранным языком.

После этого должен запуститься BSL Language Server, информация о его запуске будет отображаться в нижней панели слева:

 

 

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

На скриншоте ниже пример проблем в одном нетиповом общем модуле в старой конфигурации:

  • 922 - общее количество проблем.
  • 34 - критические проблемы.
  • 475 - предупреждения.
  • 413 - небольшие проблемы.

 

 

При нажатии на строку описания проблемы автоматически выбирается соответствующая строка кода.

При нажатии на гиперссылку в строке описания проблемы вызывается диалог открытия страницы с подробным описанием ошибки, обоснованием, почему это именно ошибка, и (во многих случаях) примером, как нужно делать взамен.

Если добавить домен с описаниями проблем в список доверенных расположений, диалоговое окно больше выводиться не будет, будет сразу открываться нужная страница.

Чтобы изменения кода анализировались автоматически, например, при вставке нового кода в то же окно редактора, в файле настроек BSL Language Server должна быть установлена настройка "computeTrigger": "onType".

 

Зачем всё это нужно

Если внимательно читать информацию и выполнять рекомендации, указанные на страницах описания ошибок, можно:

  • научиться избегать подобных ошибок в будущем;
  • усвоить на практике некоторые особенности платформы 1С и стандарты разработки 1С;
  • сделать свой код качественнее и проще в поддержке и доработке.

Однако нужно быть готовым к тому, что не все проблемы удастся решить. Например, если приложение 1С работает в среде Windows, а в коде используется COM-объект, то просто так заменить его использование может быть проблематичным или невозможным. Но если не планируется миграция на Linux, то это и не нужно.

В подобных случаях можно игнорировать такие проблемы или отключить эти диагностики в том же файле настроек BSL Language Server.

качество кода анализ статический bsl language server

См. также

Результаты ревью кода 1500+ решений каталога Инфостарт: наиболее частые ошибки разработчиков в коде

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Поделюсь своим опытом аудита кода авторских продуктов с Infostart.ru как одним из элементов применения DevOps-практик внутри Инфостарт. Будет настоящий код, боевые скриншоты, внутренние мемы от команды ИТ-лаборатории Инфостарт и прочее мясо – все, что любят разработчики.

10.04.2024    5294    artbear    77    

73

Ниндзя-код

Рефакторинг и качество кода Платформа 1С v8.3 Россия Бесплатно (free)

Предлагаю вашему вниманию советы мастеров древности. Программисты прошлого использовали их, чтобы заострить разум тех, кто после них будет поддерживать код. Гуру разработки при найме старательно ищут их применение в тестовых заданиях. Новички иногда используют их ещё лучше, чем матёрые ниндзя. Прочитайте их и решите, кто вы: ниндзя, новичок или, может быть, гуру? (Адаптация статьи "Ниндзя-код" из учебника JavaScript)

01.04.2024    2299    DrAku1a    15    

33

Практическое программирование: когда скорость важнее совершенства

Рефакторинг и качество кода Бесплатно (free)

В новом материале мы анализируем, как в программировании баланс между быстротой разработки и тщательной проработкой кода влияет на конечный продукт. Обсуждаем, почему иногда важнее сосредоточиться на скорости выполнения проекта, и когда можно позволить себе уступить в качестве ради достижения бизнес-целей.

01.04.2024    593    Prepod2003    6    

2

Когда понадобился новый оператор

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Когда понадобился новый оператор, но его нет в синтакс-помощнике, что делать?

18.03.2024    1351    ZhokhovM    4    

4

Когда разработчик платформы не добавил проверку препроцессоров

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Когда разработчик платформы решил пойти на кухню за кофе, а проверку препроцессоров не добавил, и вот тут-то и началось: "Что, опять все сломалось? Ну и кофе же я забыл сделать!".😅

18.03.2024    2998    ZhokhovM    4    

9

Реструктуризация - бесконечная история

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

При разработке программ требуемый функционал ставят на первое место, но есть еще и архитектура программы. На горизонте 5-10 лет она становится важнее функционала, который должен работать при масштабировании и росте данных. Реструктуризация 5 терабайтной базы 1С 8.2 в формат 1С 8.3, складывает весь пазл архитектурных просчетов, которые сделали ради функционала. Как это исправить? - для разработки правильной архитектуры, нужно всего лишь сместить фокус с функционала и подумать о «вечном».

29.09.2023    2076    1CUnlimited    15    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SinglCOOLer 217 16.01.23 06:23 Сейчас в теме
Пробовали какой - нибудь БСП модуль там прогонять? Интересно какое он там количество проблем покажет )
+
2. AlekseiAdamov 166 16.01.23 07:11 Сейчас в теме
(1) Нет, пока особо не интересовался, т.к. стараюсь типовые модули не трогать:)
Основная учётная база на старой перепиленной конфигурации КА 1.1 - за время экплуатации там накопилось много доработок, и сравнивать тексты модулей с конфигурацией поставщика ради этого не хочется.
К тому же за годы развития БСП они могли многие проблемы в коде вычистить, в старых мрака наверняка хватает: начиная с использования ТекущаяДата() и КаталогВременныхФайлов() и заканчивая отсутствующими описаниями параметров в описаниях функций.
+
3. nixel 1408 16.01.23 08:00 Сейчас в теме
(1) бсп целиком автоматически прогоняется на нашем сервере SonarQube: https://sonar.openbsl.ru/dashboard?id=ssl_3_1

Источником для проверок является bsl ls.
ktb; AlekseiAdamov; Revachol; kuntashov; dvsidelnikov; +5
4. nixel 1408 16.01.23 08:27 Сейчас в теме
Спасибо за статью, но не могу не отметить, что BSL Language Server - это не инструмент для статического анализа кода. Это инструмент для поддержки языка 1с в текстовых редакторах, реализующий Language Server Protocol. Он даёт подсказки при наведении, переходы к определению процедур и функций, показывает граф вызовов, места использования процедур, позволяет умно сворачивать код 1с и код запросов, собирает метрики по коду (и часть их них показывает в виде линз сложности над началом процедур) и многое другое. И да, среди прочего имеет механизм диагностирования ошибок и вывода отчётов по ним в разных форматах.
SagittariusA; cosmo2004; ktb; JohnyDeath; Cmapnep; AlekseiAdamov; Йожкин Кот; awk; Revachol; kuntashov; dvsidelnikov; +11
5. AlekseiAdamov 166 16.01.23 10:44 Сейчас в теме
(4) Никита, большое спасибо за подробный ответ и за Вашу работу для сообщества!
+
7. sd_75 26.01.23 22:30 Сейчас в теме
(5)Так получается BSL Language Server не годится для проверки соответствия кода стандартам 1С?
+
8. AlekseiAdamov 166 27.01.23 18:41 Сейчас в теме
(7) А Вы список диагностик, видимо, даже не смотрели?
Вот пример со ссылкой на стандарт: https://1c-syntax.github.io/bsl-language-server/diagnostics/AssignAliasFieldsInQuery/
Часть стандартов, вероятно, трудно проверять программно.
Если Вам каких-то проверок не хватает и есть опыт разработки на Java - можете поучаствовать в проекте: https://1c-syntax.github.io/bsl-language-server/contributing/
+
6. kuzyara 1911 16.01.23 12:29 Сейчас в теме
Для контроля ошибок использую:
- для vscode плагин Language 1C (BSL)
- для конфигуратора Phoenix BSL для 1С
- для EDT плагин SilverLint(платный) или bslls-connector-for-edt(бесплатный)
- сонаркуб

Полный список диагностик https://1c-syntax.github.io/bsl-language-server/diagnostics/
+
9. roman72 380 12.02.23 10:16 Сейчас в теме
В BSL Language Server можно загрузить сразу все тексты модулей конфигурации для анализа?
Есть в BSL Language Server возможность самому написать обработчик строк модулей кода? (не с целью диагностики, а с целью последующей обработки полученных аналитических преобразований)
+
10. AlekseiAdamov 166 12.02.23 12:38 Сейчас в теме
(9) Выше nixel написал, что
Это инструмент для поддержки языка 1с в текстовых редакторах, реализующий Language Server Protocol.


Соответственно, как конкретный пользователь будет его запускать - это уже его личное дело в зависимости от задач.
Я лишь описал, как эти инструментом пользоваться с помощью VS Code без дополнительных сложностей.

Вы бы хоть на страницу проекта зашли и прочитали документацию.
Вот про запуск в режиме анализатора: https://1c-syntax.github.io/bsl-language-server/#analyze
Как конкретно Вы будете обрабатывать отчёт об ошибках - это Ваше дело.
Вы можете встроить его в пайплайн CI и обрабатывать его автоматически с помощью готовых инструментов типа SonarQube.
Вот на вскидку несколько статей на эту тему, достаточно вбить "BSL Language Server" в поиск по Инфостарту:
https://infostart.ru/public/1117485/
https://infostart.ru/1c/articles/1096770/
https://infostart.ru/1c/articles/1089670/
https://infostart.ru/1c/articles/1175305/

а с целью последующей обработки полученных аналитических преобразований

Что Вы под этим подразумеваете?
Даже если Вам чего-то не хватает в имеющихся возможностях BSL LS, Вы можете написать свой инструмент и проверять через него дополнительно или встроить его в тот же пайплайн.
+
Оставьте свое сообщение