File: Extensions\ClientCapabilitiesExtensions.cs
Web Access
Project: src\src\Razor\src\Razor\src\Microsoft.CodeAnalysis.Razor.Workspaces\Microsoft.CodeAnalysis.Razor.Workspaces.csproj (Microsoft.CodeAnalysis.Razor.Workspaces)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
 
namespace Roslyn.LanguageServer.Protocol;
 
internal static class ClientCapabilitiesExtensions
{
    public static MarkupKind GetMarkupKind(this ClientCapabilities clientCapabilities)
    {
        // If MarkDown is supported, we'll use that.
        if (clientCapabilities.TextDocument?.Hover?.ContentFormat is MarkupKind[] contentFormat &&
            Array.IndexOf(contentFormat, MarkupKind.Markdown) >= 0)
        {
            return MarkupKind.Markdown;
        }
 
        return MarkupKind.PlainText;
    }
 
    public static bool SupportsMarkdown(this ClientCapabilities clientCapabilities)
        => clientCapabilities.GetMarkupKind() == MarkupKind.Markdown;
 
    public static bool SupportsVisualStudioExtensions(this ClientCapabilities clientCapabilities)
        => clientCapabilities is VSInternalClientCapabilities { SupportsVisualStudioExtensions: true };
 
    public static bool SupportsAnyCompletionListData(this ClientCapabilities clientCapabilities)
        => clientCapabilities.SupportsCompletionListData() ||
           clientCapabilities.SupportsCompletionListItemDefaultsData();
 
    public static bool SupportsCompletionListData(this ClientCapabilities clientCapabilities)
        => clientCapabilities.SupportsVisualStudioExtensions() &&
           clientCapabilities.TextDocument?.Completion is VSInternalCompletionSetting { CompletionList.Data: true };
 
    public static bool SupportsCompletionListItemDefaultsData(this ClientCapabilities clientCapabilities)
        => clientCapabilities.TextDocument?.Completion?.CompletionListSetting?.ItemDefaults is { } defaults &&
           Array.IndexOf(defaults, "data") >= 0;
}