From f1c76c196fcb8a1cd12edc240e4ef4019acac162 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 30 Oct 2025 13:04:26 +0100 Subject: [PATCH 1/8] Use KtLint version 1.7.1 --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index b7662aeb56..00cac673af 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -58,7 +58,7 @@ allprojects { configure { // See https://github.com/pinterest/ktlint/releases/ // TODO Regularly check for new version here ^ - version.set("1.1.1") + version.set("1.7.1") android.set(true) ignoreFailures.set(false) enableExperimentalRules.set(true) From e22ecb68c3c077bb30b923c5cb41caaba6b02da6 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 30 Oct 2025 13:27:19 +0100 Subject: [PATCH 2/8] Fix "Backing property is only allowed when a matching property or function exists" --- .../android/libraries/architecture/AsyncDataKtTest.kt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/libraries/architecture/src/test/kotlin/io/element/android/libraries/architecture/AsyncDataKtTest.kt b/libraries/architecture/src/test/kotlin/io/element/android/libraries/architecture/AsyncDataKtTest.kt index 1551360da2..aa02561131 100644 --- a/libraries/architecture/src/test/kotlin/io/element/android/libraries/architecture/AsyncDataKtTest.kt +++ b/libraries/architecture/src/test/kotlin/io/element/android/libraries/architecture/AsyncDataKtTest.kt @@ -75,22 +75,21 @@ class AsyncDataKtTest { private class TestableMutableState( value: T ) : MutableState { - @Suppress("ktlint:standard:property-naming") - private val _deque = ArrayDeque(listOf(value)) + private val deque = ArrayDeque(listOf(value)) override var value: T - get() = _deque.last() + get() = deque.last() set(value) { - _deque.addLast(value) + deque.addLast(value) } /** * Returns the states that were set in the order they were set. */ - fun popFirst(): T = _deque.removeFirst() + fun popFirst(): T = deque.removeFirst() fun assertNoMoreValues() { - assertThat(_deque).isEmpty() + assertThat(deque).isEmpty() } override operator fun component1(): T = value From 8bfb86683d8073f0eed7a27e5a95ffeefb326f16 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 30 Oct 2025 13:29:33 +0100 Subject: [PATCH 3/8] Fix "Arrow is redundant when parameter list is empty" And other issues that ktlint now reports --- .../features/home/impl/HomeFlowNode.kt | 6 ++-- .../invite/impl/DefaultDeclineInviteTest.kt | 4 +-- .../reportroom/impl/DefaultReportRoomTest.kt | 4 +-- .../roomdetails/impl/RoomDetailsFlowNode.kt | 8 +++-- .../impl/root/RoomDirectoryPresenterTest.kt | 4 +-- .../components/media/WaveFormSamples.kt | 1 + .../libraries/maplibre/compose/MapLibreMap.kt | 5 +--- .../matrix/impl/timeline/RustTimeline.kt | 6 ++-- .../fake/FakeNotificationCreator.kt | 2 +- .../impl/DefaultVoiceMessagePlayerTest.kt | 30 ++++++++++++------- 10 files changed, 41 insertions(+), 29 deletions(-) diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeFlowNode.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeFlowNode.kt index 94f243b634..cb205960fd 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeFlowNode.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeFlowNode.kt @@ -87,8 +87,10 @@ class HomeFlowNode( analyticsService.screen(MobileScreen(screenName = MobileScreen.ScreenName.Home)) } ) - whenChildAttached { commonLifecycle: Lifecycle, - changeRoomMemberRolesNode: ChangeRoomMemberRolesEntryPoint.NodeProxy -> + whenChildAttached { + commonLifecycle: Lifecycle, + changeRoomMemberRolesNode: ChangeRoomMemberRolesEntryPoint.NodeProxy, + -> commonLifecycle.coroutineScope.launch { changeRoomMemberRolesNode.waitForRoleChanged() withContext(NonCancellable) { diff --git a/features/invite/impl/src/test/kotlin/io/element/android/features/invite/impl/DefaultDeclineInviteTest.kt b/features/invite/impl/src/test/kotlin/io/element/android/features/invite/impl/DefaultDeclineInviteTest.kt index cb07bd5191..d740d6065c 100644 --- a/features/invite/impl/src/test/kotlin/io/element/android/features/invite/impl/DefaultDeclineInviteTest.kt +++ b/features/invite/impl/src/test/kotlin/io/element/android/features/invite/impl/DefaultDeclineInviteTest.kt @@ -34,14 +34,14 @@ class DefaultDeclineInviteTest { private val notificationCleaner = FakeNotificationCleaner(clearMembershipNotificationForRoomLambda = clearMembershipNotificationForRoomLambda) - private val successLeaveRoomLambda = lambdaRecorder> { -> Result.success(Unit) } + private val successLeaveRoomLambda = lambdaRecorder> { Result.success(Unit) } private val successIgnoreUserLambda = lambdaRecorder> { _ -> Result.success(Unit) } private val successReportRoomLambda = lambdaRecorder> { _ -> Result.success(Unit) } private val failureLeaveRoomLambda = - lambdaRecorder> { -> Result.failure(Exception("Leave room error")) } + lambdaRecorder> { Result.failure(Exception("Leave room error")) } private val failureIgnoreUserLambda = lambdaRecorder> { _ -> Result.failure(Exception("Ignore user error")) } private val failureReportRoomLambda = diff --git a/features/reportroom/impl/src/test/kotlin/io/element/android/features/reportroom/impl/DefaultReportRoomTest.kt b/features/reportroom/impl/src/test/kotlin/io/element/android/features/reportroom/impl/DefaultReportRoomTest.kt index fc410ab08f..c196d7a29e 100644 --- a/features/reportroom/impl/src/test/kotlin/io/element/android/features/reportroom/impl/DefaultReportRoomTest.kt +++ b/features/reportroom/impl/src/test/kotlin/io/element/android/features/reportroom/impl/DefaultReportRoomTest.kt @@ -19,12 +19,12 @@ import org.junit.Test class DefaultReportRoomTest { private val roomId = A_ROOM_ID - private val successLeaveRoomLambda = lambdaRecorder> { -> Result.success(Unit) } + private val successLeaveRoomLambda = lambdaRecorder> { Result.success(Unit) } private val successReportRoomLambda = lambdaRecorder> { _ -> Result.success(Unit) } private val failureLeaveRoomLambda = - lambdaRecorder> { -> Result.failure(Exception("Leave room error")) } + lambdaRecorder> { Result.failure(Exception("Leave room error")) } private val failureReportRoomLambda = lambdaRecorder> { _ -> Result.failure(Exception("Report room error")) } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt index a72f0394b4..b0540626b9 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt @@ -148,9 +148,11 @@ class RoomDetailsFlowNode( override fun onBuilt() { super.onBuilt() - whenChildrenAttached { commonLifecycle: Lifecycle, - roomDetailsNode: RoomDetailsNode, - changeRoomMemberRolesNode: ChangeRoomMemberRolesEntryPoint.NodeProxy -> + whenChildrenAttached { + commonLifecycle: Lifecycle, + roomDetailsNode: RoomDetailsNode, + changeRoomMemberRolesNode: ChangeRoomMemberRolesEntryPoint.NodeProxy, + -> commonLifecycle.coroutineScope.launch { changeRoomMemberRolesNode.waitForRoleChanged() withContext(NonCancellable) { diff --git a/features/roomdirectory/impl/src/test/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryPresenterTest.kt b/features/roomdirectory/impl/src/test/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryPresenterTest.kt index 1e450297ae..eedfe03b02 100644 --- a/features/roomdirectory/impl/src/test/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryPresenterTest.kt +++ b/features/roomdirectory/impl/src/test/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryPresenterTest.kt @@ -105,9 +105,7 @@ class RoomDirectoryPresenterTest { @Test fun `present - emit load more event`() = runTest { - val loadMoreLambda = lambdaRecorder { -> - Result.success(Unit) - } + val loadMoreLambda = lambdaRecorder> { Result.success(Unit) } val roomDirectoryList = FakeRoomDirectoryList(loadMoreLambda = loadMoreLambda) val roomDirectoryService = FakeRoomDirectoryService { roomDirectoryList } val presenter = createRoomDirectoryPresenter(roomDirectoryService = roomDirectoryService) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/WaveFormSamples.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/WaveFormSamples.kt index 6fbb217392..18efa2d3f3 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/WaveFormSamples.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/WaveFormSamples.kt @@ -14,6 +14,7 @@ import kotlinx.collections.immutable.toPersistentList object WaveFormSamples { val allRangeWaveForm = List(100) { it.toFloat() / 100 }.toImmutableList() + @Suppress("ktlint:standard:argument-list-wrapping") val realisticWaveForm = persistentListOf( 0.000f, 0.000f, 0.000f, 0.003f, 0.354f, 0.353f, 0.365f, 0.790f, 0.787f, 0.167f, diff --git a/libraries/maplibre-compose/src/main/kotlin/io/element/android/libraries/maplibre/compose/MapLibreMap.kt b/libraries/maplibre-compose/src/main/kotlin/io/element/android/libraries/maplibre/compose/MapLibreMap.kt index f1ef0f0459..478c7db499 100644 --- a/libraries/maplibre-compose/src/main/kotlin/io/element/android/libraries/maplibre/compose/MapLibreMap.kt +++ b/libraries/maplibre-compose/src/main/kotlin/io/element/android/libraries/maplibre/compose/MapLibreMap.kt @@ -71,10 +71,7 @@ public fun MapLibreMap( uiSettings: MapUiSettings = DefaultMapUiSettings, symbolManagerSettings: MapSymbolManagerSettings = DefaultMapSymbolManagerSettings, locationSettings: MapLocationSettings = DefaultMapLocationSettings, - content: ( - @Composable @MapLibreMapComposable - () -> Unit - )? = null, + content: (@Composable @MapLibreMapComposable () -> Unit)? = null, ) { // When in preview, early return a Box with the received modifier preserving layout if (LocalInspectionMode.current) { diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt index a488341060..ecf37dd9bf 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt @@ -207,10 +207,12 @@ class RustTimeline( backwardPaginationStatus, forwardPaginationStatus, joinedRoom.roomInfoFlow.map { it.creators to it.isDm }.distinctUntilChanged(), - ) { timelineItems, + ) { + timelineItems, backwardPaginationStatus, forwardPaginationStatus, - (roomCreators, isDm) -> + (roomCreators, isDm), + -> withContext(dispatcher) { timelineItems .let { items -> diff --git a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/fake/FakeNotificationCreator.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/fake/FakeNotificationCreator.kt index 491b0bac33..1cc4468b15 100644 --- a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/fake/FakeNotificationCreator.kt +++ b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/fake/FakeNotificationCreator.kt @@ -34,7 +34,7 @@ class FakeNotificationCreator( var createFallbackNotificationResult: LambdaOneParamRecorder = lambdaRecorder { _ -> A_NOTIFICATION }, var createSummaryListNotificationResult: LambdaFourParamsRecorder = lambdaRecorder { _, _, _, _ -> A_NOTIFICATION }, - var createDiagnosticNotificationResult: LambdaNoParamRecorder = lambdaRecorder { -> A_NOTIFICATION }, + var createDiagnosticNotificationResult: LambdaNoParamRecorder = lambdaRecorder { A_NOTIFICATION }, ) : NotificationCreator { override suspend fun createMessagesListNotification( roomInfo: RoomEventGroupInfo, diff --git a/libraries/voiceplayer/impl/src/test/kotlin/io/element/android/libraries/voiceplayer/impl/DefaultVoiceMessagePlayerTest.kt b/libraries/voiceplayer/impl/src/test/kotlin/io/element/android/libraries/voiceplayer/impl/DefaultVoiceMessagePlayerTest.kt index cd8a3f6c6b..a3e2938734 100644 --- a/libraries/voiceplayer/impl/src/test/kotlin/io/element/android/libraries/voiceplayer/impl/DefaultVoiceMessagePlayerTest.kt +++ b/libraries/voiceplayer/impl/src/test/kotlin/io/element/android/libraries/voiceplayer/impl/DefaultVoiceMessagePlayerTest.kt @@ -114,7 +114,8 @@ class DefaultVoiceMessagePlayerTest { assertThat(player1.prepare().isSuccess).isTrue() matchReadyState(1_000L) player1.play() - awaitItem().let { // it plays until the end. + awaitItem().let { + // it plays until the end. assertThat(it.isReady).isFalse() assertThat(it.isPlaying).isFalse() assertThat(it.isEnded).isTrue() @@ -127,14 +128,16 @@ class DefaultVoiceMessagePlayerTest { player2.state.test { matchInitialState() assertThat(player2.prepare().isSuccess).isTrue() - awaitItem().let { // Additional spurious state due to MediaPlayer owner change. + awaitItem().let { + // Additional spurious state due to MediaPlayer owner change. assertThat(it.isReady).isFalse() assertThat(it.isPlaying).isFalse() assertThat(it.isEnded).isTrue() assertThat(it.currentPosition).isEqualTo(1000) assertThat(it.duration).isEqualTo(1000) } - awaitItem().let { // Additional spurious state due to MediaPlayer owner change. + awaitItem().let { + // Additional spurious state due to MediaPlayer owner change. assertThat(it.isReady).isFalse() assertThat(it.isPlaying).isFalse() assertThat(it.isEnded).isFalse() @@ -143,7 +146,8 @@ class DefaultVoiceMessagePlayerTest { } matchReadyState(1_000L) player2.play() - awaitItem().let { // it plays until the end. + awaitItem().let { + // it plays until the end. assertThat(it.isReady).isFalse() assertThat(it.isPlaying).isFalse() assertThat(it.isEnded).isTrue() @@ -154,7 +158,8 @@ class DefaultVoiceMessagePlayerTest { // Play player1 again. player1.state.test { - awaitItem().let { // Last previous state/ + awaitItem().let { + // Last previous state/ assertThat(it.isReady).isFalse() assertThat(it.isPlaying).isFalse() assertThat(it.isEnded).isTrue() @@ -162,7 +167,8 @@ class DefaultVoiceMessagePlayerTest { assertThat(it.duration).isEqualTo(1000) } assertThat(player1.prepare().isSuccess).isTrue() - awaitItem().let { // Additional spurious state due to MediaPlayer owner change. + awaitItem().let { + // Additional spurious state due to MediaPlayer owner change. assertThat(it.isReady).isFalse() assertThat(it.isPlaying).isFalse() assertThat(it.isEnded).isFalse() @@ -171,7 +177,8 @@ class DefaultVoiceMessagePlayerTest { } matchReadyState(1_000L) player1.play() - awaitItem().let { // it played again until the end. + awaitItem().let { + // it played again until the end. assertThat(it.isReady).isFalse() assertThat(it.isPlaying).isFalse() assertThat(it.isEnded).isTrue() @@ -189,7 +196,8 @@ class DefaultVoiceMessagePlayerTest { assertThat(player.prepare().isSuccess).isTrue() matchReadyState() player.play() - skipItems(1) // skip play state + // skip play state + skipItems(1) player.pause() awaitItem().let { assertThat(it.isPlaying).isFalse() @@ -206,9 +214,11 @@ class DefaultVoiceMessagePlayerTest { assertThat(player.prepare().isSuccess).isTrue() matchReadyState() player.play() - skipItems(1) // skip play state + // skip play state + skipItems(1) player.pause() - skipItems(1) // skip pause state + // skip pause state + skipItems(1) player.play() awaitItem().let { assertThat(it.isPlaying).isTrue() From 16c27926afce3bd0e4836e1f169678d0c2aece02 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 30 Oct 2025 13:38:54 +0100 Subject: [PATCH 4/8] Ignore some ktlint Rules (too many issues(?) to fix and not urgent) --- .editorconfig | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.editorconfig b/.editorconfig index 2ab3cbeae7..9eaea2e023 100644 --- a/.editorconfig +++ b/.editorconfig @@ -26,7 +26,11 @@ ktlint_standard_annotation = disabled ktlint_standard_parameter-list-wrapping = disabled ktlint_standard_indent = disabled ktlint_standard_blank-line-before-declaration = disabled -ktlint_function_naming_ignore_when_annotated_with=Composable +ktlint_function_naming_ignore_when_annotated_with = Composable +# Added when upgrading to 1.7.1 +ktlint_standard_function-expression-body = disabled +ktlint_standard_chain-method-continuation = disabled +ktlint_standard_class-signature = disabled [*.java] ij_java_align_consecutive_assignments = false From fb9b373d98d15fccdd06c5e5289a6f85fe9b76e8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 30 Oct 2025 14:25:56 +0100 Subject: [PATCH 5/8] Let Renovate upgrade KtLint version. And move detekt version to quality section. --- build.gradle.kts | 8 +++++--- gradle/libs.versions.toml | 8 +++++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 00cac673af..128852fba6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,3 +1,5 @@ +import org.gradle.accessors.dm.LibrariesForLibs + /* * Copyright 2022-2024 New Vector Ltd. * @@ -27,6 +29,8 @@ tasks.register("clean").configure { delete(rootProject.layout.buildDirectory) } +private val ktLintVersion = the().versions.ktlint.get() + allprojects { // Detekt apply { @@ -56,9 +60,7 @@ allprojects { // See https://github.com/JLLeitschuh/ktlint-gradle#configuration configure { - // See https://github.com/pinterest/ktlint/releases/ - // TODO Regularly check for new version here ^ - version.set("1.7.1") + version = ktLintVersion android.set(true) ignoreFailures.set(false) enableExperimentalRules.set(true) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 671a98c0a8..43b5890cd1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -40,7 +40,6 @@ datetime = "0.7.1" serialization_json = "1.9.0" #other -detekt = "1.23.8" coil = "3.3.0" showkase = "1.0.5" appyx = "1.7.1" @@ -59,6 +58,9 @@ metro = "0.7.2" autoservice = "1.1.1" # quality +detekt = "1.23.8" +# See https://github.com/pinterest/ktlint/releases/ +ktlint = "1.7.1" androidx-test-ext-junit = "1.3.0" kover = "0.9.1" @@ -148,6 +150,10 @@ network_retrofit_bom = "com.squareup.retrofit2:retrofit-bom:3.0.0" network_retrofit = { module = "com.squareup.retrofit2:retrofit" } network_retrofit_converter_serialization = { module = "com.squareup.retrofit2:converter-kotlinx-serialization" } +# Quality +# Reference ktlint-cli so that Renovate can check if a new version is available. +ktlint-cli = { module = "com.pinterest.ktlint:ktlint-cli", version.ref = "ktlint" } + # Test test_core = { module = "androidx.test:core", version.ref = "test_core" } test_corektx = { module = "androidx.test:core-ktx", version.ref = "test_core" } From 214a85561678ae5a1f037ecd246d5c2b2063a749 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 30 Oct 2025 14:31:00 +0100 Subject: [PATCH 6/8] Remove exclusion, ktlint is now able to handle Kotlin context parameter. --- libraries/troubleshoot/test/build.gradle.kts | 10 ---------- .../android/libraries/troubleshoot/test/Utils.kt | 2 -- 2 files changed, 12 deletions(-) diff --git a/libraries/troubleshoot/test/build.gradle.kts b/libraries/troubleshoot/test/build.gradle.kts index 830eb5d6b0..8321ea5b4f 100644 --- a/libraries/troubleshoot/test/build.gradle.kts +++ b/libraries/troubleshoot/test/build.gradle.kts @@ -19,13 +19,3 @@ dependencies { implementation(libs.test.core) implementation(libs.test.turbine) } - -ktlint { - filter { - exclude { element -> - val path = element.file.path - // Exclude this file, that ktlint cannot parse. - path.contains("libraries/troubleshoot/test/src/main/kotlin/io/element/android/libraries/troubleshoot/test/Utils.kt") - } - } -} diff --git a/libraries/troubleshoot/test/src/main/kotlin/io/element/android/libraries/troubleshoot/test/Utils.kt b/libraries/troubleshoot/test/src/main/kotlin/io/element/android/libraries/troubleshoot/test/Utils.kt index 77034da584..2a8ce30f47 100644 --- a/libraries/troubleshoot/test/src/main/kotlin/io/element/android/libraries/troubleshoot/test/Utils.kt +++ b/libraries/troubleshoot/test/src/main/kotlin/io/element/android/libraries/troubleshoot/test/Utils.kt @@ -5,8 +5,6 @@ * Please see LICENSE files in the repository root for full details. */ -@file:Suppress("UnusedImports") - package io.element.android.libraries.troubleshoot.test import app.cash.turbine.TurbineTestContext From e17d731ff590f5f038ac43c7d9daf1ce2187a923 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 30 Oct 2025 14:34:22 +0100 Subject: [PATCH 7/8] Kotlin way --- build.gradle.kts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 128852fba6..a3fa94e67b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -61,11 +61,11 @@ allprojects { // See https://github.com/JLLeitschuh/ktlint-gradle#configuration configure { version = ktLintVersion - android.set(true) - ignoreFailures.set(false) - enableExperimentalRules.set(true) + android = true + ignoreFailures = false + enableExperimentalRules = true // display the corresponding rule - verbose.set(true) + verbose = true reporters { reporter(org.jlleitschuh.gradle.ktlint.reporter.ReporterType.PLAIN) // To have XML report for Danger From 0f939f5eff2835c1edd2583768093774dc8db2bc Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 30 Oct 2025 15:01:14 +0100 Subject: [PATCH 8/8] Sadly detekt still needs this. It will be fixed in detekt 2.0.0 --- .../io/element/android/libraries/troubleshoot/test/Utils.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/troubleshoot/test/src/main/kotlin/io/element/android/libraries/troubleshoot/test/Utils.kt b/libraries/troubleshoot/test/src/main/kotlin/io/element/android/libraries/troubleshoot/test/Utils.kt index 2a8ce30f47..77034da584 100644 --- a/libraries/troubleshoot/test/src/main/kotlin/io/element/android/libraries/troubleshoot/test/Utils.kt +++ b/libraries/troubleshoot/test/src/main/kotlin/io/element/android/libraries/troubleshoot/test/Utils.kt @@ -5,6 +5,8 @@ * Please see LICENSE files in the repository root for full details. */ +@file:Suppress("UnusedImports") + package io.element.android.libraries.troubleshoot.test import app.cash.turbine.TurbineTestContext