Roslyn C# değeri artırılarak değişikliği
var incrementing = node as BinaryExpressionSyntax;
if (incrementing != null)
{
string right = incrementing .Right.ToString();
string left = incrementing .Left.ToString();
if (right == left + " - 1" || right == left + " + 1")
{
addDiagnostic(Diagnostic.Create(Rule, incrementation.GetLocation(), "Use the shorter way"));
}
}
Düzenleme: Bazı değişiklik yaptım. Şimdi artımlı her zaman tanınır. Program CodeFix içinde gitmek, ancak bir SyntaxFactory ile benim ReplaceToken çalışmaz.
if (node.IsKind(SyntaxKind.SimpleAssignmentExpression)) //I use a node instead of a token
{
var IncrementationClause = (BinaryExpressionSyntax)node;
string left = IncrementationClause.Left.ToString();
left = left + "++";
string rigt = IncrementationClause.Right.ToString();
var newIncrementationClause = IncrementationClause.ReplaceToken(SyntaxFactory.Identifier(IncrementationClause.Left.ToString()), SyntaxFactory.Identifier(left));
newIncrementationClause = IncrementationClause.ReplaceToken(SyntaxFactory.Identifier(IncrementationClause.Right.ToString()), SyntaxFactory.Identifier(String.Empty));
newIncrementationClause = IncrementationClause.ReplaceToken(SyntaxFactory.Identifier(IncrementationClause.OperatorToken.ToString()), SyntaxFactory.Identifier(String.Empty));
var newRoot = root.ReplaceNode(IncrementationClause, newIncrementationClause);
return new[] { CodeAction.Create("Changer la mise en forme", document.WithSyntaxRoot(newRoot)) };
}
Sen dize temsilini kontrol, sözdizimi ağacı analiz edilmelidir. ToString(), muhtemelen beklediğiniz şeyi geri getirmez. – SLaks
Yolu buldum ve şimdi CodeFix'e gidiyor. Ama hiçbir şey değişmez ... Bir CodeAction'ım var, ama hiçbir işlem yapılmadı. Adım adım hata ayıkladığımda, newIncrementationClause'ın IncrementationClause ile tamamen aynı olduğunu görebiliyorum. Belki bana yardımcı olabilirsiniz :) – Maloz
Yeni oluşturduğunuz yeni bir düğümü değiştiriyorsunuz, bu da tanım gereği ağaçta değil. Node.ToString() 'ile asla çalışmamalısınız; Her zaman Düğüm API'lerini doğrudan kullanın. – SLaks