2.7 KiB
Repository Guidelines
Project Structure & Module Organization
objdiff-core
: core library with diffing logic and shared componentsobjdiff-cli
: CLI/TUI withratatui
objdiff-gui
: GUI witheframe
/egui
objdiff-wasm
: WebAssembly bindings
objdiff has three main frontends: GUI, CLI/TUI, and web (utilizing objdiff-wasm
).
objdiff-gui
is the most fully-featured and is the primary target for new features.
objdiff-cli
has an interactive TUI diff
mode (powered by ratatui
) and a non-interactive report
mode to generate detailed progress reports (e.g. for https://decomp.dev).
objdiff-wasm
is compiled into a WebAssembly Component. The API is defined using WIT. The web interface is separate, but mirrors the GUI in functionality.
Build, Test, and Development Commands
Run cargo build
for a debug build and cargo build --release
for an optimized build.
The CLI can be exercised with cargo run --release --bin objdiff-cli -- --help
.
The WASM build is not included in the workspace by default due to differences in toolchain and target; build it with npm -C objdiff-wasm run build
. (nightly required)
In general, do NOT use --workspace
, as it will include the WASM crate and likely fail. Formatting and linting commands are exempt.
Pre-commit tasks:
cargo test
to run the test suitecargo +nightly fmt --all
to format code (nightly required)cargo +nightly clippy --all-targets --all-features --workspace -- -D warnings
to lint code (nightly required)cargo deny check
(cargo install --locked cargo-deny
if needed) if dependencies change
Testing Guidelines
Favor focused unit tests adjacent to the code, and integration scenarios in objdiff-core/tests
.
Integration tests utilize snapshots with the insta
crate; run curl -LsSf https://insta.rs/install.sh | sh
if needed.
To generate updated snapshots, use cargo insta test
, review diffs manually, then accept changes with cargo insta accept
(or simply mv
to accept specific snapshots).
Configuration Tips
config.schema.json
: JSON schema for the user-facing project config file (objdiff.json
)objdiff-core/config-schema.json
: Internal options schema to generateDiffObjConfig
(seeobjdiff-core/config_gen.rs
)
The project configuration (objdiff.json
) is intended to be generated by the projects' build system. It includes paths to the target (expected) and base (current) object files, along with build commands and file watch patterns. See README.md
for a summary of key options.