10.10. Position-based AST queries
Position-based AST queries. Given a file, line, and column, finds all expression nodes at that cursor position with innermost-first ordering and enclosing function context. Used for implementing IDE features like goto-definition, type-of, and find-references.
10.10.1. Structures
- CursorHit
- Fields:
expr : Expression? - Raw pointer to the expression node (valid while the program lives).
func : Function? - Enclosing function, or null for expressions in global scope.
name : string - Extracted name for named nodes (variable name, call name, field name, operator).
rtti : string - Expression RTTI type string: “ExprVar”, “ExprCall”, “ExprField”, etc.
10.10.2. Classes
- CursorVisitor : AstVisitor
class CursorVisitor
- CursorVisitor.preVisitFunction(fun: FunctionPtr)
def preVisitFunction : function<(var self:ast::AstVisitor;fun:ast_core::Function? aka FunctionPtr const):void>
- Arguments:
fun : FunctionPtr
- CursorVisitor.visitFunction(fun: FunctionPtr): FunctionPtr
def visitFunction : function<(var self:ast::AstVisitor;fun:ast_core::Function? aka FunctionPtr const):ast_core::Function? aka FunctionPtr>
- Arguments:
fun : FunctionPtr
- CursorVisitor.preVisitExpression(expr: ExpressionPtr)
def preVisitExpression : function<(var self:ast::AstVisitor;expr:ast_core::Expression? aka ExpressionPtr const):void>
- Arguments:
expr : ExpressionPtr
- CursorVisitor(file: string; line: int; col: int): CursorVisitor
def CursorVisitor (file: string; line: int; col: int) : CursorVisitor
- Arguments:
file : string
line : int
col : int
10.10.3. Cursor queries
- cursor_inside(line: int; col: int; at: LineInfo): bool
def cursor_inside (line: int; col: int; at: LineInfo) : bool
- Arguments:
line : int
col : int
at : LineInfo
- find_at_cursor(program: smart_ptr<Program>; file: string; line: int; col: int): array<CursorHit>
def find_at_cursor (program: smart_ptr<Program>; file: string; line: int; col: int) : array<CursorHit>
- Arguments:
program : smart_ptr< Program>
file : string
line : int
col : int
- find_at_cursor_in_function(func: FunctionPtr; file: string; line: int; col: int): array<CursorHit>
def find_at_cursor_in_function (func: FunctionPtr; file: string; line: int; col: int) : array<CursorHit>
- Arguments:
func : FunctionPtr
file : string
line : int
col : int
10.10.4. Result inspection
- describe(hit: CursorHit): string
def describe (hit: CursorHit) : string
- Arguments:
hit : CursorHit