@@ -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