SwiftLint icon indicating copy to clipboard operation
SwiftLint copied to clipboard

prefer_key_path: false error and auto correct for static members

Open Nef10 opened this issue 1 year ago • 1 comments

New Issue Checklist

Bug Description

A clear and concise description of what the bug is. Ideally, provide a small (but compilable) example code snippet that can be used to reproduce the issue.


struct MyStruct {
  static var staticMember = "test"
}

let foo: [MyStruct.Type] = [MyStruct.self]
let bar = foo.map { $0.staticMember }

Mention the command or other SwiftLint integration method that caused the issue. Include stack traces or command output.

$ swiftlint lint

Produces test.swift:6:19: warning: Prefer Key Path Violation: Use a key path argument instead of a closure with property access (prefer_key_path)

$ SwiftLint lint --fix

Changes it into

struct MyStruct {
  static var staticMember = "test"
}

let foo: [MyStruct.Type] = [MyStruct.self]
let bar = foo.map(\.staticMember)

Which is not valid swift code: error: key path cannot refer to static member 'staticMember'

Environment

  • SwiftLint version: 0.57.0
  • Xcode version: 16.0
  • Installation method used: Homebrew
  • Configuration file:
opt_in_rules:
  - prefer_key_path

Are you using nested configurations? No

Nef10 avatar Oct 20 '24 22:10 Nef10

This is hopefully going to be resolved by an accepted Swift Evolution proposal.

At the moment, there is not much SwiftLint can do as it doesn't know if the element refers to a class or instance property only spotting how it is accessed.

SimplyDanny avatar Oct 24 '24 08:10 SimplyDanny