diff --git a/languages/tree-sitter-stack-graphs-javascript/src/stack-graphs.tsg b/languages/tree-sitter-stack-graphs-javascript/src/stack-graphs.tsg index a9167c3a1..21650ea83 100644 --- a/languages/tree-sitter-stack-graphs-javascript/src/stack-graphs.tsg +++ b/languages/tree-sitter-stack-graphs-javascript/src/stack-graphs.tsg @@ -3189,22 +3189,22 @@ inherit .containing_class_value ;; ##### Member Expressions (member_expression - (_)@object . (_)@property)@member_expr -{ - - node member_push - node property_push + object:(_)@object + property:(_)@property +)@member_expr { + node member_push + node property_push ; scopes flow into object then back out edge @object.before_scope -> @member_expr.before_scope edge @member_expr.after_scope -> @object.after_scope ; value is a member projection on the value of the object ie. a push then push dot - attr (member_push) push_symbol = "GUARD:MEMBER" - attr (property_push) node_reference = @property - edge property_push -> member_push - edge @member_expr.value -> property_push - edge member_push -> @object.value + attr (member_push) push_symbol = "GUARD:MEMBER" + attr (property_push) node_reference = @property + edge property_push -> member_push + edge @member_expr.value -> property_push + edge member_push -> @object.value ; (member_expression) nodes can occur in patterns node @member_expr.covalue diff --git a/languages/tree-sitter-stack-graphs-javascript/test/expressions/member_expression.js b/languages/tree-sitter-stack-graphs-javascript/test/expressions/member_expression.js index b397d747a..7eb7a8e56 100644 --- a/languages/tree-sitter-stack-graphs-javascript/test/expressions/member_expression.js +++ b/languages/tree-sitter-stack-graphs-javascript/test/expressions/member_expression.js @@ -15,4 +15,9 @@ let x = 1; // Flow around /**/ x; -// ^ defined: 1 \ No newline at end of file +// ^ defined: 1 + +// Optional chain + +/**/ x?.foo +// ^ defined: 1