-
-
Notifications
You must be signed in to change notification settings - Fork 18
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<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
}