LanguageServerProtocol icon indicating copy to clipboard operation
LanguageServerProtocol copied to clipboard

Please add a documentation

Open SFX123456 opened this issue 6 months ago • 2 comments

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 = [<EntryPoint>] 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

}

SFX123456 avatar Jul 16 '25 09:07 SFX123456