Bsl 1c что это
Плагин добавляет подсветку синтаксиса в файлах *.bsl и *.os:
Кроме подсветки, плагин предоставляет еще массу дополнительных функций
Установка и обновление
Редактирование текста
- Автоматическое добавление символа | при добавлении новой строки во время редактирования строкового литерала
- Автоматическое добавление символов // при добавлении новой строки во время редактирования комментария по нажатию Shift-Enter
- Автоматическая вставка скобок
- Установка автоматических отступов по ключевым словам языка
- Встроенные шаблоны текста
- Пользовательские шаблоны текста ( Ctrl + Q ) - инструкция
- Автодополнение через точку 2
- Создание описания метода
Указать параметры запуска конвейера
Обновить страницу джоба. Слева сверху кнопка “Собрать сейчас” превратится в “Собрать с параметрами”. Нажать на нее. Откроется окно ввода параметров.
PROJECT_NAME - ключ проекта. Именно под этим именем будет создан проект в сонаре. Именно по нему выполняется поиск конфигурации в АПК. Сюда вписываем наименование конфигурации АПК. Она же - “ Каталог выгрузки в репозитории ”.
git_repo_url - адрес репозитория git из ГитКонвертора.
git_repo_branch - имя ветки в репозитории.
sonar_catalog - каталог инструментов C:/Sonar/
PROPERTIES_CATALOG - каталог в проекте с переопределенными настройками.
ACC_check - Запуск проверки АПК перед выгрузкой ошибок.
ACC_recreateProject - Пересоздание конфигурации в АПК. Сбрасывает кэш проверки. АПК работает дольше, но все данные переполучаются заново. Актуально, когда ошибка исправлена, а АПК этого исправления “не увидела” из-за кэша.
STEBI_SETTINGS - путь к джсон файлу с переопределением ошибок. Может быть как общим из репозитория с дженкинсфайлом, так и частным для проекта.
jenkinsAgent - имя ноды на которой нужно запускать проверку. Критично к регистру.
EDT_VERSION - версия едт, которую нужно использовать.
perf_catalog - каталог с файлами замера производительности .pff. По ним создается файл с данными покрытия.
git_credentials_Id - ID Credentials для доступа к репозиторию .
rocket_channel - имя канала для отправки оповещений.
После указания всех параметров - Собрать.
Если упало на каком-то шаге. По логам определить и устранить проблему и еще раз нажать на “Собрать с параметрами”.
Если проверка АПК отработала и в конфигурации больше ничего не менялось, то для отладки и ускорения процесса можно перезапускать конвейер со снятой галкой ACC_check.
Из джобы можно перейти в проект сонара и посмотреть, что ошибки загружены.
Установить oscript и библиотеки
choco install onescript-cli
Все приложения доступны на гитхабе.
Установить нужно в каталог “ C:/Sonar/ACC ” и создать пользователя “ Admin ” без пароля.
Создание первого конвейера
Слева сверху “ Создать Item ”.
Имя Item'а - произвольное. Лишь бы было понятно что это. Лучше латиницей и без пробелов.
Тыкнуть на Pipline и нажать Ок внизу.
Откроется конфигурация джоба.
Перейти к разделу Pipline .
В Definition выбрать Pipline script from SCM .
В Credentials добавить/выбрать параметры доступа к этому репозиторию.
Стоит сразу создать Credentials для доступа к репозиторию с исходниками конфигурации и скопировать его ID . Он понадобится чуть позднее.
В Script Path - путь к дженкинсфайлу в репозитории. В моем случае это “Sonar/Jenkinsfile”.
Сохранить. И в окне джоба слева нажать на “Собрать сейчас”.
Если все настроено верно, то отработает первый шаг - получение дженкинсфайла, а потом сразу все упадет.
Настройки плагина
Переключение осуществляется с помощью настройки sonar.bsl.languageserver.diagnosticLanguage , расположенной в секции “Администрирование”, раздел 1C (BSL) .
Для переключения языка имен и описаний правил данную настройку необходимо устанавливать в разделе “Администрирование” сервера:
Для переключения языка текстов замечаний данную настройку необходимо устанавливать в разделе “Администрирование” проекта:
Прочее
- Запуск скриптов в файлах .os / .bsl с помощью OneScript - инструкция
- Поддержка английского языка
Установить Дженкинс
Про установку хорошо написано в статье Переводим рутину ручного тестирования 1C на рельсы Jenkins-а и ADD . Именно из-за этой статьи я решил сделать единый дженкинсфайл для проверки качества кода. И в ней же узнал как это сделать.
Слейв ноду нужно обязательно настроить. АПК отказывается корректно работать, если дженкинс запущен как сервис.
Установить ГитКонвертор
Он нужен для конвертации хранилища в гит-репозиторий. Когда SonarQube работает по гит-репозиторию - появляется информация о разработчике, который внес ошибку.
ГитКонвертор можно установить на тот же сервер, где будут располагаться и другие инструменты. Плюсы от совместного размещения - экономия на количестве серверов, все в одном месте, переиспользование инструментов. Из минусов - возможные конфликты за ресурсы, уменьшение надежности.
Конфигурационный файл¶
Подробное описание конфигурационного файла приведено на этой странице
Примечание 3
Только для проектов с исходным кодом конфигураций 1С:Предприятие 8
Настроить оповещения
В моем дженкинсфайле используется плагин “ RocketChat Notifier ” для отправки оповещений в рокет.чат. Если вы не используете в работе рокет.чат, то нужно самостоятельно найти и скачать подходящий вам плагин и заменить в дженкинсфайле строки “ rocketSend ” на вызов своего плагина.
Добавление проекта к проверке
Создать репозиторий для дженкинсфайла
Возможности¶
Примечание 2
Для работы автодополнения для классов OneScript имя переменной должно совпадать с именем класса
Возможности
Примечание 1
- в системе должен быть установлен пакет oscript-config ( opm install oscript-config )
- В библиотеке OneScript должен присутствовать файл lib.config
Благодарности¶
Огромное спасибо всем контрибьюторам проекта, всем участвовавшим в обсуждениях, помогавшим с тестированием.
Спасибо компаниям, поддерживающим проекты с открытым исходным кодом, а особенно тем, кто поддержали нас:
С помощью YourKit Java Profiler мы мониторим и улучшаем производительность проекта.
Создатель профессиональных инструментов разработки программного обеспечения, инновационных и мощных, JetBrains поддержал наш проект, предоставив лицензии на свои продукты, в том числе на IntelliJ IDEA Ultimate .
Данный сервис предназначен для работы с лексическим деревом разбора кода программных модулей. При помощи данного сервиса можно по семантическим элементам модели модуля получить их расположение внутри программного текста, получить фрагменты кода, по которым был создан данный семантический элемент.
Данный сервис содержит набор методов, которые позволяют более удобным образом производить навигацию по семантической модели языка.
Данный провайдер позволяет получать комментарии, относящиеся к семантическим элементам модели встроенного языка.
Сервис com._1c.g5.v8.dt.bsl.naming.BslQualifiedNameProvider, реализующий данный интерфейс, предназначен для получения org.eclipse.xtext.naming.QualifiedName по семантическим элементам модели встроенного языка «1С: Предприятия».
Данный сервис предназначен для получения семантических элементов модели встроенного языка по позиции внутри модуля.
Сервис com._1c.g5.v8.dt.bsl.resource.BslLocationInFileProvider, реализующий данный интерфейс, предназначен для получения позиции семантического элемента модели встроенного языка в программном модуле.
Данный сервис позволяет вычислять тип всех семантических элементов модели, которые наследуются от com._1c.g5.v8.dt.bsl.model.Expression . Типы возвращаемые данным сервисом не следует модифицировать (изменять внутренний контент, изменять контейнера данного объекта). Если же такая потребность возникла, то сначала нужно склонировать возвращаемый тип, воспользовавшись методом org.eclipse.xtext.EcoreUtil2.cloneWithProxies() .
Сервис com._1c.g5.v8.dt.bsl.scoping.BslScopeProvider, реализующий данный интерфейс, предназначен для получения наборов индексируемых объектов, таких как:
- Переменные и методы модуля,
- Свойства и методы глобального контекста,
- Платформенные типы,
- Типы объектов конфигурации,
- Объекты конфигурации.
Набор объектов можно получить лишь в том случае, если передать правильный контекст (первый аргумент в методе org.eclipse.xtext.scoping.IScopeProvider.getScope(. ) ). В качестве него нужно использовать элементы семантической модели встроенного языка.
Получение ссылочных типов справочников
Получение всех методов, которые могут быть использованы в контексте метода
Идентификатор: com._1c.g5.v8.dt.bsl.externalBslValidator
Описание: Точка расширения, предназначенная для расширения валидации в модулях встроенного языка. Валидировать можно любой объект из семантической модели встроенного языка. Вам нужно реализовать интерфейс com._1c.g5.v8.dt.bsl.validation.IExternalBslValidator
Пример реализации
Идентификатор: com._1c.g5.v8.dt.bsl.dynamicContextDefProvider
Описание: Точка расширения, предназначенная для расширения контекста типа, возвращаемого конструкторами (операторным и функциональным). Вам нужно реализовать интерфейс com._1c.g5.v8.dt.bsl.typesystem.IDynamicContextDefProvider.
Пример реализации
Идентификатор: com._1c.g5.v8.dt.bsl.stringLiteralProposals
Описание: Точка расширения, предназначенная для расширения синтакс-помощника и валидации для строковых литералов, используемых внутри программных модулей. Вам нужно реализовать интерфейс com._1c.g5.v8.dt.bsl.ui.contentassist.stringliteral.IStringLiteralProposalProvider.
Пример реализации
Идентификатор: com._1c.g5.v8.dt.bsl.ui.externalQuickfixProvider
Описание: Точка расширения, предназначенная для создания quick-fix в программных модулях. Вам нужно реализовать абстрактный класс com._1c.g5.v8.dt.bsl.ui.quickfix.AbstractExternalQuickfixProvider
Пример реализации
Для рассширения контекстного меню редактора встроенного языка достаточно создать точку расширения org.eclipse.ui.menus .
Расширение контекстного меню редактора встроенного языка
Для рассширения контекстного меню панели «Схема» модуля достаточно создать точку расширения org.eclipse.ui.menus .
Расширение контекстного меню панели «Схема» модуля
Данный пример содержит в себе шаблон обработчика команды контекстного меню редактора встроенного языка:
Создать каталог инструментов
На сервере создать папку “ C:/Sonar/ ”. Не обязательно именно этот путь, но далее буду оперировать именно им.
Положить по адресу " C:/Sonar/bin/bsl-language-server.jar ".
Запуск из командной строки¶
Запуск jar-файлов осуществляется через java -jar path/to/file.jar .
При запуске BSL Language Server в обычном режиме будет запущен сам Language Server, взаимодействующий по протоколу LSP. Для взаимодействия используются stdin и stdout.
Настроить ГитКонвертор
Настроить и запустить конвертацию хранилища по инструкции от ГитКонвертора.
Для работы скрипта по вырезанию файлов на поддержке нужна информация о поддержке. Поэтому в настройках нужно снять флаг “ Удалять конфигурации поставщиков ”.
После снятия флага начнет выгружаться информация о поддержке и cf-файлы конфигураций, cf-файлы нужно добавить в “ .gitignore ”.
Значения в зеленых полях потребуются в дальнейшем.
Обязательно каталог выгрузки в репозиторий должен быть на латинице. Если там кириллица - Дженкинс очень непредсказуемо себя ведет.
Лицензия MIT
Adds syntax highlighting to *.bsl и *.os files in VSC.
Contributions are greatly appreciated. Development is carried in a parent repository 1c-syntax/1c-syntax
Разработчик помещает свои изменения доработки в хранилище. Через некоторое время получает уведомление о завершении проверок. Заходит в SonarQube и видит список замечаний по своему коду.
В это время внутри:
- ГитКонвертор получает все новые изменения и коммитит их в репозиторий.
- Вручную, по расписанию или по событию стартует конвейер. Первым шагом он получает и актуализирует дженкинсфайл.
- Инициализирует все нужные переменные, заполняет пустые параметры значениями по умолчанию и готовит каталоги. Выполняет оповещение о старте конвейера.
- Получает репозиторий с кодом в подкаталог “repo”.
- Выполняется выгрузка ошибок из АПК, EDT и BSL-LS в джсон-файлы.
- Джсон-файлы обрабатываются оскриптом - вырезаются файлы на поддержке, переопределяются данные ошибок.
- Если указана папка с файлами замеров, то они конвертируются в файл покрытия.
- По исходникам получается текущая версия конфигурации. Переопределяется джава. Собираются параметры для работы СонарСканера и запускается.
- После отработки сканера конвейер ставится на паузу и ждет ответа от сервера сонара. По ответу можно сломать сборку, если порог не пройден или просто сообщить статус проверки оповещением.
Расчет строк для покрытия тестами (Устарело)
Для расчета строк покрытия используйте утилиту Coverage41C или подобную, возвращающую полные данные по покрытию.
Установить SonarQube и плагины
Сканер ставить не надо. Будет использоваться плагин дженкинса.
Комьюнити плагин для сонара доступен теперь и в маркете сонара.
Запуск в режиме анализатора¶
Для запуска в режиме анализа используется параметр --analyze (сокращенно -a ).
Для указания каталога расположения анализируемых исходников используется параметр --srcDir (сокращенно -s ), за которым следует путь (относительный или абсолютный) к каталогу исходников. Для формирования отчета об анализе требуется указать один или "репортеров". Для указания репортера используется параметр --reporter (сокращенно -r ), за которым следует ключ репортера. Допустимо указывать несколько репортеров. Список репортетов см. в разделе Репортеры.
Пример строки запуска анализа:
При анализе больших исходников рекомендуется дополнительно указывать параметр -Xmx, отвечающий за предел оперативной памяти для java процесса. Размер выделяемой памяти зависит от размера анализируемой кодовой базы.
Расчет покрытия тестами
Адекватного способа рассчитать покрытие тестами в 1С на данный момент нет. Я костылю так:
Разворачиваю тестовую базу загрузкой из хранилища.
Захожу в конфигуратор. Из него запускаю менеджер тестирования под отладкой.
В менеджере тестирования подключаю тест-клиента под отладкой.
В конфигураторе включаю замеры.
Запускаю выполнение тестов.
Когда все тесты завершились, сохраняю все замеры в спец. папку, предварительно ее очистив. Эту спец. папку указываю в параметрах конвейера.
Все приложения из архива доступны на гитхабе.
Поддерживаемые операции протокола¶
Пример строки запуска
Специальные предложения
(5) Ну это-то понятно. Сами для себя изобрели и сами мучаетесь. У вас что, миллиардный оборот, конфиги пилите уровня УХ, и сотни кодеров, что понадобились настолько адские ухищрения, как "конвейер", простихосспади, контроля кода? Его и у 1С-то нет)
(6) И с чего вы взяли, что мы мучаемся? И с чего вы взяли, что это настолько адские ухищрения? С чего вы взяли, что этого нет у самого 1С? Нравится писать говнокод, ну продолжайте писать, чо тут то токсичность выплескивать?
arti4k; Somebody1; CyberCerber; DmitrySinichnikov; Andreeei; Reaper_1C; troubleshooter; TreeDogNight; drmaxart; A_Max; VasDmi666; kuzyara; Wilka; support; sorb; pavlov_dv; headMade; zeegin; o.nikolaev; + 19 – 1 Ответить
(7) Да просто ни в одной компании я не видел даже просто аудита и контроля кода. Не то что автоматизации этого процесса. Ну то есть на практике не видел, на бумаге-то много чего было. Не окупается, и не работает толком, выглядит красиво и вкусно, а практического выхлопа ноль. А я много чего видел. В основном - жутковатого.
А что мучаетесь, так это очевидно, потому как нет технологии организации коллективной разработки, позволяющей эффективно, без тормозов и помех для процесса, это хотя бы мониторить. Продукт - полдела, нужна работающая концепция его применения и железобетонная воля руководства это применять, несмотря на порождаемые задержки и проблемы.
Вы на личности-то не переходите. Что есть говнокод - вопрос интересный, и не след полагать говнокодом всё, что не прошло некую верификацию. Насчёт 1С всё элементарно - я это знаю из первых рук, по крайней мере по состоянию на 2016 год. Да гляньте их поделки, сами поймёте)))
А что, качество запросов ваша система тоже проверяет? По заветам Рупасова?)
maksa2005; d4rkmesa; Andreeei; Hans; Hatson; so-quest; Светлый ум; Yakud3a; Soloist; support; + 10 – Ответить
(9) Вам очень не повезло с работодателями.
Это используют. Не всегда в таком виде, иногда какие-то компоненты заменяют на другие.
После того, как втягиваешься - не понимаешь как это можно не использовать :)
Попробуйте потратить пару недель своего времени и разобраться. Сложно только по началу и от незнания процессов и инструментов.
arti4k; Артано; CyberCerber; mityushov.vv; YPermitin; ValentinGushchin; A_Max; rystam_atai; Stepa86; pavlov_dv; + 10 – Ответить
(10) Процессы-то я знаю и теорию знаю. И время тратил, и разбирался. А вот раздолбайство и бардак таковы, что это просто нельзя использовать. Человеческий фактор и энтропия коллективных взаимодействий, искажения связей в больших системах итд - всё это сводит на нет любую красивую теорию. Это как эйджилы всякие использовать - натягивание совы на глобус.
Что касается "иногда какие-то компоненты" - через год попыток использования таких систем в 95% случаев всё сползает в прежний бардак, только "бухгалтерии прибавляется", как в том анекдоте. А дальше отдельно ритуальные телодвижения и отдельно грустная реальность.
1) На счет работодателей. Возможно есть такие работодатели, которые хотя бы просто готовы применять такие инструменты, даже если на данный момент не применяют. Но их ничтожно мало и такой работодатель скорее всего будет на столько неудобно расположен от моего дома, что я к нему ни за что не поеду - такова "се ля ви")). Рынок труда таков, что обычная компания месяцами будет искать "правильных" и "неговнокодеров", а задачи нужно решать уже сегодня, а лучше вчера.
2) Попробуйте потратить пару недель. Для этого требуется сила воли, самодисциплина и мощная внутренняя мотивация; часто для этого нужно на 2 недели изменить свой образ жизни - на это вообще способны единицы из тысячи! Это практически то же самое, что сказать какому-нибудь чуваку: "попробуй бросить курить, пить пиво и займись спортом" - да ему и так хорошо! Если Вы так можете, то я пожимаю вам руку, коллега!
3) Видел один раз смешную ситуацию в одной компании: люди делали код-ревью и проверяли (автоматизированно) его на соответствие промышленным стандартам 1С. Всё бы ничего, но код был с огромным количеством технологических ошибок и огромным технологическим долгом. Ни о какой производительности, масштабируемости и гибкости такого кода речи не шло - не все знали, что у вирт. таблиц есть параметры, а уж про упр. блокировки и разницу между [ Запрос.Выполнить.Выгрузить() и Результат.Выбрать() ]и говорить не стоит - зато переменные правильно назывались!
Поддержка языка 1С:Предприятие 8 и OneScript для SonarQube.
Установить и настроить SonarScanner для дженкинса
Нужно не забыть про настройку вебхуков. В официальной документации про это есть, но мне помогла вот эта статья .
В конфигурации системы:
В конфигурации глобальных инструментов:
Имя сервера “ Sonar ” и имя сканера “ SonarQube Scanner ” используются в дженкинсфайле, поэтому их лучше не менять. Или поменять и в дженкинсфайле.
Матрица соответствия версий
Версия SonarQube | Версия плагина | Версия JAVA |
---|---|---|
8.9+ | 1.11.0+ | 11 |
7.9+ | 0.7.0…1.10.0 | 11 |
7.4 - 7.8 | 0.1.0…0.6.0 | 8 |
Импорт результатов из внешнего файла
BSL Language Server может запускать анализ исходного кода и выдавать список обнаруженных замечаний в виде json-файла. Инструкция по запуску BSL Language Server в режиме анализа расположена на странице проекта.
Для импорта результата при запуске утилиты sonar-scanner нужно передать параметр sonar.bsl.languageserver.reportPaths через аргументы командной строки или через файл sonar-project.properties , в котором указать путь к файлу (или файлам, через запятую) с результатами анализа.
Запуск в режиме форматтера¶
Для запуска в режиме форматтера используется параметр --format (сокращенно -f ).
Для указания каталога расположения форматируемых исходников (или файла) используется параметр --src (сокращенно -s ), за которым следует путь (относительный или абсолютный) к каталогу исходников (или файлу).
Пример строки запуска форматирования:
Настроить АПК
Запуск проверки АПК ищет конфигурацию по наименованию и использует ее.
Создать новую конфигурацию.
В наименование указать “ Каталог выгрузки в репозитории ” из ГитКонвертора.
В “ Путь к источнику проверки ” указать “ Адрес хранилища ”. Заполнить пользователя и его пароль для доступа к хранилища.
Важно, чтобы пользователи хранилища для ГитКонвертора и АПК были разными. Их никто не должен больше использовать. Иначе это приведет к конфликтам получения изменений из хранилища.
Дальше нужно настроить список проверяемых требований (выбрать все, например) и исключений, проверить подключение к базе после записи и закрыть АПК.
Стоит запустить полную проверку вручную из АПК, чтобы убедится в работоспособности.
Создание второго конвейера
Аналогично созданию конвейера нужно нажать на Создать Item , ввести имя, тыкнуть в Pipeline и внизу ввести имя существующего для копирования из него настроек.
В открывшемся окне джобы нужно поменять параметры на требуемые и запустить.
Валидация
- Проверка корректности кода в файлах *.os (и *.bsl опционально) через интерпретатор OneScript - инструкция
- Статический анализ кода с помощью BSL Language Server, включая:
- отображение значения когнитивной и цикломатической сложностей метода над его определением
- "быстрые исправления" для некоторых замечаний
- анализ метаданных 3
- исключение из анализа файлов, находящихся "на поддержке" конфигурации поставщика 3
Примечания
Интеграция с BSL Language Server
По умолчанию в качестве анализатора используется встроенный провайдер диагностик из BSL Language Server.
Выполнение анализа встроенным анализатором можно отключить, установив параметру sonar.bsl.languageserver.enabled значение false через командную строку или файл настроек.
Отключение анализатора не отключает процесс парсинга файлов. Расчет метрик и подсветка синтаксиса будут работать вне зависимости от значения настройки.
Процедуры и функции
- Отображение списка методов текущего файла ( Ctrl + Shift + O )
- Переход к определению ( F12 )
- Предварительный просмотр определения ( при наведении курсора мыши с зажатой клавишей Ctrl )
- Информация о методе
- Автодополнение методов глобального контекста
- Синтаксис-помощник по методам глобального контекста
- Поиск мест использования метода 1
- Подсказка по параметрам метода 1
- Поиск определения ( Ctrl + T )
Интеграция с Автоматизированная проверка конфигураций
Доступна с версии 1.6
Включить добавление правил и профилей из АПК можно установив свойство sonar.bsl.acc.enable
После включения при загрузке файла с ошибками из АПК в формате json будет происходить сопоставление с внутренними правилами. Это дает возможность управлять ошибками импортируемыми из АПК на стороне sonarqube.Важно Так как ключом правила является код ошибки из АПК, то сопоставление работает только если при выгрузке ошибок обработкой acc-export указать acc.titleError=code
Cвойство sonar.bsl.acc.accRulesPaths . Правила из поставки можно расширить за счет свойих внешних файлов в формате:
Cвойство sonar.bsl.acc.createExternalIssues . Определяет как поступить с ошибками, которые были в файле, но для них не было найдено активного правила. Для фильтрации ошибок поступающих от АПК на строне sonarqube потребуется отключить свойство.
Реализация протокола language server protocol для языка 1C (BSL) - языка 1С:Предприятие 8 и OneScript.
Заключение
Более подробную информацию по настройке и использованию плагина можно получить в WIKI проекта на GitHub включая offline установку.
Сотрудничество крайне приветствуется. Разработка грамматик ведется в родительском репозитории 1c-syntax/1c-syntax.
Настройка окружения
Для анализа исходных кодов 1С используется утилита sonar-scanner.
Утилите необходимо указать параметры анализа одним из нижеперечисленных способов:
- в качестве аргументов командной строки, используя синтаксис -DимяПараметра=значениеПараметра
- используя файл sonar-project.properties
Пример файла sonar-project.properties :
Способы передачи параметров можно комбинировать.
Если на сервере SonarQube включено требование принудительной авторизации и/или запрет анонимного анализа проектов, утилите sonar-scanner дополнительно нужно передавать токен авторизации, который можно получить согласно инструкции User guide/User token
Запуск анализа
Установить 1С:EDT
Если ГитКонвертор установлен на этом же сервере, то едт уже был установлен ранее. Второй раз можно не ставить.
Читайте также: