@@ -11,6 +11,17 @@ private import codeql.ruby.ast.internal.Pattern
1111private import codeql.ruby.ast.internal.Scope
1212private import codeql.ruby.ast.internal.Synthesis
1313
14+ private Ruby:: AstNode getAssignmentParent ( Ruby:: AstNode n ) {
15+ result = n .getParent ( ) and
16+ (
17+ result instanceof Ruby:: DestructuredLeftAssignment
18+ or
19+ result instanceof Ruby:: LeftAssignmentList
20+ or
21+ result instanceof Ruby:: RestAssignment
22+ )
23+ }
24+
1425/**
1526 * Holds if `n` is in the left-hand-side of an explicit assignment `assignment`.
1627 */
@@ -19,16 +30,7 @@ predicate explicitAssignmentNode(Ruby::AstNode n, Ruby::AstNode assignment) {
1930 or
2031 n = assignment .( Ruby:: OperatorAssignment ) .getLeft ( )
2132 or
22- exists ( Ruby:: AstNode parent |
23- parent = n .getParent ( ) and
24- explicitAssignmentNode ( parent , assignment )
25- |
26- parent instanceof Ruby:: DestructuredLeftAssignment
27- or
28- parent instanceof Ruby:: LeftAssignmentList
29- or
30- parent instanceof Ruby:: RestAssignment
31- )
33+ explicitAssignmentNode ( getAssignmentParent ( n ) , assignment )
3234}
3335
3436/** Holds if `n` is inside an implicit assignment. */
@@ -49,7 +51,7 @@ predicate implicitAssignmentNode(Ruby::AstNode n) {
4951 or
5052 n = any ( Ruby:: For for ) .getPattern ( )
5153 or
52- implicitAssignmentNode ( n . getParent ( ) )
54+ implicitAssignmentNode ( getAssignmentParent ( n ) )
5355}
5456
5557/** Holds if `n` is inside a parameter. */
0 commit comments