## Прожарка: 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), ✗ неверно (опровергнуто).*
