Resharper утверждает, что употребляет в пищу собственную собаку, в частности, утверждают, что многие функции Resharper написаны на русском языке (OpenAPI). Я пишу простой плагин для исправления комментариев текущего документа выделения. Когда этот плагин запускаются, он бросает исключение следующим образом:Написал плагин resharper, который изменяет TextControl?
Документ может быть изменен в командных рамках только
Я исследовал ошибку и не могу найти что-нибудь, чтобы помочь с этим, так что я м надеясь, что, возможно, вы создали плагин для этого. Если нет, я надеюсь, что этого фрагмента достаточно, чтобы помочь другим получить свои собственные плагины.
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 #, состоит в том, что она содержит синтаксический анализ на языке, который он может предоставить в дополнение к необработанному тексту. Но для этой проблемы я думаю, что макро или стандартная надстройка тоже будет работать нормально.