2008-11-13 3 views
4

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 #, состоит в том, что она содержит синтаксический анализ на языке, который он может предоставить в дополнение к необработанному тексту. Но для этой проблемы я думаю, что макро или стандартная надстройка тоже будет работать нормально.

ответ

0

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

Что об использовании Visual Studio Macro, чтобы сделать эту работу? Это то, что вы рассмотрите?

Смежные вопросы