@@ -9,6 +9,7 @@ Imports System.Reflection
9
9
Imports System.Threading
10
10
Imports Microsoft.CodeAnalysis.CodeActions
11
11
Imports Microsoft.CodeAnalysis.CodeFixes
12
+ Imports Microsoft.CodeAnalysis.Copilot
12
13
Imports Microsoft.CodeAnalysis.Diagnostics
13
14
Imports Microsoft.CodeAnalysis.Editor.Implementation.Diagnostics.UnitTests
14
15
Imports Microsoft.CodeAnalysis.Editor.UnitTests
@@ -17,6 +18,8 @@ Imports Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces
17
18
Imports Microsoft.CodeAnalysis.ErrorLogger
18
19
Imports Microsoft.CodeAnalysis.Host
19
20
Imports Microsoft.CodeAnalysis.Host.Mef
21
+ Imports Microsoft.CodeAnalysis.Text
22
+ Imports Microsoft.CodeAnalysis.UnitTests
20
23
Imports Roslyn.Utilities
21
24
22
25
Namespace Microsoft.CodeAnalysis.Editor.Implementation.CodeFixes.UnitTests
@@ -263,5 +266,86 @@ Namespace Microsoft.CodeAnalysis.Editor.Implementation.CodeFixes.UnitTests
263
266
#Enable Warning RS0005
264
267
End Function
265
268
End Class
269
+
270
+ <Fact>
271
+ Public Async Function TestCopilotCodeAnalysisServiceWithoutSyntaxTree() As Task
272
+ Dim workspaceDefinition =
273
+ <Workspace>
274
+ <Project Language= "NoCompilation" AssemblyName= "TestAssembly" CommonReferencesPortable= "true" >
275
+ <Document>
276
+ var x = {} ; // e.g., TypeScript code or anything else that doesn 't support compilations
277
+ </Document>
278
+ </Project>
279
+ </Workspace>
280
+
281
+ Dim composition = EditorTestCompositions.EditorFeatures.AddParts(
282
+ GetType (NoCompilationContentTypeDefinitions),
283
+ GetType (NoCompilationContentTypeLanguageService),
284
+ GetType (NoCompilationCopilotCodeAnalysisService))
285
+
286
+ Using workspace = EditorTestWorkspace.Create(workspaceDefinition, composition:=composition)
287
+
288
+ Dim document = workspace.CurrentSolution.Projects.Single().Documents.Single()
289
+ Dim diagnosticsXml =
290
+ <Diagnostics>
291
+ < Error Id=< %= "TestId" %>
292
+ MappedFile=< %= document.Name %> MappedLine= "0" MappedColumn= "0"
293
+ OriginalFile=< %= document.Name %> OriginalLine= "0" OriginalColumn= "0"
294
+ Message=< %= "Test Message" %>/>
295
+ </Diagnostics>
296
+ Dim diagnostics = DiagnosticProviderTests.GetExpectedDiagnostics(workspace, diagnosticsXml)
297
+
298
+ Dim copilotCodeAnalysisService = document.Project.Services.GetService( Of ICopilotCodeAnalysisService)()
299
+ Dim noCompilationCopilotCodeAnalysisService = DirectCast (copilotCodeAnalysisService, NoCompilationCopilotCodeAnalysisService)
300
+
301
+ NoCompilationCopilotCodeAnalysisService.Diagnostics = diagnostics.SelectAsArray( Of Diagnostic)(
302
+ Function (d) d.ToDiagnosticAsync(document.Project, CancellationToken.None).Result)
303
+ Dim codefixService = workspace.ExportProvider.GetExportedValue( Of ICodeFixService)
304
+
305
+ ' Make sure we don't crash
306
+ Dim unused = Await codefixService.GetMostSevereFixAsync(
307
+ document, Text.TextSpan.FromBounds( 0 , 0 ), New DefaultCodeActionRequestPriorityProvider(), CodeActionOptions.DefaultProvider, CancellationToken.None)
308
+ End Using
309
+ End Function
310
+
311
+ <ExportLanguageService( GetType (ICopilotCodeAnalysisService), NoCompilationConstants.LanguageName, ServiceLayer.Test), [Shared], PartNotDiscoverable>
312
+ Private Class NoCompilationCopilotCodeAnalysisService
313
+ Implements ICopilotCodeAnalysisService
314
+
315
+ <ImportingConstructor>
316
+ <Obsolete(MefConstruction.ImportingConstructorMessage, True )>
317
+ Public Sub New ()
318
+ End Sub
319
+
320
+ Public Shared Property Diagnostics As ImmutableArray( Of Diagnostic) = ImmutableArray( Of Diagnostic).Empty
321
+
322
+ Public Function IsRefineOptionEnabledAsync() As Task( Of Boolean ) Implements ICopilotCodeAnalysisService.IsRefineOptionEnabledAsync
323
+ Return Task.FromResult( True )
324
+ End Function
325
+
326
+ Public Function IsCodeAnalysisOptionEnabledAsync() As Task( Of Boolean ) Implements ICopilotCodeAnalysisService.IsCodeAnalysisOptionEnabledAsync
327
+ Return Task.FromResult( True )
328
+ End Function
329
+
330
+ Public Function IsAvailableAsync(cancellationToken As CancellationToken) As Task( Of Boolean ) Implements ICopilotCodeAnalysisService.IsAvailableAsync
331
+ Return Task.FromResult( True )
332
+ End Function
333
+
334
+ Public Function GetAvailablePromptTitlesAsync(document As Document, cancellationToken As CancellationToken) As Task( Of ImmutableArray( Of String )) Implements ICopilotCodeAnalysisService.GetAvailablePromptTitlesAsync
335
+ Return Task.FromResult(ImmutableArray.Create( "Title" ))
336
+ End Function
337
+
338
+ Public Function AnalyzeDocumentAsync(document As Document, span As TextSpan?, promptTitle As String , cancellationToken As CancellationToken) As Task Implements ICopilotCodeAnalysisService.AnalyzeDocumentAsync
339
+ Return Task.CompletedTask
340
+ End Function
341
+
342
+ Public Function GetCachedDocumentDiagnosticsAsync(document As Document, span As TextSpan?, promptTitles As ImmutableArray( Of String ), cancellationToken As CancellationToken) As Task( Of ImmutableArray( Of Diagnostic)) Implements ICopilotCodeAnalysisService.GetCachedDocumentDiagnosticsAsync
343
+ Return Task.FromResult(Diagnostics)
344
+ End Function
345
+
346
+ Public Function StartRefinementSessionAsync(oldDocument As Document, newDocument As Document, primaryDiagnostic As Diagnostic, cancellationToken As CancellationToken) As Task Implements ICopilotCodeAnalysisService.StartRefinementSessionAsync
347
+ Return Task.CompletedTask
348
+ End Function
349
+ End Class
266
350
End Class
267
351
End Namespace
0 commit comments