Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 编写了一个修改TextControl的resharper插件?_.net_Plugins_Resharper - Fatal编程技术网

.net 编写了一个修改TextControl的resharper插件?

.net 编写了一个修改TextControl的resharper插件?,.net,plugins,resharper,.net,Plugins,Resharper,Resharper声称自己吃狗粮,特别是,他们声称Resharper的许多特性都是在R#(OpenAPI)的顶部编写的。我正在编写一个简单的插件来修复当前文档的注释。运行此插件时,会引发如下异常: 只能在命令范围内修改文档 我已经研究了这个错误,但找不到任何帮助,所以我希望你可能已经编写了一个插件来实现这一点。如果没有,我希望这段代码足以帮助其他人获得自己的插件 using System; using System.IO; using System.Windows.Forms; using Je

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
    }
}
使用系统;
使用System.IO;
使用System.Windows.Forms;
使用JetBrains.ActionManagement;
使用JetBrains.DocumentModel;
使用JetBrains.IDE;
使用JetBrains.TextControl;
使用JetBrains.Util;
名称空间TinkerToys.Actions
{
[ActionHandler(“TinkerToys.RewriteComment”)]
公共类重写操作:IActionHandler
{
#IActionHandler的区域实现
/// 
///更新动作视觉演示文稿。如果presentation.Enabled设置为false,则执行
///将不会被调用。
/// 
///数据上下文
///要更新的演示文稿
///代表呼叫
公共bool更新(IDataContext上下文、ActionPresentation演示、DelegateUpdate nextUpdate)
{
ITextControl textControl=context.GetData(DataConstants.TEXT\u控件);
返回textControl!=null;
}
/// 
///执行操作。更新后调用,将ActionPresentation.Enabled设置为true。
/// 
///数据上下文
///代表呼叫
public void Execute(IDataContext上下文,DelegateExecute nextExecute)
{
ITextControl textControl=context.GetData(DataConstants.TEXT\u控件);
if(textControl!=null){
text范围text选择范围;
ISelectionModel textSelectionModel=textControl.SelectionModel;
if((textSelectionModel!=null)&&textSelectionModel.HasSelection(){
textSelectRange=textSelectionModel.Range;
}否则{
textSelectRange=新的TextRange(0,textControl.Document.GetTextLength());
}
IDocument textDocument=textControl.Document;
字符串textSelection=textDocument.GetText(textSelectRange);
if(textSelection!=null){
StringReader sReader=新StringReader(文本选择);
StringWriter sWriter=新StringWriter();
转换器。转换(sReader、sWriter);
textSelection=sWriter.ToString();
textDocument.ReplaceText(textSelectRange,textSelection);
}
}
}
#端区
}
}
那么,它迫切需要的这个命令范围是什么呢?在发布之前,我有一些额外的日志记录,所以我绝对确定范围和文本都是有效的。此外,这个错误似乎表明我缺少了一些我一直无法找到的范围



是的,我想我可以用宏来完成同样的任务。回想起来,我写了一个简单的vs插件来做同样的事情。我之所以关注R#是因为它除了原始文本之外还可以提供特定于语言的元素解析。但对于这个问题,我认为宏或标准外接程序也可以正常工作。

如果我理解,您希望获取选择,将其发送到函数并用函数返回值替换选择

使用VisualStudio宏来完成这项工作怎么样?这是你会考虑的吗?