public override void VisitIdentifierName(IdentifierNameSyntax node) { if (symbols.FirstOrDefault(x => node.NameIs(x.Name) && x.Equals(semanticModel.GetSymbolInfo(node).Symbol)) is { } symbol) { isMuted = IsInTupleAssignmentTarget() || IsUsedInLocalFunction(symbol) || IsInUnsupportedExpression(); InspectTryCatch(node); } base.VisitIdentifierName(node); bool IsInTupleAssignmentTarget() => node.Parent is ArgumentSyntax argument && argument.IsInTupleAssignmentTarget(); bool IsUsedInLocalFunction(ISymbol symbol) => // We don't mute it if it's declared and used in local function !(symbol.ContainingSymbol is IMethodSymbol containingSymbol && containingSymbol.MethodKind == MethodKindEx.LocalFunction) && HasAncestor(node, SyntaxKindEx.LocalFunctionStatement); bool IsInUnsupportedExpression() => node.FirstAncestorOrSelf <SyntaxNode>(x => x.IsAnyKind(SyntaxKindEx.IndexExpression, SyntaxKindEx.RangeExpression)) != null; }