ionide / ionide/LanguageServerProtocol

Please add a documentation

Open
#68 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
F#
Stars
58
Forks
21
PR merge metrics
No merged PRs in 30d

Description

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 =
let initializeHandler =
Func>(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
}

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.