Exemple #1
0
 public void PublishDiagnostics(PublishDiagnosticsParams @params)
 {
     _connection.SendNotification(new NotificationMessage <PublishDiagnosticsParams>
     {
         method  = "textDocument/publishDiagnostics",
         @params = @params
     });
 }
        private void OnPublishDiagnostics(object sender, PublishDiagnosticsEventArgs e)
        {
            var parameters = new PublishDiagnosticsParams {
                uri         = e.uri.ToString(),
                diagnostics = e.diagnostics.ToArray()
            };

            _rpc.NotifyWithParameterObjectAsync("textDocument/publishDiagnostics", parameters).DoNotWait();
        }
Exemple #3
0
        private void OnPublishDiagnostics(object sender, PublishDiagnosticsEventArgs e)
        {
            var parameters = new PublishDiagnosticsParams {
                uri         = e.uri,
                diagnostics = e.diagnostics.ToArray()
            };

            _rpc.InvokeAsync("textDocument/publishDiagnostics", parameters);
        }
Exemple #4
0
        public void PublishDiagnostics(Uri uri, IEnumerable <Diagnostic> diags)
        {
            var parameters = new PublishDiagnosticsParams {
                uri         = uri,
                diagnostics = diags.ToArray()
            };

            _rpc.NotifyWithParameterObjectAsync("textDocument/publishDiagnostics", parameters).DoNotWait();
        }
Exemple #5
0
 public void OnTextDocumentPublishDiagnostics(PublishDiagnosticsParams param)
 {
     if ((param.diagnostics == null) || (param.diagnostics.Length == 0))
     {
         return;
     }
     lock (publishDiagnostics_)
     {
         publishDiagnostics_[makePublishDiagnosticsKey(param.uri)] = param;
     }
 }
Exemple #6
0
        public void Publish(DocumentUri document)
        {
            PublishDiagnosticsParams diagnosticsParams = new PublishDiagnosticsParams();

            diagnosticsParams.Uri = document;

            var documentErrors = diagnosticCategories[document];
            var allErrors      = documentErrors.Values.SelectMany(x => x);

            diagnosticsParams.Diagnostics = new Container <Diagnostic>(allErrors);
            server.PublishDiagnostics(diagnosticsParams);
        }
Exemple #7
0
        public PublishDiagnosticsParams GetPublishableDiagnostics()
        {
            var rawDiagnosticElements  = _fileRepository.Result.DiagnosticElements;
            var diagnostics            = ConvertToLSPDiagnostics(rawDiagnosticElements);
            PublishDiagnosticsParams p = new PublishDiagnosticsParams
            {
                Uri         = _fileRepository.PhysicalFile.Uri,
                Diagnostics = new Container <Diagnostic>(diagnostics)
            };

            return(p);
        }
        /// <summary>
        /// Updates file and sends diagnostics and error count to the client with the diagnostics service
        /// </summary>
        private void ProcessUpdateRequest <T>(Uri uri, T textOrChangeEvent)
        {
            try
            {
                var fileRepository             = UpdateFile(uri, textOrChangeEvent);
                PublishDiagnosticsParams diags = GetDiagnostics(uri, fileRepository);
                PublishResults(diags);

                _log.LogInformation(string.Format(Resources.LoggingMessages.request_success, _method));
            }
            catch (Exception e)
            {
                HandleError(string.Format(Resources.LoggingMessages.request_error, _method), e);
            }
        }
        /// <summary>
        /// Event Method triggered when diagnostics are detected.
        /// </summary>
        /// <param name="fileUri">File URI to be send to the client</param>
        /// <param name="diagnostics">List of TypeCobol compiler diagnostics</param>
        private void DiagnosticsDetected(object fileUri, DiagnosticEvent diagnosticEvent)
        {
            var diagParameter = new PublishDiagnosticsParams();
            var diagList      = new List <Diagnostic>();

            foreach (var diag in diagnosticEvent.Diagnostics)
            {
                diagList.Add(new Diagnostic(new Range(diag.Line, diag.ColumnStart, diag.Line, diag.ColumnEnd),
                                            diag.Message, (DiagnosticSeverity)diag.Info.Severity, diag.Info.Code.ToString(),
                                            diag.Info.ReferenceText));
            }

            diagParameter.uri         = fileUri.ToString();
            diagParameter.diagnostics = diagList.ToArray();
            SendDiagnostics(diagParameter);
        }
Exemple #10
0
        /// <summary>
        /// ‘textDocument/publishDiagnostics’通知を取得する
        /// </summary>
        /// <returns>対応するドキュメントURIが存在していればnull以外、存在しなければnull</returns>
        public PublishDiagnosticsParams[] PullTextDocumentPublishDiagnostics()
        {
            PublishDiagnosticsParams[] result;
            int index = 0;

            lock (publishDiagnostics_)
            {
                result = new PublishDiagnosticsParams[publishDiagnostics_.Count];
                foreach (var item in publishDiagnostics_)
                {
                    result[index] = item.Value;
                    ++index;
                }
                publishDiagnostics_.Clear();
            }
            return(result);
        }
Exemple #11
0
        private void DocumentDiagnosticsChanged(object sender, ProjectHandler.DocumentDiagnosticsEventArgs e)
        {
            var diagnosticsParams = new PublishDiagnosticsParams()
            {
                Uri         = new Uri(e.DocumentPath).AbsoluteUri,
                Diagnostics = e.Diagnostics
                              .Select(diagnostic => new Protocol.Diagnostic()
                {
                    Range    = diagnostic.Location.AsRange(),
                    Severity = ConvertSeverity(diagnostic.Severity),
                    Code     = diagnostic.Id,
                    Source   = "PeachPie",
                    Message  = diagnostic.GetMessage(),
                }),
            };

            _messageWriter.WriteNotification("textDocument/publishDiagnostics", diagnosticsParams);
        }
Exemple #12
0
        private void PublishPendingDiagnostics()
        {
            List <KeyValuePair <Uri, Diagnostic[]> > list;

            lock (_lock) {
                list = _pendingDiagnostic.ToList();
                _pendingDiagnostic.Clear();
            }

            foreach (var kvp in list)
            {
                var parameters = new PublishDiagnosticsParams {
                    uri         = kvp.Key,
                    diagnostics = kvp.Value
                };
                _rpc.NotifyWithParameterObjectAsync("textDocument/publishDiagnostics", parameters).DoNotWait();
            }
        }
Exemple #13
0
            public PublishDiagnosticsParamsImpl(PublishDiagnosticsParams param)
            {
                param_ = param;

                if ((param_ == null) || (param_.diagnostics == null))
                {
                    diagnostics_ = new DiagnosticImpl[0];
                    return;
                }

                diagnostics_ = new DiagnosticImpl[param_.diagnostics.Length];
                int i = 0;

                foreach (var item in param_.diagnostics)
                {
                    diagnostics_[i] = new DiagnosticImpl(item);
                    ++i;
                }
            }
Exemple #14
0
        private PublishDiagnosticsParams ParseInternal(Uri uri, string text, bool detailed, CancellationToken cancellation)
        {
            var newUri    = new Uri(Uri.UnescapeDataString(uri.AbsoluteUri));
            var localPath = newUri.LocalPath;

            // Workaround: Skip externals. Too many wrong function definitions
            if (localPath.Contains("AI_Intern", StringComparison.OrdinalIgnoreCase) && localPath.EndsWith("Externals.d", StringComparison.OrdinalIgnoreCase))
            {
                return(null);
            }

            ParseResult parserResult = null;

            if (string.IsNullOrWhiteSpace(text))
            {
                parserResult = FastCompiler.Load(localPath, detailed, GetDocuments().Values);
            }
            else
            {
                parserResult = FastCompiler.Parse(text, newUri, detailed, GetDocuments().Values);
            }
            PublishDiagnosticsParams result = null;

            if (parserResult.SyntaxErrors.Count > 0)
            {
                result = new PublishDiagnosticsParams
                {
                    Uri         = newUri,
                    Diagnostics = new Container <Diagnostic>(parserResult.SyntaxErrors
                                                             .Select(x => new Diagnostic
                    {
                        Message = x.ErrorCode.Description,
                        Code    = x.ErrorCode.Code,
                        //Source = localPath,
                        Severity = DiagnosticSeverityFromSyntaxError(x),
                        Range    = new OmniSharp.Extensions.LanguageServer.Protocol.Models.Range(new Position(x.Line - 1, x.Column), new Position(x.Line - 1, x.Column)),
                    }))
                };
            }
            UpdateParseResult(uri, parserResult);
            return(result);
        }
        public override Task <Unit> Handle(PublishDiagnosticsParams request,
                                           CancellationToken cancellationToken)
        {
            _logger.LogInformation(
                $"------------------------ {request.PrettyPrint()}");

            _languageServer.Window.LogError(
                $"--------------DIAGNOSTICS! {request.PrettyPrint()}");

            var uri = request.Uri;

            var errors = _bufferManager.GetAstFor(uri.ToString()).Errors;

            var diagnostics = new List <Diagnostic>();

            foreach (var error in errors)
            {
                diagnostics.Add(new Diagnostic()
                {
                    Severity = DiagnosticSeverity.Error,
                    Message  = $"Parser Error:\n{error.Message}",
                    Range    = new Range(new Position(error.Line - 1, error.Column),
                                         new Position(error.Line - 1, error.Column)),
                });
            }

            diagnostics.Add(new Diagnostic()
            {
                Severity = DiagnosticSeverity.Error,
                Message  = $"Parser Error:\nTEST",
                Range    = new Range(new Position(3, 4),
                                     new Position(3, 8))
            });

            request.Diagnostics = new Container <Diagnostic>(diagnostics);

            _languageServer.SendNotification("textDocument/publishDiagnostics", request);

            return(Unit.Task);
        }
Exemple #16
0
        public void SimpleTest(string expected)
        {
            var model = new PublishDiagnosticsParams {
                Uri         = new Uri("file:///abc/123.cs"),
                Diagnostics = new[] {
                    new Diagnostic {
                        Code     = new DiagnosticCode("abcd"),
                        Message  = "message",
                        Range    = new Range(new Position(1, 1), new Position(2, 2)),
                        Severity = DiagnosticSeverity.Error,
                        Source   = "csharp"
                    }
                }
            };
            var result = Fixture.SerializeObject(model);

            result.Should().Be(expected);

            var deresult = new LspSerializer(ClientVersion.Lsp3).DeserializeObject <PublishDiagnosticsParams>(expected);

            deresult.Should().BeEquivalentTo(model, x => x.UsingStructuralRecordEquality());
        }
Exemple #17
0
        public void SimpleTest(string expected)
        {
            var model = new PublishDiagnosticsParams()
            {
                Uri         = new Uri("file:///abc/123.cs"),
                Diagnostics = new[] {
                    new Diagnostic()
                    {
                        Code     = new DiagnosticCode("abcd"),
                        Message  = "message",
                        Range    = new Range(new Position(1, 1), new Position(2, 2)),
                        Severity = DiagnosticSeverity.Error,
                        Source   = "csharp"
                    }
                }
            };
            var result = Fixture.SerializeObject(model);

            result.Should().Be(expected);

            var deresult = JsonConvert.DeserializeObject <PublishDiagnosticsParams>(expected);

            deresult.ShouldBeEquivalentTo(model);
        }
Exemple #18
0
 /// <summary>
 /// Diagnostics notification are sent from the server to the client to signal
 /// results of validation runs.
 /// </summary>
 public virtual void SendDiagnostics(PublishDiagnosticsParams parameters)
 {
 }
 public void DiagnosticReceived(PublishDiagnosticsParams request)
 {
     _diagnostics.Enqueue(request);
     _availableDiagnostics.Release();
 }
 /// <summary>
 /// Publishes the Diagnostics using the <c>_router</c>
 /// </summary>
 /// <param name="diags">The Diagnostics to publish.</param>
 private void PublishResults(PublishDiagnosticsParams diags)
 {
     _router.Document.PublishDiagnostics(diags);
     _mss.SendCountedErrors(diags.Diagnostics.Count());
 }
 public static void PublishDiagnostics(this IResponseRouter mediator, PublishDiagnosticsParams @params)
 {
     mediator.SendNotification(DocumentNames.PublishDiagnostics, @params);
 }
Exemple #22
0
        public override Task <SignatureHelp> Handle(SignatureHelpParams request, CancellationToken cancellationToken)
        {
            var currentHash = Hash.StringHash(request.TextDocument.Uri.GetFileSystemPath());

            var pos = request.Position;

            TreeSitter.GetSignature(currentHash, pos.Line, pos.Character, out var signatureArrayPtr, out var parameterCount, out var activeParameter, out var errorCount, out var errorRanges);

            if (signatureArrayPtr.ToInt64() == 0)
            {
                return(Task.FromResult(new SignatureHelp()));
            }

            var signaturePtr = System.Runtime.InteropServices.Marshal.ReadIntPtr(signatureArrayPtr);
            var signature    = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(signaturePtr);


            SignatureInformation info = new SignatureInformation();

            info.Label = signature;


            var paramList = new List <ParameterInformation>();

            if (parameterCount > 0)
            {
                for (int i = 0; i < parameterCount; i++)
                {
                    var paramInfo = new ParameterInformation();
                    var paramPtr  = System.Runtime.InteropServices.Marshal.ReadIntPtr(signatureArrayPtr + 8 * (i + 1));;
                    paramInfo.Label = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(paramPtr);
                    paramList.Add(paramInfo);
                }
            }

            info.Parameters = new Container <ParameterInformation>(paramList);


            SignatureHelp help = new SignatureHelp();

            help.Signatures      = new Container <SignatureInformation>(info);
            help.ActiveParameter = activeParameter;
            help.ActiveSignature = 0;


            if (errorCount > 0)
            {
                List <Diagnostic>        diagnostics       = new List <Diagnostic>();
                PublishDiagnosticsParams diagnosticsParams = new PublishDiagnosticsParams();
                diagnosticsParams.Uri = request.TextDocument.Uri;
                unsafe
                {
                    for (int i = 0; i < errorCount; i++)
                    {
                        Range *    errors     = (Range *)errorRanges;
                        var        error      = errors[i];
                        Diagnostic diagnostic = new Diagnostic();
                        diagnostic.Message = "Extra argument";
                        diagnostic.Range   = new OmniSharp.Extensions.LanguageServer.Protocol.Models.Range(
                            new Position(error.startLine, error.startCol),
                            new Position(error.endLine, error.endCol));
                        diagnostics.Add(diagnostic);
                    }
                }

                diagnoser.Add(request.TextDocument.Uri, 1, diagnostics);
            }
            else
            {
                diagnoser.Add(request.TextDocument.Uri, 1, new List <Diagnostic>());
            }

            return(Task.FromResult(help));
        }
 public static void PublishDiagnostics(this ILanguageServerDocument mediator, PublishDiagnosticsParams @params)
 {
     mediator.SendNotification(DocumentNames.PublishDiagnostics, @params);
 }
Exemple #24
0
 public static void PublishDiagnostics(this ILanguageServer mediator, PublishDiagnosticsParams @params)
 {
     mediator.SendNotification("textDocument/publishDiagnostics", @params);
 }
 public override Task <Unit> Handle(PublishDiagnosticsParams request, CancellationToken cancellationToken) => _handler.Invoke(request);
 public abstract Task <Unit> Handle(PublishDiagnosticsParams request, CancellationToken cancellationToken);
Exemple #27
0
 internal DiagnosticEventArgs(PublishDiagnosticsParams diagnosticParams)
 {
     this.diagnosticParams = diagnosticParams;
 }