#[non_exhaustive]pub struct SyntaxGraph {
pub nodes: BTreeMap<NodeId, SyntaxNode>,
pub edges: BTreeMap<NodeId, BTreeMap<NodeId, SyntaxEdge>>,
pub symbol_index: BTreeMap<String, BTreeMap<NodeId, Vec<NodeId>>>,
pub scope_parent: BTreeMap<NodeId, NodeId>,
pub sanitization_index: BTreeMap<String, BTreeMap<NodeId, Vec<SanitizationEvent>>>,
pub usage_index: BTreeMap<String, BTreeMap<NodeId, Vec<UsageEvent>>>,
pub subpath_index: BTreeMap<NodeId, Option<NodeId>>,
pub branch_index: BTreeMap<NodeId, Vec<(NodeId, bool)>>,
pub call_index: BTreeMap<String, Vec<NodeId>>,
pub nodes_by_type: BTreeMap<SyntaxKind, Vec<NodeId>>,
}Expand description
The syntax graph: every parsed node plus the AST and CFG edges between them.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.nodes: BTreeMap<NodeId, SyntaxNode>Every node, keyed by id.
edges: BTreeMap<NodeId, BTreeMap<NodeId, SyntaxEdge>>Adjacency: source id -> target id -> which edge kinds connect them.
symbol_index: BTreeMap<String, BTreeMap<NodeId, Vec<NodeId>>>Symbol name -> scope id -> definition ids in that scope, most recent first.
scope_parent: BTreeMap<NodeId, NodeId>Scope id -> its enclosing scope’s id.
sanitization_index: BTreeMap<String, BTreeMap<NodeId, Vec<SanitizationEvent>>>Symbol name -> scope id -> sanitization events recorded for it.
usage_index: BTreeMap<String, BTreeMap<NodeId, Vec<UsageEvent>>>Symbol name -> scope id -> usage events recorded for it.
subpath_index: BTreeMap<NodeId, Option<NodeId>>Node id -> the object path id it was built from, when it has one.
branch_index: BTreeMap<NodeId, Vec<(NodeId, bool)>>Node id -> enclosing (if id, is true branch) pairs, outermost first.
call_index: BTreeMap<String, Vec<NodeId>>Callee short name -> invocations of it, used to reach a method’s call sites.
nodes_by_type: BTreeMap<SyntaxKind, Vec<NodeId>>Syntax kind -> ids of every node of that kind, in insertion order.
Implementations§
Source§impl SyntaxGraph
impl SyntaxGraph
Sourcepub fn add_node(&mut self, id: NodeId, node: SyntaxNode)
pub fn add_node(&mut self, id: NodeId, node: SyntaxNode)
Inserts node under id, indexing it by its syntax kind.
Sourcepub fn register_sanitization(
&mut self,
symbol: &str,
scope: NodeId,
event: SanitizationEvent,
)
pub fn register_sanitization( &mut self, symbol: &str, scope: NodeId, event: SanitizationEvent, )
Records a sanitization of symbol as seen within scope.
Sourcepub fn register_call(&mut self, name: &str, invocation_id: NodeId)
pub fn register_call(&mut self, name: &str, invocation_id: NodeId)
Records that invocation_id calls a callee named name.
Sourcepub fn register_usage(&mut self, symbol: &str, scope: NodeId, event: UsageEvent)
pub fn register_usage(&mut self, symbol: &str, scope: NodeId, event: UsageEvent)
Records a use of symbol as seen within scope.
Sourcepub fn add_ast_edge(&mut self, from: NodeId, to: NodeId)
pub fn add_ast_edge(&mut self, from: NodeId, to: NodeId)
Connects from to to with an AST edge, merging into any existing edge.
Sourcepub fn add_cfg_edge(&mut self, from: NodeId, to: NodeId)
pub fn add_cfg_edge(&mut self, from: NodeId, to: NodeId)
Connects from to to with a CFG edge, merging into any existing edge.
Sourcepub fn finalize_symbol_index(&mut self)
pub fn finalize_symbol_index(&mut self)
Reverses each scope’s definition list so lookups see the most recent first.
Call once after the graph is fully built; definitions are appended in parse order, which is the opposite of the shadowing order callers need.
Sourcepub fn remove_edge(&mut self, from: NodeId, to: NodeId)
pub fn remove_edge(&mut self, from: NodeId, to: NodeId)
Removes the edge from from to to, if one exists.
Trait Implementations§
Source§impl Clone for SyntaxGraph
impl Clone for SyntaxGraph
Source§impl CodeGraph for SyntaxGraph
impl CodeGraph for SyntaxGraph
Source§fn children(&self, n_id: NodeId) -> Vec<NodeId>
fn children(&self, n_id: NodeId) -> Vec<NodeId>
n_id’s children, following both AST and CFG edges.Source§fn ast_children(&self, n_id: NodeId) -> Vec<NodeId>
fn ast_children(&self, n_id: NodeId) -> Vec<NodeId>
n_id’s children, following AST edges only.Source§fn parents(&self, n_id: NodeId) -> Vec<NodeId>
fn parents(&self, n_id: NodeId) -> Vec<NodeId>
n_id’s parents, following both AST and CFG edges.