Expand description
cmakefmt is a fast, configurable CMake formatter.
§Quick start
Format a CMake source string with the default configuration:
use cmakefmt::{format_source, Config};
let cmake = "CMAKE_MINIMUM_REQUIRED(VERSION 3.20)\n";
let formatted = format_source(cmake, &Config::default()).unwrap();
assert_eq!(formatted, "cmake_minimum_required(VERSION 3.20)\n");To customise formatting, modify Config fields before passing it in:
use cmakefmt::{format_source, Config, CaseStyle};
let mut config = Config::default();
config.line_width = 100;
config.command_case = CaseStyle::Upper;
let cmake = "target_link_libraries(mylib PUBLIC dep1)\n";
let formatted = format_source(cmake, &config).unwrap();
assert_eq!(formatted, "TARGET_LINK_LIBRARIES(mylib PUBLIC dep1)\n");§Organisation
| Module | Purpose |
|---|---|
config | Runtime configuration types and config-file loading |
error | Error and result types |
formatter | Source-to-source formatting pipeline |
parser | CMake parser and AST definitions |
spec | Built-in and user-extensible command registry |
§Entry points (re-exported at the crate root)
| Item | Purpose |
|---|---|
format_source / format_source_with_registry | Format a source string |
format_parsed_file | Format an already-parsed parser::ast::File |
format_source_with_debug / format_source_with_registry_debug | Format + collect debug decision log |
Config, CommandConfig, PerCommandConfig | Runtime configuration |
CaseStyle, DangleAlign, LineEnding, FractionalTabPolicy | Config enums |
CommandRegistry | Built-in + user-override command specs |
Error, Result, IoResultExt | Crate-level error types and the path-context adapter for io::Result |
§Features
| Feature | Default | Purpose |
|---|---|---|
cli | ✔ | Enables the cmakefmt binary plus CLI-oriented public API (convert_legacy_config_files, default_config_template_for, generate_json_schema, render_effective_config, DumpConfigFormat). Implies lsp. |
lsp | ✔ (via cli) | Compiles the lsp::run Language Server Protocol entry point. |
The crate also has a separate target path: when compiled for
wasm32, wasm::format and friends are exposed via
wasm-bindgen for the browser playground.
Re-exports§
pub use config::CaseStyle;pub use config::CommandConfig;pub use config::Config;pub use config::ContinuationAlign;pub use config::DangleAlign;pub use config::FractionalTabPolicy;pub use config::LineEnding;pub use config::PerCommandConfig;pub use config::default_config_template;pub use config::convert_legacy_config_files;clipub use config::default_config_template_for;clipub use config::generate_json_schema;clipub use config::render_effective_config;clipub use config::DumpConfigFormat;clipub use error::Error;pub use error::IoResultExt;pub use error::Result;pub use formatter::format_parsed_file;pub use formatter::format_source;pub use formatter::format_source_with_debug;pub use formatter::format_source_with_registry;pub use formatter::format_source_with_registry_debug;pub use spec::registry::CommandRegistry;
Modules§
- config
- Runtime formatter configuration and config-file loading. Runtime formatter configuration.
- error
- Shared error types used across parsing, config loading, and formatting. Structured error types returned by parsing, config loading, and formatting.
- formatter
- Source-to-source formatting pipeline. Top-level formatter entry points.
- lsp
lsp - LSP server entry point for
cmakefmt. - parser
- CMake parser and AST definitions. Parser entry points for CMake source text.
- semantic
- Semantic-level normalisation (strip comments, line endings,
keyword casing) used by
--verifyand the idempotency tests. Semantic-level normalisation for parsed CMake. - spec
- Built-in and user-extensible command specification registry. Command-spec data model used by the formatter.