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