scryer-engine 0.2.1

Tree-sitter and stack-graphs AST indexing engine for Scryer code intelligence
;; Scryer Stack Graphs Rules for Python
;; Defines name-binding graph construction for Python declarations, references, and scopes.

global ROOT_NODE
global JUMP_TO_SCOPE_NODE

;; =============================================================================
;; Declarations (Definitions)
;; =============================================================================

;; Functions
(function_definition name: (identifier) @name) {
  node def
  attr (def) type = "pop_symbol", symbol = (source-text @name), is_definition, syntax_type = "function", source_node = @name
  edge ROOT_NODE -> def
}

;; Classes
(class_definition name: (identifier) @name) {
  node def
  attr (def) type = "pop_symbol", symbol = (source-text @name), is_definition, syntax_type = "class", source_node = @name
  edge ROOT_NODE -> def
}

;; =============================================================================
;; References (Usages)
;; =============================================================================

;; Function and Method Calls
(call function: (identifier) @name) {
  node ref
  attr (ref) type = "push_symbol", symbol = (source-text @name), is_reference, source_node = @name
  edge ref -> ROOT_NODE
}

;; General Identifiers (in expressions)
(expression_statement (assignment left: (identifier) @name)) {
  node def
  attr (def) type = "pop_symbol", symbol = (source-text @name), is_definition, syntax_type = "variable", source_node = @name
  edge ROOT_NODE -> def
}