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; } }