func cursorInfo()

in SourceKitStressTester/Sources/StressTester/SourceKitDocument.swift [136:169]


  func cursorInfo(offset: Int) throws -> (RequestInfo, SourceKitdResponse) {
    let request = SourceKitdRequest(uid: .request_CursorInfo)

    request.addParameter(.key_SourceFile, value: args.forFile.path)
    request.addParameter(.key_Offset, value: offset)
    request.addParameter(.key_RetrieveRefactorActions, value: 1)
    request.addParameter(.key_RetrieveSymbolGraph, value: 1)
    request.addCompilerArgs(args.sourcekitdArgs)

    let info = RequestInfo.cursorInfo(document: documentInfo, offset: offset,
                                      args: args.sourcekitdArgs)
    let response = try sendWithTimeout(request, info: info) { response in
      if !containsErrors {
        if let typeName = response.value.getOptional(.key_TypeName)?.getString(), typeName.contains("<<error type>>") {
          throw SourceKitError.failed(.errorTypeInResponse, request: info, response: response.value.description)
        }
      }
    }

    let symbolName = response.value.getOptional(.key_Name)?.getString()
    if let actions = response.value.getOptional(.key_RefactorActions)?.getArray() {
      for i in 0 ..< actions.count {
        let action = actions.getDictionary(i)
        guard action.getOptional(.key_ActionUnavailableReason) == nil else { continue }
        let actionName = action.getString(.key_ActionName)
        guard actionName != "Global Rename" else { continue }
        let kind = action.getUID(.key_ActionUID)
        _ = try semanticRefactoring(actionKind: kind, actionName: actionName,
                                    offset: offset, newName: symbolName)
      }
    }

    return (info, response)
  }