Expand description
§sealmap-model
A language-neutral, deterministic model of a codebase: source files, the symbols they define, and the typed relations between those symbols.
This crate is the shared vocabulary of the sealmap workspace. Language
frontends (such as sealmap-rust) produce a Codebase; projections
(such as sealmap-corpus) consume one and render Mermaid diagrams from
it. Because both sides only meet here, you can add a frontend for another
language, or a new diagram projection, without touching the other half.
The navigation API is loosely inspired by
ts-morph (MIT, © David Sherret):
a single Codebase value you can ask for files, symbols and relations,
with an in-memory SourceSet standing in for the file system so tests and
embedders never need to touch disk.
§Determinism contract
Every type in this crate upholds the following, and downstream crates rely on it to produce byte-identical output across runs, machines and operating systems:
- Ordered collections only. All maps and sets are
BTreeMap/BTreeSet; iteration order is a function of the data, never of a hash seed or insertion order. - Normalised paths.
SourcePathis always relative,/-separated and free of./..components, sosrc\lib.rson Windows andsrc/lib.rson Linux are the same key. - Stable hashing.
ContentHashis BLAKE3 over the source text with line endings normalised to\n; it never usesstd’s randomly seeded hasher. - No ambient data. Nothing in the model records timestamps, absolute paths, user names or environment variables.
§Built for sequence diagrams
Callables carry a Flow: the ordered tree of calls, branches, loops and
early exits in their body. That is what makes dense, per-function sequence
diagrams possible without running the code, and because every call target
is a canonical SymbolId, separately rendered sequences can be merged or
inlined into each other by a downstream orchestrator.
§Example
Build a tiny model by hand and query it:
use sealmap_model::*;
let mut cb = Codebase::new("demo");
let file = SourcePath::new("src/lib.rs").unwrap();
cb.add_file(SourceFile::new(file.clone(), "rust", SymbolId::new("demo"), "pub struct A;"));
let a = Symbol::new(SymbolId::new("demo::A"), "A", SymbolKind::Struct, file.clone());
let b = Symbol::new(SymbolId::new("demo::B"), "B", SymbolKind::Struct, file.clone());
cb.add_symbol(a);
cb.add_symbol(b);
cb.add_relation(Relation::new(
SymbolId::new("demo::A"),
SymbolId::new("demo::B"),
RelationKind::FieldType,
Confidence::Exact,
));
assert_eq!(cb.symbols_in_file(&file).count(), 2);
assert_eq!(cb.relations_from(&SymbolId::new("demo::A")).count(), 1);Re-exports§
pub use flow::Arm;pub use flow::Call;pub use flow::CallKind;pub use flow::Exit;pub use flow::Flow;pub use flow::Step;
Modules§
- flow
- Ordered call/control flow of a function body: the raw material for sequence diagrams.
Structs§
- Codebase
- The whole analysed codebase: files, symbols and relations.
- Codebase
Stats - Summary counts for a
Codebase. - Content
Hash - A stable, portable content hash: BLAKE3 over text with
\r\nand lone\rnormalised to\n. - Load
Options - Options for
SourceSet::load_dir. - Member
- A field, variant or associated item listed inside a type in structure
diagrams. Methods with bodies are full
Symbols instead, because they carry their ownFlowand relations. - Relation
- A directed, typed edge between two symbols.
- Source
File - Metadata about one analysed source file. The file’s text is not stored in the model; only its hash, so the model stays small and the corpus can detect drift.
- Source
Path - A normalised, relative,
/-separated path to a source file, used as the primary key for files everywhere in sealmap. - Source
Set - An in-memory set of source files keyed by
SourcePath. - Span
- A source range. Lines and columns are 1-based;
endis inclusive of the last line containing the item. - Symbol
- A named definition in the codebase.
- Symbol
Id - The canonical, fully qualified identity of a symbol, e.g.
my_crate::net::Clientormy_crate::net::Client::connect.
Enums§
- Confidence
- How sure the frontend is that a relation’s target is correct.
- Member
Kind - What a
Memberis. - Path
Error - Why a string could not become a
SourcePath. - Relation
Kind - The kind of a directed edge between two symbols.
- Symbol
Kind - What kind of thing a
Symbolis. - Visibility
- Visibility of a symbol or member.
Constants§
- MODEL_
SCHEMA_ VERSION - Version of the serialised model schema (the JSON shape of
Codebase).