コード例 #1
0
 private void Dispose(bool disposing)
 {
     if (disposing)
     {
         EditorNavigationSourceAggregator.Dispose();
     }
 }
コード例 #2
0
        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]);
        }
コード例 #3
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;
                }
            }
        }