2012-06-12 2 views
4

Я хотел бы начать использовать NRefactory 5 для разбора CSharp-файлов, чтобы сделать рефакторинг. Но документации недостаточно. Поэтому я попытался и не смог: Я начал со следующего кода, чтобы узнать, могу ли я получить дерево AstNode из файла cs.NRefactory 5, начинающийся с простого примера

Я ожидал бы, что разбор вырабатывает для меня некоторые узлы, но нет. Может ли кто-нибудь мне навестить?

TextReader reader = File.OpenText(fname); 
CompilationUnit compilationUnit; 

CSharpParser parser = new CSharpParser(); 
compilationUnit = parser.Parse(reader, fname); 
AstNode node = compilationUnit.GetNextNode(); 
System.Collections.Generic.IEnumerable<AstNode> desc = 
    compilationUnit.Descendants; 
foreach (AstNode jo in desc) 
{ 
    System.Console.WriteLine("At least something here"); 
} 

ответ

2

Посмотрите на ICSharpCode.NRefactory.Demo проекта в исходный код NRefactory - это может разобрать код и отображает дерево синтаксиса в TreeView.

Код, который вы отправили, должен действительно создавать некоторые узлы. compilationUnit.Children будет содержать прямые дочерние элементы (обычно это объявления и декларация пространства имен).

И есть также CodeProject article.

+0

Спасибо вам ответить. Я также обнаружил, что использование исходного кода NRefactory как с демо, так и с тестами - лучший источник. Тем более, что новая версия 5.0 делает большинство примеров, опубликованных в Интернете устаревшими. – Ravi

0

Модуль компиляции устарел. Он заменяется деревом синтаксиса.

Try следующий код:

 TextReader reader = File.OpenText("myfile.cs"); 
     SyntaxTree syntaxTree; 

     CSharpParser parser = new CSharpParser(); 
     syntaxTree = parser.Parse(reader, "myfile.cs"); 

     IEnumerable<AstNode> desc = syntaxTree.Descendants; 

     foreach(AstNode astNode in desc) 
     { 
      System.Console.WriteLine(astNode.GetType()); 
     } 
Смежные вопросы