Roslyn-替换节点并修复空白 [英] Roslyn - replace node and fix the whitespaces

查看:82
本文介绍了Roslyn-替换节点并修复空白的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的程序中,我使用Roslyn,并且需要用新节点替换一个节点。例如,如果我有这样的代码

In my program I use Roslyn and I need to replace a node with a new node. For example, if I have code like

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

我想插入括号以供声明,我得到

and I want to insert brackes for for statement, I get

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

我尝试使用NormalizeWhitespace,但是如果使用它在声明中,我得到

I tried to use NormalizeWhitespace, but if I use it on for statement, I get

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

但是,我想将语句格式化正确地。

However, I'd like to have for statement formatted correctly. Any hints how to do it?

编辑:
我使用以下方法解决了这个问题:

I solved it by using:

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())
);

但是,Sam的答案也是正确的。

However, the answer from Sam is also correct.

推荐答案

您需要在要格式化的特定元素上使用 .WithAdditionalAnnotations(Formatter.Annotation)。这是来自 NullParameterCheckRefactoring 项目的示例。

You need to use .WithAdditionalAnnotations(Formatter.Annotation), but only on the specific element you want to format. Here's an example from the NullParameterCheckRefactoring project.

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

这篇关于Roslyn-替换节点并修复空白的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆