2023-05-03 11:06:20 +02:00
|
|
|
== Why is this an issue?
|
|
|
|
|
2021-11-03 18:07:53 +01:00
|
|
|
include::../description.adoc[]
|
|
|
|
|
|
|
|
|
2023-05-25 14:18:12 +02:00
|
|
|
=== Noncompliant code example
|
2021-11-03 18:07:53 +01:00
|
|
|
|
2023-05-25 14:18:12 +02:00
|
|
|
[source,kotlin]
|
|
|
|
----
|
|
|
|
val p = Pattern.compile("^$", Pattern.MULTILINE) // Noncompliant
|
|
|
|
val r = Regex("^$", RegexOption.MULTILINE) // Noncompliant
|
|
|
|
|
|
|
|
// Alternatively
|
|
|
|
val p = Pattern.compile("(?m)^$") // Noncompliant
|
|
|
|
val r = Regex("(?m)^$") // Noncompliant
|
|
|
|
|
|
|
|
fun containsEmptyLines(str: String) : Boolean {
|
|
|
|
return p.matcher(str).find()
|
|
|
|
}
|
|
|
|
|
|
|
|
fun containsEmptyLinesKotlin(str: String) = r.find(str) != null
|
|
|
|
|
|
|
|
// ...
|
|
|
|
println(containsEmptyLines("a\n\nb")) // correctly prints 'true'
|
|
|
|
println(containsEmptyLinesKotlin("a\n\nb")) // correctly prints 'true'
|
|
|
|
|
|
|
|
println(containsEmptyLines("")) // incorrectly prints 'false'
|
|
|
|
println(containsEmptyLinesKotlin("")) // incorrectly prints 'false'
|
|
|
|
----
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
=== Compliant solution
|
|
|
|
|
|
|
|
[source,kotlin]
|
|
|
|
----
|
|
|
|
val p = Pattern.compile("^$", Pattern.MULTILINE) // Noncompliant
|
|
|
|
val r = Regex("^$", RegexOption.MULTILINE) // Noncompliant
|
|
|
|
|
|
|
|
fun containsEmptyLines(str: String) : Boolean {
|
|
|
|
return p.matcher(str).find() || str.isEmpty()
|
|
|
|
}
|
|
|
|
|
|
|
|
fun containsEmptyLinesKotlin(str: String) = r.find(str) != null || str.isEmpty()
|
|
|
|
|
|
|
|
// ...
|
|
|
|
println(containsEmptyLines("a\n\nb")) // correctly prints 'true'
|
|
|
|
println(containsEmptyLinesKotlin("a\n\nb")) // correctly prints 'true'
|
|
|
|
|
|
|
|
println(containsEmptyLines("")) // correctly prints 'true'
|
|
|
|
println(containsEmptyLinesKotlin("")) // correctly prints 'true'
|
|
|
|
----
|
2021-11-03 18:07:53 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
include::../implementation.adoc[]
|