Exemplo n.º 1
0
        public void ProcessMessages(string swagger, IEnumerable<ValidationMessage> messages)
        {
            if (scintilla.Text != swagger)
                return; // text was changed in the meantime

            // try parse
            var reader = new StringReader(swagger);
            YamlNode doc = null;
            try
            {
                var yamlStream = new YamlStream();
                yamlStream.Load(reader);
                doc = yamlStream.Documents[0].RootNode;
            }
            catch { }

            // process messages
            if (doc != null)
            {
                foreach (var message in messages)
                {
                    if (message.Severity > LogEntrySeverity.Debug)
                    {
                        scintilla.IndicatorCurrent = INDICATOR_BASE + (int)message.Severity;
                        var node = doc.ResolvePath(message.Path.Reverse().Skip(1));
                        var start = node.Start.Index;
                        var len = Math.Max(1, node.End.Index - start);
                        scintilla.IndicatorFillRange(start, len);
                        highlights.Add(new Highlight
                        {
                            Start = start,
                            End = start + len,
                            Message =
                                $"{message.Severity}: [{string.Join("->", message.Path.Reverse())}] {message.Message}"
                        });
                    }
                }
            }
        }