in Sources/SourceKitLSP/Swift/CodeCompletionSession.swift [218:243]
func close() {
// Temporary back-reference to server to keep it alive during close().
let server = self.server
queue.async {
switch self.state {
case .closed:
// Already closed, nothing to do.
break
case .opening(let group):
group.notify(queue: self.queue) {
switch self.state {
case .closed, .opening(_):
// Don't try again.
break
case .open:
self._sendClose(server)
self.state = .closed
}
}
case .open:
self._sendClose(server)
self.state = .closed
}
}
}