init?()

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]))
  }