我想编写一个 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/