Naggy.DiagnosticsFinder.Find C# (CSharp) Method

Find() public static method

public static Find ( ITextBuffer buffer ) : IEnumerable
buffer ITextBuffer
return IEnumerable
        public static IEnumerable<Diagnostic> Find(ITextBuffer buffer)
        {
            if (!Enabled)
                return Enumerable.Empty<Diagnostic>();

            ITextDocument document;
            if (!buffer.Properties.TryGetProperty(typeof(ITextDocument), out document) || document == null)
                return Enumerable.Empty<Diagnostic>();

            var extension = Path.GetExtension(document.FilePath);
            if (extension != null && extension.StartsWith(".h"))
                return Enumerable.Empty<Diagnostic>();

            ClangServices.Process(buffer);
            ErrorList.ClearDiagnosticsFromFile(document.FilePath);

            var diags = (from diag in ClangServices.GetDiagnostics(buffer)
                   where DiagnosticsBlacklist.Contains(diag) == false &&
                         !diag.FilePath.Any(c => Path.GetInvalidPathChars().Contains(c)) &&
                         Path.GetFileName(diag.FilePath) == Path.GetFileName(document.FilePath)
                   select diag).ToList();

            ErrorList.Show(diags);
            return diags;
        }

Usage Example

Beispiel #1
0
        private void FindDiagnostics()
        {
            try
            {
                spansAndDiagnostics.Clear();

                int minPosition = buffer.CurrentSnapshot.Length;
                int maxPosition = 0;

                foreach (var diagnostic in DiagnosticsFinder.Find(buffer))
                {
                    if (diagnostic.StartLine != 0)
                    {
                        diagnostic.StartLine--;
                    }

                    var textLine      = buffer.CurrentSnapshot.GetLineFromLineNumber(diagnostic.StartLine);
                    var startPosition = textLine.Start.Position;
                    var endPosition   = textLine.End.Position;

                    minPosition = Math.Min(minPosition, startPosition);
                    maxPosition = Math.Max(maxPosition, endPosition);

                    SnapshotSpan span = new SnapshotSpan(buffer.CurrentSnapshot,
                                                         Span.FromBounds(startPosition, endPosition));
                    spansAndDiagnostics.Add(Tuple.Create(span, diagnostic));
                }

                if (spansAndDiagnostics.Any())
                {
                    RaiseTagsChanged(minPosition, maxPosition);
                }
                else
                {
                    if (TagsChanged != null && !lastTotalDiagnosticsSpan.IsEmpty)
                    {
                        TagsChanged(this, new SnapshotSpanEventArgs(lastTotalDiagnosticsSpan));
                    }
                }
            }
            catch (Exception e)
            {
                dte.StatusBar.Text = "Naggy Error: " + e.Message;
            }
        }
DiagnosticsFinder