-
Notifications
You must be signed in to change notification settings - Fork 52
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
415 / Доработка получения типов из расширения #435
Conversation
WalkthroughВ данном пулл-реквесте внесены изменения в несколько модулей, включая добавление новых функций для работы с расширениями и метаданными. В модуле Changes
Assessment against linked issues
Possibly related PRs
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SonarQube Quality Gate failed!
0 Bugs
0 Vulnerabilities
1 Code Smells
No data Coverage
0.00% Duplication
// До 8.3.11 не было возможности добавлять свои ссылочные объекты | ||
// С версии 8.3.20.1549 AnyRef включает в себя типы из расширений | ||
Результат = AnyRef(); | ||
// ИначеЕсли ЮТОкружение.ВерсияПлатформыБольшеИлиРавна("8.3.13") Тогда |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🔗Программные модули не должны иметь закомментированных фрагментов кода
standard
badpractice
parameters
Why is this an issue?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Outside diff range and nitpick comments (7)
exts/yaxunit/src/CommonModules/ЮТОкружение/Module.bsl (2)
42-53
: Функция корректно реализована, но требуется валидация параметраРеализация функции логически верна, но рекомендуется добавить проверку входного параметра на корректность.
Предлагаю добавить проверку параметра:
Функция ВерсияПлатформыБольшеИлиРавна(ВерсияДляПроверки) Экспорт + Если Не ЗначениеЗаполнено(ВерсияДляПроверки) Тогда + ВызватьИсключение НСтр("ru='Параметр ВерсияДляПроверки должен быть заполнен'"); + КонецЕсли; Возврат ЮТСтроки.СравнитьВерсии(ЮТСлужебныйПовторногоИспользования.ВерсияПлатформы(), ВерсияДляПроверки) >= 0; КонецФункции
55-66
: Функция корректно реализована, но требуется валидация параметраРеализация функции логически верна, но рекомендуется добавить проверку входного параметра на корректность.
Предлагаю добавить проверку параметра:
Функция ВерсияПлатформыМеньше(ВерсияДляПроверки) Экспорт + Если Не ЗначениеЗаполнено(ВерсияДляПроверки) Тогда + ВызватьИсключение НСтр("ru='Параметр ВерсияДляПроверки должен быть заполнен'"); + КонецЕсли; Возврат ЮТСтроки.СравнитьВерсии(ЮТСлужебныйПовторногоИспользования.ВерсияПлатформы(), ВерсияДляПроверки) < 0; КонецФункцииexts/yaxunit/src/CommonModules/ЮТТипыДанныхСлужебный/Module.bsl (2)
155-163
: Оптимизация получения типов выполнена корректно!Логика обработки разных версий платформы реализована правильно. Комментарии с метриками производительности очень полезны для понимания причин изменений.
Предлагаю добавить эти метрики производительности в документацию к методу.
Если ЮТОкружение.ВерсияПлатформыМеньше("8.3.11") Или ЮТОкружение.ВерсияПлатформыБольшеИлиРавна("8.3.20.1549") Тогда - // До 8.3.11 не было возможности добавлять свои ссылочные объекты - // С версии 8.3.20.1549 AnyRef включает в себя типы из расширений + // До 8.3.11 не было возможности добавлять свои ссылочные объекты + // С версии 8.3.20.1549 AnyRef включает в себя типы из расширений + // + // Производительность: + // - Текущая реализация: ~0.040 сек + // - Реализация через метаданные: ~4.485 сек + // (тесты на 100 итераций) Результат = AnyRef();
299-308
: Добавьте документацию к функции AnyRefФункция реализована корректно, но требуется добавить документацию с описанием:
- Назначения функции
- Возвращаемого значения
- Примера использования
+// Функция возвращает описание типов для любых ссылочных значений в системе +// +// Возвращаемое значение: +// ОписаниеТипов - Описание типов, включающее все ссылочные типы +// +// Пример: +// ОписаниеВсехСсылок = ЮТТипыДанныхСлужебный.AnyRef(); +// Функция AnyRef() Экспортexts/yaxunit/src/CommonModules/ЮТМетаданныеСлужебныйВызовСервера/Module.bsl (3)
57-94
: Рекомендуется добавить обработку ошибокФункция содержит сложную логику работы с метаданными расширений. Рекомендуется:
- Добавить обработку возможных ошибок при вычислении метаданных расширения
- Добавить проверку на пустой массив типов перед созданием описания типов
Функция СсылочныеТипыРасширений() Экспорт МассивТипов = Новый Массив; СсылочныеКоллекции = СсылочныеКоллекции(); СобственныйОбъект = Метаданные.СвойстваОбъектов.ПринадлежностьОбъекта.Собственный; Для Каждого Расширение Из РасширенияСеанса() Цикл Если НЕ Расширение.ИзменяетСтруктуруДанных() Тогда Продолжить; КонецЕсли; УстановитьБезопасныйРежим(Истина); + Попытка МетаданныеРасширения = Вычислить("Новый ОбъектМетаданныхКонфигурация(Расширение.ПолучитьДанные())"); + Исключение + ЗаписьЖурналаРегистрации("ЮТМетаданные.СсылочныеТипыРасширений", + УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Продолжить; + КонецПопытки; Для Каждого ИмяКоллекции Из СсылочныеКоллекции Цикл Коллекция = МетаданныеРасширения[ИмяКоллекции]; ИмяЭлемента = ЮТМетаданныеСлужебныйПовтИсп.ТипыМетаданных()[ИмяКоллекции].Имя; Для Каждого ОбъектМетаданных Из Коллекция Цикл Если ОбъектМетаданных.ПринадлежностьОбъекта = СобственныйОбъект Тогда МассивТипов.Добавить(СтрШаблон("%1Ссылка.%2", ИмяЭлемента, ОбъектМетаданных.Имя)); КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; + Если МассивТипов.Количество() = 0 Тогда + Возврат Новый Массив; + КонецЕсли; + ОписаниеТипов = Новый ОписаниеТипов(МассивТипов); Возврат ОписаниеТипов.Типы(); КонецФункции
312-333
: Оптимизация производительности при работе с большими массивамиДля улучшения производительности при работе с большими массивами метаданных рекомендуется использовать StringBuilder вместо СтрСоединить.
Функция ОписаниеТиповЛюбаяСсылкаПоМетаданным() Экспорт МассивТипов = Новый Массив; СсылочныеКоллекции = СсылочныеКоллекции(); Для Каждого ИмяКоллекции Из СсылочныеКоллекции Цикл Коллекция = Метаданные[ИмяКоллекции]; ИмяЭлемента = ЮТМетаданныеСлужебныйПовтИсп.ТипыМетаданных()[ИмяКоллекции].Имя; Для Каждого ОбъектМетаданных Из Коллекция Цикл МассивТипов.Добавить(СтрШаблон("%1Ссылка.%2", ИмяЭлемента, ОбъектМетаданных.Имя)); КонецЦикла; КонецЦикла; - Возврат Новый ОписаниеТипов(СтрСоединить(МассивТипов, ",")); + СтрокаТипов = Новый СписокЗначений; + Для Каждого Тип Из МассивТипов Цикл + СтрокаТипов.Добавить(Тип); + КонецЦикла; + Возврат Новый ОписаниеТипов(СтрокаТипов.ВыгрузитьЗначения()); КонецФункции
498-509
: Рекомендуется кэширование результатаФункция возвращает статический список коллекций. Рекомендуется перенести её в модуль повторного использования (ЮТМетаданныеСлужебныйПовтИсп) для оптимизации производительности.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (5)
exts/yaxunit/src/CommonModules/ЮТМетаданныеСлужебныйВызовСервера/Module.bsl
(4 hunks)exts/yaxunit/src/CommonModules/ЮТМетодыСлужебныйВызовСервера/Module.bsl
(0 hunks)exts/yaxunit/src/CommonModules/ЮТОкружение/Module.bsl
(1 hunks)exts/yaxunit/src/CommonModules/ЮТТипыДанныхСлужебный/Module.bsl
(2 hunks)tests/src/CommonModules/ОМ_ЮТТипыДанныхСлужебный/Module.bsl
(1 hunks)
💤 Files with no reviewable changes (1)
- exts/yaxunit/src/CommonModules/ЮТМетодыСлужебныйВызовСервера/Module.bsl
✅ Files skipped from review due to trivial changes (1)
- tests/src/CommonModules/ОМ_ЮТТипыДанныхСлужебный/Module.bsl
🔇 Additional comments (2)
exts/yaxunit/src/CommonModules/ЮТОкружение/Module.bsl (1)
42-66
: Проверить использование новых функций в тестах
Для обеспечения надежности кода рекомендуется добавить модульные тесты для новых функций сравнения версий.
exts/yaxunit/src/CommonModules/ЮТМетаданныеСлужебныйВызовСервера/Module.bsl (1)
49-55
: LGTM: Корректная реализация получения расширений сеанса
Функция правильно использует привилегированный режим и корректно получает активные расширения сеанса.
Описание изменений
Close #415
Summary by CodeRabbit
Новые функции
Устранение ошибок
Документация
Тесты