Skip to content

Instantly share code, notes, and snippets.

View olegosipenko's full-sized avatar
🎳
Lebowski

Oleg Osipenko olegosipenko

🎳
Lebowski
  • Wildberries
  • Yekaterinburg, Russia
View GitHub Profile
@olegosipenko
olegosipenko / NonExhaustiveWhenTest.kt
Created September 19, 2019 10:51
For blog post about sealed classes, when expressions and custom detekt rule
const val WHEN_STATEMENT = """
sealed class S {
object A: S()
object B: S()
}
class WhenTester {
fun checkS(state: S) {
when (state) {
S.A -> println("a")
@olegosipenko
olegosipenko / build.gradle
Created September 19, 2019 10:50
For blog post about sealed classes, when expressions and custom detekt rule
testImplementation "io.gitlab.arturbosch.detekt:detekt-api:$detektVersion"
testImplementation "io.gitlab.arturbosch.detekt:detekt-test:$detektVersion"
@olegosipenko
olegosipenko / NonExhaustiveWhen.kt
Created September 19, 2019 10:49
For blog post about sealed classes, when expressions and custom detekt rule
class NonExhaustiveWhen(config: Config = Config.empty): Rule(config) {
override val issue = Issue(
javaClass.simpleName,
Severity.Defect,
DESCR,
Debt.FIVE_MINS
)
override fun visitNamedFunction(function: KtNamedFunction) {
super.visitNamedFunction(function)
@olegosipenko
olegosipenko / NonExhaustiveWhen.kt
Created September 19, 2019 10:48
For blog post about sealed classes, when expressions and custom detekt rule
override fun visitNamedFunction(function: KtNamedFunction) {
super.visitNamedFunction(function)
val whenExpressions =
function.children.filterIsInstance<KtBlockExpression>()
.flatMap { blockExpression -> blockExpression.children.asIterable() }
.filterIsInstance<KtWhenExpression>()
if (whenExpressions.isNotEmpty()) {
report(
CodeSmell(
@olegosipenko
olegosipenko / NonExhaustiveWhen.kt
Created September 19, 2019 10:47
For blog post about sealed classes, when expressions and custom detekt rule
class NonExhaustiveWhen(config: Config = Config.empty): Rule(config) {
override val issue = Issue(
javaClass.simpleName,
Severity.Defect,
DESCR,
Debt.FIVE_MINS
)
}
@olegosipenko
olegosipenko / build.gradle
Created September 19, 2019 10:47
For blog post about sealed classes, when expressions and custom detekt rule
compileOnly "io.gitlab.arturbosch.detekt:detekt-api:$detektVersion"
@olegosipenko
olegosipenko / EmailLoginFragment.kt
Created September 19, 2019 10:33
For blog post about sealed classes, when expressions and custom detekt rule
fun render(viewState: EmailLoginViewState) {
when(viewState) {
INITIAL -> renderInitial()
}.exhaustive
}
@olegosipenko
olegosipenko / HelloWorld.kt
Created September 19, 2019 10:30
For blog post about sealed classes, when expressions and custom detekt rule
package com.example
/**
* We declare a package-level function main which returns Unit and takes
* an Array of strings as a parameter. Note that semicolons are optional.
*/
fun main(args: Array<String>) {
println("Hello, world!")
}
@olegosipenko
olegosipenko / EmailLoginFragment.kt
Created September 19, 2019 10:29
For blog post about sealed classes, when expressions and custom detekt rule
fun render(viewState: EmailLoginViewState) {
when(viewState) {
INITIAL -> renderInitial()
}.exhaustive
}
@olegosipenko
olegosipenko / Exhaustive.kt
Created September 19, 2019 10:28
For blog post about sealed classes, when expressions and custom detekt rule
val <T> T.exhaustive: T
get() = this