gpt4 book ai didi

c# - 使用 SyntaxRewriter 删除代码中的冗余分号

转载 作者:太空狗 更新时间:2023-10-29 20:20:24 25 4
gpt4 key购买 nike

我正在尝试使用自定义语法重写器删除代码中的冗余分号。

public class Sample
{
public void Foo()
{
Console.WriteLine("Foo");
;
}
}

以下语法重写器涵盖了 Sample 类中的大多数场景。

public class EmptyStatementRemoval : CSharpSyntaxRewriter
{
public override SyntaxNode VisitEmptyStatement(EmptyStatementSyntax node)
{
return null;
}
}

但是,当分号有前导或尾随琐事时,从 VisitEmptyStatement 方法返回 null 会删除琐事,这不是预期的。

public class Sample
{
public void Foo()
{
Console.WriteLine("Foo");
#region SomeRegion
//Some other code
#endregion
;
}
}

我无法确定如何返回一个只有前导和尾随琐事并删除分号的节点。我尝试使用 node.WithSemicolonToken(SyntaxToken) 方法将分号标记替换为另一个标记,结果证明它只接受 SyntaxKind.SemicolonToken 类型的标记或抛出 ArgumentException。

最佳答案

一种可行的方法是用缺失分号标记替换分号标记:

public override SyntaxNode VisitEmptyStatement(EmptyStatementSyntax node)
{
return node.WithSemicolonToken(
SyntaxFactory.MissingToken(SyntaxKind.SemicolonToken)
.WithLeadingTrivia(node.SemicolonToken.LeadingTrivia)
.WithTrailingTrivia(node.SemicolonToken.TrailingTrivia));
}

对于您的 #region 示例,结果如下所示(注意该行仅包含分号所在的空格):

public class Sample
{
public void Foo()
{
Console.WriteLine("Foo");
#region SomeRegion
//Some other code
#endregion

}
}

关于c# - 使用 SyntaxRewriter 删除代码中的冗余分号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25308944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com