2014-12-05 6 views
3

내 프로그램에서 나는 Roslyn을 사용하고 노드를 새로운 노드로 교체해야한다. 예를 들어, 만약 내가Roslyn - 노드를 교체하고 공백을 고친다

public void Foo() 
{ 
    for(var i = 0; i < 5; i++) 
     Console.WriteLine(""); 
} 

과 같은 코드를 가지고 내가 문, 내가

public void Foo() 
{ 
    for(var i = 0; i < 5; i++) 
{ 
     Console.WriteLine(""); 
} 
} 

내가 NormalizeWhitespace를 사용하려고를 얻기 위해 brackes을 삽입 할,하지만 난 문을에 사용하는 경우, I 얻으십시오

public void Foo() 
{ 
for(var i = 0; i < 5; i++) 
{ 
    Console.WriteLine(""); 
} 
} 

그러나, 나는 정확한 계산서를 위해 가지고 있고 싶으면. 어떤 힌트 어떻게 그것을 할 수 있습니까?

편집 : 나는 사용하여 그것을 해결 :

var blockSyntax = SyntaxFactory.Block(
      SyntaxFactory.Token(SyntaxKind.OpenBraceToken).WithLeadingTrivia(forStatementSyntax.GetLeadingTrivia()).WithTrailingTrivia(forStatementSyntax.GetTrailingTrivia()), 
      syntaxNodes, 
      SyntaxFactory.Token(SyntaxKind.CloseBraceToken).WithLeadingTrivia(forStatementSyntax.GetLeadingTrivia()).WithTrailingTrivia(forStatementSyntax.GetTrailingTrivia()) 
); 

그러나 샘에서 답도 정확합니다.

답변

3

.WithAdditionalAnnotations(Formatter.Annotation)을 사용해야하지만 포맷하려는 특정 요소에서만 사용해야합니다. 다음은 NullParameterCheckRefactoring 프로젝트의 예입니다.

IfStatementSyntax nullCheckIfStatement = SyntaxFactory.IfStatement(
    SyntaxFactory.Token(SyntaxKind.IfKeyword), 
    SyntaxFactory.Token(SyntaxKind.OpenParenToken), 
    binaryExpression, 
    SyntaxFactory.Token(SyntaxKind.CloseParenToken), 
    syntaxBlock, null).WithAdditionalAnnotations(Formatter.Annotation, Simplifier.Annotation);