Fix not checking for spacing around binary operators inside unary expression #2653
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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?
abstract class KtExpressionImpl : KtElementImpl(node), KtExpression
interface KtOperationExpression extends KtExpression
abstract class KtUnaryExpression extends KtExpressionImpl implements KtOperationExpression
class KtPrefixExpression extends KtUnaryExpression
class KtPostfixExpression extends KtUnaryExpression
class KtBinaryExpression extends KtExpressionImpl implements KtOperationExpression
class KtIsExpression extends KtExpressionImpl implements KtOperationExpression
Checklist
Before submitting the PR, please check following (checks which are not relevant may be ignored):
Closes #<xxx>
orFixes #<xxx>
(replace<xxx>
with issue number)Documentation is updated. See difference between snapshot and release documentation