From 35b29cf11e5035fa1d5147a706071b751c96539e Mon Sep 17 00:00:00 2001 From: David Barbet Date: Fri, 20 Oct 2023 18:38:04 -0700 Subject: [PATCH] Ensure execution diagnostics are logged as well --- .../LanguageServerProjectSystem.cs | 35 +++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/src/Features/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LanguageServerProjectSystem.cs b/src/Features/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LanguageServerProjectSystem.cs index c849f47d63a5f..1b683869f22c9 100644 --- a/src/Features/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LanguageServerProjectSystem.cs +++ b/src/Features/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LanguageServerProjectSystem.cs @@ -150,8 +150,8 @@ private async ValueTask LoadOrReloadProjectsAsync(ImmutableSegmentedList { - var (errorKind, preferredBuildHostKind) = await LoadOrReloadProjectAsync(projectToLoad, buildHostProcessManager, cancellationToken); - if (errorKind is LSP.MessageType.Error) + var result = await LoadOrReloadProjectAsync(projectToLoad, buildHostProcessManager, cancellationToken); + if (result.FailureType is LSP.MessageType.Error) { // We should display a toast when the value of displayedToast is 0. This will also update the value to 1 meaning we won't send any more toasts. var shouldShowToast = Interlocked.CompareExchange(ref displayedToast, value: 1, comparand: 0) == 0; @@ -159,14 +159,14 @@ private async ValueTask LoadOrReloadProjectsAsync(ImmutableSegmentedList LoadOrReloadProjectAsync(ProjectToLoad projectToLoad, BuildHostProcessManager buildHostProcessManager, CancellationToken cancellationToken) + private async Task<(LSP.MessageType? FailureType, BuildHostProcessKind? PreferredKind)> LoadOrReloadProjectAsync(ProjectToLoad projectToLoad, BuildHostProcessManager buildHostProcessManager, CancellationToken cancellationToken) { BuildHostProcessKind? preferredBuildHostKind = null; @@ -207,11 +207,10 @@ private async ValueTask LoadOrReloadProjectsAsync(ImmutableSegmentedList item.Kind is WorkspaceDiagnosticKind.Failure)) { - // If there were any total failures, no point in continuing. + _ = LogDiagnostics(projectPath, diagnosticLogItems); + // We have total failures in evaluation, no point in continuing. return (LSP.MessageType.Error, preferredBuildHostKind); } @@ -257,7 +256,14 @@ private async ValueTask LoadOrReloadProjectsAsync(ImmutableSegmentedList diagnosticLogItems) + LSP.MessageType? LogDiagnostics(string projectPath, ImmutableArray diagnosticLogItems) { + if (diagnosticLogItems.IsEmpty) + { + return null; + } + foreach (var logItem in diagnosticLogItems) { var projectName = Path.GetFileName(projectPath); _logger.Log(logItem.Kind is WorkspaceDiagnosticKind.Failure ? LogLevel.Error : LogLevel.Warning, $"{logItem.Kind} while loading {logItem.ProjectFilePath}: {logItem.Message}"); } + + return diagnosticLogItems.Any(logItem => logItem.Kind is WorkspaceDiagnosticKind.Failure) ? LSP.MessageType.Error : LSP.MessageType.Warning; } } }