Как переименовать все символы с помощью Roslyn? - PullRequest
0 голосов
/ 10 июня 2019

Я создаю отдельное приложение, которое загружает папку с кодом c # и позволяет пользователю писать Regex для выбора и переименования пространства имен / types / fields / properties / method / аргумент / variable / events'name, но яЯ застрял в переименовании исходного кода.Я проанализировал SyntaxTree и собрал все элементы, а также произвел поиск / сопоставление / переименование с помощью регулярных выражений.

Я сделал множество кодов, пытаясь получить roslyn переименовывать «элементы», но я только первый «элемент»переименовывается, а все последующие отбрасываются.Мне известно об неизменности API-интерфейса синтаксиса, и после вызова Renamer я сохраняю решение, а также повторно ищу документ в новом решении в следующем цикле.

//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 ();чтобы получить окончательно отредактированный код, который, как упоминалось выше, имеет только первое редактирование.

Может ли кто-нибудь объяснить мне правильный способ сделать это или предоставить пример того, как это можно реализовать, чтобы я мог попробовать сам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...