2.7 KiB
Repository Guidelines
Project Structure & Module Organization
objdiff-core: core library with diffing logic and shared componentsobjdiff-cli: CLI/TUI withratatuiobjdiff-gui: GUI witheframe/eguiobjdiff-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 testto run the test suitecargo +nightly fmt --allto format code (nightly required)cargo +nightly clippy --all-targets --all-features --workspace -- -D warningsto lint code (nightly required)cargo deny check(cargo install --locked cargo-denyif 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.