Корутины, запущенные в kotlinx.coroutines.GlobalScope нужно контролировать вне скоупа класса, в котором они созданы. Контролировать глобальные корутины неудобно, а отсутствие контроля может привести к излишнему использованию ресурсов и утечкам памяти.
Подробнее: https://elizarov.medium.com/the-reason-to-avoid-globalscope-835337445abc
- Реализуйте detekt правило, которое найдет запуск корутин через
launchилиasyncвGlobalScope. - Напишите тесты на ваше правило.
Частая ошибка при использовании корутин — запускать top level корутину внутри suspend функции, что приводит к нарушению structured concurrency.
Подробнее: https://elizarov.medium.com/structured-concurrency-722d765aa952
- Реализуйте detekt правило, используя type resolution, которое найдет запуск корутины через
launchилиasyncнад любыми наследникамиkotlinx.coroutines.CoroutineScopeвнутри suspend функции. - Правило не должно репортить об использовании scope-билдеров внутри suspend функции (
coroutineScope,supervisorScope) - Напишите тесты на ваше правило.