Написали плагин resharper, который изменяет TextControl?

Resharper утверждает, что ест свою собачью еду, в частности, они утверждают, что многие функции Resharper написаны поверх R # (OpenAPI). Я пишу простой плагин, чтобы исправить комментарии к текущему документу выбора. Когда этот плагин запущен, он выдает исключение следующим образом:

Документ может быть изменен только внутри области действия команды

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

using System;
using System.IO;
using System.Windows.Forms;
using JetBrains.ActionManagement;
using JetBrains.DocumentModel;
using JetBrains.IDE;
using JetBrains.TextControl;
using JetBrains.Util;

namespace TinkerToys.Actions
{
    [ActionHandler("TinkerToys.RewriteComment")]
    public class RewriteCommentAction : IActionHandler
    {
        #region Implementation of IActionHandler

        /// <summary>
        ///             Updates action visual presentation. If presentation.Enabled is set to false, Execute
        ///             will not be called.
        /// </summary>
        /// <param name = "context">DataContext</param>
        /// <param name = "presentation">presentation to update</param>
        /// <param name = "nextUpdate">delegate to call</param>
        public bool Update(IDataContext context, ActionPresentation presentation, DelegateUpdate nextUpdate)
        {
            ITextControl textControl = context.GetData(DataConstants.TEXT_CONTROL);
            return textControl != null;
        }

        /// <summary>
        ///             Executes action. Called after Update, that set ActionPresentation.Enabled to true.
        /// </summary>
        /// <param name = "context">DataContext</param>
        /// <param name = "nextExecute">delegate to call</param>
        public void Execute(IDataContext context, DelegateExecute nextExecute)
        {
            ITextControl textControl = context.GetData(DataConstants.TEXT_CONTROL);
            if (textControl != null) {
                TextRange textSelectRange;

                ISelectionModel textSelectionModel = textControl.SelectionModel;
                if ((textSelectionModel != null) && textSelectionModel.HasSelection()) {
                    textSelectRange = textSelectionModel.Range;
                } else {
                    textSelectRange = new TextRange(0, textControl.Document.GetTextLength());
                }

                IDocument textDocument = textControl.Document;
                String textSelection = textDocument.GetText(textSelectRange);
                if (textSelection != null) {
                    StringReader sReader = new StringReader(textSelection);
                    StringWriter sWriter = new StringWriter();
                    Converter.Convert(sReader, sWriter);
                    textSelection = sWriter.ToString();

                    textDocument.ReplaceText(textSelectRange, textSelection);
                }
            }
        }

        #endregion
    }
}

Так что же это за область действия команды, которую он так сильно хочет? У меня был дополнительный вход в это до публикации, поэтому я абсолютно уверен, что и диапазон, и текст действительны. Вдобавок ошибка, похоже, указывает на то, что мне не хватает какой-то области, которую я до сих пор не смог найти.


Да, думаю, я мог бы использовать макрос для выполнения той же задачи. Оглядываясь назад, я написал простую надстройку vs, чтобы сделать то же самое. Причина, по которой я смотрел / смотрел на R #, заключается в том, что он имеет синтаксический анализ элементов для конкретного языка, который он может предоставить в дополнение к необработанному тексту. Но для этой проблемы я думаю, что макрос или стандартная надстройка также подойдут.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
318
1

Ответы 1

Если я понял, вы хотите взять выделение, отправить его в функцию и заменить выделение значением, возвращаемым функцией ...

Как насчет использования макроса Visual Studio для выполнения этой работы? Вы это рассмотрите?

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