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