Expand description
§snapper
Semantic line break formatter for prose documents. Reformats text so each sentence occupies its own line, producing minimal git diffs when collaborating on papers and documentation.
The crate is published as snapper-fmt on crates.io. Installers ship two
CLI names for the same program: snapper and snapper-fmt (the latter
avoids colliding with openSUSE’s Btrfs snapshot tool of the same name).
§Supported formats
- Org-mode: drawers, tables, keywords preserved;
#+BEGIN_SRCisRegion::Code(comment reflow via[code.<lang>], optional formatters) - LaTeX: preamble and math preserved;
minted/lstlistingare code regions - Markdown: front matter and headings preserved; fenced blocks are code regions
- RST: directives and literals preserved;
.. code-block::is a code region - Plaintext: everything treated as prose
§Library usage
use snapper_fmt::{format_text, FormatConfig};
use snapper_fmt::format::Format;
let input = "Hello world. This is a test. Another sentence.";
let config = FormatConfig {
format: Format::Plaintext,
..Default::default()
};
let output = format_text(input, &config).unwrap();
assert_eq!(output, "Hello world.\nThis is a test.\nAnother sentence.");Modules§
- abbreviations
- check
- Line-level
--checkdiagnostics: fused, wrap, and long. - cli
- code_
block - Comment-aware reflow inside a
Region::Code. - config
- diff
- files
- format
- Document format detection and representation.
- git_
diff - init
- lsp
- mcp
- MCP (Model Context Protocol) server for snapper.
- oracle
- Format-local render oracle used as a fail-closed backstop.
- output
- parser
- reflow
- sdiff
- sentence
- watch
Structs§
- Format
Config - Configuration for the formatting pipeline.
- Invalid
Utf8 Error - Typed error for invalid UTF-8 input. Branch with
error.downcast_ref. - Pandoc
Cannot Splice - Pandoc’s AST has no source offsets, so it cannot splice into original
bytes.
format_textrefuses rather than reconstruct.
Functions§
- build_
splitter - Build the appropriate sentence splitter from config.
- format_
bytes - Format raw bytes. Invalid UTF-8 is a hard error (
InvalidUtf8Error). - format_
range - Format only lines within a range (1-indexed, inclusive). Lines outside the range pass through unchanged.
- format_
text - Format text with semantic line breaks.
- format_
text_ with_ splitter - Format text using a pre-constructed splitter (avoids reloading models per file).
- run_
fixpoint - Run
stepuntil the output is a byte fixpoint or the cap is hit.