鑑於下面的代碼段,例如:確定如果兩個SyntaxTokens是相同
public class Thing
{
public int Item { get; }
public Thing(int item)
{
Item = Item; // note incorrect assignment: rhs should be item, the passed-in arg, hence analyzer should warn
}
public Thing(Thing other)
{
Item = other.Item; // correct assignment, should NOT trigger analyzer
}
}
我正在寫一個羅斯林分析器至低於檢測和報告可能誤認爲自賦值的這些情況下,相關部分:
public override void Initialize(AnalysisContext context)
{
context.RegisterSyntaxNodeAction(MistakenSelfAssignment, SyntaxKind.SimpleAssignmentExpression);
}
private static void MistakenSelfAssignment(SyntaxNodeAnalysisContext context)
{
var assignment = context.Node as AssignmentExpressionSyntax;
if (assignment == null)
{
return;
}
var leftToken = GetIdentifierToken(assignment.Left);
var rightToken = GetIdentifierToken(assignment.Right);
if (leftToken != null && leftToken.IsEquivalentTo(rightToken)) // this never works
{
var diagnostic = Diagnostic.Create(Rule, assignment.GetLocation());
context.ReportDiagnostic(diagnostic);
}
}
private static SyntaxToken GetIdentifierToken(ExpressionSyntax syntax)
{
var identifierName = syntax as IdentifierNameSyntax;
if (identifierName != null)
{
return identifierName.Identifier;
}
var identifierAccess = syntax as MemberAccessExpressionSyntax;
if (identifierAccess != null)
{
return identifierAccess.Name.Identifier;
}
return default(SyntaxToken);
}
但我無法弄清楚如何確定轉讓的LHS和RHS是同樣的道理 - SyntaxToken.IsEquivalentTo
似乎是我想要的方法,但它始終返回false,因爲這樣做SyntaxToken.Equals
和==
。
確定令牌是否指向自身的正確方法是什麼?
SyntaxFactory.AreEquivalent? – Marcus
@馬庫斯那種工作,但它也認爲像'Item = other.Item'等等東西,這不是我想要的。我只關心變量或屬性被賦值爲自己的值的情況。 –
你能發表需要分析的整個代碼嗎?或比較失敗的部分。通過查看實現,我無法看到「IsEquivalentTo」可能無法提供準確的結果。 – Marcus