# totosca
| Шишацкий Михаил | М4160 |
| -- | -- |
## Введение в предметную область
[TOSCA](https://github.com/oasis-tcs/tosca-specs/blob/working/tosca_intro/tosca-intro-v2.0.md) (Topology and Orchestration Specification for Cloud Applications) — это стандарт описания топологии и оркестровки для облачных приложений. Он позволяет описывать топологию приложения, включая его компоненты, зависимости и отношения между ними, а также оркестровать развертывание, управление и мониторинг приложения. [Грамматика TOSCA](https://docs.oasis-open.org/tosca/TOSCA/v2.0/TOSCA-v2.0.html) основана на YAML.
Мотивация использования OASIS TOSCA заключается в снижении стоимости ИТ-инфраструктуры и приложений, а также ускорении разработки и развертывания приложений. TOSCA позволяет автоматизировать развертывание и управление ресурсами, что снижает расходы на операции и повышает эффективность.
## Описание проекта
Реализация инструментов разработчика TOSCA является очень важной задачей развития экосистемы. В рамках проектной работы я бы хотел направить свои усилия на реализацию Language Server Protocol (LSP) для языка TOSCA.
На данный момент существует единственная открытая реализация LSP [puccini-language-server](https://github.com/tliron/puccini-language-server), основанная на парсере [puccini](https://github.com/tliron/puccini). Однако этот проект не поддерживает такую функциональность как goto-definition/goto-references и в целом находится на раннем этапе развития: в репозитории нет ни одного бинарного релиза, проект не собирается.
Расширение puccini является опцией, но, будучи достаточно погруженным в кодовую базу puccini, я хотел бы сделать иные архитектурные решения, чтобы сделать реализацию функций LSP и последующих функций обхода графа узлов TOSCA простой задачей. В частности, я хотел бы хранить AST в виде графа, что позволит выполнять операции над сущностями языка универсально и без привязки к типу.
В будущем я бы хотел развить полученный TOSCA-движок не только до инструмента автоматизации и развёртывания сервисов, а в первую очередь до инструмента моделирования архитектуры, позволяющего формально верифицировать топологии сервисов, проверяя сценарии деплоя, обновления, отказа узлов. Заявленную тему я хочу довести до магистерской дипломной работы.
## Что уже реализовано к текущему моменту
На данный момент разработана необходимая функциональность для **начала** разработки основной функциональности
- Механизм поддержки нескольких грамматик TOSCA, позволяющий переиспользовать общие части версий в **статической** схеме
- Отображение диагностики файла в редакторе кода с помощью протокола LSP. На данный момент подсвечиваются только ошибки грамматики (отсутствие required ключа, несоответствие типа значения)
Разработка ведётся в репозитории [Shishqa/totosca](https://github.com/Shishqa/totosca). Список актуальных на данный момент задач описан в [TODO.md](https://github.com/Shishqa/totosca/blob/main/TODO.md).
Стоит отметить, что на данный момент реализовано только подмножество грамматики (~50%)
## Цели на семестр
За семестр планируется
- Поддержать грамматики TOSCA 1.3 и TOSCA 2.0 в парсере. Под полной поддержкой понимается поддержка всех грамматических конструкций, механизмов наследования и substitution mapping
- Поддержать функции diagnostics, goto-definition, find-usages, symbol description, completion в LSP
## Верификация полученных результатов
Поддержку грамматик планируется протестировать с помощью юнит-тестов, проверяющих основные грамматические конструкции. База тестов будет взята из [примеров puccini](https://github.com/tliron/puccini/tree/main/examples/tosca). Дополнительно (но в силу ограничения по времени опционально) хочется написать proof-of-concept фаззер, позволяющий генерировать входные файлы автоматически.