protected override async Task GetTagsAsync(GetTagsState state, NormalizedSnapshotSpanCollection spans) { if (spans.Count == 0) { return; } var snapshot = spans[0].Snapshot; if (!state.UserAsyncState.IsInitialized) { await Initialize(state.UserAsyncState, snapshot, state.CancellationToken).ConfigureAwait(false); } if (!state.UserAsyncState.IsValid) { return; } var classifier = new RoslynClassifier(state.UserAsyncState.SyntaxRoot, state.UserAsyncState.SemanticModel, state.UserAsyncState.Workspace, roslynClassificationTypes, defaultClassificationType, state.CancellationToken); state.UserAsyncState.TagsList.Clear(); foreach (var span in spans) { foreach (var info in classifier.GetClassifications(span.Span.ToTextSpan())) { state.UserAsyncState.TagsList.Add(new TagSpan <IClassificationTag>(new SnapshotSpan(snapshot, info.Span), new ClassificationTag(info.Type))); } if (state.UserAsyncState.TagsList.Count != 0) { state.AddResult(new TagsResult(span, state.UserAsyncState.TagsList.ToArray())); state.UserAsyncState.TagsList.Clear(); } } }
protected abstract Task GetTagsAsync(GetTagsState state, NormalizedSnapshotSpanCollection spans);