language server start

This commit is contained in:
nub31
2025-10-23 10:16:52 +02:00
parent e7b92e8194
commit b7525dde65
30 changed files with 3944 additions and 125 deletions

View File

@@ -3,19 +3,11 @@ 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
internal class TextDocumentSyncHandler(WorkspaceManager workspaceManager) : TextDocumentSyncHandlerBase
{
private readonly DiagnosticsPublisher _diagnostics;
public TextDocumentSyncHandler(DiagnosticsPublisher diagnostics)
{
_diagnostics = diagnostics;
}
public override TextDocumentAttributes GetTextDocumentAttributes(DocumentUri uri)
{
return new TextDocumentAttributes(uri, "nub-lang");
@@ -23,25 +15,25 @@ internal class TextDocumentSyncHandler : TextDocumentSyncHandlerBase
public override Task<Unit> Handle(DidOpenTextDocumentParams request, CancellationToken cancellationToken)
{
workspaceManager.UpdateFile(request.TextDocument.Uri);
return Unit.Task;
}
public override Task<Unit> Handle(DidChangeTextDocumentParams request, CancellationToken cancellationToken)
{
_diagnostics.Publish(new Uri("https://example.com"), [new Diagnostic
{
Severity = DiagnosticSeverity.Error,
}]);
workspaceManager.UpdateFile(request.TextDocument.Uri);
return Unit.Task;
}
public override Task<Unit> Handle(DidSaveTextDocumentParams request, CancellationToken cancellationToken)
{
workspaceManager.UpdateFile(request.TextDocument.Uri);
return Unit.Task;
}
public override Task<Unit> Handle(DidCloseTextDocumentParams request, CancellationToken cancellationToken)
{
workspaceManager.UpdateFile(request.TextDocument.Uri);
return Unit.Task;
}
@@ -49,23 +41,4 @@ internal class TextDocumentSyncHandler : TextDocumentSyncHandlerBase
{
return new TextDocumentSyncRegistrationOptions();
}
}
public class DiagnosticsPublisher
{
private readonly ILanguageServerFacade _server;
public DiagnosticsPublisher(ILanguageServerFacade server)
{
_server = server;
}
public void Publish(Uri uri, IEnumerable<Diagnostic> diagnostics)
{
_server.TextDocument.PublishDiagnostics(new PublishDiagnosticsParams
{
Uri = uri,
Diagnostics = new Container<Diagnostic>(diagnostics)
});
}
}