2015-10-11 93 views
0

我試圖寫一個小重構它除了破壞方法/演員參數是這樣的:更新ParameterSyntaxList不更新Visual Studio中的代碼?

前:

public void Method(string a, string b, string c) 
{ 
} 

重構後:

public void Method(string a, 
        string b, 
        string c) 
{ 
} 

爲重構的代碼如下,但問題在於Visual Studio中的代碼格式不會更改。調試時 - 我可以看到updatedParameterList格式正確。我錯過了什麼?

private async Task<Document> BreakParametersApart(Document document, ParameterListSyntax parameterListNode, CancellationToken cancellationToken) 
{ 
    ParameterSyntax firstParameter = parameterListNode.Parameters.First(); 

    int column = firstParameter.GetLocation().GetLineSpan().StartLinePosition.Character; 

    StringBuilder paddingBuilder = new StringBuilder("\n"); 
    for (int i = 0; i < column; i++) 
     paddingBuilder.Append(" "); 
    string padding = paddingBuilder.ToString(); 

    List<ParameterSyntax> updatedParameters = new List<ParameterSyntax>(); 
    updatedParameters.Add(firstParameter.WithoutLeadingTrivia().WithoutTrailingTrivia()); 

    foreach (ParameterSyntax parameter in parameterListNode.Parameters.Skip(1).ToList()) 
     updatedParameters.Add(parameter.WithoutLeadingTrivia().WithoutTrailingTrivia().WithLeadingTrivia(SyntaxFactory.Whitespace(padding))); 

    ParameterListSyntax updatedParameterList = SyntaxFactory.ParameterList(parameterListNode.OpenParenToken, SyntaxFactory.SeparatedList(updatedParameters), parameterListNode.CloseParenToken); 

    SyntaxNode root = await document.GetSyntaxRootAsync(cancellationToken); 
    var newRoot = root.ReplaceNode(parameterListNode, updatedParameterList); 
    return document.WithSyntaxRoot(newRoot); 
} 

回答

0

自己弄明白了。要插入新行我只好用EndOfLine瑣事:

.WithLeadingTrivia(SyntaxFactory.EndOfLine("\n"), SyntaxFactory.Whitespace(padding))

+1

一個挑剔:避免硬編碼\ N,因爲你想用你結束在是文件的格式行的一種方法可能是去了)的尾聲瑣事,並抓住那裏的任何EndOfLine瑣事。或者做其他事情。 –