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.GetClassificationColors(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(); } } }
public Task OnCommandUpdatedAsync(IReplCommandInput command, CancellationToken cancellationToken) { if (isResetting) { return(Task.CompletedTask); } Debug.Assert(execState != null); if (execState == null) { throw new InvalidOperationException(); } string code = command.Input; const string assemblyName = "myasm"; var previousScriptCompilation = execState.ScriptState.Script.GetCompilation(); if (cancellationToken.IsCancellationRequested) { return(Task.CompletedTask); } var options = previousScriptCompilation.Options; if (cancellationToken.IsCancellationRequested) { return(Task.CompletedTask); } var syntaxTree = CreateSyntaxTree(code, cancellationToken); if (cancellationToken.IsCancellationRequested) { return(Task.CompletedTask); } var sc = CreateScriptCompilation(assemblyName, syntaxTree, null, options, previousScriptCompilation, execState.ScriptState.Script.ReturnType, execState.ScriptState.Script.GlobalsType); if (cancellationToken.IsCancellationRequested) { return(Task.CompletedTask); } var sem = sc.GetSemanticModel(syntaxTree); if (cancellationToken.IsCancellationRequested) { return(Task.CompletedTask); } using (var workspace = new AdhocWorkspace(DesktopMefHostServices.DefaultServices)) { var classifier = new RoslynClassifier(sem.SyntaxTree.GetRoot(), sem, workspace, roslynClassificationTypes, defaultClassificationType, cancellationToken); foreach (var info in classifier.GetClassificationColors(new TextSpan(0, command.Input.Length))) { command.AddClassification(info.Span.Start, info.Span.Length, info.Type); } } return(Task.CompletedTask); }