pinterest / ktlint

An anti-bikeshedding Kotlin linter with built-in formatter
https://pinterest.github.io/ktlint/
MIT License
6.06k stars 504 forks source link

Fix not checking for spacing around binary operators inside unary expression #2653

Closed cflee closed 1 month ago

cflee commented 1 month ago

Description

Fixes #2652

For the operator spacing standard rule, instead of checking for whether any ancestor element is a KtPrefixExpression, check whether the closest ancestor that is a KtOperationExpression is a KtPrefixExpression.

This change will identify the case where the operator is inside a binary expression inside a prefix expression as not being a unary operator, and hence subject to the operator spacing checks.

The closest ancestor of KtPrefixExpression and KtBinaryExpression seems to be KtOperationExpression, so I've opted to use that as the predicate when searching through the ancestors. KtExpressionImpl seems to cover a lot more expression types. Alternatively, it might be possible to specifically search for the closest parent that is either KtPrefixExpression or KtBinaryExpression?

Checklist

Before submitting the PR, please check following (checks which are not relevant may be ignored):

Documentation is updated. See difference between snapshot and release documentation

paul-dingemans commented 1 month ago

Tnx for your contribution. I really liked the way you documented the issue, and of course that you implemented the fix. Except for the commit message (it is better to explain the why instead of what you changed) I have no remarks. I have fix the commit message during merge.