func _open()

in Sources/SourceKitLSP/Swift/CodeCompletionSession.swift [99:153]


  func _open(
    filterText: String,
    position: Position,
    in snapshot: DocumentSnapshot,
    options: SKCompletionOptions,
    completion: @escaping  (LSPResult<CompletionList>) -> Void)
  {
    log("\(Self.self) Open: \(self) filter=\(filterText)")
    assert(snapshot.version == self.snapshot.version, "open must use the original snapshot")

    let req = SKDRequestDictionary(sourcekitd: server.sourcekitd)
    let keys = server.sourcekitd.keys
    req[keys.request] = server.sourcekitd.requests.codecomplete_open
    req[keys.offset] = utf8StartOffset
    req[keys.name] = uri.pseudoPath
    req[keys.sourcefile] = uri.pseudoPath
    req[keys.sourcetext] = snapshot.text
    req[keys.codecomplete_options] = optionsDictionary(filterText: filterText, options: options)
    if let compileCommand = compileCommand {
      req[keys.compilerargs] = compileCommand.compilerArgs
    }

    let group = DispatchGroup()
    group.enter()

    state = .opening(group)

    let handle = server.sourcekitd.send(req, queue) { result in
      defer { group.leave() }

      guard let dict = result.success else {
        self.state = .closed
        return completion(.failure(ResponseError(result.failure!)))
      }
      if case .closed = self.state {
        return completion(.failure(.cancelled))
      }

      self.state = .open

      guard let completions: SKDResponseArray = dict[keys.results] else {
        return completion(.success(CompletionList(isIncomplete: false, items: [])))
      }

      let results = self.server.completionsFromSKDResponse(completions,
                                                           in: snapshot,
                                                           completionPos: self.position,
                                                           requestPosition: position,
                                                           isIncomplete: true)
      completion(.success(results))
    }

    // FIXME: cancellation
    _ = handle
  }