Skip to main content

backhopper_xref_reader/
model.rs

1// Copyright (C) 2026 Michael S. Klishin and Contributors
2// SPDX-License-Identifier: Apache-2.0 OR MIT
3// See LICENSE-APACHE and LICENSE-MIT for details.
4
5//! `ModuleData`, `CallSite`, and `ReadOutput` aggregate types.
6
7use 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}