Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ internal interface ICallback
ValueTask ItemsCompletedAsync(RemoteServiceCallbackId callbackId, int itemCount, CancellationToken cancellationToken);
}

ValueTask<CompileQueryResult> CompileQueryAsync(string query, CancellationToken cancellationToken);
ValueTask<CompileQueryResult> CompileQueryAsync(string query, string referenceAssembliesDir, CancellationToken cancellationToken);
ValueTask<ExecuteQueryResult> ExecuteQueryAsync(Checksum solutionChecksum, RemoteServiceCallbackId callbackId, CompiledQueryId queryId, CancellationToken cancellationToken);
ValueTask DiscardQueryAsync(CompiledQueryId queryId, CancellationToken cancellationToken);
}
Expand Down Expand Up @@ -123,7 +123,7 @@ public async ValueTask<ClassificationOptions> GetClassificationOptionsAsync(stri
}

var result = await client.TryInvokeAsync<IRemoteSemanticSearchService, CompileQueryResult>(
(service, cancellationToken) => service.CompileQueryAsync(query, cancellationToken),
(service, cancellationToken) => service.CompileQueryAsync(query, SemanticSearchWorkspace.ReferenceAssembliesDirectory, cancellationToken),
cancellationToken).ConfigureAwait(false);

return result.Value;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,11 @@ internal interface ISemanticSearchQueryService
/// Compiles a query. The query has to be executed or discarded.
/// </summary>
/// <param name="query">Query (top-level code).</param>
/// <param name="referenceAssembliesDir">Directory containing reference assemblies.</param>
CompileQueryResult CompileQuery(
SolutionServices services,
string query,
string referenceAssembliesDir,
TraceSource traceSource,
CancellationToken cancellationToken);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using System.IO;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Host;
Expand All @@ -13,6 +14,12 @@ namespace Microsoft.CodeAnalysis.SemanticSearch;
internal abstract class SemanticSearchWorkspace(HostServices services, ISemanticSearchSolutionService solutionService)
: Workspace(services, WorkspaceKind.SemanticSearch)
{
/// <summary>
/// Location of the directory containing reference assemblies used for semantic search queries.
/// The assemblies are shared between design-time (in-proc workspace) and compile-time (OOP service).
/// </summary>
public static readonly string ReferenceAssembliesDirectory = Path.Combine(Path.GetDirectoryName(typeof(SemanticSearchWorkspace).Assembly.Location)!, "SemanticSearchRefs");

public override bool CanOpenDocuments
=> true;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,11 @@ public ValueTask OnUserCodeExceptionAsync(ICopilotSemanticSearchResultsObserver.
cancellationToken);
}

public CompileQueryResult CompileQuery(SolutionServices services, string query, TraceSource traceSource, CancellationToken cancellationToken)
public CompileQueryResult CompileQuery(SolutionServices services, string query, string referenceAssembliesDir, TraceSource traceSource, CancellationToken cancellationToken)
{
Contract.ThrowIfNull(impl);

var result = impl.CompileQuery(services, query, traceSource, cancellationToken);
var result = impl.CompileQuery(services, query, referenceAssembliesDir, traceSource, cancellationToken);
return new(
new(result.QueryId.Id),
result.CompilationErrors.SelectAsArray(static e => new QueryCompilationError(e.Id, e.Message, e.Span)),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ Microsoft.CodeAnalysis.ExternalAccess.Copilot.SemanticSearch.ICopilotSemanticSea
Microsoft.CodeAnalysis.ExternalAccess.Copilot.SemanticSearch.ICopilotSemanticSearchQueryService.CompiledQueryId.Equals(Microsoft.CodeAnalysis.ExternalAccess.Copilot.SemanticSearch.ICopilotSemanticSearchQueryService.CompiledQueryId other) -> bool
Microsoft.CodeAnalysis.ExternalAccess.Copilot.SemanticSearch.ICopilotSemanticSearchQueryService.CompiledQueryId.Id.get -> int
Microsoft.CodeAnalysis.ExternalAccess.Copilot.SemanticSearch.ICopilotSemanticSearchQueryService.CompiledQueryId.Id.init -> void
Microsoft.CodeAnalysis.ExternalAccess.Copilot.SemanticSearch.ICopilotSemanticSearchQueryService.CompileQuery(Microsoft.CodeAnalysis.Host.SolutionServices! services, string! query, System.Diagnostics.TraceSource! traceSource, System.Threading.CancellationToken cancellationToken) -> Microsoft.CodeAnalysis.ExternalAccess.Copilot.SemanticSearch.ICopilotSemanticSearchQueryService.CompileQueryResult
Microsoft.CodeAnalysis.ExternalAccess.Copilot.SemanticSearch.ICopilotSemanticSearchQueryService.CompileQuery(Microsoft.CodeAnalysis.Host.SolutionServices! services, string! query, string! referenceAssembliesDir, System.Diagnostics.TraceSource! traceSource, System.Threading.CancellationToken cancellationToken) -> Microsoft.CodeAnalysis.ExternalAccess.Copilot.SemanticSearch.ICopilotSemanticSearchQueryService.CompileQueryResult
Microsoft.CodeAnalysis.ExternalAccess.Copilot.SemanticSearch.ICopilotSemanticSearchQueryService.CompileQueryResult
Microsoft.CodeAnalysis.ExternalAccess.Copilot.SemanticSearch.ICopilotSemanticSearchQueryService.CompileQueryResult.CompilationErrors.get -> System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.ExternalAccess.Copilot.SemanticSearch.ICopilotSemanticSearchQueryService.QueryCompilationError>
Microsoft.CodeAnalysis.ExternalAccess.Copilot.SemanticSearch.ICopilotSemanticSearchQueryService.CompileQueryResult.CompilationErrors.init -> void
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ internal interface ICopilotSemanticSearchQueryService
CompileQueryResult CompileQuery(
SolutionServices services,
string query,
string referenceAssembliesDir,
TraceSource traceSource,
CancellationToken cancellationToken);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,14 @@ public ValueTask OnUserCodeExceptionAsync(UserCodeExceptionInfo exception, Cance
/// </summary>
public ValueTask<CompileQueryResult> CompileQueryAsync(
string query,
string referenceAssembliesDir,
CancellationToken cancellationToken)
{
return RunServiceAsync(cancellationToken =>
{
var services = GetWorkspaceServices();
var service = GetRequiredService<ISemanticSearchQueryService>();
var result = service.CompileQuery(services, query, TraceLogger, cancellationToken);
var result = service.CompileQuery(services, query, referenceAssembliesDir, TraceLogger, cancellationToken);

return ValueTask.FromResult(result);
}, cancellationToken);
Expand Down
Loading