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
@@ -0,0 +1,29 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using Microsoft.CodeAnalysis.Shared.TestHooks;
using Roslyn.LanguageServer.Protocol;

namespace Microsoft.CodeAnalysis.LanguageServer.Handler.ProjectContext;

internal sealed class ProjectContextRefreshQueue : AbstractRefreshQueue
{
internal ProjectContextRefreshQueue(
IAsynchronousOperationListenerProvider asynchronousOperationListenerProvider,
LspWorkspaceRegistrationService lspWorkspaceRegistrationService,
LspWorkspaceManager lspWorkspaceManager,
IClientLanguageServerManager notificationManager)
: base(asynchronousOperationListenerProvider, lspWorkspaceRegistrationService, lspWorkspaceManager, notificationManager)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit. consider primary constructor.

{
}

protected override string GetFeatureAttribute()
=> FeatureAttribute.LanguageServer;

protected override bool? GetRefreshSupport(ClientCapabilities clientCapabilities)
=> (clientCapabilities.Workspace as VSInternalWorkspaceClientCapabilities)?.ProjectContext?.RefreshSupport;

protected override string GetWorkspaceRefreshName()
=> VSInternalMethods.WorkspaceProjectContextRefreshName;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// Licensed to the .NET Foundation under one or more agreements.
// 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;
using System.Composition;
using Microsoft.CodeAnalysis.Host.Mef;
using Microsoft.CodeAnalysis.Shared.TestHooks;

namespace Microsoft.CodeAnalysis.LanguageServer.Handler.ProjectContext;

[ExportCSharpVisualBasicLspServiceFactory(typeof(ProjectContextRefreshQueue)), Shared]
[method: ImportingConstructor]
[method: Obsolete(MefConstruction.ImportingConstructorMessage, error: true)]
internal sealed class ProjectContextRefreshQueueFactory(
IAsynchronousOperationListenerProvider asynchronousOperationListenerProvider,
LspWorkspaceRegistrationService lspWorkspaceRegistrationService) : ILspServiceFactory
{
private readonly IAsynchronousOperationListenerProvider _asynchronousOperationListenerProvider = asynchronousOperationListenerProvider;
private readonly LspWorkspaceRegistrationService _lspWorkspaceRegistrationService = lspWorkspaceRegistrationService;

public ILspService CreateILspService(LspServices lspServices, WellKnownLspServerKinds serverKind)
{
var notificationManager = lspServices.GetRequiredService<IClientLanguageServerManager>();
var lspWorkspaceManager = lspServices.GetRequiredService<LspWorkspaceManager>();

return new ProjectContextRefreshQueue(_asynchronousOperationListenerProvider, _lspWorkspaceRegistrationService, lspWorkspaceManager, notificationManager);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ private static void AddConverters(IList<JsonConverter> converters)
AddOrReplaceConverter<RenameRange, VSInternalRenameRange>();
AddOrReplaceConverter<RenameParams, VSInternalRenameParams>();
AddOrReplaceConverter<DocumentSymbol, RoslynDocumentSymbol>();
AddOrReplaceConverter<WorkspaceClientCapabilities, VSInternalWorkspaceClientCapabilities>();

void AddOrReplaceConverter<TBase, TExtension>()
where TExtension : TBase
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ internal static class VSInternalMethods
public const string TextDocumentUriPresentationName = "textDocument/_vs_uriPresentation";
public const string TextDocumentValidateBreakableRangeName = "textDocument/_vs_validateBreakableRange";
public const string WorkspaceMapCodeName = "workspace/_vs_mapCode";
public const string WorkspaceProjectContextRefreshName = "workspace/projectContext/_vs_refresh";
public const string WorkspacePullDiagnosticName = "workspace/_vs_diagnostic";
public const string WorkspaceSpellCheckableRangesName = "workspace/_vs_spellCheckableRanges";

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

namespace Roslyn.LanguageServer.Protocol;

using System.Text.Json.Serialization;

/// <summary>
/// Class representing the workspace project context client capabilities.
/// </summary>
internal sealed class VSInternalProjectContextWorkspaceSetting
{
/// <summary>
/// Whether the client supports a refresh request sent from the server to the client.
/// <para>
/// Note that this event is global and will force the client to refresh all
/// project contexts currently shown. It should be used with absolute care
/// and is useful for situation where a server for example detects a project
/// wide change that requires such a calculation.
/// </para>
/// </summary>
[JsonPropertyName("refreshSupport")]
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
public bool RefreshSupport { get; set; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

namespace Roslyn.LanguageServer.Protocol;

using System.Text.Json.Serialization;

/// <summary>
/// Extension class for WorkspaceClientCapabilities with fields specific to Visual Studio.
/// </summary>
internal sealed class VSInternalWorkspaceClientCapabilities : WorkspaceClientCapabilities
{
/// <summary>
/// Gets or sets capabilities indicating what support the client has for workspace project contexts.
/// </summary>
/// <remarks>Since LSP 3.17</remarks>
[JsonPropertyName("_vs_projectContext")]
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public DiagnosticWorkspaceSetting? ProjectContext { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ namespace Roslyn.LanguageServer.Protocol;
/// See the <see href="https://microsoft.github.io/language-server-protocol/specifications/specification-current/#clientCapabilities">Language Server Protocol specification</see> for additional information.
/// </para>
/// </summary>
internal sealed class WorkspaceClientCapabilities
internal class WorkspaceClientCapabilities
{
// NOTE: these are kept in the same order as the spec to make them easier to update

Expand Down
Loading