File: Protocol\Internal\VSInternalCompletionItem.cs
Web Access
Project: src\src\LanguageServer\Protocol\Microsoft.CodeAnalysis.LanguageServer.Protocol.csproj (Microsoft.CodeAnalysis.LanguageServer.Protocol)
// 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 Roslyn.Text.Adornments;
using System.Text.Json.Serialization;
 
/// <summary>
/// Extension class for CompletionItem with fields specific to Visual Studio functionalities.
/// </summary>
internal sealed class VSInternalCompletionItem : CompletionItem
{
    internal const string IconSerializedName = "_vs_icon";
    internal const string DescriptionSerializedName = "_vs_description";
    internal const string VsCommitCharactersSerializedName = "_vs_commitCharacters";
    internal const string VsResolveTextEditOnCommitName = "_vs_resolveTextEditOnCommit";
 
    /// <summary>
    /// Gets or sets the icon to show for the completion item. In VS, this is more extensive than the completion kind.
    /// </summary>
    [JsonPropertyName(IconSerializedName)]
    [JsonConverter(typeof(ImageElementConverter))]
    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
    public ImageElement? Icon { get; set; }
 
    /// <summary>
    /// Gets or sets the description for a completion item.
    /// </summary>
    [JsonPropertyName(DescriptionSerializedName)]
    [JsonConverter(typeof(ClassifiedTextElementConverter))]
    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
    public ClassifiedTextElement? Description { get; set; }
 
    /// <summary>
    /// Gets or sets the set of characters that will commit completion when this <see cref="CompletionItem" /> is selected.
    /// Allows customization of commit behavior.
    /// If present, client will use this value instead of <see cref="CompletionOptions.AllCommitCharacters"/>.
    /// If absent, client will default to <see cref="CompletionOptions.AllCommitCharacters"/>.
    /// </summary>
    [JsonPropertyName(VsCommitCharactersSerializedName)]
    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
    public SumType<string[], VSInternalCommitCharacter[]>? VsCommitCharacters { get; set; }
 
    /// <summary>
    /// Gets or sets a value indicating whether the client should call <see cref="Methods.TextDocumentCompletionResolve"/> to
    /// get the value of the text edit to commit.
    /// </summary>
    [JsonPropertyName(VsResolveTextEditOnCommitName)]
    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
    public bool VsResolveTextEditOnCommit { get; set; }
}