pub struct CodeModel { /* private fields */ }Expand description
A source file read at the code level.
Implementations§
Source§impl CodeModel
impl CodeModel
Sourcepub fn build(source: String, lang: Lang, decls: Vec<Decl>) -> Self
pub fn build(source: String, lang: Lang, decls: Vec<Decl>) -> Self
Derive the arbor from a producer’s Decl stream — the
seam. decls must be pre-order: a parent precedes its
children.
Sourcepub fn parse(text: &str, ext: &str) -> Result<Self, CodeError>
pub fn parse(text: &str, ext: &str) -> Result<Self, CodeError>
Read text as ext’s language at the code level: the
backend parse (cached when the thread’s AST cache is
enabled — see quarb_tree_sitter::set_cache) lowers
through the grammar’s table.
Sourcepub fn open(path: &Path) -> Result<Self, CodeError>
pub fn open(path: &Path) -> Result<Self, CodeError>
Read a file at the code level, language by extension.
Sourcepub fn locator(&self, node: NodeId) -> String
pub fn locator(&self, node: NodeId) -> String
A human-readable locator: name-or-construct segments, a
[n] index only among same-label siblings —
/lexer/lex/is_name_char, /main/for/call[3].
Trait Implementations§
Source§impl AstAdapter for CodeModel
impl AstAdapter for CodeModel
Source§fn name(&self, node: NodeId) -> Option<String>
fn name(&self, node: NodeId) -> Option<String>
The declared identifier, else the construct word; the file root stays unnamed.
Source§fn property(&self, node: NodeId, name: &str) -> Option<Value>
fn property(&self, node: NodeId, name: &str) -> Option<Value>
The uniform property set: ::signature, ::doc,
::callee — the identifier is NOT a property (it is the
name; :::name answers it). Aliased annotation keys fall
through to metadata via AstAdapter::aliased_metadata.
Source§fn links(&self, node: NodeId) -> Vec<(String, NodeId)>
fn links(&self, node: NodeId) -> Vec<(String, NodeId)>
->definition: a call’s edges to the declarations its
callee resolves to (same file, by identifier).
Source§fn backlinks(&self, node: NodeId) -> Vec<(String, NodeId)>
fn backlinks(&self, node: NodeId) -> Vec<(String, NodeId)>
<-definition: find-references — every call site whose
callee resolves here.
Source§fn children(&self, node: NodeId) -> Vec<NodeId>
fn children(&self, node: NodeId) -> Vec<NodeId>
node, in document order. Read moreSource§fn traits(&self, node: NodeId) -> Vec<String>
fn traits(&self, node: NodeId) -> Vec<String>
node — its adapter-defined classifications,
used by <trait> navigation filters (e.g. a filesystem
adapter’s <dir>, <code>, <image>).Source§fn metadata(&self, node: NodeId, key: &str) -> Option<Value>
fn metadata(&self, node: NodeId, key: &str) -> Option<Value>
::::key (a filesystem adapter’s
size, modified, permissions, …). None if absent.Source§fn aliased_metadata(&self, _node: NodeId) -> &'static [&'static str]
fn aliased_metadata(&self, _node: NodeId) -> &'static [&'static str]
:: (ruling
#29), for the given node — per node, because a composite
adapter (a multi-mount, a graft) answers for whichever
document owns it. Only an adapter whose property surface is closed —
fixed by the adapter, never grown by document content — may
declare aliases: a git commit cannot sprout a short field,
where a JSON object can sprout anything. Data always wins:
the engine consults property first and falls through only
when it answers None for that node, so an alias can never
shadow a document. Core metadata (:::) is never aliased —
name, id and index exist on every node, and aliasing
them would change what ::name means wherever a document
happens to lack that field.Source§fn children_named(&self, node: NodeId, name: &str) -> Vec<NodeId>
fn children_named(&self, node: NodeId, name: &str) -> Vec<NodeId>
node whose edge name is exactly name —
the engine’s fast path for name-matcher child hops. The
default filters children; an adapter
whose containers cannot be enumerated (permission-scoped or
unbounded remote trees) overrides this with a direct,
name-addressed lookup. Must be observationally identical to
the default wherever enumeration works. The adapter owns the
name test: it may deliberately alias — resolve a name to a
node whose edge name differs (git revision syntax landing on
a hash-named commit) — and the engine will not re-filter.
Container-scoped resolution like that stays child-axis only;
per-node spelling aliases belong in
answers_to, which this default
consults.Source§fn answers_to(&self, node: NodeId, name: &str) -> bool
fn answers_to(&self, node: NodeId, name: &str) -> bool
node answers to name as a literal spelling
(ruling #30). The default is canonical equality. An adapter
may declare per-node aliases — a social feed spelling a
handle @alice while the stripped alice is the hop name —
and the engine consults this wherever a literal name is
matched, on every axis, so one override keeps /@alice and
//@alice in agreement. :::name stays canonical (locators
and reflection print it; an alias is a way in, never a way
out), and name patterns (~(...), *) test the canonical
name only.Source§fn resolve(
&self,
_node: NodeId,
_property: &str,
_hint: Option<&str>,
) -> Option<NodeId>
fn resolve( &self, _node: NodeId, _property: &str, _hint: Option<&str>, ) -> Option<NodeId>
::property~>hint maps node’s
property (a value that references another node) to its target,
with an optional adapter-specific relation hint. A JSON
adapter resolves a $ref JSON Pointer; None if unresolvable.Source§fn external_ref(
&self,
_node: NodeId,
_property: &str,
_hint: Option<&str>,
) -> Option<String>
fn external_ref( &self, _node: NodeId, _property: &str, _hint: Option<&str>, ) -> Option<String>
node’s property holds, if any: an
adapter-defined identifier of a document outside this
arbor — for html, the anchor’s absolute URL, a relative
href joined against the document’s own URL. A #fragment
part is the crossref within the target document and rides
along (URI semantics). Consulted by ::property--> when
in-document resolution misses: a mounted document with that
identifier answers (the fragment’s element, else its root),
an unmounted one lands among the run’s unresolved external
references for the host’s acquisition loop. The engine
itself never fetches.Source§fn resolve_fragment(&self, _node: NodeId, _fragment: &str) -> Option<NodeId>
fn resolve_fragment(&self, _node: NodeId, _fragment: &str) -> Option<NodeId>
fragment names inside the document node
belongs to — html’s id lookup. The landing rung of a
fragment-carrying external reference, once its document is
mounted.Source§fn ref_property(&self, _node: NodeId) -> Option<String>
fn ref_property(&self, _node: NodeId) -> Option<String>
node’s own reference, for the bare
arrow (//a-->): an html anchor’s href, an iframe’s
src. None for a node that references nothing.Source§fn ref_label(&self, _node: NodeId, _property: &str) -> Option<String>
fn ref_label(&self, _node: NodeId, _property: &str) -> Option<String>
node via
property carries — html’s rel attribute. None falls
back to the property name as the edge label.Source§fn link_property(
&self,
_source: NodeId,
_label: &str,
_target: NodeId,
_name: &str,
) -> Option<Value>
fn link_property( &self, _source: NodeId, _label: &str, _target: NodeId, _name: &str, ) -> Option<Value>
source --label--> target — the
$-::prop read. Adapters whose edges carry data (a property
graph’s relationship properties) override this; None if the
edge is bare or unknown. Where parallel edges share source,
label, and target, the adapter answers for one of them,
consistently.Source§fn quantifier_bound(&self) -> usize
fn quantifier_bound(&self) -> usize
+, *, {m,}) expand, and the ceiling of any
explicit {m,n} (the effective upper bound is min(n, N_max)).
An adapter whose natural structures run deep may raise it; the
CLI overrides it per run (qua --quantifier-bound).Source§fn allow_shell(&self) -> bool
fn allow_shell(&self) -> bool
sh(...) pipeline stage may run external
commands. False by default — query text stays inert data —
and enabled per run by the CLI (qua --allow-shell) through
the AllowShell wrapper.Source§fn invocation_instant(&self) -> Option<(i64, u32)>
fn invocation_instant(&self) -> Option<(i64, u32)>
now() denotes (spec: The Temporal
Fragment, Determinism): one UTC timeline point bound by the
runner BEFORE evaluation begins — evaluation itself never
reads a clock. None by default (a library run is fully
deterministic; now() reads as null); the CLI binds it at
startup — pinnable with qua --now — through the
WithNow wrapper.Source§fn provenance(&self, _node: NodeId) -> Provenance
fn provenance(&self, _node: NodeId) -> Provenance
node — the :::source /
:::instant / :::dpid / :::provenance core-metadata
keys. Empty by default: an adapter answers only the
components its substrate genuinely records (never the
invocation clock); wrapper adapters fill missing components
from what they know — the mount its target, a graft its
outer leaf, a model its derivation — and forward the rest
inward, so resolution is nearest-ancestor per component.Source§fn unit_scale(&self, expr: &str) -> Option<(f64, String)>
fn unit_scale(&self, expr: &str) -> Option<(f64, String)>
[::range < '50kellicam'] resolves through the
document’s .!units imports.