Я использую Рослины-х CSharpSyntaxRewriter
переписать следующим образом:Rewrite SyntaxNode два SyntaxNodes
string myString = "Hello ";
myString += "World!";
к:
string myString = "Hello ";
myString += "World!"; Log("myString", myString);
Моего синтаксис ReWriter переопределяет VisitAssignmentExpression
следующим образом.
Я был в состоянии «обмануть» это ограничение при работе с StatementSyntax
путем построения BlockSyntax
с отсутствующими скобками:
var statements = new SyntaxList<StatementSyntax>();
//Tried bundling newNode and invocation together
statements.Add(SyntaxFactory.ExpressionStatement(newNode));
statements.Add(SyntaxFactory.ExpressionStatement(invocation));
var wrapper = SyntaxFactory.Block(statements);
//Now we can remove the { and } braces
wrapper = wrapper.WithOpenBraceToken(SyntaxFactory.MissingToken(SyntaxKind.OpenBraceToken))
.WithCloseBraceToken(SyntaxFactory.MissingToken(SyntaxKind.CloseBraceToken)
Однако этот подход не будет работать с AssignmentExpressionSyntax
, как BlockSyntax
не может быть брошено до ExpressionSyntax
. (The CSharpSyntaxRewriter tries to make this cast.)
Как я могу переписать один SyntaxNode на два SyntaxNodes?
Я столкнулся с ограничением API, или есть какие-либо трюки, подобные вышеуказанным, которые кто-то мог бы поделиться?