Вышел KtLint 1.7.0 с поддержкой Kotlin 2.2.0
Что нового в свежей версии инструмента для анализа качества Kotlin кода
👉 Добавили поддержку Kotlin Context Parameters
👉 Отключили по умолчанию правило no-unused-import
🛠 Обновление зависимостей, небольшие улучшения., исправление багов
#kotlin
Что нового в свежей версии инструмента для анализа качества Kotlin кода
👉 Добавили поддержку Kotlin Context Parameters
👉 Отключили по умолчанию правило no-unused-import
🛠 Обновление зависимостей, небольшие улучшения., исправление багов
#kotlin
🔥17
Что нового:
👉 Сохранение состояния агента на диске
👉 Поддержка векторного хранилища для документов
👉 Поддержка Native OpenTelemetry
👉 Интеграция Spring Boot
👉 Параллельное выполнение задач
👉 Модерация и observability из коробки
👉 Множество других фичей
#kotlin #ai
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24👍5🤔1
#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥4
Подать заявку можно тут до 31 июля
Проекты получат гранты, если:
👉 Решают важную проблему в экосистеме Kotlin, особенно в KMP
👉 Быстро реагируют на баги, уязвимости и обновления Kotlin/библиотек
👉 Следуют лучшим практикам разработки библиотек
👉 Имеют понятный roadmap развития
#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍4
Автор Kombinator рассказал о том как он делал архитектуру и реализацию библиотеки. Если кому интересно узнать про реализацию кодогенерации на KSP - читайте в статье(EN,6м).
🔗 Альтернативная ссылка
#kotlin
🔗 Альтернативная ссылка
#kotlin
👍9
Библиотека работает на основе генерации кода через KSP. Может быть полезна для тестов, чтобы проверять разные входные данные.
// Уровень класса @Kombine: Задает значения по умолчанию для свойств
// без аннотаций и без дефолтных значений property
@Kombine(
allPossibleIntParams = [100],
allPossibleStringParams = ["system"],
)
data class ScreenConfig(
// Аннотация на уровне свойства переопределяет уровень класса для 'theme'
@Kombine(allPossibleStringParams = ["light", "dark", "auto"])
val theme: String,
// Есть значение по умолчанию, Kombinator будет использовать ТОЛЬКО "portrait"
val orientation: String = "portrait",
// Нет аннотации @Kombine и значения по умолчанию.
// Будет использовать значение уровня класса: [100]
val padding: Int,
// Аннотация на уровне свойства переопределяет уровень класса для 'fontSize'
@Kombine(allPossibleIntParams = [12, 16, 20])
val fontSize: Int,
// Нет аннотации @Kombine и значения по умолчанию.
// Будет использовать значение уровня класса: ["system"]
val fontFamily: String,
)
#kotlin #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30🏆2
Что нового:
👉 Добавили новые API для задания ограничения потребления памяти, когда приложение в фоне
👉 SvgDecoder может работать со сторонними парсерами SVG
👉 Много минорных улучшений API
👉 Обновлени зависимостей
#kotlin #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍8
Fuzz testing - это подход для автоматичекской генерации тестов со случайными или невалидными входными данными, чтобы проверить неожиданные ошибки и сценарии. Теперь есть официальное решение от JetBrains kotlinx.fuzz
@KFuzzTest
fun testDuration(f: KFuzzer) {
val isoString = f.asciiString(10)
val duration = Duration.parseIsoStringOrNull(isoString)
println("$isoString -> $duration")
}
#kotlin #тестирование
Please open Telegram to view this post
VIEW IN TELEGRAM
❤25👍11
Media is too big
VIEW IN TELEGRAM
Подробный рассказ как в IDEA улучшали интеграцию между IDE и библиотекой Kotlin Coroutines для реализации дебага корутин как синхронного кода
#kotlin #coroutines #idea #kotlinconf25
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔9❤5👍3
🔗 Альтернативная ссылка
#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🤯10❤2🙏1
Kotlin-to-Swift экспорт позволяет удобно использовать скомпилированный для Apple таргетов код из Swift удобным образом. Изменение добавили в Kotlin 2.2.20-Beta2
Ключевые фичи:
👉 Поддержка многомодульности: каждый Kotlin модуль - отдельный Swift модуль
👉 Поддержка пакетов в коде
👉 type alias теперь доступны из Swift
👉 Улучшения в nullability с примитивными типами
👉 Вызов перегруженных функций в Kotlin из Swift кода
👉 Можно изменить имя модуля
Фича всё ещё в экспериментальном режиме и для её включения надо выполнить ряд действий (подобно как раньше в XCode проект подключался KMP модуль)
#kotlin #swift #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🔥11🤔1
Теперь общие зависимости (common) можно объявить в dependencies блоке в kotlin {}
kotlin {
@OptIn(ExperimentalKotlinGradlePluginApi::class)
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2")
}
}
#kotlin #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15🔥7🎉3👍1
В Kotlin Multiplatform проекте теперь можно шарить код между JS и wasmJs таргетами через общий source set - WEB.
Изменение доступно в Kotlin 2.2.20-Beta2
#kotlin #kmp
Изменение доступно в Kotlin 2.2.20-Beta2
#kotlin #kmp
🔥13❤7👍2
В новой бете Kotlin 2.2.20 стабилизирована кроссплатформенная компиляция .klib-артефактов. Теперь публиковать Kotlin-библиотеки можно с любой хост-машины, что значительно упрощает процесс, особенно для Apple-таргетов.
Mac всё ещё потребуется, если проект использует cinterop, CocoaPods или нужно собрать финальные бинарники для Apple. Подробности — в документации.
Если в
gradle.properties
добавляли kotlin.native.enableKlibsCrossCompilation=true
, то теперь можно убрать#kotlin #kmp #klib #native
Please open Telegram to view this post
VIEW IN TELEGRAM
🏆22👍6❤3🤔1
В Kotlin 2.2.20-Beta2 можно попробовать новое поведение при использовании
return
- обязательное объявление возвращаемого типа функции. Новое поведение будет по умолчанию работать в Kotlin 2.3.0// ✅ Возвращаемый типы функции указан. Можно использовать return
fun getDisplayNameOrDefault(userId: String?): String =
getDisplayName(userId ?: return "default")
// ❌ Не компилируется. Используется return без явного указания возвращаемого типа функции
fun getDisplayNameOrDefault(userId: String?) =
getDisplayName(userId ?: return "default")
Готовимся к миграции после обновления языка. Всё во славу большей стабильности нашего кода
#kotlin #kotlin_2_3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72🤔28🤯9🏆4
👉 Effective Debugging Kotlin Native in Xcode
👉 KMP with non-Koltin languages
👉 Metaprogramming with Kotlin Symbol Processing
👉 Playing with experimental Kotlin features
👉 Ready layer one intro to the Model Context Protocol
👉 Coroutines party tricks
👉 Beyond Detekt: Building a Kotlin Compiler Plugin for Compose Insights
👉 Kotlin Coroutine Mechanisms: A Surprisingly Deep Rabbithole
#kotlin #kmp #droidcon
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥5🙏2🤔1
Про инструменты для статического анализа Kotlin-кода я уже писал в отдельном посте. Но когда нужно проверить не стиль форматирования, а именно именование, расположение и иерархию классов, обычных линтеров недостаточно. Тут нужен инструмент, который умеет смотреть на проект целиком и анализировать код между файлами.
Для Kotlin такую задачу отлично решает библиотека Konsist. Проверки в ней выглядят как обычные Unit-тесты (поддерживается несколько тестовых JVM движков).
Например, в одном из проектов я добавил правила:
👉 Все классы, чьи имена заканчиваются на ViewModel, должны наследоваться от ViewModel (к сожалению, заставить использовать именно Jetpack ViewModel не получилось).
👉 Все свойства с типом MutableStateFlow<*> должны быть недоступны за пределами класса.
private var viewModels: List<KoClassDeclaration> = emptyList()
@BeforeTest
fun setup() {
// Собираем все классы, чьи имена оканчиваются на ViewModel
viewModels = Konsist
.scopeFromProject()
.classes()
.withName { name -> name.endsWith("ViewModel") }
}
@Test
fun `Every ViewModel class extends from 'ViewModel'`() {
viewModels.assertTrue { viewModel ->
viewModel.hasParentWithName("ViewModel", indirectParents = true)
}
}
@Test
fun `MutableStateFlow properties in ViewModel are not visible outside`() {
viewModels
.properties()
.filter { property ->
property.hasType { type ->
type.hasNameMatching(Regex("MutableStateFlow<\\w+>"))
}
}
.assertTrue { property ->
property.hasPrivateModifier || property.hasProtectedModifier
}
}
Правила можно делать любой сложности — от проверки нейминга до соответствия архитектуре.
Всё это запускается как обычные JVM-тесты и выполняется достаточно быстро ⚡️
#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍38🔥14❤1