예제 #1
0
        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);
        }
예제 #2
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);
                }
            }
        }
예제 #3
0
        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));
                }
            }
        }