Skip to content

Please add a documentation #68

@SFX123456

Description

@SFX123456

Hello,
i am thankful that this project exists, but i would really appreciate a documentation or some working example.
The code i added does work but initialize is not getting triggered. I tried it with the lsp4ij lsp client and manually. it does send a blank result back. This is not the expected output as it should send the server capabilities.

namespace ConsoleApp

open System
open System.IO
open ConsoleApp.Dumb
open Ionide.LanguageServerProtocol
open Ionide.LanguageServerProtocol.JsonRpc
open Ionide.LanguageServerProtocol.Server
open Ionide.LanguageServerProtocol.Types
open StreamJsonRpc

type DummyClient() =
interface ILspClient with
// Notifications
member _.WindowShowMessage _ = async.Return()
member _.WindowLogMessage _ = async.Return()
member _.TelemetryEvent _ = async.Return()
member _.TextDocumentPublishDiagnostics _ = async.Return()
member _.LogTrace _ = async.Return()
member _.CancelRequest _ = async.Return()
member _.Progress _ = async.Return()

// Requests
member _.WorkspaceWorkspaceFolders() = async.Return(Ok None)
member _.WorkspaceConfiguration _ = async.Return(Ok [||])
member _.WindowWorkDoneProgressCreate _ = async.Return(Ok())
member _.WorkspaceSemanticTokensRefresh() = async.Return(Ok())
member _.WindowShowDocument _ = async.Return(Ok { Success = false })
member _.WorkspaceInlineValueRefresh() = async.Return(Ok())
member _.WorkspaceInlayHintRefresh() = async.Return(Ok())
member _.WorkspaceDiagnosticRefresh() = async.Return(Ok())
member _.ClientRegisterCapability _ = async.Return(Ok())
member _.ClientUnregisterCapability _ = async.Return(Ok())
member _.WindowShowMessageRequest _ = async.Return(Ok None)
member _.WorkspaceCodeLensRefresh() = async.Return(Ok())
member _.WorkspaceApplyEdit _ = async.Return(Ok { Applied = false; FailureReason = None; FailedChange = None })

interface System.IDisposable with
member _.Dispose() = ()

module Program =
[]
let main _ =

let setupRequestHandlers (_client: ILspClient) : Map<string, Delegate> =
  let initializeHandler =
    Func<InitializeParams, AsyncLspResult<InitializeResult>>(fun _ ->
      async {
        let result: InitializeResult = { Capabilities = minimalServerCapabilities; ServerInfo = None }
        return LspResult.success result
      }
    )

  Map.ofList [ ("initialize", initializeHandler) ]

let clientCreator (_notifSender: ClientNotificationSender, _reqSender: ClientRequestSender) = DummyClient()

let customizeRpc (handler: IJsonRpcMessageHandler) : JsonRpc = JsonRpc(handler)

let closeReason =
  startWithSetup
    setupRequestHandlers
    (Console.OpenStandardInput())
    (Console.OpenStandardOutput())
    clientCreator
    customizeRpc


1

and then that namespace ConsoleApp

open Ionide.LanguageServerProtocol.Types

module Test =
let minimalServerCapabilities: ServerCapabilities = {
PositionEncoding = Some PositionEncodingKind.UTF16 // Will default to UTF-16 per spec

TextDocumentSync = None

NotebookDocumentSync = None

CompletionProvider = None

HoverProvider = Some(U2.C1 true)

SignatureHelpProvider = None

DeclarationProvider = None

DefinitionProvider = None

TypeDefinitionProvider = None

ImplementationProvider = None

ReferencesProvider = None

DocumentHighlightProvider = None

DocumentSymbolProvider = None

CodeActionProvider = None

CodeLensProvider = None

DocumentLinkProvider = None

ColorProvider = None

WorkspaceSymbolProvider = None

DocumentFormattingProvider = None

DocumentRangeFormattingProvider = None

DocumentOnTypeFormattingProvider = None

RenameProvider = None

FoldingRangeProvider = None

SelectionRangeProvider = None

ExecuteCommandProvider = None

CallHierarchyProvider = None

LinkedEditingRangeProvider = None

SemanticTokensProvider = None

MonikerProvider = None

TypeHierarchyProvider = None

InlineValueProvider = None

InlayHintProvider = None

DiagnosticProvider = None

Workspace = None

Experimental = None

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions