Skip to content

Commit b27a3dd

Browse files
authored
Merge pull request #466 from Veetaha/main
Use `bon` for an infallible and compile-time-checked builder
2 parents 5a8e449 + f819456 commit b27a3dd

File tree

8 files changed

+161
-128
lines changed

8 files changed

+161
-128
lines changed

Cargo.lock

Lines changed: 44 additions & 40 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ shell-words = { version = "1.0", optional = true }
4545
slug = "0.1.4"
4646
emojis = { version = "0.6.2", optional = true }
4747
arbitrary = { version = "1", optional = true, features = ["derive"] }
48-
derive_builder = "0.20.0"
48+
bon = "2.2.1"
4949
caseless = "0.2.1"
5050

5151
[dev-dependencies]

examples/s-expr.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const INDENT: usize = 4;
1414
const CLOSE_NEWLINE: bool = false;
1515

1616
use comrak::nodes::{AstNode, NodeValue};
17-
use comrak::{parse_document, Arena, ExtensionOptionsBuilder, Options};
17+
use comrak::{parse_document, Arena, ExtensionOptions, Options};
1818
use std::env;
1919
use std::error::Error;
2020
use std::fs::File;
@@ -74,7 +74,7 @@ fn iter_nodes<'a, W: Write>(
7474
fn dump(source: &str) -> io::Result<()> {
7575
let arena = Arena::new();
7676

77-
let extension = ExtensionOptionsBuilder::default()
77+
let extension = ExtensionOptions::builder()
7878
.strikethrough(true)
7979
.tagfilter(true)
8080
.table(true)
@@ -88,8 +88,7 @@ fn dump(source: &str) -> io::Result<()> {
8888
.math_code(true)
8989
.wikilinks_title_after_pipe(true)
9090
.wikilinks_title_before_pipe(true)
91-
.build()
92-
.unwrap();
91+
.build();
9392

9493
let opts = Options {
9594
extension,

rust-toolchain

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
nightly

src/main.rs

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
//! The `comrak` binary.
22
33
use comrak::{
4-
adapters::SyntaxHighlighterAdapter, plugins::syntect::SyntectAdapter, Arena,
5-
ExtensionOptionsBuilder, ListStyleType, Options, ParseOptionsBuilder, Plugins,
6-
RenderOptionsBuilder,
4+
adapters::SyntaxHighlighterAdapter, plugins::syntect::SyntectAdapter, Arena, ListStyleType,
5+
Options, Plugins,
76
};
87
use std::boxed::Box;
98
use std::env;
@@ -14,6 +13,7 @@ use std::path::PathBuf;
1413
use std::process;
1514

1615
use clap::{Parser, ValueEnum};
16+
use comrak::{ExtensionOptions, ParseOptions, RenderOptions};
1717

1818
const EXIT_SUCCESS: i32 = 0;
1919
const EXIT_PARSE_CONFIG: i32 = 2;
@@ -251,15 +251,14 @@ fn main() -> Result<(), Box<dyn Error>> {
251251

252252
let exts = &cli.extensions;
253253

254-
let mut extension = ExtensionOptionsBuilder::default();
255-
extension
254+
let extension = ExtensionOptions::builder()
256255
.strikethrough(exts.contains(&Extension::Strikethrough) || cli.gfm)
257256
.tagfilter(exts.contains(&Extension::Tagfilter) || cli.gfm)
258257
.table(exts.contains(&Extension::Table) || cli.gfm)
259258
.autolink(exts.contains(&Extension::Autolink) || cli.gfm)
260259
.tasklist(exts.contains(&Extension::Tasklist) || cli.gfm)
261260
.superscript(exts.contains(&Extension::Superscript))
262-
.header_ids(cli.header_ids)
261+
.maybe_header_ids(cli.header_ids)
263262
.footnotes(exts.contains(&Extension::Footnotes))
264263
.description_lists(exts.contains(&Extension::DescriptionLists))
265264
.multiline_block_quotes(exts.contains(&Extension::MultilineBlockQuotes))
@@ -270,23 +269,21 @@ fn main() -> Result<(), Box<dyn Error>> {
270269
.underline(exts.contains(&Extension::Underline))
271270
.spoiler(exts.contains(&Extension::Spoiler))
272271
.greentext(exts.contains(&Extension::Greentext))
273-
.front_matter_delimiter(cli.front_matter_delimiter);
272+
.maybe_front_matter_delimiter(cli.front_matter_delimiter);
274273

275274
#[cfg(feature = "shortcodes")]
276-
{
277-
extension.shortcodes(cli.gemojis);
278-
}
275+
let extension = extension.shortcodes(cli.gemojis);
279276

280-
let extension = extension.build()?;
277+
let extension = extension.build();
281278

282-
let parse = ParseOptionsBuilder::default()
279+
let parse = ParseOptions::builder()
283280
.smart(cli.smart)
284-
.default_info_string(cli.default_info_string)
281+
.maybe_default_info_string(cli.default_info_string)
285282
.relaxed_tasklist_matching(cli.relaxed_tasklist_character)
286283
.relaxed_autolinks(cli.relaxed_autolinks)
287-
.build()?;
284+
.build();
288285

289-
let render = RenderOptionsBuilder::default()
286+
let render = RenderOptions::builder()
290287
.hardbreaks(cli.hardbreaks)
291288
.github_pre_lang(cli.github_pre_lang || cli.gfm)
292289
.full_info_string(cli.full_info_string)
@@ -301,7 +298,7 @@ fn main() -> Result<(), Box<dyn Error>> {
301298
.ignore_empty_links(cli.ignore_empty_links)
302299
.gfm_quirks(cli.gfm_quirks || cli.gfm)
303300
.tasklist_classes(cli.tasklist_classes)
304-
.build()?;
301+
.build();
305302

306303
let options = Options {
307304
extension,

0 commit comments

Comments
 (0)