Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enqueue additional and analyzer config documents in WorkCoordinator #58479

Merged
merged 2 commits into from
Dec 24, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,8 @@ internal async Task Project_AnalyzerOptions_Change(BackgroundAnalysisScope analy

Assert.Equal(expectedDocumentEvents, worker.SyntaxDocumentIds.Count);
Assert.Equal(expectedDocumentEvents, worker.DocumentIds.Count);

Assert.Equal(1, worker.NonSourceDocumentIds.Count);
}

[InlineData(BackgroundAnalysisScope.ActiveFile, false)]
Expand Down Expand Up @@ -701,22 +703,26 @@ internal async Task Document_AdditionalFileChange(BackgroundAnalysisScope analys

var expectedDocumentSyntaxEvents = 5;
var expectedDocumentSemanticEvents = 5;
var expectedNonSourceDocumentEvents = 1;

var ncfile = DocumentInfo.Create(DocumentId.CreateNewId(project.Id), "D6");

var worker = await ExecuteOperation(workspace, w => w.OnAdditionalDocumentAdded(ncfile));
Assert.Equal(expectedDocumentSyntaxEvents, worker.SyntaxDocumentIds.Count);
Assert.Equal(expectedDocumentSemanticEvents, worker.DocumentIds.Count);
Assert.Equal(expectedNonSourceDocumentEvents, worker.NonSourceDocumentIds.Count);

worker = await ExecuteOperation(workspace, w => w.ChangeAdditionalDocument(ncfile.Id, SourceText.From("//")));

Assert.Equal(expectedDocumentSyntaxEvents, worker.SyntaxDocumentIds.Count);
Assert.Equal(expectedDocumentSemanticEvents, worker.DocumentIds.Count);
Assert.Equal(expectedNonSourceDocumentEvents, worker.NonSourceDocumentIds.Count);

worker = await ExecuteOperation(workspace, w => w.OnAdditionalDocumentRemoved(ncfile.Id));

Assert.Equal(expectedDocumentSyntaxEvents, worker.SyntaxDocumentIds.Count);
Assert.Equal(expectedDocumentSemanticEvents, worker.DocumentIds.Count);
Assert.Empty(worker.NonSourceDocumentIds);
}

[InlineData(BackgroundAnalysisScope.ActiveFile, false)]
Expand Down Expand Up @@ -1619,7 +1625,7 @@ internal static class Metadata
public static readonly IncrementalAnalyzerProviderMetadata Crawler = new IncrementalAnalyzerProviderMetadata(new Dictionary<string, object> { { "WorkspaceKinds", new[] { SolutionCrawlerWorkspaceKind } }, { "HighPriorityForActiveFile", false }, { "Name", "TestAnalyzer" } });
}

private class Analyzer : IIncrementalAnalyzer
private class Analyzer : IIncrementalAnalyzer2
{
public static readonly Option<bool> TestOption = new Option<bool>("TestOptions", "TestOption", defaultValue: true);

Expand All @@ -1628,6 +1634,7 @@ private class Analyzer : IIncrementalAnalyzer

public readonly HashSet<DocumentId> SyntaxDocumentIds = new HashSet<DocumentId>();
public readonly HashSet<DocumentId> DocumentIds = new HashSet<DocumentId>();
public readonly HashSet<DocumentId> NonSourceDocumentIds = new HashSet<DocumentId>();
public readonly HashSet<ProjectId> ProjectIds = new HashSet<ProjectId>();

public readonly HashSet<DocumentId> InvalidateDocumentIds = new HashSet<DocumentId>();
Expand All @@ -1653,6 +1660,7 @@ public void Reset()

SyntaxDocumentIds.Clear();
DocumentIds.Clear();
NonSourceDocumentIds.Clear();
ProjectIds.Clear();

InvalidateDocumentIds.Clear();
Expand Down Expand Up @@ -1682,6 +1690,12 @@ public Task AnalyzeSyntaxAsync(Document document, InvocationReasons reasons, Can
return Task.CompletedTask;
}

public Task AnalyzeNonSourceDocumentAsync(TextDocument textDocument, InvocationReasons reasons, CancellationToken cancellationToken)
{
this.NonSourceDocumentIds.Add(textDocument.Id);
return Task.CompletedTask;
}

public Task RemoveDocumentAsync(DocumentId documentId, CancellationToken cancellationToken)
{
InvalidateDocumentIds.Add(documentId);
Expand Down Expand Up @@ -1732,6 +1746,15 @@ public Task DocumentCloseAsync(Document document, CancellationToken cancellation

public Task DocumentResetAsync(Document document, CancellationToken cancellationToken)
=> Task.CompletedTask;

public Task NonSourceDocumentOpenAsync(TextDocument textDocument, CancellationToken cancellationToken)
=> Task.CompletedTask;

public Task NonSourceDocumentCloseAsync(TextDocument textDocument, CancellationToken cancellationToken)
=> Task.CompletedTask;

public Task NonSourceDocumentResetAsync(TextDocument textDocument, CancellationToken cancellationToken)
=> Task.CompletedTask;
#endregion
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -439,7 +439,8 @@ private async Task EnqueueWorkItemAsync(Project project, DocumentId documentId,
_shutdownToken.ThrowIfCancellationRequested();

var priorityService = project.GetLanguageService<IWorkCoordinatorPriorityService>();
var isLowPriority = priorityService != null && await priorityService.IsLowPriorityAsync(GetRequiredDocument(project, documentId, document), _shutdownToken).ConfigureAwait(false);
document ??= project.GetDocument(documentId);
var isLowPriority = priorityService != null && document != null && await priorityService.IsLowPriorityAsync(document, _shutdownToken).ConfigureAwait(false);

var currentMember = GetSyntaxPath(changedMember);

Expand Down Expand Up @@ -473,7 +474,7 @@ private static Document GetRequiredDocument(Project project, DocumentId document

private async Task EnqueueWorkItemAsync(Project project, InvocationReasons invocationReasons)
{
foreach (var documentId in project.DocumentIds)
foreach (var documentId in project.DocumentIds.Concat(project.AdditionalDocumentIds).Concat(project.AnalyzerConfigDocumentIds))
mavasani marked this conversation as resolved.
Show resolved Hide resolved
await EnqueueWorkItemAsync(project, documentId, document: null, invocationReasons).ConfigureAwait(false);
}

Expand Down