File: Completion\DirectiveAttributeCompletionItemProvider.DefaultCommitCharacters.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.Collections.Immutable;
 
namespace Microsoft.CodeAnalysis.Razor.Completion;
 
internal partial class DirectiveAttributeCompletionItemProvider
{
    private static class DefaultCommitCharacters
    {
        private static readonly ImmutableArray<RazorCommitCharacter> s_equalsCommitCharacters = [EqualsCommit(false)];
        private static readonly ImmutableArray<RazorCommitCharacter> s_equalsSpaceCommitCharacters = [EqualsCommit(false), SpaceCommit];
        private static readonly ImmutableArray<RazorCommitCharacter> s_snippetEqualsCommitCharacters = [EqualsCommit(true)];
        private static readonly ImmutableArray<RazorCommitCharacter> s_snippetEqualsSpaceCommitCharacters = [EqualsCommit(true), SpaceCommit];
        private static readonly ImmutableArray<RazorCommitCharacter> s_spaceCommitCharacters = [SpaceCommit];
 
        private static RazorCommitCharacter EqualsCommit(bool snippet) => new("=", Insert: !snippet);
        private static RazorCommitCharacter SpaceCommit => new(" ");
 
        public static ImmutableArray<RazorCommitCharacter> Get(bool useEquals, bool useSpace, bool useSnippets)
            => (useEquals, useSpace, useSnippets) switch
            {
                // Use equals with or without space (no snippets)
                (true, false, false) => s_equalsCommitCharacters,
                (true, true, false) => s_equalsSpaceCommitCharacters,
 
                // Use equals with or without space (using snippets)
                (true, false, true) => s_snippetEqualsCommitCharacters,
                (true, true, true) => s_snippetEqualsSpaceCommitCharacters,
 
                // No equals and with or without space (snippets not relevant)
                (false, true, _) => s_spaceCommitCharacters,
                (false, false, _) => []
            };
    }
}