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