From 17a94272a20c1bb50595000e4d8f806c06b40a4f Mon Sep 17 00:00:00 2001 From: nub31 Date: Thu, 23 Oct 2025 10:16:43 +0200 Subject: [PATCH] language server start --- compiler/NubLang.LSP/DiagnosticsPublisher.cs | 24 +++++++ compiler/NubLang.LSP/HoverHandler.cs | 18 +++++ .../NubLang.LSP/TextDocumentSyncHandler.cs | 71 +++++++++++++++++++ compiler/NubLang.LSP/WorkspaceManager.cs | 6 ++ 4 files changed, 119 insertions(+) create mode 100644 compiler/NubLang.LSP/DiagnosticsPublisher.cs create mode 100644 compiler/NubLang.LSP/HoverHandler.cs create mode 100644 compiler/NubLang.LSP/TextDocumentSyncHandler.cs create mode 100644 compiler/NubLang.LSP/WorkspaceManager.cs diff --git a/compiler/NubLang.LSP/DiagnosticsPublisher.cs b/compiler/NubLang.LSP/DiagnosticsPublisher.cs new file mode 100644 index 0000000..bfe7416 --- /dev/null +++ b/compiler/NubLang.LSP/DiagnosticsPublisher.cs @@ -0,0 +1,24 @@ +using OmniSharp.Extensions.LanguageServer.Protocol.Document; +using OmniSharp.Extensions.LanguageServer.Protocol.Models; +using OmniSharp.Extensions.LanguageServer.Protocol.Server; + +namespace NubLang.LSP; + +public class DiagnosticsPublisher +{ + private readonly ILanguageServerFacade _server; + + public DiagnosticsPublisher(ILanguageServerFacade server) + { + _server = server; + } + + public void Publish(Uri uri, IEnumerable diagnostics) + { + _server.TextDocument.PublishDiagnostics(new PublishDiagnosticsParams + { + Uri = uri, + Diagnostics = new Container(diagnostics) + }); + } +} \ No newline at end of file diff --git a/compiler/NubLang.LSP/HoverHandler.cs b/compiler/NubLang.LSP/HoverHandler.cs new file mode 100644 index 0000000..3907db3 --- /dev/null +++ b/compiler/NubLang.LSP/HoverHandler.cs @@ -0,0 +1,18 @@ +using OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities; +using OmniSharp.Extensions.LanguageServer.Protocol.Document; +using OmniSharp.Extensions.LanguageServer.Protocol.Models; + +namespace NubLang.LSP; + +internal class HoverHandler : HoverHandlerBase +{ + protected override HoverRegistrationOptions CreateRegistrationOptions(HoverCapability capability, ClientCapabilities clientCapabilities) + { + throw new NotImplementedException(); + } + + public override Task Handle(HoverParams request, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/compiler/NubLang.LSP/TextDocumentSyncHandler.cs b/compiler/NubLang.LSP/TextDocumentSyncHandler.cs new file mode 100644 index 0000000..6c8c97b --- /dev/null +++ b/compiler/NubLang.LSP/TextDocumentSyncHandler.cs @@ -0,0 +1,71 @@ +using MediatR; +using OmniSharp.Extensions.LanguageServer.Protocol; +using OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities; +using OmniSharp.Extensions.LanguageServer.Protocol.Document; +using OmniSharp.Extensions.LanguageServer.Protocol.Models; +using OmniSharp.Extensions.LanguageServer.Protocol.Server; + +namespace NubLang.LSP; + +internal class TextDocumentSyncHandler : TextDocumentSyncHandlerBase +{ + private readonly DiagnosticsPublisher _diagnostics; + + public TextDocumentSyncHandler(DiagnosticsPublisher diagnostics) + { + _diagnostics = diagnostics; + } + + public override TextDocumentAttributes GetTextDocumentAttributes(DocumentUri uri) + { + return new TextDocumentAttributes(uri, "nub-lang"); + } + + public override Task Handle(DidOpenTextDocumentParams request, CancellationToken cancellationToken) + { + return Unit.Task; + } + + public override Task Handle(DidChangeTextDocumentParams request, CancellationToken cancellationToken) + { + _diagnostics.Publish(new Uri("https://example.com"), [new Diagnostic + { + Severity = DiagnosticSeverity.Error, + }]); + return Unit.Task; + } + + public override Task Handle(DidSaveTextDocumentParams request, CancellationToken cancellationToken) + { + return Unit.Task; + } + + public override Task Handle(DidCloseTextDocumentParams request, CancellationToken cancellationToken) + { + return Unit.Task; + } + + protected override TextDocumentSyncRegistrationOptions CreateRegistrationOptions(TextSynchronizationCapability capability, ClientCapabilities clientCapabilities) + { + return new TextDocumentSyncRegistrationOptions(); + } +} + +public class DiagnosticsPublisher +{ + private readonly ILanguageServerFacade _server; + + public DiagnosticsPublisher(ILanguageServerFacade server) + { + _server = server; + } + + public void Publish(Uri uri, IEnumerable diagnostics) + { + _server.TextDocument.PublishDiagnostics(new PublishDiagnosticsParams + { + Uri = uri, + Diagnostics = new Container(diagnostics) + }); + } +} \ No newline at end of file diff --git a/compiler/NubLang.LSP/WorkspaceManager.cs b/compiler/NubLang.LSP/WorkspaceManager.cs new file mode 100644 index 0000000..007ec2d --- /dev/null +++ b/compiler/NubLang.LSP/WorkspaceManager.cs @@ -0,0 +1,6 @@ +namespace NubLang.LSP; + +public class WorkspaceManager +{ + +} \ No newline at end of file