Fix indentation_width false positives for multi-line conditions#6505
Merged
SimplyDanny merged 6 commits intorealm:mainfrom Apr 19, 2026
Merged
Conversation
Generated by 🚫 Danger |
af2d13b to
f158dbd
Compare
SimplyDanny
approved these changes
Apr 1, 2026
Collaborator
There was a problem hiding this comment.
Looks good to me. Thanks!
Have you thought about not just ignoring conditions but linting against their proper indentation? For example:
if let a,
let b {
// ...
}would be good, while
if let a,
let b {
// ...
}wouldn't.
What about guard and its else? Should
guard let a
else {
return
}trigger at the else. I guess not.
11a7afb to
e0270ac
Compare
Contributor
Author
Thanks. updated |
SimplyDanny
requested changes
Apr 15, 2026
| let ifAligned = "if let x = foo(),\n let y = bar() {\n doSomething()\n}" | ||
| let whileAligned = "while let x = foo(),\n let y = bar() {\n doSomething()\n}" | ||
| let guardNextLine = "guard\n let x = foo(),\n let y = bar()\nelse {\n return\n}" | ||
| let ifThreeAligned = "if let a = foo(),\n let b = bar(),\n let c = baz() {\n doSomething()\n}" |
Collaborator
There was a problem hiding this comment.
String blocks would be much easier to read. But fine to keep it as is for now.
Skip continuation lines of multi-line `guard`/`if`/`while` condition lists that are aligned to the keyword rather than following the `indentation_width` grid. Add `include_multiline_conditions` option (default: `false`) to control this behavior. Fixes realm#4961
When `include_multiline_conditions` is enabled, continuation lines of multi-line `guard`/`if`/`while` conditions are now checked to ensure they are aligned with the first condition after the keyword, rather than simply being skipped. Also refactor `validate(file:)` to reduce cyclomatic complexity by extracting helper methods.
Co-authored-by: Danny Mösch <danny.moesch@icloud.com>
…swift Co-authored-by: Danny Mösch <danny.moesch@icloud.com>
Address review feedback: - Introduce IndentationPrefix struct to parse a line's leading whitespace once and expose tab/space/combined counts for reuse. - Use the existing makeViolation helper in parseIndentation and checkMultilineConditionAlignment instead of constructing StyleViolation manually.
6266348 to
47d2fd2
Compare
SimplyDanny
approved these changes
Apr 19, 2026
SimplyDanny
reviewed
Apr 19, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
indentation_widthrule whenguard/if/whileconditions span multiple lines and are aligned to the keyword (e.g.,guard= 6 spaces), which is not a multiple ofindentation_widthMultilineConditionLineVisitor) that collects continuation line numbers and skips them during indentation checksinclude_multiline_conditionsconfiguration option (default:false) to control this behaviorFixes #4961
Test plan
testIncludeMultilineConditions()with cases forguard,if,while, nested conditions, andinclude_multiline_conditions: truenonTriggeringExamplesto rule description for multi-lineguardandifIndentationWidthRuleTestspass (14 + 1 new = 15 tests, 0 failures)