Что это?
Это инструмент анализа, который выполняет схожие функции с уже известными анализаторами, например, BSL Language Server и т.д.
Зачем?!
Я понимаю, что уже существует множество инструментов на разных языках, но интересно, что этот инструмент разработан на чистом 1С, в отличие от многих других инструментов. Это означает, что его использование будет проще и более понятным для программистов, даже для тех, кто не так хорошо понимает анализаторы.
Цель:
- Разработать удобный инструмент для работы с исходным кодом, запросом и файлами как с данными.
- Разработать методы для анализа и модификации кода, запроса и файлов.
- Разработать множество различных проверок, переводов, генераторов и т.д.
Есть информация об инструменте?
Он проводит анализ внешней обработки, отчета, конфигурации и расширения конфигурации.
Варианты использования:
- Скачанное расширение ставится на отдельной (возможно пустой) базе данных. В проекте указывается путь к информационной базе, пользователь и пароль, путь к файлу *.cf, *.cfe, *.epf или *.erf и путь к выгрузке XML-файлов.
Многопоточный анализ доступен только в клиент-серверном варианте.
Плагины к каждому проекту цепляются отдельно.
Инструмент создан на основе radar и распространяется под лицензией MIT.
К сожалению, после того как репозиторию присвоен rip, поддерживать файл в актуальном состоянии так никто и не взялся. После внедрения анализатора конфигураций в работу, были добавлены новые наборы внешних файлов и произведена доработка самого анализатора.
В инструмент анализатор включены 3 парсера:
- Парсер языка представления.
Представление - это строка, которая формируется с использованием методов ЗначениеВСтрокуВнутр() или ЗначениеВФайл() или из содержимого некоторых текстовых файлов 1С, заключенных в фигурные скобки.
Доступен вывод: "Токены", "Синтаксическое дерево", "JSON с синтаксическим деревом", "Плагины", "Замены", "Бэкенд", "Тестер". - Парсер встроенного языка.
Доступен вывод: "Токены", "Синтаксическое дерево", "JSON с синтаксическим деревом", "Плагины", "Замены", "Бэкенд", "Тестер". - Парсер языка запросов.
Парсер даёт несколько преимуществ по сравнению со "СхемойЗапроса", таких как отсутствие необходимости в наличии необходимых метаданных в конфигурации.
Доступен вывод: "Токены", "Синтаксическое дерево", "JSON с синтаксическим деревом", "Плагины", "Замены", "Бэкенд", "Тестер".
Выводы:
- Токены - выполняет лексический анализ текста и возвращает таблицу токенов.
- Синтаксическое дерево - разбирает исходный текст с результатом в виде абстрактного синтаксического дерева.
- JSON с синтаксическим деревом - разбирает исходный текст с результатом в виде JSON с абстрактным синтаксическим деревом.
- Плагины - регистрируют ошибки и/или замены и/или генерируют текст.
- Замены - заменяет участки текста в исходнике.
- Бэкенд - генерирует исходный текст по АСД или переводит исходный текст на другие языки.
- Тестер - демонстрирует прогон проверок исходного текста.
В разработке используется версия платформы 8.3.27.1508. Не рекомендуется использовать ниже указанной версии.
Как пользоваться инструментом?
- Подготовить заранее анализируемую внешнюю обработку, отчет, конфигурацию и расширение конфигурации, указав в диалоге файл *.epf, *.erf, *.cf или *.cfe.
- Выгрузить заранее анализируемую внешнюю обработку, отчет, конфигурацию или расширение конфигурации в файлы XML, указав в диалоге папку.
- Открыть конфигуратор на пустой базе.
- Загрузить скачанное расширение конфигурации из публикации и обновить конфигурацию базы данных.
- Запустить режим предприятия.
- На начальной странице нажать на команду "Проекты".
- Нажать на кнопку "Создать".
- В открывшейся форме проекта указать следующие поля:
- Наименование проекта - название продукта.
- Путь файла - путь к файлу из пункта 1.
- Путь выгрузки - путь к папке из пункта 2.
- Формат выгрузки - формат из пункта 2.
- Строка соединения - путь к БД.
- Пользователь - пользователь БД.
- Пароль - пароль пользователя БД. - Нажать на кнопки "Записать" и "Выполнить анализ". К проекту можно цеплять только плагины из папки "Парсер встроенного языка - Плагины - Генераторы ошибок".
- После выполнения анализа формируется документ "Анализы проектов".
- В разделе "Анализатор кода проектов" - "Отчеты" - "Тренд" можно посмотреть сколько ошибок было выявлено в процессе анализа внешней обработки, отчета, конфигурации или расширения конфигурации.
- В разделе "Анализатор кода проектов" - "Сервис" - "Навигатор" можно посмотреть список выявленных ошибок в файлах 1С.
- В разделе "Анализатор кода проектов" - "Сервис" - "Парсер языка представления" можно пользоваться отдельным парсером языка представления. К парсеру можно цеплять бэкенд из папки "Парсер языка представления".
- В разделе "Анализатор кода проектов" - "Сервис" - "Парсер встроенного языка" можно пользоваться отдельным парсером встроенного языка. К парсеру можно цеплять плагины и бэкенды из папки "Парсер встроенного языка".
- В разделе "Анализатор кода проектов" - "Сервис" - "Парсер языка запросов" можно пользоваться отдельным парсером языка запросов. К парсеру можно цеплять плагины и бэкенды из папки "Парсер языка запросов".
- В разделе "Анализатор кода проектов" - "Сервис" - "Конструктор глобального окружения" можно пользоваться отдельным конструктором глобального окружения для генерации кода.
Что про скорость?
Скорость зависит от количества ядер процессоров сервера.
Отладка на сервере должна быть отключена, так как существенно увеличивает время анализа. Чтобы отключить отладку на сервере, нужно убрать в строке запуска службы агента сервера 1С параметр "-debug" и выполнить перезапуск службы.
Первый анализ выполняется довольно долго. Последующие быстро, так как проверяются только измененные модули.
Оперативной памяти в зависимости от варианта использования и анализируемой внешней обработки, отчета, конфигурации или расширения конфигурации требуется примерно от 0,2 до 2 гигабайт.
Замеры времени:
- Машина i7-10700k, SSD, включена отладка на сервере.
Продукт Размер файла CF Размер XML-файлов Максимум потоков Размер партии Первый анализ Последующий анализ ERP_2.5.14.59 1,12 ГБ 7,15 ГБ 4 50 001:54:56:611 000:03:37:754 ERP_2.5.14.59 1,12 ГБ 7,15 ГБ 8 50 001:20:08:493 000:03:39:641 ERP_2.5.14.59 1,12 ГБ 7,15 ГБ 8 100 001:14:07:049 000:05:33:250 ERP_2.5.14.59 1,12 ГБ 7,15 ГБ 16 50 001:19:46:362 000:04:19:019 - Машина: i5 8400, SSD samsung 970 evo, выключена отладка на сервере.
Продукт Максимум потоков Первый анализ Последующий анализ УХ_3.0 6 10 минут меньше минуты
В чём плюсы и минусы реализации инструмента на 1С?
Плюсы:
- Есть родной язык в платформе "1С:Предприятие";
- Есть выгрузка/загрузка файлов EPF, ERF, CF, CFE в/из XML;
- Есть метаданные файлов EPF, ERF, CF, CFE;
- Есть многопоточность;
- Есть вызов внешних обработок.
Минусы:
- Низкая производительность интерпретатора.
Есть сравнение инструментов?
Какие есть проверки на 1С?
Источник | Анализ текста | Анализ XML-файлов | |||
Регистрация ошибок | Регистрация замен | JSON-файл | Регистрация ошибок | ||
Парсер языка представления | Парсер регистрирует ошибки: Не удалось выполнить замену Ожидалось Ожидался операнд |
+ | |||
Парсер встроенного языка | Парсер регистрирует ошибки: Имя метода указано неправильно Имя события указано неправильно Не обнаружено объявление метода Не обнаружено объявление переменной Не удалось выполнить замену Неизвестная директива Неизвестная инструкция препроцессора Неизвестный символ Неизвестный символ препроцессора Объявление аннотации может применяться только к методам Ожидалась директива Ожидалась инструкция препроцессора Ожидалась переменная Ожидалось Ожидалось выражение Ожидалось не более двух параметров Ожидался конструктор Ожидался операнд Оператор Возврат разрешён использовать только в методах Оператор Ждать разрешён использовать только в асинхронных методах Ошибка в литерале даты Повторное объявление метода Повторное объявление параметра Повторное объявление переменной Инструкция препроцессора Удаление/Вставка разрешена использовать только в методах Ожидалась процедура/функция |
+ | + | ||
Плагин "Асинхронный метод должен содержать Ждать" | + | + | |||
Плагин "Безумные многострочные литералы" | + | + | |||
Плагин "Бесполезный перебор коллекции" | + | + | |||
Плагин "Вложенный тернарный оператор" | + | + | |||
Плагин "Вставка коллекции в саму себя" | + | + | |||
Плагин "Выражение содержит много тернарных операторов" | + | + | |||
Плагин "Дублирование блоков кода" | + | + | |||
Плагин "Дублирование подвыражений кода" | + | + | |||
Плагин "Дублирование тел методов" | + | + | |||
Плагин "Дублируется условие" | + | + | |||
Плагин "Дублирование блоков в ветвлениях и обработках исключений кода" | + | + | |||
Плагин "Закомментированный код" | + | + | |||
Плагин "Замена неканоничных ключевых слов" | + | ||||
Плагин "Замена устаревших шаблонов функцией платформы" | + | + | + | ||
Плагин "Запрос в цикле" | + | + | |||
Плагин "Запуск внешних приложений" | + | + | |||
Плагин "Использование аннотаций и функции продолжить вызов" | + | + | |||
Плагин "Использование если иначе если с константным выражением" | + | + | |||
Плагин "Использование конструкторов структур" | + | + | + | ||
Плагин "Использование меток и переходов на метки" | + | + | |||
Плагин "Использование НСтр" | + | + | |||
Плагин "Использование СтрШаблон" | + | + | |||
Плагин "Каноническое написание ключевых слов" | + | + | |||
Плагин "Когнитивная сложность" | + | + | |||
Плагин "Код вне области" | + | + | |||
Плагин "Комментарий должен начинаться с пробела" | + | + | |||
Плагин "Конструкция если иначе если должна содержать иначе" | + | + | |||
Плагин "Метод запрещен" | + | + | |||
Плагин "Метод содержит много возвратов" | + | + | |||
Плагин "Метод содержит много объявлений локальных переменных" | + | + | |||
Плагин "Метод содержит много ожиданий" | + | + | |||
Плагин "Много директив компиляции" | + | + | |||
Плагин "Много операторов в одной строке" | + | + | |||
Плагин "Недостижимый код" | + | + | |||
Плагин "Неизвестный символ препроцессора" | + | + | |||
Плагин "Неиспользуемая переменная" | + | + | |||
Плагин "Нерекомендуемый атрибут аннотации" | + | + | |||
Плагин "Ограничение на длину строки" | + | + | |||
Плагин "Ограничение на количество параметров метода" | + | + | |||
Плагин "Опасное обращение по индексу" | + | + | |||
Плагин "Оператор вызвать исключение без аргументов вне исключения попытки" | + | + | |||
Плагин "Оператор перейти запрещен" | + | + | |||
Плагин "Операторы прервать продолжить вне цикла" | + | + | |||
Плагин "Ошибочный замыкающий комментарий" | + | + | + | ||
Плагин "Переименование переменных" | + | + | + | + | |
Плагин "Повторяющиеся разделы модуля" | + | + | |||
Плагин "Подряд идущие пустые строки" | + | + | |||
Плагин "Порядок параметров метода" | + | + | |||
Плагин "Пропущенные точки с запятой" | + | + | |||
Плагин "Пропущен последний параметр" | + | + | |||
Плагин "Пропущено описание методов" | + | + | |||
Плагин "Пропущено описание переменных модуля" | + | + | |||
Плагин "Пустой блок кода" | + | + | |||
Плагин "Пустой оператор" | + | + | |||
Плагин "Расстановка пропущенных точек с запятой" | + | ||||
Плагин "Свойство ЭтаФорма запрещено" | + | + | |||
Плагин "Функция должна содержать возврат" | + | + | |||
Плагин "Хранение сетевых адресов в коде" | + | + | |||
Плагин "Цикломатическая сложность" | + | + | |||
Плагин "Чрезмерный уровень вложенности конструкций" | + | + | |||
Парсер языка запросов | Парсер регистрирует ошибки: Не обнаружено объявление функции Не удалось выполнить замену Невозможно использовать ИНДЕКСИРОВАТЬ ПО без ПОМЕСТИТЬ Неизвестный символ Ожидалось Ожидалось логическое выражение В, МЕЖДУ или ПОДОБНО Ожидался вид периода СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, ДЕКАДА, МЕСЯЦ, КВАРТАЛ, ПОЛУГОДИЕ или ГОД Ожидался операнд Ожидался параметр Невозможно использовать ПОМЕСТИТЬ И ДОБАВИТЬ в одном запросе Повторное предложение Повторная секция Ожидалось имя таблицы |
+ | |||
Плагин "Запрос одной строкой" | + | ||||
Плагин "Использование выбор когда с константным выражением" | + | ||||
Плагин "Использование подобно" | + | ||||
Плагин "Многострочный литерал" | + | ||||
Плагин "Пропущено слово как перед псевдонимом поля" | + | ||||
Плагин "Сравнение с null" | + |
Кроме проверок, что ещё имеется?
Источник | JSON-файл | |
Парсер языка представления | Бэкенд "Генератор исходного представления по АСД" | |
Парсер встроенного языка | Плагин "Визажист" | |
Бэкенд "Генератор документации для парсера встроенного языка" | ||
Бэкенд "Генератор исходного кода по АСД" | + | |
Бэкенд "Обфускатор исходного кода по АСД" | + | |
Бэкенд "Оптимизатор исходного кода по АСД" | + | |
Бэкенд "Перевод исходного кода на язык 1с исполнитель" | ||
Бэкенд "Перевод исходного кода на язык python" | ||
Бэкенд "Перевод исходного кода на язык power shell" | ||
Бэкенд "Перевод исходного кода на язык перфолента нет" | ||
Бэкенд "Перевод исходного кода на язык cи плюс плюс" | ||
Плагин "Рекурсивный подсчет серверных вызовов в модулях форм" | ||
Бэкенд "Рефакторинг исходного кода по АСД" | + | |
Парсер языка запросов | Бэкенд "Генератор исходных запросов пакета по АСД" | + |
Бэкенд "Рефакторинг исходных запросов пакета по АСД" | + |
Ближняя перспектива?
- Улучшение и доработка инструмента.
- Исправление ошибок.
Дальняя перспектива?
- Выполнение автоматизированных переименований и переводов.
- Генерация документации по исходному коду.
- Модификация исходного кода путем замен/вставки/удаления фрагментов кода.
- Обфускация исходного кода.
- Перевод исходного кода в другие языки программирования.
- Поиск ошибок в исходном коде.
- Подготовка исходного кода к публикации (генерация html).
- Проверка исходного кода на соответствие требованиям безопасности и стандартам.
- Проверка оформления исходного кода.
- Продвинутый автоматизированный поиск по исходному коду.
- Сбор статистики по исходному коду.
- Форматирование исходного кода.
Документация?
Статья?
Вскрытие статического анализа кода проектов 1С
Что нового?
- Добавлено окружение объекта метаданных "WebSocket-клиенты" в список проверок. Требуется платформа 8.3.27.1508 или выше.
- Добавлено свойство объектов "СтандартныеТабличныеЧасти" планов счетов и планов видов расчета в список проверок.
- В конструктор глобального окружения теперь добавлен флажок "Замер времени".
- В настройках парсеров теперь добавлен переключатель "Вариант синтаксиса". Доступны варианты синтаксиса: русский и английский.
- Изменения в наборе внешних файлов:
- В бэкенд "ГенераторИсходногоКодаПоАСД" добавлен параметр "ПреобразоватьБулевыОперацииВВерхнийРегистр".
- Исправлено оформление комментариев при генерации документации в бэкенде "ГенераторДокументацииДляПарсераВстроенногоЯзыка".
- Добавлены конструкторы типов глобального окружения "ОбщиеОбъекты", "ПрикладныеОбъекты", "УниверсальныеКоллекцииЗначений" и т.д. в список проверок.
- Теперь есть возможность генерировать конструкторы типов в конструкторе глобального окружения.
- Теперь конструкторы типов генерируются по умолчанию на русском варианте синтаксиса в бэкендах.
- В настройках вывода "Тестер" теперь добавлен флажок "Создавать глобальное окружение".
- Исправлена ошибка при разборе кода:
Справочник = Новый СправочникСсылка.Справочник1(Новый УникальныйИдентификатор);
- Добавлены свойства общих реквизитов из состава общих реквизитов планов обмена, справочников, документов и т.д. в список проверок.
- Теперь парсер запросов проверяет на наличие недопустимых знаков "Унарный плюс".
- Изменения в наборе внешних файлов:
- В бэкенд "ГенераторИсходногоКодаПоАСД" добавлены параметры "УбратьАтрибутАннотации", "УбратьУнарныйПлюс" и "ДобавитьЗамыкающиеКомментарииМетодов".
- Исправлена ошибка свойства "СтрокиЯзыков" в бэкендах для запросов.
- Исправлено некорректное срабатывание ошибки "Есть пропуски в нумерации маркеров" в плагине "ИспользованиеСтрШаблон". - Исправлено, что в свойства менеджера добавлялись все предопределенные элементы, кроме подчиненных.
- Добавлены свойства объектов "ПризнакиУчета" планов счетов и "Поля" внешних источников данных в список проверок.
- Добавлено окружение объекта метаданных "Подсистемы" для подчиненных подсистем в список проверок.
- В узел объявление глобального объекта/метода добавлено свойство "СтрокиЯзыков". Теперь глобальные объекты/методы генерируются по умолчанию на русском варианте синтаксиса в бэкендах.
- Повсеместно заменен оператор вызова процедуры на оператор вызова.
- Изменения в наборе внешних файлов:
- В бэкенд "ГенераторИсходногоКодаПоАСД" добавлены параметры "УчитыватьОтступыДляПрепроцессоров" и "СохранитьФорматированиеЧисла". Теперь требуется указать файл JSON.
- Теперь бэкенд "ПереводИсходногоКодаНаЯзык1СИсполнитель" генерирует метод "Скрипт", вызов сообщения "Консоль.Записать", аннотации окружения "@НаКлиенте @НаСервере" и область видимости "@Глобально".
- Теперь бэкенд "ПереводИсходногоКодаНаЯзыкPowerShell" генерирует все переменные с постфиксом "$".
- В бэкенд "ОбфускаторИсходногоКодаПоАСД" добавлены вложенные области видимости для циклов.
- В бэкенд "ОптимизаторИсходногоКодаПоАСД" добавлены области видимости для меток. - Исправлено, что свойства общих модулей добавлялись в глобальные свойства без учета свойства "Глобальный".
- Добавлено окружение формы "КомпоновщикНастроекКомпоновкиДанных" в список проверок.
- Добавлены объекты глобального окружения "ОбщиеОбъекты" в список проверок.
- Изменения в наборе внешних файлов:
- Переименован бэкенд "ПереводИсходногоКодаВЧистыйКод" в "ОптимизаторИсходногоКодаПоАСД". Требуется указать файл JSON.
- Переименован плагин "НеОпределенаМеткаПереходНаМетку" в "ИспользованиеМетокИПереходовНаМетки".
- Теперь бэкенд "ПереводИсходногоКодаНаЯзыкПерфолентаНет" генерирует атрибут поля "ВидноВсем" и функцию "ПолучитьДелегат".
- Теперь операторы внутри инструкций препроцессоров "Если" будут сгенерированы с синтаксическим отступом. - Исправлена ошибка при разборе кода:
Процедура ТестА() #Если Не ВебКлиент Тогда Перем А; #КонецЕсли КонецПроцедуры
- Добавлены символы препроцессора "МобильныйКлиент" и "МобильныйАвтономныйСервер" в список проверок.
- Добавлены объекты глобального окружения "СистемныеНаборыЗначений" в список проверок.
- Добавлена возможность прикреплять несколько плагинов к парсерам языка запросов и языка представления за один раз.
- Переименован парсер внутреннего представления в язык представления.
- Добавлены файлы в набор внешних файлов:
- "РефакторингИсходныхЗапросовПакетаПоАСД" (Парсер языка запросов - Бэкенды). - Изменения в наборе внешних файлов:
- Переименован бэкенд "ГенераторИсходногоВнутреннегоПредставленияПоАСД" в "ГенераторИсходногоПредставленияПоАСД".
- Перенос параметров из JSON файла "ГенераторИсходногоКодаПоАСД" в "РефакторингИсходногоКодаПоАСД".
- Теперь бэкенд "ГенераторИсходныхЗапросовПакетаПоАСД" переносит логические выражения и нумерует запросы пакета. Требуется указать JSON файл. - Исправлены ошибки при синтаксическом разборе запросов (п-е МЕЖДУ).
- Исправлен некорректный генератор кода глобального окружения.
- Теперь парсер проверяет запрос на наличие недопустимых параметров в соединениях.
- Добавлены файлы в набор внешних файлов:
- "РефакторингИсходногоКодаПоАСД" (Парсер встроенного языка - Бэкенды).
- "ИспользованиеВыборКогдаСКонстантнымВыражением" (Парсер языка запросов - Плагины). - Изменения в наборе внешних файлов:
- Переименован плагин "НекорректноеИспользованиеПодобно" в "ИспользованиеПодобно".
- Переименован плагин "МногострочныйЛитералВЗапросе" в "МногострочныйЛитерал".
- Теперь бэкенд "ГенераторИсходногоКодаПоАСД" может объединить локальные переменные и многострочные литералы. Требуется указать файл JSON.
- Теперь бэкенд "ОбфускаторИсходногоКодаПоАСД" может заменить конструкции. Требуется указать файл JSON. - Исправлены ошибки при синтаксическом разборе запросов (п-е ДЛЯ ИЗМЕНЕНИЯ, ф-я КОЛИЧЕСТВО).
- Добавлены все необходимые подписки для поддержки плагинов в парсер языка запросов.
- Добавлено окружение форм, охватывающее более 10 новых форм, в список проверок.
- Теперь парсер разбирает групповой оператор вхождения.
- Добавлены файлы в набор внешних файлов:
- "ЗапросОднойСтрокой" (Парсер языка запросов - Плагины).
- "НекорректноеИспользованиеПодобно" (Парсер языка запросов - Плагины).
- "ПропущеноСловоКакПередПсевдонимомПоля" (Парсер языка запросов - Плагины).
- "СравнениеСNull" (Парсер языка запросов - Плагины).
- Теперь парсер анализирует запрос на предмет повторных секций и предложений.
- Теперь при синтаксическом разборе запросов временно игнорируются токены "Построитель".
- Добавлены модули и их окружение в список проверок:
- Константа (модуль менеджера константы).
- РегистрРасчета - Перерасчет (модуль набора записей перерасчета).
- ВнешнийИсточникДанных (все модули кубов, таблиц и таблиц измерений). - Добавлены файлы в набор внешних файлов:
- "ПереводИсходногоКодаНаЯзыкПерфолентаНет" (Парсер встроенного языка - Бэкенды).
- "ОбращениеКПроцедуреКакКФункции" (Парсер встроенного языка - Плагины). - Изменения в наборе внешних файлов:
- Переименован плагин "МногоАннотацийДирективКомпиляции" в "МногоДирективКомпиляции".
- Переименован плагин "НекорректноеИспользованиеФункцииПродолжитьВызов" на "ИспользованиеАннотацийИФункцииПродолжитьВызов". - Произведен небольшой откат изменений, связанных с некорректным окружением модулей, до версии 1.2.3.0.
- Теперь парсер проверяет ситуации, в которых нельзя использовать оба предложения "Поместить" и "Добавить" в одном запросе.
- Добавлены файлы в набор внешних файлов:
- "ОбфускаторИсходногоКодаПоАСД" (Парсер встроенного языка - Бэкенды). - Изменения в наборе внешних файлов:
- Теперь любое вычисляемое выражение преобразуется в литералы в бэкенде "ПереводИсходногоКодаВЧистыйКод". - Исправлен некорректный анализ и форматирование ключевого слова "Уникально" в запросах с предложением "Индексировать по".
- Пополнен список встроенных функций языка запросов в конструкторе глобального окружения.
- Скорректировано выделение токенов "Комментарий" в парсере языка запросов.
- Скорректировано выделение токенов "Литерал" в парсере внутреннего представления.
- Теперь вывод "Автотест" перенесен в "Тестер".
- Добавлены файлы в набор внешних файлов:
- "ГенераторИсходныхЗапросовПакетаПоАСД" (Парсер языка запросов - Бэкенды).
- "АсинхронныйМетодДолженСодержатьЖдать" (Парсер встроенного языка - Плагины). - Изменения в наборе внешних файлов:
- Упразднен плагин "ПустойЗапрос" (Парсер языка запросов - Плагины). - Исправлено дублирование токенов при восстановлении хранилища токенов.
- Добавлены файлы в набор внешних файлов:
- "ИспользованиеСтрШаблон" (Парсер встроенного языка - Плагины).
- "МногострочныйЛитералВЗапросе" (Парсер языка запросов - Плагины).
- "ПустойЗапрос" (Парсер языка запросов - Плагины). - Изменения в наборе внешних файлов:
- Теперь обнаруживает сразу несколько подряд комментариев, начинающихся без пробела, в плагине "КомментарийДолженНачинатьсяСПробела".
- Теперь обнаруживает сразу несколько подряд строк, в которых количество символов превышает 120, в плагине "ОграничениеНаДлинуСтроки".
- Скорректировано выделение пустых строк в начале и конце текста в плагине "ПодрядИдущиеПустыеСтроки". & Вместо("ТестА") & НаКлиенте Процедура Тест() КонецПроцедуры
Исправлена ошибка при разборе кода:
- Исправлена ошибка при разборе запросов:
Выбрать 1;;;Выбрать 4
- Теперь при определении токенов и узлов учитываются позиции знаков:
- точки с запятой (операторы, переменные, запросы);
- прямые слэши (комментарии);
- амперсанды (методы, переменные). - Добавлены файлы в набор внешних файлов:
- "ОграничениеНаДлинуСтроки" (Парсер встроенного языка - Плагины).
- "ПропущеноОписаниеМетодов" (Парсер встроенного языка - Плагины).
- "ПропущеноОписаниеПеременныхМодуля" (Парсер встроенного языка - Плагины). - Изменения в наборе внешних файлов:
- Добавлена проверка наличия обязательных языков в плагин "ИспользованиеНСтр".
- Теперь удаляет лишние выражения при преобразовании условных и тернарных операторов в чистый код в бэкенде ПереводИсходногоКодаВЧистыйКод.
- Добавлены выводы "Плагины", "Замены", "Бэкенд" и "Автотест" в парсер языка запросов.
- Добавлены все функции языка запросов в конструктор глобального окружения.
- Добавлены выводы "АСД (дерево)" и "АСД (JSON)" в парсер языка запросов.
- Добавлены подписки для поддержки аннотаций и директив компиляции в парсер встроенного языка.
- Немного изменён парсер внутреннего представления.
- Изменения в наборе внешних файлов:
- Немного изменены файлы "ЗаменаНеканоничныхКлючевыхСлов" и "КаноническоеНаписаниеКлючевыхСлов".
- Добавлены выводы "Плагины", "Замены", "Бэкенд" и "Автотест" в парсер внутреннего представления.
- Добавлены подписки в парсер внутреннего представления.
- Добавлены файлы в набор внешних файлов:
- "ГенераторИсходногоВнутреннегоПредставленияПоАСД" (Парсер внутреннего представления - Бэкенды).
- "ЧрезмерныйУровеньВложенностиКонструкций" (Парсер встроенного языка - Плагины). - Изменения в наборе внешних файлов:
- Добавлена проверка каноничности символов препроцессора в файл "КаноническоеНаписаниеКлючевыхСлов".
- Добавлена замена неканоничных символов препроцессора в файл "ЗаменаНеканоничныхКлючевыхСлов".
- Немного изменён файл "МногоОператоровВОднойСтроке".
- Переименован файл "ГенераторДокументацииДляПарсера" в "ГенераторДокументацииДляПарсераВстроенногоЯзыка".
- Добавлены выводы "АСД (дерево)" и "АСД (JSON)" в парсер внутреннего представления.
- Добавлены подписки для поддержки Ждать в парсер встроенного языка.
- Добавлены файлы в набор внешних файлов:
- "МетодСодержитМногоОжиданий" (Плагины).
- "НеизвестныйСимволПрепроцессора" (Плагины). - Изменения в наборе внешних файлов:
- Переименован плагин "ДублированиеБлоковВВеткахВетвленияКода" в "ДублированиеБлоковВВетвленияхИОбработкахИсключенийКода".
- Добавлен вывод "Тестер" в парсер внутреннего представления.
- Добавлены файлы в набор внешних файлов:
- "ПереводИсходногоКодаНаЯзыкPython" (Бэкенды).
- "ОпасноеОбращениеПоИндексу" (Плагины).
- "НекорректноеИспользованиеФункцииПродолжитьВызов" (Плагины). - Изменения в наборе внешних файлов:
- Добавлена проверка дублирования блоков в ветке условного оператора в плагин "ДублированиеБлоковВВеткахВетвленияКода".
- Добавлена поддержка "Ждать" в бэкендах "ГенераторИсходногоКодаПоАСД", "ПереводИсходногоКодаВЧистыйКод", "ПереводИсходногоКодаНаЯзык1СИсполнитель", "ПереводИсходногоКодаНаЯзыкCиПлюсПлюс" и "ПереводИсходногоКодаНаЯзыкPowerShell".
- Добавлен вывод "Тестер" в парсер языка запросов.
- Добавлены файлы в набор внешних файлов:
- "ПереводИсходногоКодаВЧистыйКод" (Бэкенды);
- "ДублированиеТелМетодов" (Плагины);
- "ХранениеСетевыхАдресовВКоде" (Плагины). - Теперь парсер регистрирует ошибки, связанные с использованием объявления аннотации в переменных модуля.
- Изменения в наборе внешних файлов:
- Переименован бэкенд "ГенераторКода1СПредприятиеПоАСД" в "ГенераторИсходногоКодаПоАСД".
- Переименован бэкенд "ГенераторКода1СИсполнительПоАСД" в "ПереводИсходногоКодаНаЯзык1СИсполнитель".
- Переименован бэкенд "ГенераторКодаPowerShellПоАСД" в "ПереводИсходногоКодаНаЯзыкPowerShell".
- Переименован бэкенд "ГенераторКодаCиПлюсПлюсПоАСД" в "ПереводИсходногоКодаНаЯзыкCиПлюсПлюс".
- Переименован плагин "ДублируютсяВыраженияТернарногоОператора" в "ДублированиеБлоковВВеткахВетвленияКода".
- Доработано выделение позиций от трёх и более многострочных литералов в плагине "БезумныеМногострочныеЛитералы".
- Добавлен экспортный метод в бэкенд "ПереводИсходногоКодаНаЯзык1СИсполнитель".
- Добавлено объявление любого типа возвращаемого значения в бэкенд "ПереводИсходногоКодаНаЯзык1СИсполнитель".
- Доработано объявление типов параметров в бэкенде "ПереводИсходногоКодаНаЯзык1СИсполнитель".
- Преобразовано выражение "Новый" в нижний регистр в бэкенде "ПереводИсходногоКодаНаЯзык1СИсполнитель".
- Добавлена проверка дублирования блоков в ветке оператора исключения в плагин "ДублированиеБлоковВВеткахВетвленияКода".
- Добавлен вывод "Тестер" в парсер встроенного языка.
- Добавлены файлы в набор внешних файлов:
- "ГенераторКодаCиПлюсПлюсПоАСД" (Бэкенды).
- "ДублированиеПодвыраженийКода" (Плагины).
- "ЗапускВнешнихПриложений" (Плагины). - Теперь парсер регистрирует ошибки, связанные с использованием оператора "Возврат" в модуле без методов.
- Исправлена ошибка при разборе кода:
Перем Тест; Возврат Тест;
- Добавлен парсер внутреннего представления в анализатор. Теперь доступен вывод "Токены".
- Добавлены файлы в набор внешних файлов:
- "ГенераторКодаShellPowerПоАСД" (Бэкенды).
- "НедостижимыйКод" (Плагины).
- "НеОпределенаМеткаПереходНаМетку" (Плагины).
- Добавлена возможность генерировать код с помощью конструктора глобального окружения. Работает как в файловом, так и в серверном режиме.
- Добавлены файлы в набор внешних файлов:
- "ГенераторКода1CИсполнительПоАСД" (Бэкенды).
- "ЗаменаУстаревшихШаблоновФункциейПлатформы" (Плагины).
- "ПовторяющиесяРазделыМодуля" (Плагины). - Изменения в наборе внешних файлов:
- Переименован бэкенд "ГенераторКодаПоАСД" в "ГенераторКода1CПредприятиеПоАСД".
- Добавлен вывод "Автотест" в парсер встроенного языка.
- Теперь при определении токена "Начало текста" учитывается первая позиция в первой строке исходника.
- Добавлены файлы в набор внешних файлов:
- "ГенераторКодаПоАСД" (Бэкенды).
- "ДублируютсяВыраженияТернарногоОператора" (Плагины). - Изменения в наборе внешних файлов:
- Переименован плагин "ОператорВызватьИсключениеВнеИсключенияПопытки" в "ОператорВызватьИсключениеБезАргументовВнеИсключенияПопытки". - Исправлена ошибка при разборе кода:
ВызватьИсключение("Ошибка на клиенте с категорией", КатегорияОшибки.ОшибкаКонфигурации, "error.client.config", "error.client.config additional info");
- Добавлена возможность указать путь параметров плагинов (JSON) в проекте.
- Добавлены файлы в набор внешних файлов:
- "МетодСодержитМногоВозвратов" (Плагины).
- "МногоАннотацийДирективКомпиляции" (Плагины).
- "ОператорВызватьИсключениеВнеИсключенияПопытки" (Плагины).
- "ОператорыПрерватьПродолжитьВнеЦикла" (Плагины). - Изменения в наборе внешних файлов:
- Переименован плагин "ДублируетсяОператорПрисваивания" в "ДублированиеБлоковКода".
- Добавлена поддержка атрибута аннотации в парсер встроенного языка.
- Теперь парсер регистрирует ошибки, связанные с использованием оператора "Ждать" в контексте, отличном от асинхронных методов.
- Добавлен файл в набор внешних файлов:
- "НерекомендуемыйАтрибутАннотации" (Плагины). - Исправлена ошибка при разборе кода:
СписокФайлов = Ждать НайтиФайлыАсинх(Ждать КаталогВременныхФайловАсинх(), МаскаВсеФайлы(), Ложь);
- Добавлена возможность указать путь параметров бэкенда (JSON) в парсере встроенного языка.
- Добавлены файлы в набор внешних файлов:
- "МногоОператоровВОднойСтроке" (Плагины).
- "ЦикломатическаяСложность" (Плагины). - Изменения в наборе внешних файлов:
- Переименован плагин "ДублируетсяТочкаСЗапятой" в "ПустойОператор".
- Переименован плагин "ВыражениеСодержитНесколькоТернарныхОператоров" в "ВыражениеСодержитМногоТернарныхОператоров".
- Переименован плагин "ОбъявлениеМетодаСодержитНесколькоСписковЛокальныхПеременных" в "МетодСодержитМногоОбъявленийЛокальныхПеременных".
- Добавлен вывод "АСД(JSON)" в парсер встроенного языка.
- Добавлены файлы в набор внешних файлов:
- "ОграничениеНаКоличествоПараметровМетода" (Плагины).
- "ПорядокПараметровМетода" (Плагины).
- Добавлена возможность анализировать внешнее расширение конфигурации *.cfe в проекте.
- Добавлены файлы в набор внешних файлов:
- "БезумныеМногострочныеЛитералы" (Плагины).
- "ИспользованиеЕслиИначеЕслиСКонстантнымВыражением" (Плагины).
- Добавлена возможность анализировать внешнюю обработку *.epf и внешний отчет *.erf в проекте.
- Добавлена возможность прикреплять несколько плагинов к парсеру встроенного языка за один раз.
- Добавлен файл в набор внешних файлов:
- "КонструкцияЕслиИначеЕслиДолжнаСодержатьИначе" (Плагины).
- Добавлена поддержка Асинх / Ждать в парсер встроенного языка.
- Добавлена возможность анализировать внешнюю конфигурацию *.cf в проекте.
- Добавлена возможность выгрузить конфигурацию из базы в файл(ы) через командную строку.
- Добавлена возможность проверять все модули, а не только измененные для последующего анализа.
- Добавлена возможность прикреплять несколько плагинов к проекту за один раз.
- Добавлен парсер языка запросов платформы 1С:Предприятие 8 в анализатор. Теперь доступен вывод "Токены".
- Добавлены файлы в набор внешних файлов:
- "ДублируетсяОператорПрисваивания" (Плагины).
- "ДублируетсяТочкаСЗапятой" (Плагины).
- "ЗакомментированныйКод" (Плагины).
- "КодВнеОбласти" (Плагины).
- "КомментарийДолженНачинатьсяСПробела" (Плагины).
- "ПодрядИдущиеПустыеСтроки" (Плагины).
- "ПустойБлокКода" (Плагины).
- "ОбъявлениеМетодаСодержитНесколькоСписковЛокальныхПеременных" (Плагины). - Упразднены некоторые функции.
- Исправлена ошибка чтения XML-файлов.
- Добавлен анализатор и набор внешних файлов в инструмент.
Не стесняйтесь сообщать о найденных опечатках!
Учтены замечания:
- 03.11.23 Поправлено количество проверок в turboconf.
- 06.11.23 Добавлен список проверок.
- 23.11.23 Повсеместно переименовано слово "бакенд" в "бэкенд".
- 15.01.24 Добавлена проверка ИР и ИР адаптер для turboconf.
Проверено на следующих конфигурациях и релизах:
- 1С:ERP Управление предприятием 2, релизы 2.5.21.118