backhopper_xref_reader/
model.rs1use std::collections::{BTreeMap, BTreeSet};
8
9use backhopper_core::{BehaviourName, Mfa, ModuleName};
10use backhopper_xref_graph::{
11 CallKind, CallTarget, Deprecation, FunctionSig, Loc, PathInterner, UnresolvedCallSite,
12};
13
14use crate::application::ApplicationAssignment;
15use crate::errors::ReadWarning;
16
17#[derive(Debug, Clone, PartialEq, Eq)]
18pub struct CallSite {
19 pub caller: FunctionSig,
20 pub callee: CallTarget,
21 pub kind: CallKind,
22 pub loc: Loc,
23}
24
25#[derive(Debug, Clone, PartialEq, Eq)]
26pub struct ModuleData {
27 pub module: ModuleName,
28 pub application: ApplicationAssignment,
29
30 pub exports: BTreeSet<FunctionSig>,
31 pub locals: BTreeSet<FunctionSig>,
32 pub external_calls: Vec<CallSite>,
33 pub local_calls: Vec<CallSite>,
34 pub unresolved: BTreeSet<UnresolvedCallSite>,
35
36 pub on_load: Option<FunctionSig>,
37 pub deprecated: BTreeMap<FunctionSig, Deprecation>,
38
39 pub behaviours: BTreeSet<BehaviourName>,
40 pub callbacks: BTreeSet<FunctionSig>,
41 pub optional_callbacks: BTreeSet<FunctionSig>,
42
43 pub imports: BTreeMap<ModuleName, BTreeSet<FunctionSig>>,
44 pub definitions: BTreeMap<FunctionSig, Loc>,
45}
46
47impl ModuleData {
48 pub fn function_mfa(&self, sig: &FunctionSig) -> Mfa {
49 Mfa {
50 module: self.module.clone(),
51 function: sig.name.clone(),
52 arity: sig.arity,
53 }
54 }
55}
56
57#[derive(Debug, Clone, Default)]
58pub struct ReadOutput {
59 pub modules: Vec<ModuleData>,
60 pub warnings: Vec<ReadWarning>,
61 pub paths: PathInterner,
62}