diff --git a/languages/tree-sitter-stack-graphs-java/src/stack-graphs.tsg b/languages/tree-sitter-stack-graphs-java/src/stack-graphs.tsg index b249adb70..e7d8b4385 100644 --- a/languages/tree-sitter-stack-graphs-java/src/stack-graphs.tsg +++ b/languages/tree-sitter-stack-graphs-java/src/stack-graphs.tsg @@ -568,29 +568,56 @@ attribute node_symbol = node => symbol = (source-text node), source_n (local_variable_declaration type: (_) @type - declarator: (variable_declarator - name: (_) @name - ) + declarator: (variable_declarator) @var_decl ) @local_var { - node def - attr (def) node_definition = @name - edge @local_var.after_scope -> def - edge @local_var.after_scope -> @local_var.before_scope - attr (@local_var.after_scope -> @local_var.before_scope) precedence = 1 + edge @var_decl.def__typeof -> @type.type +} +(local_variable_declaration + type: (_) @type) @local_var { edge @type.lexical_scope -> @local_var.before_scope +} - node def__typeof - attr (def__typeof) pop_symbol = ":" +(variable_declarator value: (_) @value) @this { + edge @value.lexical_scope -> @this.before_scope +} - edge def -> def__typeof +(local_variable_declaration + declarator: (_) @last + . ) @local_var { + edge @local_var.after_scope -> @last.after_scope + attr (@local_var.after_scope -> @last.after_scope) precedence = 1 +} - edge def__typeof -> @type.type +(local_variable_declaration + type: (_) + . + declarator: (_) @first) @local_var { + edge @first.before_scope -> @local_var.before_scope } -(local_variable_declaration declarator: (variable_declarator value: (_) @value)) @this { - edge @value.lexical_scope -> @this.before_scope +(local_variable_declaration + declarator: (_) @left + . + declarator: (_) @right + ) @local_var { + edge @right.before_scope -> @left.after_scope +} + +(variable_declarator + name: (_) @name) @var_decl { + node @var_decl.before_scope + node @var_decl.after_scope + node @var_decl.def__typeof + attr (@var_decl.def__typeof) pop_symbol = ":" + + node def + attr (def) node_definition = @name + edge @var_decl.after_scope -> def + edge @var_decl.after_scope -> @var_decl.before_scope + + edge def -> @var_decl.def__typeof } (return_statement (_) @expr) @stmt diff --git a/languages/tree-sitter-stack-graphs-java/test/statement/for_statement.java b/languages/tree-sitter-stack-graphs-java/test/statement/for_statement.java index 0c9055879..a5f2b55eb 100644 --- a/languages/tree-sitter-stack-graphs-java/test/statement/for_statement.java +++ b/languages/tree-sitter-stack-graphs-java/test/statement/for_statement.java @@ -17,4 +17,12 @@ void g() { //^ defined: 12 } } + + void h() { + int k = 5; + for (int i = 0, j = i; i < 123; k++) { + // ^ defined: 23 + // ^ defined: 22 + } + } }