saveourtool / diktat

Strict coding standard for Kotlin and a custom set of rules for detecting code smells, code style issues and bugs
https://diktat.saveourtool.com
MIT License
516 stars 38 forks source link

`WRONG_NAME_OF_VARIABLE_INSIDE_ACCESSOR` false positive #1935

Open DmitriyZaitsev opened 5 days ago

DmitriyZaitsev commented 5 days ago

Describe the bug

Here's a piece of code I have:

public abstract class Observable<T> {
    public abstract val value: T

    public abstract fun subscribe(subscriber: Subscriber<T>): Subscription

    public inline fun <R> transform(crossinline block: Transform<T, R>): Observable<R> =
        object : Observable<R>() {
            override fun subscribe(subscriber: Subscriber<R>): Subscription =
                this@Observable.subscribe { subscriber(block(it)) }

            @Suppress("WRONG_NAME_OF_VARIABLE_INSIDE_ACCESSOR")
            override val value: R
                get() = block(this@Observable.value) // I can't use the `field` property here
        }

    public companion object
}

The problem is diktat claims I have to use a field property instead of this@Observable.value which isn't technically possible in this case. Perhaps the case is non-trivial for the parser, and if I had used a named private class instead of an anonymous object, this could have been avoided, but I think I should point out that such snippets happen too.

Environment information