File: InlineRename\RenameLogMessage.cs
Web Access
Project: src\src\EditorFeatures\Core\Microsoft.CodeAnalysis.EditorFeatures.csproj (Microsoft.CodeAnalysis.EditorFeatures)
// 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.Collections.Generic;
using System.Linq;
using Microsoft.CodeAnalysis.Internal.Log;
using Microsoft.CodeAnalysis.Rename;
 
namespace Microsoft.CodeAnalysis.Editor.Implementation.InlineRename;
 
internal static class RenameLogMessage
{
    private const string RenameInComments = nameof(RenameInComments);
    private const string RenameInStrings = nameof(RenameInStrings);
    private const string RenameOverloads = nameof(RenameOverloads);
    private const string RenameFile = nameof(RenameFile);
 
    private const string Committed = nameof(Committed);
    private const string Canceled = nameof(Canceled);
 
    private const string ConflictResolutionFinishedComputing = nameof(ConflictResolutionFinishedComputing);
    private const string PreviewChanges = nameof(PreviewChanges);
 
    private const string RenamedIdentifiersWithoutConflicts = nameof(RenamedIdentifiersWithoutConflicts);
    private const string ResolvableReferenceConflicts = nameof(ResolvableReferenceConflicts);
    private const string ResolvableNonReferenceConflicts = nameof(ResolvableNonReferenceConflicts);
    private const string UnresolvableConflicts = nameof(UnresolvableConflicts);
 
    public static KeyValueLogMessage Create(
        SymbolRenameOptions options, UserActionOutcome outcome,
        bool conflictResolutionFinishedComputing, bool previewChanges,
        IList<InlineRenameReplacementKind> replacementKinds)
    {
        return KeyValueLogMessage.Create(LogType.UserAction, m =>
        {
            m[RenameInComments] = options.RenameInComments;
            m[RenameInStrings] = options.RenameInStrings;
            m[RenameOverloads] = options.RenameOverloads;
            m[RenameFile] = options.RenameFile;
 
            m[Committed] = (outcome & UserActionOutcome.Committed) == UserActionOutcome.Committed;
            m[Canceled] = (outcome & UserActionOutcome.Canceled) == UserActionOutcome.Canceled;
 
            m[ConflictResolutionFinishedComputing] = conflictResolutionFinishedComputing;
            m[PreviewChanges] = previewChanges;
 
            m[RenamedIdentifiersWithoutConflicts] = replacementKinds.Count(r => r == InlineRenameReplacementKind.NoConflict);
            m[ResolvableReferenceConflicts] = replacementKinds.Count(r => r == InlineRenameReplacementKind.ResolvedReferenceConflict);
            m[ResolvableNonReferenceConflicts] = replacementKinds.Count(r => r == InlineRenameReplacementKind.ResolvedNonReferenceConflict);
            m[UnresolvableConflicts] = replacementKinds.Count(r => r == InlineRenameReplacementKind.UnresolvedConflict);
        });
    }
 
    [Flags]
    public enum UserActionOutcome
    {
        Committed = 0x1,
        Canceled = 0x2,
    }
}