Skip to content

Commit 5ffbba9

Browse files
authored
Merge pull request #67650 from mavasani/FixFixAllInProjectSolutionForFSharp
Fix for FixAll in project and solution scopes for non-C#/VB projects
2 parents 9617117 + 6302fe2 commit 5ffbba9

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

src/Workspaces/Core/Portable/CodeFixes/FixAllOccurrences/FixAllContextHelper.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,11 @@ private static async Task<ImmutableDictionary<Document, ImmutableArray<Diagnosti
130130
CancellationToken cancellationToken)
131131
{
132132
var builder = ImmutableDictionary.CreateBuilder<Document, ImmutableArray<Diagnostic>>();
133-
foreach (var (document, diagnosticsForDocument) in diagnostics.GroupBy(d => solution.GetDocument(d.Location.SourceTree)))
133+
134+
// NOTE: We use 'GetTextDocumentForLocation' extension to ensure we also handle external location diagnostics in non-C#/VB languages.
135+
foreach (var (textDocument, diagnosticsForDocument) in diagnostics.GroupBy(d => solution.GetTextDocumentForLocation(d.Location)))
134136
{
135-
if (document is null)
137+
if (textDocument is not Document document)
136138
continue;
137139

138140
cancellationToken.ThrowIfCancellationRequested();

src/Workspaces/Core/Portable/Shared/Extensions/ISolutionExtensions.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
using System;
66
using System.Collections.Immutable;
7+
using System.Linq;
78
using System.Threading;
89
using System.Threading.Tasks;
910
using Microsoft.CodeAnalysis.PooledObjects;
@@ -38,6 +39,20 @@ public static async Task<ImmutableArray<INamespaceSymbol>> GetGlobalNamespacesAs
3839
public static TextDocumentKind? GetDocumentKind(this Solution solution, DocumentId documentId)
3940
=> solution.GetTextDocument(documentId)?.Kind;
4041

42+
internal static TextDocument? GetTextDocumentForLocation(this Solution solution, Location location)
43+
{
44+
switch (location.Kind)
45+
{
46+
case LocationKind.SourceFile:
47+
return solution.GetDocument(location.SourceTree);
48+
case LocationKind.ExternalFile:
49+
var documentId = solution.GetDocumentIdsWithFilePath(location.GetLineSpan().Path).FirstOrDefault();
50+
return solution.GetTextDocument(documentId);
51+
default:
52+
return null;
53+
}
54+
}
55+
4156
public static Solution WithTextDocumentText(this Solution solution, DocumentId documentId, SourceText text, PreservationMode mode = PreservationMode.PreserveIdentity)
4257
{
4358
var documentKind = solution.GetDocumentKind(documentId);

0 commit comments

Comments
 (0)