File: Protocol\ServerCapabilities.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 System.Diagnostics.CodeAnalysis;
    using System.Text.Json.Serialization;
 
    /// <summary>
    /// Class which represents server capabilities.
    /// <para>
    /// See the <see href="https://microsoft.github.io/language-server-protocol/specifications/specification-current/#serverCapabilities">Language Server Protocol specification</see> for additional information.
    /// </para>
    /// </summary>
    internal class ServerCapabilities
    {
        // NOTE: these are kept in the same order as the spec to make them easier to update
 
        /// <summary>
        /// The position encoding the server picked from the encodings offered
        /// by the client via the client capability `general.positionEncodings`.
        ///<para>
        /// If the client didn't provide any position encodings the only valid
        /// value that a server can return is 'utf-16'.
        /// If omitted it defaults to 'utf-16'.
        ///</para>
        /// </summary>
        /// <remarks>Since LSP 3.16</remarks>
        [JsonPropertyName("positionEncoding")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public PositionEncodingKind? PositionEncoding { get; init; }
 
        /// <summary>
        /// Gets or sets the value which indicates how text document are synced.
        /// </summary>
        [JsonPropertyName("textDocumentSync")]
        [JsonConverter(typeof(TextDocumentSyncConverter))]
        [SuppressMessage("Microsoft.StyleCop.CSharp.LayoutRules", "SA1513:ClosingCurlyBracketMustBeFollowedByBlankLine", Justification = "There are no issues with this code")]
        [SuppressMessage("Microsoft.StyleCop.CSharp.LayoutRules", "SA1500:BracesForMultiLineStatementsShouldNotShareLine", Justification = "There are no issues with this code")]
        public TextDocumentSyncOptions? TextDocumentSync
        {
            get;
            set;
        } = new TextDocumentSyncOptions
        {
            OpenClose = true,
            Change = TextDocumentSyncKind.None,
            Save = new SaveOptions
            {
                IncludeText = false,
            },
        };
 
        /// <summary>
        /// Defines how notebook documents are synced.
        /// </summary>
        /// <remarks>Since LSP 3.17</remarks>
        [JsonPropertyName("notebookDocumentSync")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<NotebookDocumentSyncOptions, NotebookDocumentSyncRegistrationOptions>? NotebookDocumentSync { get; init; }
 
        /// <summary>
        /// The server provides completion support.
        /// </summary>
        [JsonPropertyName("completionProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public CompletionOptions? CompletionProvider { get; set; }
 
        /// <summary>
        /// The server provides hover support.
        /// </summary>
        [JsonPropertyName("hoverProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<bool, HoverOptions>? HoverProvider { get; set; }
 
        /// <summary>
        /// The server provides signature help support.
        /// </summary>
        [JsonPropertyName("signatureHelpProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SignatureHelpOptions? SignatureHelpProvider { get; set; }
 
        /// <summary>
        /// The server provides Go to Declaration support.
        /// </summary>
        /// <remarks>Since LSP 3.14</remarks>
        [JsonPropertyName("declarationProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<bool, DeclarationOptions, DeclarationRegistrationOptions>? DeclarationProvider { get; init; }
 
        /// <summary>
        /// The server provides Go to Definition support.
        /// </summary>
        [JsonPropertyName("definitionProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<bool, DefinitionOptions>? DefinitionProvider { get; set; }
 
        /// <summary>
        /// The server provides Go to Type Definition support.
        /// </summary>
        /// <remarks>Since LSP 3.6</remarks>
        [JsonPropertyName("typeDefinitionProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<bool, TypeDefinitionOptions, TypeDefinitionRegistrationOptions>? TypeDefinitionProvider { get; set; }
 
        /// <summary>
        /// The server provides Go to Implementation support.
        /// </summary>
        /// <remarks>Since LSP 3.6</remarks>
        [JsonPropertyName("implementationProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<bool, ImplementationOptions, ImplementationRegistrationOptions>? ImplementationProvider { get; set; }
 
        /// <summary>
        /// The server provides Find References support.
        /// </summary>
        [JsonPropertyName("referencesProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<bool, ReferenceOptions>? ReferencesProvider { get; set; }
 
        /// <summary>
        /// The server provides Document Highlight support.
        /// </summary>
        [JsonPropertyName("documentHighlightProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<bool, DocumentHighlightOptions>? DocumentHighlightProvider { get; set; }
 
        /// <summary>
        /// The server provides Document Symbols support.
        /// </summary>
        [JsonPropertyName("documentSymbolProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<bool, DocumentSymbolOptions>? DocumentSymbolProvider { get; set; }
 
        /// <summary>
        /// The server provides code actions. The <see cref="CodeActionOptions"/> return type is
        /// only valid if the client signals code action literal support via the
        /// property <see cref="CodeActionSetting.CodeActionLiteralSupport"/>.
        /// </summary>
        [JsonPropertyName("codeActionProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<bool, CodeActionOptions>? CodeActionProvider { get; set; }
 
        /// <summary>
        /// Gets or sets the value which indicates if code lens is supported.
        /// </summary>
        [JsonPropertyName("codeLensProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public CodeLensOptions? CodeLensProvider { get; set; }
 
        /// <summary>
        /// Gets or sets the value which indicates if document link is supported.
        /// </summary>
        [JsonPropertyName("documentLinkProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public DocumentLinkOptions? DocumentLinkProvider { get; set; }
 
        /// <summary>
        /// Gets or sets the value which indicates if document color is supported.
        /// </summary>
        /// <remarks>Since LSP 3.6</remarks>
        [JsonPropertyName("colorProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<bool, DocumentColorOptions, DocumentColorRegistrationOptions>? DocumentColorProvider { get; set; }
 
        /// <summary>
        /// Gets or sets a value indicating whether document formatting is supported.
        /// </summary>
        [JsonPropertyName("documentFormattingProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<bool, DocumentFormattingOptions>? DocumentFormattingProvider { get; set; }
 
        /// <summary>
        /// Gets or sets a value indicating whether document range formatting is supported.
        /// </summary>
        [JsonPropertyName("documentRangeFormattingProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<bool, DocumentRangeFormattingOptions>? DocumentRangeFormattingProvider { get; set; }
 
        /// <summary>
        /// Gets or sets the value which indicates if document on type formatting is supported.
        /// </summary>
        [JsonPropertyName("documentOnTypeFormattingProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public DocumentOnTypeFormattingOptions? DocumentOnTypeFormattingProvider { get; set; }
 
        /// <summary>
        /// Gets or sets a value indicating whether rename is supported.
        /// </summary>
        [JsonPropertyName("renameProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<bool, RenameOptions>? RenameProvider { get; set; }
 
        /// <summary>
        /// Gets or sets the value which indicates if folding range is supported.
        /// </summary>
        /// <remarks>Since LSP 3.10</remarks>
        [JsonPropertyName("foldingRangeProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<bool, FoldingRangeOptions>? FoldingRangeProvider { get; set; }
 
        /// <summary>
        /// Gets or sets the value which indicates if execute command is supported.
        /// </summary>
        [JsonPropertyName("executeCommandProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public ExecuteCommandOptions? ExecuteCommandProvider { get; set; }
 
        /// <summary>
        /// The server provides selection range support.
        /// </summary>
        /// <remarks>Since LSP 3.15</remarks>
        [JsonPropertyName("selectionRangeProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<bool, SelectionRangeOptions, SelectionRangeRegistrationOptions>? SelectionRangeProvider { get; init; }
 
        /// <summary>
        /// Gets or sets a value indicating whether the server supports linked editing range.
        /// </summary>
        /// <remarks>Since LSP 3.16</remarks>
        [JsonPropertyName("linkedEditingRangeProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<bool, LinkedEditingRangeOptions>? LinkedEditingRangeProvider { get; set; }
 
        /// <summary>
        /// The server provides call hierarchy support.
        /// </summary>
        /// <remarks>Since LSP 3.16</remarks>
        [JsonPropertyName("callHierarchyProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<bool, CallHierarchyOptions, CallHierarchyRegistrationOptions>? CallHierarchyProvider { get; init; }
 
        /// <summary>
        /// Gets or sets the value which indicates if semantic tokens is supported.
        /// </summary>
        /// <remarks>Since LSP 3.16</remarks>
        [JsonPropertyName("semanticTokensProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<SemanticTokensOptions, SemanticTokensRegistrationOptions>? SemanticTokensOptions { get; set; }
 
        /// <summary>
        /// Whether server provides moniker support.
        /// </summary>
        /// <remarks>Since LSP 3.16</remarks>
        [JsonPropertyName("monikerProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<bool, MonikerOptions, MonikerRegistrationOptions>? MonikerProvider { get; init; }
 
        /// <summary>
        /// The server provides type hierarchy support.
        /// </summary>
        /// <remarks>Since LSP 3.17</remarks>
        [JsonPropertyName("typeHierarchyProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<bool, TypeHierarchyOptions, TypeHierarchyRegistrationOptions>? TypeHierarchyProvider { get; init; }
 
        /// <summary>
        /// The server provides inline values.
        /// </summary>
        /// <remarks>Since LSP 3.17</remarks>
        [JsonPropertyName("inlineValueProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<bool, InlineValueOptions, InlineValueRegistrationOptions>? InlineValueProvider { get; init; }
 
        /// <summary>
        /// Gets or sets the value which indicates what support the server has for inlay hints.
        /// </summary>
        /// <remarks>Since LSP 3.17</remarks>
        [JsonPropertyName("inlayHintProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<bool, InlayHintOptions, InlayHintRegistrationOptions>? InlayHintOptions { get; set; }
 
        /// <summary>
        /// Gets or sets the value which indicates what support the server has for pull diagnostics.
        /// </summary>
        /// <remarks>Since LSP 3.17</remarks>
        [JsonPropertyName("diagnosticProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<DiagnosticOptions, DiagnosticRegistrationOptions>? DiagnosticOptions { get; set; }
 
        /// <summary>
        /// Gets or sets a value indicating whether workspace symbols are supported.
        /// </summary>
        [JsonPropertyName("workspaceSymbolProvider")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public SumType<bool, WorkspaceSymbolOptions>? WorkspaceSymbolProvider { get; set; }
 
        /// <summary>
        /// Workspace specific server capabilities.
        /// </summary>
        [JsonPropertyName("workspace")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public WorkspaceServerCapabilities? Workspace { get; init; }
 
        /// <summary>
        /// Gets or sets experimental server capabilities.
        /// </summary>
        [JsonPropertyName("experimental")]
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
        public object? Experimental { get; set; }
    }
}