/// <summary> /// This method scans the given SnapshotSpan for potential matches for this classification. /// In this instance, it classifies everything and returns each span as a new ClassificationSpan. /// </summary> /// <param name="trackingSpan">The span currently being classified</param> /// <returns>A list of ClassificationSpans that represent spans identified to be of this classification</returns> public IList<ClassificationSpan> GetClassificationSpans(SnapshotSpan span) { List<ClassificationSpan> classifications = new List<ClassificationSpan>(); /* * Comment Classifications */ if (span.IsComment()) classifications.Add(new ClassificationSpan(span, _commentClassificationType)); /* * Keyword Classifications */ if (span.IsCommand()) { string command = span.GetCommand(); classifications.Add(new ClassificationSpan(new SnapshotSpan(span.Start, command.Length), _keywordClassificationType)); } return classifications; }
private void OnKeyDown(object sender, KeyEventArgs e) { // Make sure that this event happened on the same text view to which we're attached. ITextView textView = sender as ITextView; if (this.subjectTextView != textView) return; // if there is a session already leave it be if (activeSession != null) return; // determine which subject buffer is affected by looking at the caret position SnapshotPoint? caret = textView.Caret.Position.Point.GetPoint(textBuffer => ( subjectBuffers.Contains(textBuffer)), PositionAffinity.Predecessor); // return if no suitable buffer found if (!caret.HasValue) return; SnapshotPoint caretPoint = caret.Value; ITextSnapshotLine line = caretPoint.GetContainingLine(); SnapshotSpan span = new SnapshotSpan(line.Start, line.End); if (span.IsComment() || span.IsCommand()) return; // the invocation occurred in a subject buffer of interest to us triggerPosition = caretPoint.Position; ITrackingPoint triggerPoint = caretPoint.Snapshot.CreateTrackingPoint(triggerPosition, PointTrackingMode.Negative); completionSpan = caretPoint.Snapshot.CreateTrackingSpan(caretPoint.Position, 0, SpanTrackingMode.EdgeInclusive); // Create a completion session activeSession = completionBroker.CreateCompletionSession(textView, triggerPoint, true); // Put the completion context and original (empty) completion span // on the session so that it can be used by the completion source activeSession.Properties.AddProperty(typeof(ApacheIntellisenseController), completionSpan); // Attach to the session events activeSession.Dismissed += new System.EventHandler(OnActiveSessionDismissed); activeSession.Committed += new System.EventHandler(OnActiveSessionCommitted); // Start the completion session. The intellisense will be triggered. activeSession.Start(); }
public static bool IsComment(this ITextSnapshotLine line) { SnapshotSpan span = new SnapshotSpan(line.Start, line.End); return span.IsComment(); }