6
/10
Прожарка: 1c-language-parser
Оценка: 6/10
Критично
- [✓ ФАКТ: CVE-Ищейка] trivy – у проекта две HIGH‑уязвимости в зависимости
golang.org/x/text(CVE‑2021‑38561, CVE‑2022‑32149). При сборке под любой Go‑версией они могут привести к отказу службы. Нужно обновить модуль до версии, где патчи включены. - [✓ ФАКТ: Инфра-Ревизор] checkov – в CI‑конвейере (
.github/workflows/go.yml) нарушено правило CKV2_GHA_1: действиеactions/checkout@v3запускается без указанияfetch-depth: 0, что оставляет историю неполной и усложняет аудит. - [✓ ФАКТ: YAML-Граммарнаци] yamllint – файл workflow содержит 6 синтаксических ошибок (слишком длинная строка, отсутствие
---, неправильные отступы, лишние пробелы в скобках). GitHub‑Actions может отказываться от выполнения или работать с непредсказуемыми параметрами.
Надо переделать
- [⚠ МНЕНИЕ] Отсутствие тестов – в репозитории есть только
*_test.goв пакетеast, но они покрывают лишь токены и парсер‑грамматику, без интеграционных проверок. Добавьте набор юнит‑тестов, проверяющих построение AST для типовых конструкций 1С. - [⚠ МНЕНИЕ] Неиспользуемый код – файл
ast/fast_tolower/gowrap.goобъявляет функцииToLowerFast, но нигде в проекте они не вызываются. Удалите или подключите их в процесс токенизации. - [⚠ МНЕНИЕ] Именование и комментарии – многие функции (
NewAST,Parse,Print) имеют хорошие названия, но внутри файлов почти нет комментариев, поясняющих правила грамматики или структуру узлов. Добавьте doc‑строки, особенно вgrammar.yиast_struct.go. - [⚠ МНЕНИЕ] Форматирование Go‑кода – в нескольких файлах (например,
examples/pretty_code/main.go) присутствуют длинные строки‑литералы, которые делают чтение кода тяжёлым. Разбейте их на несколько строк или вынесите в отдельные константы. - [✓ ФАКТ: YAML-Граммарнаци] CI‑workflow – исправьте все ошибки
yamllint, добавьте шагgo vetиstaticcheck, а также ограничьте кэширование зависимостей для ускорения сборки.
Мелочи
- [⚠ МНЕНИЕ] В
go.ymlиспользованоtruthy‑значениеon: [push, pull_request]без кавычек – поправьте наtrue/false. - [⚠ МНЕНИЕ] В
README.mdотсутствует блок «License», хотя файл LICENSE присутствует – добавьте ссылку. - [⚠ МНЕНИЕ] В
examples/pretty_code/main.goимпортируется пакетfmt, но вывод ошибки происходит черезfmt.Printlnбез форматирования – лучше использоватьlog.Fatalf. - [⚠ МНЕНИЕ] Файл
ast/y.goсодержит только один тип‑объявление, которое могло бы быть размещено вast_struct.go.
Что хорошо
- [⚠ МНЕНИЕ] Явная архитектура – весь парсер сосредоточен в пакете
ast, где находятся грамматика (grammar.y), структуры AST и вспомогательные функции. Это упрощает навигацию. - [⚠ МНЕНИЕ] Yacc‑грамматика – использование
go yaccдаёт быстрый и детерминированный парсер, а файлgrammar.yдостаточно читаем, хотя и без комментариев. - [⚠ МНЕНИЕ] Пример использования – директория
examples/pretty_codeдемонстрирует, как построить AST из строки 1С‑кода и вывести его в читаемом виде. Это полезно для новых участников. - [⚠ МНЕНИЕ] Лицензия и README – в репозитории присутствуют файл LICENSE с указанием автора и подробный README, описывающий назначение проекта и способ установки.
- [⚠ МНЕНИЕ] Минимальные зависимости – кроме
golang.org/x/textиgithub.com/alecthomas/participle(неявно), проект не тянет тяжёлых внешних библиотек, что облегчает сборку.
Вердикт
Добротный парсер с чёткой структурой, но без тестов, с уязвимыми зависимостями и «кривыми» CI‑скриптами – требует доработки, чтобы стать надёжным инструментом.
Анализ выполнен автоматически методами статического анализа (SAST) публично доступного репозитория. Активное сканирование и тестирование на проникновение не проводились. Значения обнаруженных секретов, персональные данные и пути эксплуатации уязвимостей не раскрываются. Цитирование кода — в соответствии со ст. 1274 ГК РФ. Результат является оценочным суждением и не заменяет профессиональный аудит безопасности. Пункты помечены: ✓ факт (линтер), ⚠ мнение (AI), ✗ неверно (опровергнуто).