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:
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:
CursorVisitor.preVisitExpression(expr: ExpressionPtr)

def preVisitExpression : function<(var self:ast::AstVisitor;expr:ast_core::Expression? aka ExpressionPtr const):void>

Arguments:
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:
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: