private int GetTokenExtent(NemerleSource source, ITextSnapshot snapshot, SyntaxClassifier.SpanInfo spanInfo, out int line, out int startIdx, out int endIdx) { switch (spanInfo.Type) { case SyntaxClassifier.SpanType.String: case SyntaxClassifier.SpanType.RecursiveString: case SyntaxClassifier.SpanType.VerbatimString: // TODO: implement logic for $" $(x.|) " goto default; case SyntaxClassifier.SpanType.Operator: if (!spanInfo.Span.IsEmpty && snapshot[spanInfo.Span.End - 1] == '.') { return(GetDefaultExtent(out line, out startIdx, out endIdx)); } else { goto default; } default: var loc = Utils.ToNLocation(source.FileIndex, new SnapshotSpan(snapshot, spanInfo.Span)); Debug.Assert(loc.Line == loc.EndLine); line = loc.Line - 1; startIdx = loc.Column - 1; endIdx = loc.EndColumn - 1; return(VSConstants.S_OK); } }
public static void InsertClassification(List <SyntaxClassifier.SpanInfo> items, SyntaxClassifier.SpanInfo span) { var index = items.BinarySearch(span); items.Insert(index >= 0 ? index : ~index, span); }