pub struct Relations {Show 24 fields
pub symbols: Vec<SymbolFact>,
pub imports: Vec<ImportFact>,
pub calls: Vec<CallFact>,
pub visibilities: Vec<VisibilityFact>,
pub attributes: Vec<AttributeFact>,
pub parents: Vec<ParentFact>,
pub qualifiers: Vec<QualifierFact>,
pub symbol_ranges: Vec<SymbolRangeFact>,
pub implements: Vec<ImplementsFact>,
pub is_impls: Vec<IsImplFact>,
pub type_methods: Vec<TypeMethodFact>,
pub resolved_imports: Vec<ResolvedImportFact>,
pub modules: Vec<ModuleFact>,
pub exports: Vec<ExportFact>,
pub reexports: Vec<ReexportFact>,
pub symbol_uses: Vec<SymbolUseFact>,
pub resolved_references: Vec<ResolvedReferenceFact>,
pub resolved_calls: Vec<ResolvedCallFact>,
pub module_search_paths: Vec<ModuleSearchPathFact>,
pub cfg_blocks: Vec<CfgBlockFact>,
pub cfg_edges: Vec<CfgEdgeFact>,
pub cfg_defs: Vec<CfgDefFact>,
pub cfg_uses: Vec<CfgUseFact>,
pub cfg_effects: Vec<CfgEffectFact>,
}Expand description
All relations (facts) available to rules.
This is the complete set of facts extracted from a codebase. Rule packs receive this and apply Datalog rules over it.
Fields§
§symbols: Vec<SymbolFact>All symbols defined in the codebase
imports: Vec<ImportFact>All imports in the codebase
calls: Vec<CallFact>All function calls in the codebase
visibilities: Vec<VisibilityFact>Symbol visibility facts
attributes: Vec<AttributeFact>Symbol attribute facts (one per attribute per symbol)
parents: Vec<ParentFact>Symbol parent-child hierarchy
qualifiers: Vec<QualifierFact>Call qualifier facts (receiver/module on calls)
symbol_ranges: Vec<SymbolRangeFact>Symbol range facts (start and end lines)
implements: Vec<ImplementsFact>Implements facts (symbol implements interface/trait)
is_impls: Vec<IsImplFact>Is-impl facts (symbol is a trait/interface implementation)
type_methods: Vec<TypeMethodFact>Type method facts (method signatures on types)
resolved_imports: Vec<ResolvedImportFact>Resolved import facts (import resolved to a specific file)
modules: Vec<ModuleFact>Module identity facts (file → canonical module path)
exports: Vec<ExportFact>Export facts (symbol exported from a file)
reexports: Vec<ReexportFact>Reexport facts (symbol re-exported through an intermediate)
symbol_uses: Vec<SymbolUseFact>Symbol use facts (reference/use sites)
resolved_references: Vec<ResolvedReferenceFact>Resolved reference facts (use resolved to definition)
resolved_calls: Vec<ResolvedCallFact>Resolved call facts (call resolved to definition file)
module_search_paths: Vec<ModuleSearchPathFact>Module search path facts (directories to search for modules)
cfg_blocks: Vec<CfgBlockFact>CFG block facts (one per basic block per function)
cfg_edges: Vec<CfgEdgeFact>CFG edge facts (one per control-flow edge per function)
cfg_defs: Vec<CfgDefFact>CFG variable definition facts (one per def site per block)
cfg_uses: Vec<CfgUseFact>CFG variable use facts (one per use site per block)
cfg_effects: Vec<CfgEffectFact>CFG side-effect facts (await, defer, yield, acquire, release, send, receive)
Implementations§
Source§impl Relations
impl Relations
Sourcepub fn add_import(&mut self, from_file: &str, to_module: &str, name: &str)
pub fn add_import(&mut self, from_file: &str, to_module: &str, name: &str)
Add an import fact
Sourcepub fn add_call(
&mut self,
caller_file: &str,
caller_name: &str,
callee_name: &str,
line: u32,
)
pub fn add_call( &mut self, caller_file: &str, caller_name: &str, callee_name: &str, line: u32, )
Add a call fact
Sourcepub fn add_visibility(&mut self, file: &str, name: &str, visibility: &str)
pub fn add_visibility(&mut self, file: &str, name: &str, visibility: &str)
Add a visibility fact
Sourcepub fn add_attribute(&mut self, file: &str, name: &str, attribute: &str)
pub fn add_attribute(&mut self, file: &str, name: &str, attribute: &str)
Add an attribute fact
Sourcepub fn add_parent(&mut self, file: &str, child_name: &str, parent_name: &str)
pub fn add_parent(&mut self, file: &str, child_name: &str, parent_name: &str)
Add a parent fact
Sourcepub fn add_qualifier(
&mut self,
caller_file: &str,
caller_name: &str,
callee_name: &str,
qualifier: &str,
)
pub fn add_qualifier( &mut self, caller_file: &str, caller_name: &str, callee_name: &str, qualifier: &str, )
Add a qualifier fact
Sourcepub fn add_symbol_range(
&mut self,
file: &str,
name: &str,
start_line: u32,
end_line: u32,
)
pub fn add_symbol_range( &mut self, file: &str, name: &str, start_line: u32, end_line: u32, )
Add a symbol range fact
Sourcepub fn add_implements(&mut self, file: &str, name: &str, interface: &str)
pub fn add_implements(&mut self, file: &str, name: &str, interface: &str)
Add an implements fact
Sourcepub fn add_is_impl(&mut self, file: &str, name: &str)
pub fn add_is_impl(&mut self, file: &str, name: &str)
Add an is_impl fact
Sourcepub fn add_type_method(
&mut self,
file: &str,
type_name: &str,
method_name: &str,
)
pub fn add_type_method( &mut self, file: &str, type_name: &str, method_name: &str, )
Add a type method fact
Sourcepub fn add_resolved_import(
&mut self,
from_file: &str,
to_file: &str,
imported_name: &str,
local_alias: &str,
kind: &str,
)
pub fn add_resolved_import( &mut self, from_file: &str, to_file: &str, imported_name: &str, local_alias: &str, kind: &str, )
Add a resolved import fact
Sourcepub fn add_module(&mut self, file: &str, canonical_module_path: &str)
pub fn add_module(&mut self, file: &str, canonical_module_path: &str)
Add a module fact
Sourcepub fn add_export(&mut self, file: &str, name: &str, kind: &str)
pub fn add_export(&mut self, file: &str, name: &str, kind: &str)
Add an export fact
Sourcepub fn add_reexport(
&mut self,
from_file: &str,
original_file: &str,
original_name: &str,
exported_as: &str,
)
pub fn add_reexport( &mut self, from_file: &str, original_file: &str, original_name: &str, exported_as: &str, )
Add a reexport fact
Sourcepub fn add_symbol_use(&mut self, file: &str, name: &str, line: u32)
pub fn add_symbol_use(&mut self, file: &str, name: &str, line: u32)
Add a symbol use fact
Sourcepub fn add_resolved_reference(
&mut self,
use_file: &str,
use_line: u32,
def_file: &str,
def_name: &str,
def_kind: &str,
)
pub fn add_resolved_reference( &mut self, use_file: &str, use_line: u32, def_file: &str, def_name: &str, def_kind: &str, )
Add a resolved reference fact
Sourcepub fn add_resolved_call(
&mut self,
caller_file: &str,
caller_name: &str,
callee_file: &str,
callee_name: &str,
line: u32,
)
pub fn add_resolved_call( &mut self, caller_file: &str, caller_name: &str, callee_file: &str, callee_name: &str, line: u32, )
Add a resolved call fact
Sourcepub fn add_module_search_path(
&mut self,
workspace_root: &str,
language: &str,
kind: &str,
path: &str,
)
pub fn add_module_search_path( &mut self, workspace_root: &str, language: &str, kind: &str, path: &str, )
Add a module search path fact
Sourcepub fn add_cfg_block(
&mut self,
file: &str,
func: &str,
func_line: u32,
block: u32,
kind: &str,
)
pub fn add_cfg_block( &mut self, file: &str, func: &str, func_line: u32, block: u32, kind: &str, )
Add a CFG block fact
Sourcepub fn add_cfg_edge(
&mut self,
file: &str,
func: &str,
func_line: u32,
from: u32,
to: u32,
kind: &str,
exception_type: &str,
)
pub fn add_cfg_edge( &mut self, file: &str, func: &str, func_line: u32, from: u32, to: u32, kind: &str, exception_type: &str, )
Add a CFG edge fact
Sourcepub fn add_cfg_def(
&mut self,
file: &str,
func: &str,
func_line: u32,
block: u32,
name: &str,
)
pub fn add_cfg_def( &mut self, file: &str, func: &str, func_line: u32, block: u32, name: &str, )
Add a CFG variable definition fact
Trait Implementations§
Source§impl Archive for Relationswhere
Vec<SymbolFact>: Archive,
Vec<ImportFact>: Archive,
Vec<CallFact>: Archive,
Vec<VisibilityFact>: Archive,
Vec<AttributeFact>: Archive,
Vec<ParentFact>: Archive,
Vec<QualifierFact>: Archive,
Vec<SymbolRangeFact>: Archive,
Vec<ImplementsFact>: Archive,
Vec<IsImplFact>: Archive,
Vec<TypeMethodFact>: Archive,
Vec<ResolvedImportFact>: Archive,
Vec<ModuleFact>: Archive,
Vec<ExportFact>: Archive,
Vec<ReexportFact>: Archive,
Vec<SymbolUseFact>: Archive,
Vec<ResolvedReferenceFact>: Archive,
Vec<ResolvedCallFact>: Archive,
Vec<ModuleSearchPathFact>: Archive,
Vec<CfgBlockFact>: Archive,
Vec<CfgEdgeFact>: Archive,
Vec<CfgDefFact>: Archive,
Vec<CfgUseFact>: Archive,
Vec<CfgEffectFact>: Archive,
impl Archive for Relationswhere
Vec<SymbolFact>: Archive,
Vec<ImportFact>: Archive,
Vec<CallFact>: Archive,
Vec<VisibilityFact>: Archive,
Vec<AttributeFact>: Archive,
Vec<ParentFact>: Archive,
Vec<QualifierFact>: Archive,
Vec<SymbolRangeFact>: Archive,
Vec<ImplementsFact>: Archive,
Vec<IsImplFact>: Archive,
Vec<TypeMethodFact>: Archive,
Vec<ResolvedImportFact>: Archive,
Vec<ModuleFact>: Archive,
Vec<ExportFact>: Archive,
Vec<ReexportFact>: Archive,
Vec<SymbolUseFact>: Archive,
Vec<ResolvedReferenceFact>: Archive,
Vec<ResolvedCallFact>: Archive,
Vec<ModuleSearchPathFact>: Archive,
Vec<CfgBlockFact>: Archive,
Vec<CfgEdgeFact>: Archive,
Vec<CfgDefFact>: Archive,
Vec<CfgUseFact>: Archive,
Vec<CfgEffectFact>: Archive,
Source§const COPY_OPTIMIZATION: CopyOptimization<Self>
const COPY_OPTIMIZATION: CopyOptimization<Self>
serialize. Read moreSource§impl<__D: Fallible + ?Sized> Deserialize<Relations, __D> for Archived<Relations>where
Vec<SymbolFact>: Archive,
<Vec<SymbolFact> as Archive>::Archived: Deserialize<Vec<SymbolFact>, __D>,
Vec<ImportFact>: Archive,
<Vec<ImportFact> as Archive>::Archived: Deserialize<Vec<ImportFact>, __D>,
Vec<CallFact>: Archive,
<Vec<CallFact> as Archive>::Archived: Deserialize<Vec<CallFact>, __D>,
Vec<VisibilityFact>: Archive,
<Vec<VisibilityFact> as Archive>::Archived: Deserialize<Vec<VisibilityFact>, __D>,
Vec<AttributeFact>: Archive,
<Vec<AttributeFact> as Archive>::Archived: Deserialize<Vec<AttributeFact>, __D>,
Vec<ParentFact>: Archive,
<Vec<ParentFact> as Archive>::Archived: Deserialize<Vec<ParentFact>, __D>,
Vec<QualifierFact>: Archive,
<Vec<QualifierFact> as Archive>::Archived: Deserialize<Vec<QualifierFact>, __D>,
Vec<SymbolRangeFact>: Archive,
<Vec<SymbolRangeFact> as Archive>::Archived: Deserialize<Vec<SymbolRangeFact>, __D>,
Vec<ImplementsFact>: Archive,
<Vec<ImplementsFact> as Archive>::Archived: Deserialize<Vec<ImplementsFact>, __D>,
Vec<IsImplFact>: Archive,
<Vec<IsImplFact> as Archive>::Archived: Deserialize<Vec<IsImplFact>, __D>,
Vec<TypeMethodFact>: Archive,
<Vec<TypeMethodFact> as Archive>::Archived: Deserialize<Vec<TypeMethodFact>, __D>,
Vec<ResolvedImportFact>: Archive,
<Vec<ResolvedImportFact> as Archive>::Archived: Deserialize<Vec<ResolvedImportFact>, __D>,
Vec<ModuleFact>: Archive,
<Vec<ModuleFact> as Archive>::Archived: Deserialize<Vec<ModuleFact>, __D>,
Vec<ExportFact>: Archive,
<Vec<ExportFact> as Archive>::Archived: Deserialize<Vec<ExportFact>, __D>,
Vec<ReexportFact>: Archive,
<Vec<ReexportFact> as Archive>::Archived: Deserialize<Vec<ReexportFact>, __D>,
Vec<SymbolUseFact>: Archive,
<Vec<SymbolUseFact> as Archive>::Archived: Deserialize<Vec<SymbolUseFact>, __D>,
Vec<ResolvedReferenceFact>: Archive,
<Vec<ResolvedReferenceFact> as Archive>::Archived: Deserialize<Vec<ResolvedReferenceFact>, __D>,
Vec<ResolvedCallFact>: Archive,
<Vec<ResolvedCallFact> as Archive>::Archived: Deserialize<Vec<ResolvedCallFact>, __D>,
Vec<ModuleSearchPathFact>: Archive,
<Vec<ModuleSearchPathFact> as Archive>::Archived: Deserialize<Vec<ModuleSearchPathFact>, __D>,
Vec<CfgBlockFact>: Archive,
<Vec<CfgBlockFact> as Archive>::Archived: Deserialize<Vec<CfgBlockFact>, __D>,
Vec<CfgEdgeFact>: Archive,
<Vec<CfgEdgeFact> as Archive>::Archived: Deserialize<Vec<CfgEdgeFact>, __D>,
Vec<CfgDefFact>: Archive,
<Vec<CfgDefFact> as Archive>::Archived: Deserialize<Vec<CfgDefFact>, __D>,
Vec<CfgUseFact>: Archive,
<Vec<CfgUseFact> as Archive>::Archived: Deserialize<Vec<CfgUseFact>, __D>,
Vec<CfgEffectFact>: Archive,
<Vec<CfgEffectFact> as Archive>::Archived: Deserialize<Vec<CfgEffectFact>, __D>,
impl<__D: Fallible + ?Sized> Deserialize<Relations, __D> for Archived<Relations>where
Vec<SymbolFact>: Archive,
<Vec<SymbolFact> as Archive>::Archived: Deserialize<Vec<SymbolFact>, __D>,
Vec<ImportFact>: Archive,
<Vec<ImportFact> as Archive>::Archived: Deserialize<Vec<ImportFact>, __D>,
Vec<CallFact>: Archive,
<Vec<CallFact> as Archive>::Archived: Deserialize<Vec<CallFact>, __D>,
Vec<VisibilityFact>: Archive,
<Vec<VisibilityFact> as Archive>::Archived: Deserialize<Vec<VisibilityFact>, __D>,
Vec<AttributeFact>: Archive,
<Vec<AttributeFact> as Archive>::Archived: Deserialize<Vec<AttributeFact>, __D>,
Vec<ParentFact>: Archive,
<Vec<ParentFact> as Archive>::Archived: Deserialize<Vec<ParentFact>, __D>,
Vec<QualifierFact>: Archive,
<Vec<QualifierFact> as Archive>::Archived: Deserialize<Vec<QualifierFact>, __D>,
Vec<SymbolRangeFact>: Archive,
<Vec<SymbolRangeFact> as Archive>::Archived: Deserialize<Vec<SymbolRangeFact>, __D>,
Vec<ImplementsFact>: Archive,
<Vec<ImplementsFact> as Archive>::Archived: Deserialize<Vec<ImplementsFact>, __D>,
Vec<IsImplFact>: Archive,
<Vec<IsImplFact> as Archive>::Archived: Deserialize<Vec<IsImplFact>, __D>,
Vec<TypeMethodFact>: Archive,
<Vec<TypeMethodFact> as Archive>::Archived: Deserialize<Vec<TypeMethodFact>, __D>,
Vec<ResolvedImportFact>: Archive,
<Vec<ResolvedImportFact> as Archive>::Archived: Deserialize<Vec<ResolvedImportFact>, __D>,
Vec<ModuleFact>: Archive,
<Vec<ModuleFact> as Archive>::Archived: Deserialize<Vec<ModuleFact>, __D>,
Vec<ExportFact>: Archive,
<Vec<ExportFact> as Archive>::Archived: Deserialize<Vec<ExportFact>, __D>,
Vec<ReexportFact>: Archive,
<Vec<ReexportFact> as Archive>::Archived: Deserialize<Vec<ReexportFact>, __D>,
Vec<SymbolUseFact>: Archive,
<Vec<SymbolUseFact> as Archive>::Archived: Deserialize<Vec<SymbolUseFact>, __D>,
Vec<ResolvedReferenceFact>: Archive,
<Vec<ResolvedReferenceFact> as Archive>::Archived: Deserialize<Vec<ResolvedReferenceFact>, __D>,
Vec<ResolvedCallFact>: Archive,
<Vec<ResolvedCallFact> as Archive>::Archived: Deserialize<Vec<ResolvedCallFact>, __D>,
Vec<ModuleSearchPathFact>: Archive,
<Vec<ModuleSearchPathFact> as Archive>::Archived: Deserialize<Vec<ModuleSearchPathFact>, __D>,
Vec<CfgBlockFact>: Archive,
<Vec<CfgBlockFact> as Archive>::Archived: Deserialize<Vec<CfgBlockFact>, __D>,
Vec<CfgEdgeFact>: Archive,
<Vec<CfgEdgeFact> as Archive>::Archived: Deserialize<Vec<CfgEdgeFact>, __D>,
Vec<CfgDefFact>: Archive,
<Vec<CfgDefFact> as Archive>::Archived: Deserialize<Vec<CfgDefFact>, __D>,
Vec<CfgUseFact>: Archive,
<Vec<CfgUseFact> as Archive>::Archived: Deserialize<Vec<CfgUseFact>, __D>,
Vec<CfgEffectFact>: Archive,
<Vec<CfgEffectFact> as Archive>::Archived: Deserialize<Vec<CfgEffectFact>, __D>,
Source§impl<__S: Fallible + ?Sized> Serialize<__S> for Relationswhere
Vec<SymbolFact>: Serialize<__S>,
Vec<ImportFact>: Serialize<__S>,
Vec<CallFact>: Serialize<__S>,
Vec<VisibilityFact>: Serialize<__S>,
Vec<AttributeFact>: Serialize<__S>,
Vec<ParentFact>: Serialize<__S>,
Vec<QualifierFact>: Serialize<__S>,
Vec<SymbolRangeFact>: Serialize<__S>,
Vec<ImplementsFact>: Serialize<__S>,
Vec<IsImplFact>: Serialize<__S>,
Vec<TypeMethodFact>: Serialize<__S>,
Vec<ResolvedImportFact>: Serialize<__S>,
Vec<ModuleFact>: Serialize<__S>,
Vec<ExportFact>: Serialize<__S>,
Vec<ReexportFact>: Serialize<__S>,
Vec<SymbolUseFact>: Serialize<__S>,
Vec<ResolvedReferenceFact>: Serialize<__S>,
Vec<ResolvedCallFact>: Serialize<__S>,
Vec<ModuleSearchPathFact>: Serialize<__S>,
Vec<CfgBlockFact>: Serialize<__S>,
Vec<CfgEdgeFact>: Serialize<__S>,
Vec<CfgDefFact>: Serialize<__S>,
Vec<CfgUseFact>: Serialize<__S>,
Vec<CfgEffectFact>: Serialize<__S>,
impl<__S: Fallible + ?Sized> Serialize<__S> for Relationswhere
Vec<SymbolFact>: Serialize<__S>,
Vec<ImportFact>: Serialize<__S>,
Vec<CallFact>: Serialize<__S>,
Vec<VisibilityFact>: Serialize<__S>,
Vec<AttributeFact>: Serialize<__S>,
Vec<ParentFact>: Serialize<__S>,
Vec<QualifierFact>: Serialize<__S>,
Vec<SymbolRangeFact>: Serialize<__S>,
Vec<ImplementsFact>: Serialize<__S>,
Vec<IsImplFact>: Serialize<__S>,
Vec<TypeMethodFact>: Serialize<__S>,
Vec<ResolvedImportFact>: Serialize<__S>,
Vec<ModuleFact>: Serialize<__S>,
Vec<ExportFact>: Serialize<__S>,
Vec<ReexportFact>: Serialize<__S>,
Vec<SymbolUseFact>: Serialize<__S>,
Vec<ResolvedReferenceFact>: Serialize<__S>,
Vec<ResolvedCallFact>: Serialize<__S>,
Vec<ModuleSearchPathFact>: Serialize<__S>,
Vec<CfgBlockFact>: Serialize<__S>,
Vec<CfgEdgeFact>: Serialize<__S>,
Vec<CfgDefFact>: Serialize<__S>,
Vec<CfgUseFact>: Serialize<__S>,
Vec<CfgEffectFact>: Serialize<__S>,
Auto Trait Implementations§
impl Freeze for Relations
impl RefUnwindSafe for Relations
impl Send for Relations
impl Sync for Relations
impl Unpin for Relations
impl UnsafeUnpin for Relations
impl UnwindSafe for Relations
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> ArchiveUnsized for Twhere
T: Archive,
impl<T> ArchiveUnsized for Twhere
T: Archive,
Source§type Archived = <T as Archive>::Archived
type Archived = <T as Archive>::Archived
Archive, it may be
unsized. Read moreSource§fn archived_metadata(
&self,
) -> <<T as ArchiveUnsized>::Archived as ArchivePointee>::ArchivedMetadata
fn archived_metadata( &self, ) -> <<T as ArchiveUnsized>::Archived as ArchivePointee>::ArchivedMetadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.