From f5fc54461ab2181790e4f5a9b84ae4cd19d56596 Mon Sep 17 00:00:00 2001 From: Eric Huss Date: Mon, 21 Jul 2025 21:05:27 -0700 Subject: [PATCH] Finish moving built-in preprocessors to mdbook-driver --- Cargo.lock | 10 ++++++++++ Cargo.toml | 4 +++- crates/mdbook-driver/Cargo.toml | 7 +++++++ crates/mdbook-driver/src/builtin_preprocessors/cmd.rs | 3 ++- .../mdbook-driver/src/builtin_preprocessors/index.rs | 5 +++-- .../mdbook-driver/src/builtin_preprocessors/links.rs | 5 +++-- crates/mdbook-driver/src/builtin_preprocessors/mod.rs | 2 +- crates/mdbook-driver/src/lib.rs | 2 ++ src/book/mod.rs | 2 +- src/lib.rs | 1 - tests/testsuite/includes.rs | 2 +- tests/testsuite/preprocessor.rs | 2 +- 12 files changed, 34 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c4273f28..8c5e4328 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1267,6 +1267,7 @@ dependencies = [ "ignore", "log", "mdbook-core", + "mdbook-driver", "mdbook-html", "mdbook-markdown", "mdbook-preprocessor", @@ -1310,6 +1311,15 @@ dependencies = [ [[package]] name = "mdbook-driver" version = "0.5.0-alpha.1" +dependencies = [ + "anyhow", + "log", + "mdbook-core", + "mdbook-preprocessor", + "regex", + "serde_json", + "shlex", +] [[package]] name = "mdbook-html" diff --git a/Cargo.toml b/Cargo.toml index b52a59a8..3ed64c85 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -41,6 +41,7 @@ regex = "1.11.1" serde = { version = "1.0.219", features = ["derive"] } serde_json = "1.0.140" sha2 = "0.10.9" +shlex = "1.3.0" tempfile = "3.20.0" toml = "0.5.11" # Do not update, see https://github.com/rust-lang/mdBook/issues/2037 @@ -70,6 +71,7 @@ clap_complete = "4.3.2" env_logger = "0.11.1" log.workspace = true mdbook-core.workspace = true +mdbook-driver.workspace = true mdbook-html.workspace = true mdbook-markdown.workspace = true mdbook-preprocessor.workspace = true @@ -81,7 +83,7 @@ pulldown-cmark.workspace = true regex.workspace = true serde.workspace = true serde_json.workspace = true -shlex = "1.3.0" +shlex.workspace = true tempfile.workspace = true toml.workspace = true topological-sort = "0.2.2" diff --git a/crates/mdbook-driver/Cargo.toml b/crates/mdbook-driver/Cargo.toml index be35be3c..8417ed15 100644 --- a/crates/mdbook-driver/Cargo.toml +++ b/crates/mdbook-driver/Cargo.toml @@ -8,6 +8,13 @@ repository.workspace = true rust-version.workspace = true [dependencies] +anyhow.workspace = true +log.workspace = true +mdbook-core.workspace = true +mdbook-preprocessor.workspace = true +regex.workspace = true +serde_json.workspace = true +shlex.workspace = true [lints] workspace = true diff --git a/crates/mdbook-driver/src/builtin_preprocessors/cmd.rs b/crates/mdbook-driver/src/builtin_preprocessors/cmd.rs index 754ddddc..ebe0275c 100644 --- a/crates/mdbook-driver/src/builtin_preprocessors/cmd.rs +++ b/crates/mdbook-driver/src/builtin_preprocessors/cmd.rs @@ -1,6 +1,6 @@ -use crate::book::Book; use anyhow::{Context, Result, bail, ensure}; use log::{debug, trace, warn}; +use mdbook_core::book::Book; use mdbook_preprocessor::{Preprocessor, PreprocessorContext}; use shlex::Shlex; use std::io::{self, Write}; @@ -170,6 +170,7 @@ impl Preprocessor for CmdPreprocessor { } } +#[cfg(false)] // Needs to wait for MDBook transfer #[cfg(test)] mod tests { use super::*; diff --git a/crates/mdbook-driver/src/builtin_preprocessors/index.rs b/crates/mdbook-driver/src/builtin_preprocessors/index.rs index 3b8dfd2a..18ac4407 100644 --- a/crates/mdbook-driver/src/builtin_preprocessors/index.rs +++ b/crates/mdbook-driver/src/builtin_preprocessors/index.rs @@ -1,6 +1,6 @@ -use crate::book::{Book, BookItem}; use anyhow::Result; use log::warn; +use mdbook_core::book::{Book, BookItem}; use mdbook_preprocessor::{Preprocessor, PreprocessorContext}; use regex::Regex; use std::{path::Path, sync::LazyLock}; @@ -11,7 +11,8 @@ use std::{path::Path, sync::LazyLock}; pub struct IndexPreprocessor; impl IndexPreprocessor { - pub(crate) const NAME: &'static str = "index"; + /// Name of this preprocessor. + pub const NAME: &'static str = "index"; /// Create a new `IndexPreprocessor`. pub fn new() -> Self { diff --git a/crates/mdbook-driver/src/builtin_preprocessors/links.rs b/crates/mdbook-driver/src/builtin_preprocessors/links.rs index cfefbc8a..127ac3fd 100644 --- a/crates/mdbook-driver/src/builtin_preprocessors/links.rs +++ b/crates/mdbook-driver/src/builtin_preprocessors/links.rs @@ -1,6 +1,6 @@ -use crate::book::{Book, BookItem}; use anyhow::{Context, Result}; use log::{error, warn}; +use mdbook_core::book::{Book, BookItem}; use mdbook_core::utils::{ take_anchored_lines, take_lines, take_rustdoc_include_anchored_lines, take_rustdoc_include_lines, @@ -29,7 +29,8 @@ const MAX_LINK_NESTED_DEPTH: usize = 10; pub struct LinkPreprocessor; impl LinkPreprocessor { - pub(crate) const NAME: &'static str = "links"; + /// Name of this preprocessor. + pub const NAME: &'static str = "links"; /// Create a new `LinkPreprocessor`. pub fn new() -> Self { diff --git a/crates/mdbook-driver/src/builtin_preprocessors/mod.rs b/crates/mdbook-driver/src/builtin_preprocessors/mod.rs index d4906651..77b48126 100644 --- a/crates/mdbook-driver/src/builtin_preprocessors/mod.rs +++ b/crates/mdbook-driver/src/builtin_preprocessors/mod.rs @@ -1,4 +1,4 @@ -//! Book preprocessing. +//! Built-in preprocessors. pub use self::cmd::CmdPreprocessor; pub use self::index::IndexPreprocessor; diff --git a/crates/mdbook-driver/src/lib.rs b/crates/mdbook-driver/src/lib.rs index ea725ddb..08f7e17b 100644 --- a/crates/mdbook-driver/src/lib.rs +++ b/crates/mdbook-driver/src/lib.rs @@ -1 +1,3 @@ //! High-level library for running mdBook. + +pub mod builtin_preprocessors; diff --git a/src/book/mod.rs b/src/book/mod.rs index 3b323497..c650d4d2 100644 --- a/src/book/mod.rs +++ b/src/book/mod.rs @@ -10,13 +10,13 @@ mod init; pub use self::book::load_book; pub use self::init::BookBuilder; -use crate::preprocess::{CmdPreprocessor, IndexPreprocessor, LinkPreprocessor}; use crate::renderer::{CmdRenderer, MarkdownRenderer}; use anyhow::{Context, Error, Result, bail}; use log::{debug, error, info, log_enabled, trace, warn}; pub use mdbook_core::book::{Book, BookItem, BookItems, Chapter, SectionNumber}; use mdbook_core::config::{Config, RustEdition}; use mdbook_core::utils; +use mdbook_driver::builtin_preprocessors::{CmdPreprocessor, IndexPreprocessor, LinkPreprocessor}; use mdbook_html::HtmlHandlebars; use mdbook_preprocessor::{Preprocessor, PreprocessorContext}; use mdbook_renderer::{RenderContext, Renderer}; diff --git a/src/lib.rs b/src/lib.rs index e152fcc0..5b5c7a64 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -81,7 +81,6 @@ //! [`Config`]: mdbook_core::config::Config pub mod book; -pub mod preprocess; pub mod renderer; pub use crate::book::BookItem; diff --git a/tests/testsuite/includes.rs b/tests/testsuite/includes.rs index 41b30705..c242d35b 100644 --- a/tests/testsuite/includes.rs +++ b/tests/testsuite/includes.rs @@ -46,7 +46,7 @@ fn recursive_include() { .run("build", |cmd| { cmd.expect_stderr(str![[r#" [TIMESTAMP] [INFO] (mdbook::book): Book building has started -[TIMESTAMP] [ERROR] (mdbook::preprocess::links): Stack depth exceeded in recursive.md. Check for cyclic includes +[TIMESTAMP] [ERROR] (mdbook_driver::builtin_preprocessors::links): Stack depth exceeded in recursive.md. Check for cyclic includes [TIMESTAMP] [INFO] (mdbook::book): Running the html backend [TIMESTAMP] [INFO] (mdbook_html::html_handlebars::hbs_renderer): HTML book written to `[ROOT]/book` diff --git a/tests/testsuite/preprocessor.rs b/tests/testsuite/preprocessor.rs index efa3ea0f..1676ce1b 100644 --- a/tests/testsuite/preprocessor.rs +++ b/tests/testsuite/preprocessor.rs @@ -3,7 +3,7 @@ use crate::prelude::*; use anyhow::Result; use mdbook::book::Book; -use mdbook::preprocess::CmdPreprocessor; +use mdbook_driver::builtin_preprocessors::CmdPreprocessor; use mdbook_preprocessor::{Preprocessor, PreprocessorContext}; use std::sync::{Arc, Mutex};