internal void UpdateMessages(IEnumerable <EslintMessage> messages) { var oldSnapshot = Factory.CurrentSnapshot; var markers = ProcessMessages(messages).Select(CreateMarker); var newSnapshot = new LinterSnapshot(FilePath, oldSnapshot.VersionNumber + 1, markers); SnapToNewSnapshot(newSnapshot); }
private void SnapToNewSnapshot(LinterSnapshot snapshot) { var factory = Factory; factory.UpdateMarkers(snapshot); _provider.UpdateAllSinks(factory); UpdateMarkers(_currentSnapshot, snapshot); Snapshot = snapshot; }
private void UpdateMarkers(ITextSnapshot currentSnapshot, LinterSnapshot snapshot) { var oldSnapshot = Snapshot; var handler = TagsChanged; if (null == handler) { return; } var start = int.MaxValue; var end = int.MinValue; if (null != oldSnapshot && 0 < oldSnapshot.Count) { start = oldSnapshot.Markers .Select(marker => marker.Span.Start.TranslateTo(currentSnapshot, PointTrackingMode.Negative)) .Min(); end = oldSnapshot.Markers .Select(marker => marker.Span.End.TranslateTo(currentSnapshot, PointTrackingMode.Positive)) .Max(); } if (0 < snapshot.Count) { start = Math.Min(start, snapshot.Markers.Select(marker => marker.Span.Start.Position) .Min()); end = Math.Max(end, snapshot.Markers.Select(marker => marker.Span.End.Position) .Max()); } if (start > end) { return; } handler(this, new SnapshotSpanEventArgs(new SnapshotSpan( currentSnapshot, Span.FromBounds(start, end)))); }