void Reparse(object ignored) { if (bufferDirty) { lock (l) if (bufferDirty) bufferDirty = false; // Mostly stolen from DynamicParserLanguageServiceItem ToDoErrorReporter reporter = new ToDoErrorReporter(); parser.Parse<object>(uri.ToString(), new TextSnapshotToTextReader(this.textBuffer.CurrentSnapshot), reporter); this.bufferView.Dispatcher.BeginInvoke( DispatcherPriority.Normal, (Action)delegate { CleanupOldToolTipPopups(); ProcessSquiggles(reporter); }); } }
// Mostly from DynamicParserLanguageServiceItem void ProcessSquiggles(ToDoErrorReporter reporter) { if (this.squiggleProvider == null) return; foreach (ISquiggleAdornment squiggle in this.squiggles) this.squiggleProvider.RemoveSquiggle(squiggle); this.squiggles.Clear(); foreach (ErrorInfo error in reporter.Errors) { if (error.Location != null && error.Location.Span.Length > 0) { SnapshotSpan convertedSpan = GetCurrentSpan((ITextSnapshot)this.textBuffer.CurrentSnapshot, error.Location.Span); ITrackingSpan trackingSpan = convertedSpan.Snapshot.CreateTrackingSpan( convertedSpan.Span, SpanTrackingMode.EdgeExclusive); ISquiggleAdornment squiggle = this.squiggleProvider.AddSquiggle(trackingSpan, String.Format(error.Info.Message, new List<object>(error.Info.Arguments).ToArray())); this.squiggles.Add(squiggle); } } }