sifr check is the right tool. It runs the parser and type-checker and reports all diagnostics, but stops before code generation or linking. When you want to see exactly what Rust code Sifr produces for a given source file, sifr emit prints it to stdout.
sifr check — type-check without compiling
sifr check runs the compiler frontend — parsing, name resolution, and type-checking — and exits. No binary is produced and no linking happens, which makes it the fastest way to verify that your code is correct.
Flags
| Flag | Description |
|---|---|
--workspace | Check all Sifr-capable workspace members. |
--package <SPEC> / -p <SPEC> | Select one package by Cargo package spec or unambiguous package name. May be repeated. |
--exclude <SPEC> | Exclude a package from workspace selection. |
--message-format <FORMAT> | Use a Cargo-compatible message format for package checks. |
--locked | Require Cargo.lock to be unchanged. |
--offline | Disable network access. |
--frozen | Combine --locked and --offline. |
Using check in your workflow
sifr check is designed for tight edit-check loops. Run it on save, in a watch loop, or as the first step in CI before invoking sifr build.
sifr emit — inspect the generated Rust code
sifr emit runs the compiler up through code generation and prints the generated Rust source to stdout. No binary is written. This is useful when you want to understand how Sifr translates a particular construct, diagnose unexpected output, or satisfy your curiosity.
Example
Given this Sifr source:sifr emit hello.sifr prints the corresponding Rust code that the compiler produced before handing off to the Rust toolchain.
The output of
sifr emit reflects the compiler’s internal representation and is not intended to be a stable public API. Its exact form may change between compiler versions as the code generator evolves.Diagnostic output formats
Bothsifr check and sifr emit respect the global --diagnostic-format flag. Pass it before the subcommand name.
- human (default)
- compact
- json
Source snippets, caret highlights, notes, help text, and documentation URLs. Best for interactive use.
Explaining a diagnostic code
When you see a diagnostic code such asSIFR-TYPE-0042, pass it to --explain to get a human-readable description without re-running the compiler:
--explain works for any diagnostic code the compiler knows about and exits with code 0 on success or 2 if the code is unknown.