public async Task TestNoErrorsAfterProjectRemoved() { using var workspace = TestWorkspace.CreateCSharp("class"); using var wrapper = new DiagnosticTaggerWrapper <DiagnosticsSquiggleTaggerProvider, IErrorTag>(workspace); var tagger = wrapper.TaggerProvider.CreateTagger <IErrorTag>(workspace.Documents.First().GetTextBuffer()); using var disposable = tagger as IDisposable; await wrapper.WaitForTags(); var snapshot = workspace.Documents.First().GetTextBuffer().CurrentSnapshot; var spans = tagger.GetTags(snapshot.GetSnapshotSpanCollection()).ToList(); // Initially, while the buffer is associated with a Document, we should get // error squiggles. Assert.True(spans.Count > 0); // Now remove the project. workspace.CloseDocument(workspace.Documents.First().Id); workspace.OnDocumentRemoved(workspace.Documents.First().Id); workspace.OnProjectRemoved(workspace.Projects.First().Id); await wrapper.WaitForTags(); spans = tagger.GetTags(snapshot.GetSnapshotSpanCollection()).ToList(); // And we should have no errors for this document. Assert.True(spans.Count == 0); }
internal static async Task <IList <ITagSpan <IErrorTag> > > GetErrorsFromUpdateSource( TestWorkspace workspace, DiagnosticsUpdatedArgs updateArgs ) { var source = new TestDiagnosticUpdateSource(workspace); using ( var wrapper = new DiagnosticTaggerWrapper <TProvider, IErrorTag>( workspace, updateSource: source ) ) { var tagger = wrapper.TaggerProvider.CreateTagger <IErrorTag>( workspace.Documents.First().GetTextBuffer() ); using (var disposable = tagger as IDisposable) { source.RaiseDiagnosticsUpdated(updateArgs); await wrapper.WaitForTags(); var snapshot = workspace.Documents.First().GetTextBuffer().CurrentSnapshot; var spans = tagger .GetTags(snapshot.GetSnapshotSpanCollection()) .ToImmutableArray(); return(spans); } } }
internal static async Task <List <ITagSpan <IErrorTag> > > GetErrorSpans( TestWorkspace workspace, Dictionary <string, DiagnosticAnalyzer[]> analyzerMap = null) { using (var wrapper = new DiagnosticTaggerWrapper(workspace, analyzerMap)) { var tagger = wrapper.TaggerProvider.CreateTagger <IErrorTag>(workspace.Documents.First().GetTextBuffer()); using (var disposable = tagger as IDisposable) { await wrapper.WaitForTags(); var snapshot = workspace.Documents.First().GetTextBuffer().CurrentSnapshot; var spans = tagger.GetTags(snapshot.GetSnapshotSpanCollection()).ToList(); return(spans); } } }
internal static async Task <Tuple <ImmutableArray <DiagnosticData>, List <ITagSpan <IErrorTag> > > > GetDiagnosticsAndErrorSpans( TestWorkspace workspace, Dictionary <string, DiagnosticAnalyzer[]> analyzerMap = null) { using (var wrapper = new DiagnosticTaggerWrapper(workspace, analyzerMap)) { var tagger = wrapper.TaggerProvider.CreateTagger <IErrorTag>(workspace.Documents.First().GetTextBuffer()); using (var disposable = tagger as IDisposable) { await wrapper.WaitForTags(); var analyzerDiagnostics = await wrapper.AnalyzerService.GetDiagnosticsAsync(workspace.CurrentSolution); var snapshot = workspace.Documents.First().GetTextBuffer().CurrentSnapshot; var spans = tagger.GetTags(snapshot.GetSnapshotSpanCollection()).ToList(); return(Tuple.Create(analyzerDiagnostics, spans)); } } }