c# - 用于选定文本和远程代码生成的 Resharper API

标签 c# visual-studio-2010 visual-studio resharper resharper-plugins

我想编写一个 Resharper 插件,让我可以根据突出显示的文本在另一个类中生成代码,而 API 并不是最透明的。我应该查看哪些方法来访问所选文本以及在当前类之外生成代码?

最佳答案

当您编写上下文操作或类似的东西(阅读此处 http://confluence.jetbrains.net/display/ReSharper/ReSharper+7+Plugin+Development 关于操作和上下文操作)时,您会收到一个 IDataContext 实例。以这种方式从中获取文本控件、文档和选择:

var textControl = context.GetData(TextControl.DataContext.DataConstants.TEXT_CONTROL);
var document = textControl.Document;
var solution = projectFile.GetSolution();
TextRange selection = textControl.Selection.OneDocRangeWithCaret();

使用 document.GetText 获取选择范围内的文本。

为了在当前类之外生成代码,您需要找到其他类声明的元素。为此,您需要使用 IDeclarationsCache,请参阅 http://confluence.jetbrains.net/display/ReSharper/4.01+Caches+%28R7%29关于它。当您获得声明的元素时,使用 GetDeclarations() 方法接收对所有类声明的访问(由于部分类可能有多个声明)并将其转换为 IClassLikeDeclaration。使用 AddClassMemberDeclaration 方法添加成员,使用 RemoveClassMemberDeclaration 方法删除。添加类成员时,使用元素工厂创建添加的元素(参见 http://confluence.jetbrains.net/display/ReSharper/3.2+Creating+Code+Elements+%28R7%29 )。

如果您还有其他问题,请随时与我联系。

关于c# - 用于选定文本和远程代码生成的 Resharper API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11405690/

相关文章:

c++ - 全局 const char* 上的错误 LNK1169

visual-studio - 如果我没有Visual Basic 6.0而需要编译VB6项目该怎么办?

c# - 从现有字符串构建新的类路径字符串

visual-studio - 我不明白 VS 2010 中的 bulid 部署包

c++ - 在 C++ 中使用 ch=getchar 从用户获取整数输入值未给出预期结果

c++ - 让 .natvis 将 SmartPointer<T> 显示为 static_cast<T*>(void*)

c++ - VS2008 远程调试器 : An attempt was made to access a socket in a way forbidden by its access permissions

c# - 将 ASP.NET Controller 路由与 AngularJS 对象 id 相结合

c# - .NET 4 Parallel.ForEach 和 PLINQ : can they overwhelm the thread pool and kill the app performance?

c# - 配置 web.config 来发送电子邮件?