Как я могу отключить определенные команды Visual Studio из моего пакета?

Я создаю пакет, который требует, чтобы текстовые пробелы были в определенном формате. Не рассуждая о причине, почему давайте просто предположим, что это нормальное требование. Затем я должен запретить Visual Studio автоматически обновлять код.

Это довольно просто из открытого документа, где я могу добавить фильтр команд и предотвратить выполнение команды с помощью следующего кода.

[Export(typeof(IVsTextViewCreationListener))]

internal sealed class MyListener : IVsTextViewCreationListener
{
    public void VsTextViewCreated(IVsTextView textViewAdapter)
    {
        var filter = PackageManager.Kernel.Get<CommandFilter>();
        if (ErrorHandler.Succeeded(textViewAdapter.AddCommandFilter(filter,out var next)))
            filter.Next = next;
    }
 }

public class CommandFilter : IOleCommandTarget
{
    public IOleCommandTarget Next { get; set; }

    public const uint CmdEditFormat = 0x8F;
    public int QueryStatus(ref Guid pguidCmdGroup, uint cCmds, OLECMD[] prgCmds, IntPtr pCmdText)
    {

        switch (prgCmds[0].cmdID)
        {
            case CmdEditFormat:
                return VSConstants.E_ABORT;

        return Next.QueryStatus(ref pguidCmdGroup, cCmds, prgCmds, pCmdText);

    }
}

Идентификатор команды Edit.FormatDocument блокируется по мере необходимости. Я также мог бы добавить Edit.FormatSelection или любые другие команды, которые могут влиять на пустое пространство. Это все хорошо для открытых документов, которые я отмечаю этой особой потребностью.

Однако, когда дело доходит до надстроек, таких как Resharper, которые обновляют файлы множеством способов, фактически не открывая сами файлы, возникают проблемы. Мне нужно также заблокировать некоторые из этих команд, как только я найду, какие из них являются нестабильными для моей реализации.

Таким образом, вопрос в том, могу ли я установить какой-нибудь CommandFilter для всего приложения, чтобы я мог поймать их в действии? Это позволило бы мне очистить команду Resharper, а затем восстановить файлы, которые содержат форматирование по мере необходимости.

Другая возможность, если я могу найти, где находится файл опций Resharper, и каким-то образом обновить его, чтобы исключить указанные файлы. Я знаю, что это возможно вручную.

0 ответов

Другие вопросы по тегам