Как NRefactory может сохранить оригинальное форматирование

Привет, я использую NRefactory для извлечения константы String и перестановки ее статической переменной для i18n, я могу успешно это сделать, но когда я вывожу свой код с помощью GetText(), он не сохраняет первоначальное форматирование. Я хочу сделать это с минимальным изменением форматирования.

Благодарю.

2 ответа

Если вы хотите сохранить текущее форматирование, вы можете использовать DocumentScript применить модификации по АСТ. Работает на основе TextLocation свойство хранится в синтаксическом дереве.

Для создания скрипта вам необходимо сделать это:

IDocument document = new StringBuilderDocument("source code");
CSharpFormattingOptions policy = FormattingOptionsFactory.CreateAllman();
var options = new TextEditorOptions();

var script = new DocumentScript(document, policy, options);

Теперь вы можете использовать такие методы, как Replace, Remove, InsertAfter и т. Д. На AST. Он работает как с узлами ast, так и со смещениями.

Он также отслеживает изменения, поэтому вам не нужно беспокоиться о конфликтах при множественных изменениях.
Для большего количества примеров на NRefactory вы можете также проверить мой блог.

Взгляните на часть "Изменение кода C#" (последний раздел) статьи NRefactory CodeProject.

Другие вопросы по тегам