in Sources/SourceKitLSP/Swift/Diagnostic.swift [23:69]
init?(fixits: SKDResponseArray, in snapshot: DocumentSnapshot, fromNote: String?) {
var edits: [TextEdit] = []
let editsMapped = fixits.forEach { (_, skfixit) -> Bool in
if let edit = TextEdit(fixit: skfixit, in: snapshot) {
edits.append(edit)
return true
}
return false
}
if !editsMapped {
log("failed to construct TextEdits from response \(fixits)", level: .warning)
return nil
}
if edits.isEmpty {
return nil
}
let title: String
if let fromNote = fromNote {
title = fromNote
} else {
guard let startIndex = snapshot.index(of: edits[0].range.lowerBound),
let endIndex = snapshot.index(of: edits[0].range.upperBound),
startIndex <= endIndex,
snapshot.text.indices.contains(startIndex),
endIndex <= snapshot.text.endIndex
else {
logAssertionFailure("position mapped, but indices failed for edit range \(edits[0])")
return nil
}
let oldText = String(snapshot.text[startIndex..<endIndex])
let description = Self.fixitTitle(replace: oldText, with: edits[0].newText)
if edits.count == 1 {
title = description
} else {
title = description + "..."
}
}
self.init(
title: title,
kind: .quickFix,
diagnostics: nil,
edit: WorkspaceEdit(changes: [snapshot.document.uri:edits]))
}