Skip to content

WIP: Поддержка semver в части пререлизов и метаданных билда #7

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 15 commits into
base: develop
Choose a base branch
from

Conversation

EvilBeaver
Copy link
Member

Реализована поддержка пререлизов и метаданных сборок по semver

closes #2

Нарушена обратная совместимость при которой все версии с пререлизами, но ошибками - считались валидными, но без пререлизов.

Версия нужна для бэкенда сайта oscript.io для корректной сортировки версий

WIP: Пока не реализована сортировка с учетом пререлиза.

@EvilBeaver EvilBeaver requested review from nixel2007, otymko and sfaqer May 2, 2025 12:47
ОшибкаЧтенияВерсии = СтрШаблон("Второстепенная версия <%1> должна содержать только цифры",СтрокаОсновнаяВерсия);
Возврат;

Процедура ПрочитатьОсновную(Знач Парсер)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

эти три функции только текстом эксепшена отличаются? может во внутреннюю общую функцию вынести?

Copy link
Member Author

@EvilBeaver EvilBeaver May 2, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Меня заломало передавать текст эксепшена параметром, кажется что теорема Эскобара. Можно, конечно. Думаешь, так лучше будет?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Чтобы править в одном месте

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Поддержу, определённо править в одном месте удобнее

Comment on lines 208 to 216
Если ТекущийТокен.Тип = Парсер.ТипРазделитель Тогда
Если Разделитель = ТекущийТокен.Значение Тогда
СледующийТокен = Парсер.Следующий();
Если СледующийТокен.Тип = Парсер.ТипКонецТекста Тогда
ВызватьИсключение СтрШаблон("Неожиданный конец строки версии, нет данных после разделителя <%1>", Разделитель);
КонецЕсли;
Возврат;
КонецЕсли;
КонецЕсли;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Кажется два первых условия можно совместить и читаться будет полегче

Suggested change
Если ТекущийТокен.Тип = Парсер.ТипРазделитель Тогда
Если Разделитель = ТекущийТокен.Значение Тогда
СледующийТокен = Парсер.Следующий();
Если СледующийТокен.Тип = Парсер.ТипКонецТекста Тогда
ВызватьИсключение СтрШаблон("Неожиданный конец строки версии, нет данных после разделителя <%1>", Разделитель);
КонецЕсли;
Возврат;
КонецЕсли;
КонецЕсли;
Если ТекущийТокен.Тип = Парсер.ТипРазделитель
И Разделитель = ТекущийТокен.Значение Тогда
СледующийТокен = Парсер.Следующий();
Если СледующийТокен.Тип = Парсер.ТипКонецТекста Тогда
ВызватьИсключение СтрШаблон("Неожиданный конец строки версии, нет данных после разделителя <%1>", Разделитель);
КонецЕсли;
Возврат;
КонецЕсли;
КонецЕсли;

Возврат;
КонецПроцедуры

Процедура ПрочитатьРазделитель(Знач Парсер, Знач Разделитель)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А чем метод ПрочитатьРазделитель отличается от ПрочитатьОчереднойРазделитель ? Я всё вчитываюсь и не могу увидеть разницы

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я гляну внимательнее, это могут быть атавизмы какой-то итерации рефакторинга

ОшибкаЧтенияВерсии = СтрШаблон("Второстепенная версия <%1> должна содержать только цифры",СтрокаОсновнаяВерсия);
Возврат;

Процедура ПрочитатьОсновную(Знач Парсер)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Поддержу, определённо править в одном месте удобнее

ТипТокена = ТипТекст;
ИначеЕсли КодСимвола >= ДиапазонЧислоНачало И КодСимвола <= ДиапазонЧислоКонец Тогда
// обработка числа
ИначеЕсли КодСимвола = Точка ИЛИ КодСимвола = Дефис ИЛИ КодСимвола = Плюс Тогда
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если я правильно понимаю семвер то дефис, становится разделителем единожды после патч версии, все последующие дефисы до знака + должны трактоваться как часть описания пердрелизной версии, а все дефисы после знака + должны трактоваться как часть метаданных сборки.
Или предлагаешь забить пока не стрельнет?

image

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Так и есть, но мог тестами не покрыть. Добавлю тесты. Дефисы приклеиваются к альфанумерикам в другом месте. Этот считай не "парсер", а "лексер". Можно даже его переименовать.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
4 participants