Esempio n. 1
0
        private static async Task Main(string[] args)
        {
            StartAnalytics();
            AnalyticsApi.UserAgent = EditorName = GetEditorNameByArgs(args);

            AnalyticsApi.TrackEvent("SessionStart", "Session Start", extraValues: new { sc = "start" });
            AnalyticsApi.TrackEvent("ServerStart", "Started LSP Server", extraValues: new { sc = "start" });

            if (args.Any(a => a.ToLower().Equals("-d")))
            {
                while (!Debugger.IsAttached)
                {
                    await Task.Delay(100);
                }
            }

            ILanguageServer server = null;

            server = await LanguageServer.From(options =>
            {
                options
                .WithInput(Console.OpenStandardInput())
                .WithOutput(Console.OpenStandardOutput())
                .ConfigureLogging(c => c.AddLanguageProtocolLogging())
                .WithHandler <TextDocumentHandler>()
                .WithHandler <TextHoverHandler>();

                options.OnRequest <object, int>("insight/inspectionsCount",
                                                _ => Task.FromResult(WorkspaceManager.Instance.InspectionsManager.CodeInspections.Count));
                var debouncedParseRange = Debouncer.Debounce <SkriptFile>(file => file.NotifyVisibleNodesRangeChanged(),
                                                                          TimeSpan.FromMilliseconds(500));

                options.OnNotification <ViewportChangedParams>("insight/viewportRangeChanged", e =>
                {
                    var file = WorkspaceManager.CurrentWorkspace.WorkspaceManager.GetOrCreateByUri(e.Uri.ToUri());
                    if (file == null)
                    {
                        return;
                    }

                    file.VisibleRanges = e.Ranges;
                    debouncedParseRange.Run(file);
                });

                options.OnNotification("insight/notifySupportsExtendedCapabilities", async() =>
                {
                    if (WorkspaceManager.CurrentHost == null)
                    {
                        return;
                    }

                    var sendRequest =
                        WorkspaceManager.CurrentHost.SendRawRequest <ExtendedHostCapabilities>(
                            "insight/queryExtendedCapabilities");
                    if (sendRequest != null)
                    {
                        WorkspaceManager.CurrentHost.ExtendedCapabilities = await sendRequest;
                    }
                });
            });

            WorkspaceManager.CurrentHost = new LspSkriptInsightHost(server);
            WorkspaceManager.CurrentHost.LogInfo("SkriptInsight loaded successfully.");

#pragma warning disable 4014
            Task.Run(() => StartDiscordRichPresence(WorkspaceManager.CurrentWorkspace));
#pragma warning restore 4014

            await server.WaitForExit;

            DiscordRpcClient?.Dispose();
            AnalyticsApi.CancellationToken.Cancel();
            AnalyticsApi.TrackEvent("ServerStop", "Stopped LSP Server");
            AnalyticsApi.TrackEvent("SessionStop", "Session Stop", extraValues: new { sc = "stop" });
        }
 public LspSkriptInsightHost(ILanguageServer server)
 {
     Server = server;
 }
Esempio n. 3
0
 public DiagnosticReporter(OmniSharp.Extensions.LanguageServer.Protocol.Server.ILanguageServer router)
 {
     this.router = router;
 }