Skip to content

Commit

Permalink
Upgrade ktlint 1.2.1 -> 1.3.1 (#132)
Browse files Browse the repository at this point in the history
  • Loading branch information
dhoepelman authored Sep 9, 2024
1 parent 724fd15 commit 052c772
Show file tree
Hide file tree
Showing 7 changed files with 72 additions and 54 deletions.
8 changes: 6 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ kotlin {
}
}
configure<org.jlleitschuh.gradle.ktlint.KtlintExtension> {
version = "1.2.1"
version = "1.3.1"
}

val javaDocJar =
Expand Down Expand Up @@ -152,7 +152,11 @@ publishing {

signing {
if (onCI) {
val encryptedSigningKey = layout.projectDirectory.file(".github/workflows/publishing/github_actions.key.asc").asFile.readText()
val encryptedSigningKey =
layout.projectDirectory
.file(".github/workflows/publishing/github_actions.key.asc")
.asFile
.readText()
useInMemoryPgpKeys(encryptedSigningKey, System.getenv("PGP_PASSPHRASE"))
} else {
useGpgCmd()
Expand Down
17 changes: 7 additions & 10 deletions src/commonMain/kotlin/io/konform/validation/ValidationResult.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,7 @@ internal data class PropertyValidationError(
override val dataPath: String,
override val message: String,
) : ValidationError {
override fun toString(): String {
return "ValidationError(dataPath=$dataPath, message=$message)"
}
override fun toString(): String = "ValidationError(dataPath=$dataPath, message=$message)"
}

@Deprecated("Replace with directly using List<ValidationError>", ReplaceWith("List<ValidationError>"))
Expand Down Expand Up @@ -47,26 +45,25 @@ public data class Invalid(
) : ValidationResult<Nothing>() {
override fun get(vararg propertyPath: Any): List<String>? = internalErrors[propertyPath.joinToString("", transform = ::toPathSegment)]

private fun toPathSegment(it: Any): String {
return when (it) {
private fun toPathSegment(it: Any): String =
when (it) {
is KProperty1<*, *> -> ".${it.name}"
is Int -> "[$it]"
else -> ".$it"
}
}

override val errors: List<ValidationError> by lazy {
internalErrors.flatMap { (path, errors) ->
errors.map { PropertyValidationError(path, it) }
}
}

override fun toString(): String {
return "Invalid(errors=$errors)"
}
override fun toString(): String = "Invalid(errors=$errors)"
}

public data class Valid<T>(val value: T) : ValidationResult<T>() {
public data class Valid<T>(
val value: T,
) : ValidationResult<T>() {
// This will not be removed as long as ValidationResult has it, but we still deprecate it to warn the user
// that it is nonsensical to do.
@Deprecated("It is not useful to index a valid result, it will always return null", ReplaceWith("null"))
Expand Down
30 changes: 12 additions & 18 deletions src/commonMain/kotlin/io/konform/validation/internal/Validation.kt
Original file line number Diff line number Diff line change
Expand Up @@ -62,34 +62,31 @@ internal class RequiredPropertyValidation<T, R>(
internal class IterableValidation<T>(
private val validation: Validation<T>,
) : Validation<Iterable<T>> {
override fun validate(value: Iterable<T>): ValidationResult<Iterable<T>> {
return value.foldIndexed(Valid(value)) { index, result: ValidationResult<Iterable<T>>, propertyValue ->
override fun validate(value: Iterable<T>): ValidationResult<Iterable<T>> =
value.foldIndexed(Valid(value)) { index, result: ValidationResult<Iterable<T>>, propertyValue ->
val propertyValidation = validation(propertyValue).mapError { "[$index]$it" }.map { value }
result.combineWith(propertyValidation)
}
}
}

internal class ArrayValidation<T>(
private val validation: Validation<T>,
) : Validation<Array<T>> {
override fun validate(value: Array<T>): ValidationResult<Array<T>> {
return value.foldIndexed(Valid(value)) { index, result: ValidationResult<Array<T>>, propertyValue ->
override fun validate(value: Array<T>): ValidationResult<Array<T>> =
value.foldIndexed(Valid(value)) { index, result: ValidationResult<Array<T>>, propertyValue ->
val propertyValidation = validation(propertyValue).mapError { "[$index]$it" }.map { value }
result.combineWith(propertyValidation)
}
}
}

internal class MapValidation<K, V>(
private val validation: Validation<Map.Entry<K, V>>,
) : Validation<Map<K, V>> {
override fun validate(value: Map<K, V>): ValidationResult<Map<K, V>> {
return value.asSequence().fold(Valid(value)) { result: ValidationResult<Map<K, V>>, entry ->
override fun validate(value: Map<K, V>): ValidationResult<Map<K, V>> =
value.asSequence().fold(Valid(value)) { result: ValidationResult<Map<K, V>>, entry ->
val propertyValidation = validation(entry).mapError { ".${entry.key}${it.removePrefix(".value")}" }.map { value }
result.combineWith(propertyValidation)
}
}
}

internal class ValidationNode<T>(
Expand All @@ -102,8 +99,8 @@ internal class ValidationNode<T>(
return localValidationResult.combineWith(subValidationResult)
}

private fun localValidation(value: T): ValidationResult<T> {
return constraints
private fun localValidation(value: T): ValidationResult<T> =
constraints
.filter { !it.test(value) }
.map { constructHint(value, it) }
.let { errors ->
Expand All @@ -113,7 +110,6 @@ internal class ValidationNode<T>(
Invalid(mapOf("" to errors))
}
}
}

private fun constructHint(
value: T,
Expand All @@ -127,16 +123,15 @@ internal class ValidationNode<T>(
private fun applySubValidations(
propertyValue: T,
keyTransform: (String) -> String,
): ValidationResult<T> {
return subValidations.fold(Valid(propertyValue)) { existingValidation: ValidationResult<T>, validation ->
): ValidationResult<T> =
subValidations.fold(Valid(propertyValue)) { existingValidation: ValidationResult<T>, validation ->
val newValidation = validation.validate(propertyValue).mapError(keyTransform)
existingValidation.combineWith(newValidation)
}
}
}

internal fun <R> ValidationResult<R>.mapError(keyTransform: (String) -> String): ValidationResult<R> {
return when (this) {
internal fun <R> ValidationResult<R>.mapError(keyTransform: (String) -> String): ValidationResult<R> =
when (this) {
is Valid -> this
is Invalid ->
Invalid(
Expand All @@ -145,7 +140,6 @@ internal fun <R> ValidationResult<R>.mapError(keyTransform: (String) -> String):
},
)
}
}

internal fun <R> ValidationResult<R>.combineWith(other: ValidationResult<R>): ValidationResult<R> {
return when (this) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,9 +98,7 @@ internal class ValidationBuilderImpl<T> : ValidationBuilder<T>() {
errorMessage: String,
vararg templateValues: String,
test: (T) -> Boolean,
): Constraint<T> {
return Constraint(errorMessage, templateValues.toList(), test).also { constraints.add(it) }
}
): Constraint<T> = Constraint(errorMessage, templateValues.toList(), test).also { constraints.add(it) }

private fun <R> KProperty1<T, R?>.getOrCreateBuilder(modifier: PropModifier): ValidationBuilder<R> {
val key = SingleValuePropKey(this, modifier)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,11 @@ class ReadmeExampleTest {

@Test
fun complexValidation() {
data class Person(val name: String, val email: String?, val age: Int)
data class Person(
val name: String,
val email: String?,
val age: Int,
)

data class Event(
val organizer: Person,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,9 @@ class ValidationBuilderTest {

@Test
fun validateLists() {
data class Data(val registrations: List<Register> = emptyList())
data class Data(
val registrations: List<Register> = emptyList(),
)

val listValidation =
Validation<Data> {
Expand All @@ -206,7 +208,9 @@ class ValidationBuilderTest {

@Test
fun validateNullableLists() {
data class Data(val registrations: List<Register>?)
data class Data(
val registrations: List<Register>?,
)

val listValidation =
Validation<Data> {
Expand Down Expand Up @@ -235,7 +239,9 @@ class ValidationBuilderTest {

@Test
fun validateArrays() {
data class Data(val registrations: Array<Register> = emptyArray())
data class Data(
val registrations: Array<Register> = emptyArray(),
)

val arrayValidation =
Validation<Data> {
Expand All @@ -260,7 +266,9 @@ class ValidationBuilderTest {

@Test
fun validateNullableArrays() {
data class Data(val registrations: Array<Register>?)
data class Data(
val registrations: Array<Register>?,
)

val arrayValidation =
Validation<Data> {
Expand Down Expand Up @@ -289,7 +297,9 @@ class ValidationBuilderTest {

@Test
fun validateHashMaps() {
data class Data(val registrations: Map<String, Register> = emptyMap())
data class Data(
val registrations: Map<String, Register> = emptyMap(),
)

val mapValidation =
Validation<Data> {
Expand All @@ -309,16 +319,17 @@ class ValidationBuilderTest {
"user1" to Register(email = "valid"),
"user2" to Register(email = "a"),
),
)
.let {
assertEquals(0, countErrors(mapValidation(it), Data::registrations, "user1", Register::email))
assertEquals(1, countErrors(mapValidation(it), Data::registrations, "user2", Register::email))
}
).let {
assertEquals(0, countErrors(mapValidation(it), Data::registrations, "user1", Register::email))
assertEquals(1, countErrors(mapValidation(it), Data::registrations, "user2", Register::email))
}
}

@Test
fun validateNullableHashMaps() {
data class Data(val registrations: Map<String, Register>? = null)
data class Data(
val registrations: Map<String, Register>? = null,
)

val mapValidation =
Validation<Data> {
Expand All @@ -341,11 +352,10 @@ class ValidationBuilderTest {
"user1" to Register(email = "valid"),
"user2" to Register(email = "a"),
),
)
.let {
assertEquals(0, countErrors(mapValidation(it), Data::registrations, "user1", Register::email))
assertEquals(1, countErrors(mapValidation(it), Data::registrations, "user2", Register::email))
}
).let {
assertEquals(0, countErrors(mapValidation(it), Data::registrations, "user1", Register::email))
assertEquals(1, countErrors(mapValidation(it), Data::registrations, "user2", Register::email))
}
}

@Test
Expand Down Expand Up @@ -381,5 +391,8 @@ class ValidationBuilderTest {
val home: Address? = null,
)

private data class Address(val address: String = "", val country: String = "DE")
private data class Address(
val address: String = "",
val country: String = "DE",
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,17 @@ class ValidationResultTest {
assertTrue(result.isValid)
}

private data class Person(val name: String, val addresses: List<Address>)
private data class Person(
val name: String,
val addresses: List<Address>,
)

private data class Address(val city: City)
private data class Address(
val city: City,
)

private data class City(val postalCode: String, val cityName: String)
private data class City(
val postalCode: String,
val cityName: String,
)
}

0 comments on commit 052c772

Please sign in to comment.