Duplicate Conditions

Duplicate sets of conditions in the same branch instruction should be avoided

  • Identifier: duplicate_conditions
  • Enabled by default: Yes
  • Supports autocorrection: No
  • Kind: lint
  • Analyzer rule: No
  • Minimum Swift compiler version: 5.0.0
  • Default configuration:
    KeyValue
    severity error

Non Triggering Examples

if x < 5 {
    foo()
} else if y == "s" {
    bar()
}
if x < 5 {
    foo()
}
if x < 5 {
    bar()
}
if x < 5, y == "s" {
    foo()
} else if x < 5 {
    bar()
}
switch x {
case "a":
    foo()
    bar()
}
switch x {
case "a" where y == "s":
    foo()
case "a" where y == "t":
    bar()
}
if let x = maybeAbc {
    foo()
} else if let x = maybePqr {
    bar()
}
if let x = maybeAbc, let z = x.maybeY {
    foo()
} else if let x = maybePqr, let z = x.maybeY {
    bar()
}
if case .p = x {
    foo()
} else if case .q = x {
    bar()
}
if true {
    if true { foo() }
}

Triggering Examples

if ↓x < 5 {
    foo()
} else if y == "s" {
    bar()
} else if ↓x < 5 {
    baz()
}
if z {
    if ↓x < 5 {
        foo()
    } else if y == "s" {
        bar()
    } else if ↓x < 5 {
        baz()
    }
}
if ↓x < 5, y == "s" {
    foo()
} else if x < 10 {
    bar()
} else if ↓y == "s", x < 5 {
    baz()
}
switch x {
case ↓"a", "b":
    foo()
case "c", ↓"a":
    bar()
}
switch x {
case ↓"a" where y == "s":
    foo()
case ↓"a" where y == "s":
    bar()
}
if ↓let xyz = maybeXyz {
    foo()
} else if ↓let xyz = maybeXyz {
    bar()
}
if ↓let x = maybeAbc, let z = x.maybeY {
    foo()
} else if ↓let x = maybeAbc, let z = x.maybeY {
    bar()
}
if ↓#available(macOS 10.15, *) {
    foo()
} else if ↓#available(macOS 10.15, *) {
    bar()
}
if ↓case .p = x {
    foo()
} else if ↓case .p = x {
    bar()
}
if ↓x < 5 {}
else if ↓x < 5 {}
else if ↓x < 5 {}