Variable Shadowing

Do not shadow variables declared in outer scopes

  • Identifier: variable_shadowing
  • Enabled by default: No
  • Supports autocorrection: No
  • Kind: lint
  • Analyzer rule: No
  • Minimum Swift compiler version: 5.0.0
  • Default configuration:
    KeyValue
    severity warning
    ignore_parameters true

Non Triggering Examples

//
// ignore_parameters: true
//

var a: String?
func test(a: String?) {
    print(a)
}

var a: String = "hello"
if let b = a {
    print(b)
}
var a: String?
func test() {
    if let b = a {
        print(b)
    }
}
for i in 1...10 {
    print(i)
}
for i in 1...10 {
    print(i)
}
func test() {
    var a: String = "hello"
    func nested() {
        var b: String = "world"
        print(a, b)
    }
}
class Test {
    var a: String?
    func test(a: String?) {
        print(a)
    }
}
let a: Int?
if let a { print(a) }
let a: Int?
guard let a else { return }
let a: Int?
while let a { print(a) }
var a = 1
if let a = a {
    print(a)
}
var a = 1
if let a = self.a {
    print(a)
}
struct S {
    static let c: Int? = nil
    var a: Int?
    var b: Int {
        if let a = self.a { a }
        else if let c = Self.c { c }
        else { 0 }
    }
}

Triggering Examples

var foo = 1
do {
    let foo = 2
}
var a = 1
if let a = Optional(2) {
    let a = 3
    print(a)
}
var i = 1
for i in 1...3 {
    let i = 2
    print(i)
}
var a = 1
func test() {
    do {
        var a = 2
        print(a)
    }
}
func test() {
    var a = 1
    if var a = Optional(2) {
        var a = 2
        print(a)
    }
}
func test() {
    var a = 1
    for a in 0..<1 {
        var a = 2
        print(a)
    }
}
func test() {
    var a = 1
    while true {
        var a = 2
        break
    }
}
//
// ignore_parameters: false
//

var a: String?
func test(a: String?) {
    let a = ""
    print(a)
}

struct S {
    var a = 1
    var b: Int {
        let a = 2
        return a
    }
}
var a: String?
while let a = Optional("hello") {}
var a = "outer"
let (a, c) = ("first", "second")