71 lines
2.1 KiB
C#
71 lines
2.1 KiB
C#
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<Unit> Handle(DidOpenTextDocumentParams request, CancellationToken cancellationToken)
|
|
{
|
|
return Unit.Task;
|
|
}
|
|
|
|
public override Task<Unit> Handle(DidChangeTextDocumentParams request, CancellationToken cancellationToken)
|
|
{
|
|
_diagnostics.Publish(new Uri("https://example.com"), [new Diagnostic
|
|
{
|
|
Severity = DiagnosticSeverity.Error,
|
|
}]);
|
|
return Unit.Task;
|
|
}
|
|
|
|
public override Task<Unit> Handle(DidSaveTextDocumentParams request, CancellationToken cancellationToken)
|
|
{
|
|
return Unit.Task;
|
|
}
|
|
|
|
public override Task<Unit> 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<Diagnostic> diagnostics)
|
|
{
|
|
_server.TextDocument.PublishDiagnostics(new PublishDiagnosticsParams
|
|
{
|
|
Uri = uri,
|
|
Diagnostics = new Container<Diagnostic>(diagnostics)
|
|
});
|
|
}
|
|
} |