private void Dispose(bool disposing) { if (disposing) { EditorNavigationSourceAggregator.Dispose(); } }
public override IEnumerable <INavigateToTarget> GoToSourceImpl(VSOBJGOTOSRCTYPE gotoSourceType, ITrackingPoint triggerPoint) { if (triggerPoint == null) { return(new INavigateToTarget[0]); } ITextSnapshot currentSnapshot = triggerPoint.TextBuffer.CurrentSnapshot; SnapshotPoint point = triggerPoint.GetPoint(currentSnapshot); foreach (var span in this.ClassificationTagAggregator.GetTags(new SnapshotSpan(point, point))) { if (!span.Tag.ClassificationType.IsOfType(AntlrClassificationTypeNames.LexerRule) && !span.Tag.ClassificationType.IsOfType(AntlrClassificationTypeNames.ParserRule)) { continue; } NormalizedSnapshotSpanCollection spans = span.Span.GetSpans(currentSnapshot); if (spans.Count == 1) { SnapshotSpan span2 = spans[0]; SnapshotSpan span3 = span.Span.GetSpans(span.Span.AnchorBuffer)[0]; if (span2.Length == span3.Length) { SnapshotSpan span4 = spans[0]; if (span4.Contains(point)) { string ruleName = span2.GetText(); var rules = EditorNavigationSourceAggregator.GetNavigationTargets().ToArray(); var rule = rules.FirstOrDefault(x => string.Equals(x.Name, ruleName)); if (rule != null) { var snapshot = rule.Seek.Snapshot; var trackingSeek = snapshot.CreateTrackingSpan(rule.Seek.Span, SpanTrackingMode.EdgeExclusive); var seek = trackingSeek.GetSpan(TextView.TextBuffer.CurrentSnapshot); return(new INavigateToTarget[] { new SnapshotSpanNavigateToTarget(TextView, seek) }); } } } } } return(new INavigateToTarget[0]); }
public void AugmentQuickInfoSession(IQuickInfoSession session, IList <object> quickInfoContent, out ITrackingSpan applicableToSpan) { applicableToSpan = null; if (session.TextView.TextBuffer == this.TextBuffer) { ITextSnapshot currentSnapshot = this.TextBuffer.CurrentSnapshot; SnapshotPoint?triggerPoint = session.GetTriggerPoint(currentSnapshot); if (!triggerPoint.HasValue) { return; } foreach (var span in this.Aggregator.GetTags(new SnapshotSpan(triggerPoint.Value, triggerPoint.Value))) { if (!span.Tag.ClassificationType.IsOfType(AntlrClassificationTypeNames.LexerRule) && !span.Tag.ClassificationType.IsOfType(AntlrClassificationTypeNames.ParserRule)) { continue; } NormalizedSnapshotSpanCollection spans = span.Span.GetSpans(currentSnapshot); if (spans.Count != 1) { continue; } SnapshotSpan span2 = spans[0]; SnapshotSpan anchorSpan = span.Span.GetSpans(span.Span.AnchorBuffer)[0]; if (span2.Length != anchorSpan.Length) { continue; } if (!span2.Contains(triggerPoint.Value)) { continue; } var rules = EditorNavigationSourceAggregator.GetNavigationTargets().ToArray(); if (rules.Length == 0) { quickInfoContent.Add("Parsing..."); applicableToSpan = currentSnapshot.CreateTrackingSpan(span2, SpanTrackingMode.EdgeExclusive); return; } string ruleName = span2.GetText(); IEditorNavigationTarget target = null; foreach (var rule in rules) { if (string.Equals(rule.Name, ruleName)) { target = rule; break; } } if (target == null) { continue; } SnapshotSpan targetSpan = target.Span; quickInfoContent.Add(!targetSpan.IsEmpty ? targetSpan.GetText() : target.Name); applicableToSpan = currentSnapshot.CreateTrackingSpan(span2, SpanTrackingMode.EdgeExclusive); return; } } }