Skip to content

Commit dce3852

Browse files
committed
Update CodeActionResolveHandler to support removing documents
1 parent b813dba commit dce3852

File tree

1 file changed

+34
-6
lines changed

1 file changed

+34
-6
lines changed

src/Features/LanguageServer/Protocol/Handler/CodeActions/CodeActionResolveHandler.cs

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public TextDocumentIdentifier GetTextDocumentIdentifier(LSP.CodeAction request)
9090

9191
var textDiffService = solution.Services.GetService<IDocumentTextDifferencingService>();
9292

93-
using var _ = ArrayBuilder<TextDocumentEdit>.GetInstance(out var textDocumentEdits);
93+
using var _ = ArrayBuilder<SumType<TextDocumentEdit, CreateFile, RenameFile, DeleteFile>>.GetInstance(out var textDocumentEdits);
9494

9595
foreach (var option in operations)
9696
{
@@ -131,13 +131,10 @@ public TextDocumentIdentifier GetTextDocumentIdentifier(LSP.CodeAction request)
131131
}
132132

133133
if (projectChange.GetAddedDocuments().Any()
134-
|| projectChange.GetRemovedDocuments().Any()
135134
|| projectChange.GetAddedAdditionalDocuments().Any()
136-
|| projectChange.GetRemovedAdditionalDocuments().Any()
137-
|| projectChange.GetAddedAnalyzerConfigDocuments().Any()
138-
|| projectChange.GetRemovedAnalyzerConfigDocuments().Any())
135+
|| projectChange.GetAddedAnalyzerConfigDocuments().Any())
139136
{
140-
// Adding and removing documents is not currently supported
137+
// Adding documents is not currently supported
141138
codeAction.Edit = new LSP.WorkspaceEdit { DocumentChanges = Array.Empty<TextDocumentEdit>() };
142139
return codeAction;
143140
}
@@ -171,6 +168,21 @@ public TextDocumentIdentifier GetTextDocumentIdentifier(LSP.CodeAction request)
171168

172169
#endif
173170

171+
// Removed documents
172+
await AddTextDocumentDeletionsAsync(
173+
projectChanges.SelectMany(pc => pc.GetRemovedDocuments()),
174+
solution.GetDocument).ConfigureAwait(false);
175+
176+
// Removed analyzer config documents
177+
await AddTextDocumentDeletionsAsync(
178+
projectChanges.SelectMany(pc => pc.GetRemovedAnalyzerConfigDocuments()),
179+
solution.GetAnalyzerConfigDocument).ConfigureAwait(false);
180+
181+
// Removed additional documents
182+
await AddTextDocumentDeletionsAsync(
183+
projectChanges.SelectMany(pc => pc.GetRemovedAdditionalDocuments()),
184+
solution.GetAdditionalDocument).ConfigureAwait(false);
185+
174186
// Changed documents
175187
await AddTextDocumentEditsAsync(
176188
projectChanges.SelectMany(pc => pc.GetChangedDocuments()),
@@ -194,6 +206,22 @@ await AddTextDocumentEditsAsync(
194206

195207
return codeAction;
196208

209+
Task AddTextDocumentDeletionsAsync<TTextDocument>(
210+
IEnumerable<DocumentId> removedDocuments,
211+
Func<DocumentId, TTextDocument?> getOldDocument)
212+
where TTextDocument : TextDocument
213+
{
214+
foreach (var docId in removedDocuments)
215+
{
216+
var oldTextDoc = getOldDocument(docId);
217+
Contract.ThrowIfNull(oldTextDoc);
218+
219+
textDocumentEdits.Add(new DeleteFile { Uri = oldTextDoc.GetURI() });
220+
}
221+
222+
return Task.CompletedTask;
223+
}
224+
197225
async Task AddTextDocumentEditsAsync<TTextDocument>(
198226
IEnumerable<DocumentId> changedDocuments,
199227
Func<DocumentId, TTextDocument?> getNewDocument,

0 commit comments

Comments
 (0)