如何防止_loosing_缩进(WhiteSpaceTrivia)时重写标识符名称与CSharpSyntaxRewrit
本文关键字:标识符 重写 CSharpSyntaxRewrit loosing 何防止 缩进 WhiteSpaceTrivia | 更新日期: 2023-09-27 18:02:26
我正在实现一个CSharpSyntaxRewriter使用Roslyn重命名变量标识符。
(请注意:重写将在命令行实用程序的上下文中运行,而不是Visual Studio CodeAction)
请不要建议格式化整个文档,因为这不是我的选择:我希望保持所有格式化在原始文档中应用的内容。我想"只是"重命名标识符,并保留所有其他方面的完整性。
下面代码的问题是,它完全修剪了像这样的行中的前导缩进:(更正确地说:我失去了一些父母的前导和尾随琐事:
x = 3;
y= 3;
请注意,在标识符和赋值操作符之间的缩进和尾随空格也消失了。
以下是代码,以及我尝试过的四件事(内联作为注释),但没有成功:public override SyntaxNode VisitIdentifierName(IdentifierNameSyntax name)
{
if (someCondition)
{
name = name.WithIdentifier(SyntaxFactory.Identifier(GetChangedName(name.Identifier.ValueText)));
// Try #1: Does the same
//name = name.Update(SyntaxFactory.Identifier(GetChangedName(name.Identifier.ValueText)));
// Additional correction tries:
//name.NormalizeWhitespace(); // Try #2: does nothing
//name = (IdentifierNameSyntax) Formatter.Format(name, _workspace); // Try #3: does nothing
//name = name.WithAdditionalAnnotations(Formatter.Annotation); // Try #4: does nothing I suppose because we are not in a VS codeaction
}
return name;
}
Thanks in advance
这很容易…
try #59458后,结果到达:
name = name
.WithIdentifier(SyntaxFactory.Identifier(GetChangedName(name.Identifier.ValueText)))
.WithLeadingTrivia(name.GetLeadingTrivia())
.WithTrailingTrivia(name.GetTrailingTrivia());