;; Scryer Stack Graphs Rules for TypeScript
;; Defines name-binding graph construction for TypeScript declarations, references, and scopes.
global ROOT_NODE
global JUMP_TO_SCOPE_NODE
;; =============================================================================
;; Declarations (Definitions)
;; =============================================================================
;; Functions
(function_declaration 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_declaration name: (type_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
}
;; Interfaces
(interface_declaration name: (type_identifier) @name) {
node def
attr (def) type = "pop_symbol", symbol = (source-text @name), is_definition, syntax_type = "interface", source_node = @name
edge ROOT_NODE -> def
}
;; Type Aliases
(type_alias_declaration name: (type_identifier) @name) {
node def
attr (def) type = "pop_symbol", symbol = (source-text @name), is_definition, syntax_type = "type", source_node = @name
edge ROOT_NODE -> def
}
;; Enums
(enum_declaration name: (identifier) @name) {
node def
attr (def) type = "pop_symbol", symbol = (source-text @name), is_definition, syntax_type = "enum", source_node = @name
edge ROOT_NODE -> def
}
;; =============================================================================
;; References (Usages)
;; =============================================================================
;; Calls
(call_expression function: (identifier) @name) {
node ref
attr (ref) type = "push_symbol", symbol = (source-text @name), is_reference, source_node = @name
edge ref -> ROOT_NODE
}