Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
merged 1 commit into from
May 12, 2024

Conversation

cflee
Copy link
Contributor

@cflee cflee commented May 9, 2024

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.

  • PREFIX_EXPRESSION
    • PARENTHESIZED
      • BINARY_EXPRESSION
        • OPERATION_REFERENCE
          • PsiElement(ELVIS)

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):

  • Commit message are well written. In addition to a short title, the commit message also explain why a change is made.
  • At least one commit message contains a reference Closes #<xxx> or Fixes #<xxx> (replace<xxx> with issue number)
  • Tests are added
  • KtLint format has been applied on source code itself and violations are fixed
  • PR title is short and clear (it is used as description in the release changelog)
  • PR description added (background information)

Documentation is updated. See difference between snapshot and release documentation

  • Snapshot documentation in case documentation is to be released together with a code change
  • Release documentation in case documentation is related to a released version of ktlint and has to be published as soon as the change is merged to master

…ry expression

Instead of checking for whether any parent element is a KtPrefixExpression, check whether the closest ancestor that is a KtOperationExpression is a KtPrefixExpression.

Fixes pinterest#2652
@paul-dingemans paul-dingemans merged commit 238f9f3 into pinterest:master May 12, 2024
11 checks passed
@paul-dingemans
Copy link
Collaborator

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.

@paul-dingemans paul-dingemans added this to the 1.3.0 milestone May 12, 2024
@cflee cflee deleted the cflee/2652 branch May 12, 2024 12:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Binary operators in !(...) not checked for missing horizontal whitespace
2 participants