in SourceKitStressTester/Sources/StressTester/SourceKitDocument.swift [271:300]
func codeComplete(offset: Int, expectedResult: ExpectedResult?) throws -> (request: RequestInfo, response: SourceKitdResponse, instructions: Int, reusingASTContext: Bool) {
var responseToReport: SourceKitdResponse
let openRequest = buildCompletionRequest(request: .request_CodeCompleteOpen, offset: offset, extraOptions: extraCodeCompleteOptions)
let openInfo = RequestInfo.codeCompleteOpen(document: documentInfo, offset: offset,
args: args.sourcekitdArgs)
let (openResponse, openInstructions) = try sendWithTimeoutMeasuringInstructions(openRequest, info: openInfo)
let reusingASTContext = openResponse.value.getBool(.key_ReusingASTContext)
if let expectedResult = expectedResult {
var updateOptions = extraCodeCompleteOptions
updateOptions["filtertext"] = expectedResult.name.base
let updateRequest = buildCompletionRequest(request: .request_CodeCompleteUpdate, offset: offset, extraOptions: updateOptions)
let updateInfo = RequestInfo.codeCompleteOpen(document: documentInfo, offset: offset, args: args.sourcekitdArgs)
let updateResponse = try sendWithTimeout(updateRequest, info: updateInfo) { response in
try checkExpectedCompletionResult(expectedResult, in: response, info: openInfo)
}
responseToReport = updateResponse
} else {
responseToReport = openResponse
}
let closeRequest = buildCompletionRequest(request: .request_CodeCompleteClose, offset: offset, extraOptions: extraCodeCompleteOptions)
let closeInfo = RequestInfo.codeCompleteClose(document: documentInfo, offset: offset)
_ = try sendWithTimeout(closeRequest, info: closeInfo)
return (openInfo, responseToReport, openInstructions, reusingASTContext)
}