server_capabilities.pony

use json = "../../../../json"

use ".."

interface val ServerCapabilities is ResultData
  fun val positionEncoding(): (PositionEncodingKind | None) => None
  fun val textDocumentSync():
    (TextDocumentSyncOptions | TextDocumentSyncKind | None) => None
  fun val notebookDocumentSync():
    ( NotebookDocumentSyncOptions
    | NotebookDocumentSyncRegistrationOptions
    | None) => None
  // fun val completionProvider(): (CompletionProvider | None) => None
  // fun val hoverProvider(): (Bool | HoverOptions | None) => None
  // fun val signatureHelpProvider(): (SignatureHelpOptions | None) => None
  // fun val declarationProvider():
  //   (Bool | DeclarationOptions | DeclarationRegistrationOptions | None) => None
  fun val definitionProvider(): (Bool | DefinitionOptions | None) => None
  // fun val typeDefinitionProvider():
  //   (Bool | TypeDefinitionOptions | TypeDefinitionRegistrationOptions | None)
  // =>
  //   None
  // fun val implementationProvider():
  //   (Bool | ImplementationOptions | ImplementationRegistrationOptions | None)
  // =>
  //   None
  // fun val referencesProvider(): (Bool | ReferenceOptions | None) => None
  // fun val documentHighlightProvider(): (Bool | DocumentHighlightOptions | None)
  // =>
  //   None
  // fun val documentSymbolProvider(): (Bool | DocumentSymbolOptions | None) =>
  //   None
  // fun val codeActionProvider(): (Bool | CodeActionOptions | None) => None
  // fun val codeLensProvider(): (CodeLensOptions | None) => None
  // fun val documentLinkProvider(): (DocumentLinkOptions | None) => None
  // fun val colorProvider():
  //   (Bool | DocumentColorOptions | DocumentColorRegistrationOptions | None)
  // => None
  // fun val documentFormattingProvider():
  //   (Bool | DocumentFormattingOptions | None) => None
  // fun val documentRangeFormattingProvider():
  //   (Bool | DocumentRangeFormattingOptions | None) => None
  // fun val documentOnTypeFormattingProvider():
  //   (DocumentOnTypeFormattingOptions | None) => None
  // fun val renameProvider(): (Bool | RenameOptions | None) => None
  // fun val foldingRangeProvider():
  //   (Bool | FoldingRangeOptions | FoldingRangeRegistrationOptions | None)
  // =>
  //   None
  // fun val executeCommandProvider(): (ExecuteCommandOptions | None) => None
  // fun val selectionRangeProvider():
  //   (Bool | SelectionRangeOptions | SelectionRangeRegistrationOptions | None)
  // =>
  //   None
  // fun val linkedEditingRangeProvider():
  //   ( Bool
  //   | LinkedEditingRangeOptions
  //   | LinkedEditingRangeRegistrationOptions
  //   | None) => None
  // fun val callHierarchyProvder():
  //   (Bool | CallHierarchyOptions | CallHierarchyRegistrationOptions | None)
  // =>
  //   None
  fun val semanticTokensProvider():
    (SemanticTokensOptions | SemanticTokensRegistrationOptions | None) => None
  // fun val monikerProvider():
  //   (Bool | MonikerOptions | MonikerRegistrationOptions | None) => None
  // fun val typeHierarchyProvider():
  //   (Bool | TypeHierarchyOptions | TypeHierarchyRegistrationOptions | None)
  // =>
  //   None
  // fun val inlineValueProvider():
  //   (Bool | InlineValueOptions | InlineValueRegistrationOptions | None) => None
  // fun val inlayHintProvider():
  //   (Bool | InlayHintOptions | InlayHintRegistrationOptions | None) => None
  // fun val diagnosticProvider():
  //   (DiagnosticOptions | DiagnosticRegistrationOptions | None) => None
  // fun val workspaceSymbolProvider(): (Bool | WorkspaceSymbolOptions | None) =>
  //   None
  // fun val workspace(): (WorkspaceServerCapabilities | None) => None
  // fun val experimental(): (json.Item | None)

  fun val get_json(): json.Item =>
    let props = Array[(String, json.Item)]
    match positionEncoding()
    | let pe: PositionEncodingKind =>
      props.push(("positionEncoding", PositionEncodingKindJson(pe)))
    end
    match textDocumentSync()
    | let tdso: TextDocumentSyncOptions =>
      props.push(("textDocumentSync", tdso.get_json()))
    | let tdsk: TextDocumentSyncKind =>
      props.push(("textDocumentSync", TextDocumentSyncKindJson(tdsk)))
    end
    match definitionProvider()
    | let bool: Bool =>
      props.push(("definitionProvider", bool))
    | let def: DefinitionOptions =>
      props.push(("definitionProvider", def.get_json()))
    end
    match notebookDocumentSync()
    | let data: ResultData =>
      props.push(("notebookDocumentSync", data.get_json()))
    end
    json.Object(props)