如何使用罗斯林重命名所有符号?

时间:2019-06-10 19:39:25

标签: refactoring rename roslyn automated-refactoring

我正在构建一个独立应用程序,它将使用c#代码加载一个文件夹,并允许用户编写Regex来选择和重命名名称空间/类型/字段/属性/方法/参数/变量/变量/事件的名称,但是我卡在重命名源代码。 我分析了SyntaxTree并收集了所有项目,并使用正则表达式进行搜索/匹配/重命名。

我已经做了很多代码试图将roslyn重命名为“ items”,但是我只重命名了第一个“ item”,而所有后续的“ item”都被丢弃了。 我知道语法API的不可变性,在调用重命名器后,我保存了解决方案,并在下一个循环中重新搜索了新解决方案中的文档。

//renaming code
var newSolution = await Renamer.RenameSymbolAsync(solution, isymbol, newName, solution.Workspace.Options).ConfigureAwait(false);
this.solution = newSolution;

//re-search code
if (solution.Projects.First ().ContainsDocument(doc.Document.Id)) {
    var document = project.GetDocument(doc.Document.Id);
    ...
}

最后,我调用SyntaxTree.GetRoot()。ToString();以获得最终编辑的代码,如上所述,该代码只有第一次编辑。

任何人都可以向我解释执行此操作的正确方法,或者向我提供如何实现此示例的示例,以便我自己尝试一下?

0 个答案:

没有答案