Skip to content

Commit 4ddd159

Browse files
committed
parser: mark all other options structs (except top-level) nonexhaustive
1 parent a14b0b6 commit 4ddd159

File tree

8 files changed

+122
-123
lines changed

8 files changed

+122
-123
lines changed

fuzz/fuzz_targets/all_options.rs

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -8,37 +8,36 @@ use comrak::{
88
};
99

1010
fuzz_target!(|s: &str| {
11+
let mut extension = ExtensionOptions::default();
12+
extension.strikethrough = true;
13+
extension.tagfilter = true;
14+
extension.table = true;
15+
extension.autolink = true;
16+
extension.tasklist = true;
17+
extension.superscript = true;
18+
extension.header_ids = Some("user-content-".to_string());
19+
extension.footnotes = true;
20+
extension.description_lists = true;
21+
extension.front_matter_delimiter = Some("---".to_string());
22+
extension.shortcodes = true;
23+
24+
let mut parse = ParseOptions::default();
25+
parse.smart = true;
26+
parse.default_info_string = Some("rust".to_string());
27+
parse.relaxed_tasklist_matching = true;
28+
29+
let mut render = RenderOptions::default();
30+
render.hardbreaks = true;
31+
render.github_pre_lang = true;
32+
render.full_info_string = true;
33+
render.width = 80;
34+
render.unsafe_ = true;
35+
render.escape = true;
36+
render.list_style = ListStyleType::Star;
37+
render.sourcepos = true;
38+
1139
markdown_to_html(
1240
s,
13-
&Options {
14-
extension: ExtensionOptions {
15-
strikethrough: true,
16-
tagfilter: true,
17-
table: true,
18-
autolink: true,
19-
tasklist: true,
20-
superscript: true,
21-
header_ids: Some("user-content-".to_string()),
22-
footnotes: true,
23-
description_lists: true,
24-
front_matter_delimiter: Some("---".to_string()),
25-
shortcodes: true,
26-
},
27-
parse: ParseOptions {
28-
smart: true,
29-
default_info_string: Some("rust".to_string()),
30-
relaxed_tasklist_matching: true,
31-
},
32-
render: RenderOptions {
33-
hardbreaks: true,
34-
github_pre_lang: true,
35-
full_info_string: true,
36-
width: 80,
37-
unsafe_: true,
38-
escape: true,
39-
list_style: ListStyleType::Star,
40-
sourcepos: true,
41-
},
42-
},
41+
&Options { extension, parse, render },
4342
);
4443
});

fuzz/fuzz_targets/cli_default.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,15 @@ use libfuzzer_sys::fuzz_target;
44

55
use comrak::{
66
markdown_to_html_with_plugins, plugins::syntect::SyntectAdapter, Plugins,
7-
RenderPlugins,
87
};
98

109
// Note that we end up fuzzing Syntect here.
1110

1211
fuzz_target!(|s: &str| {
1312
let adapter = SyntectAdapter::new("base16-ocean.dark");
14-
let plugins = Plugins {
15-
render: RenderPlugins {
16-
codefence_syntax_highlighter: Some(&adapter),
17-
..Default::default()
18-
},
19-
};
13+
14+
let mut plugins = Plugins::default();
15+
plugins.render.codefence_syntax_highlighter = Some(&adapter);
2016

2117
markdown_to_html_with_plugins(s, &Default::default(), &plugins);
2218
});

fuzz/fuzz_targets/gfm.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,23 @@ use comrak::{markdown_to_html, ExtensionOptions, Options, RenderOptions};
99
// options are routinely used by Commonmarker users.
1010

1111
fuzz_target!(|s: &str| {
12+
let mut extension = ExtensionOptions::default();
13+
extension.strikethrough = true;
14+
extension.tagfilter = true;
15+
extension.table = true;
16+
extension.autolink = true;
17+
18+
let mut render = RenderOptions::default();
19+
render.hardbreaks = true;
20+
render.github_pre_lang = true;
21+
render.unsafe_ = true;
22+
1223
markdown_to_html(
1324
s,
1425
&Options {
15-
extension: ExtensionOptions {
16-
strikethrough: true,
17-
tagfilter: true,
18-
table: true,
19-
autolink: true,
20-
..Default::default()
21-
},
26+
extension,
2227
parse: Default::default(),
23-
render: RenderOptions {
24-
hardbreaks: true,
25-
github_pre_lang: true,
26-
unsafe_: true,
27-
..Default::default()
28-
},
28+
render,
2929
},
3030
);
3131
});

fuzz/fuzz_targets/gfm_footnotes.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,24 @@ use comrak::{markdown_to_html, ExtensionOptions, Options, RenderOptions};
99
// options are routinely used by Commonmarker users.
1010

1111
fuzz_target!(|s: &str| {
12+
let mut extension = ExtensionOptions::default();
13+
extension.strikethrough = true;
14+
extension.tagfilter = true;
15+
extension.table = true;
16+
extension.autolink = true;
17+
extension.footnotes = true;
18+
19+
let mut render = RenderOptions::default();
20+
render.hardbreaks = true;
21+
render.github_pre_lang = true;
22+
render.unsafe_ = true;
23+
1224
markdown_to_html(
1325
s,
1426
&Options {
15-
extension: ExtensionOptions {
16-
strikethrough: true,
17-
tagfilter: true,
18-
table: true,
19-
autolink: true,
20-
footnotes: true,
21-
..Default::default()
22-
},
27+
extension,
2328
parse: Default::default(),
24-
render: RenderOptions {
25-
hardbreaks: true,
26-
github_pre_lang: true,
27-
unsafe_: true,
28-
..Default::default()
29-
},
29+
render,
3030
},
3131
);
3232
});

fuzz/fuzz_targets/gfm_sourcepos.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,24 @@ use comrak::{markdown_to_html, ExtensionOptions, Options, RenderOptions};
99
// options are routinely used by Commonmarker users.
1010

1111
fuzz_target!(|s: &str| {
12+
let mut extension = ExtensionOptions::default();
13+
extension.strikethrough = true;
14+
extension.tagfilter = true;
15+
extension.table = true;
16+
extension.autolink = true;
17+
18+
let mut render = RenderOptions::default();
19+
render.hardbreaks = true;
20+
render.github_pre_lang = true;
21+
render.unsafe_ = true;
22+
render.sourcepos = true;
23+
1224
markdown_to_html(
1325
s,
1426
&Options {
15-
extension: ExtensionOptions {
16-
strikethrough: true,
17-
tagfilter: true,
18-
table: true,
19-
autolink: true,
20-
..Default::default()
21-
},
27+
extension,
2228
parse: Default::default(),
23-
render: RenderOptions {
24-
hardbreaks: true,
25-
github_pre_lang: true,
26-
unsafe_: true,
27-
sourcepos: true,
28-
..Default::default()
29-
},
29+
render,
3030
},
3131
);
3232
});

fuzz/fuzz_targets/quadratic.rs

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -196,19 +196,19 @@ struct FuzzExtensionOptions {
196196

197197
impl FuzzExtensionOptions {
198198
fn to_options(&self) -> ExtensionOptions {
199-
ExtensionOptions {
200-
strikethrough: self.strikethrough,
201-
tagfilter: self.tagfilter,
202-
table: self.table,
203-
autolink: self.autolink,
204-
tasklist: self.tasklist,
205-
superscript: self.superscript,
206-
footnotes: self.footnotes,
207-
description_lists: self.description_lists,
208-
shortcodes: self.shortcodes,
209-
front_matter_delimiter: None,
210-
header_ids: None,
211-
}
199+
let mut extension = ExtensionOptions::default();
200+
extension.strikethrough = self.strikethrough;
201+
extension.tagfilter = self.tagfilter;
202+
extension.table = self.table;
203+
extension.autolink = self.autolink;
204+
extension.tasklist = self.tasklist;
205+
extension.superscript = self.superscript;
206+
extension.footnotes = self.footnotes;
207+
extension.description_lists = self.description_lists;
208+
extension.shortcodes = self.shortcodes;
209+
extension.front_matter_delimiter = None;
210+
extension.header_ids = None;
211+
extension
212212
}
213213
}
214214

@@ -220,11 +220,11 @@ struct FuzzParseOptions {
220220

221221
impl FuzzParseOptions {
222222
fn to_options(&self) -> ParseOptions {
223-
ParseOptions {
224-
smart: self.smart,
225-
default_info_string: None,
226-
relaxed_tasklist_matching: self.relaxed_tasklist_matching,
227-
}
223+
let mut parse = ParseOptions::default();
224+
parse.smart = self.smart;
225+
parse.default_info_string = None;
226+
parse.relaxed_tasklist_matching = self.relaxed_tasklist_matching;
227+
parse
228228
}
229229
}
230230

@@ -242,16 +242,16 @@ struct FuzzRenderOptions {
242242

243243
impl FuzzRenderOptions {
244244
fn to_options(&self) -> RenderOptions {
245-
RenderOptions {
246-
hardbreaks: self.hardbreaks,
247-
github_pre_lang: self.github_pre_lang,
248-
full_info_string: self.full_info_string,
249-
width: self.width,
250-
unsafe_: self.unsafe_,
251-
escape: self.escape,
252-
list_style: self.list_style,
253-
sourcepos: self.sourcepos,
254-
}
245+
let mut render = RenderOptions::default();
246+
render.hardbreaks = self.hardbreaks;
247+
render.github_pre_lang = self.github_pre_lang;
248+
render.full_info_string = self.full_info_string;
249+
render.width = self.width;
250+
render.unsafe_ = self.unsafe_;
251+
render.escape = self.escape;
252+
render.list_style = self.list_style;
253+
render.sourcepos = self.sourcepos;
254+
render
255255
}
256256
}
257257

src/main.rs

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -210,23 +210,25 @@ fn main() -> Result<(), Box<dyn Error>> {
210210
extension.shortcodes = cli.gemojis;
211211
}
212212

213+
let mut parse = ParseOptions::default();
214+
parse.smart = cli.smart;
215+
parse.default_info_string = cli.default_info_string;
216+
parse.relaxed_tasklist_matching = cli.relaxed_tasklist_character;
217+
218+
let mut render = RenderOptions::default();
219+
render.hardbreaks = cli.hardbreaks;
220+
render.github_pre_lang = cli.github_pre_lang || cli.gfm;
221+
render.full_info_string = cli.full_info_string;
222+
render.width = cli.width;
223+
render.unsafe_ = cli.unsafe_;
224+
render.escape = cli.escape;
225+
render.list_style = cli.list_style.into();
226+
render.sourcepos = cli.sourcepos;
227+
213228
let options = Options {
214229
extension,
215-
parse: ParseOptions {
216-
smart: cli.smart,
217-
default_info_string: cli.default_info_string,
218-
relaxed_tasklist_matching: cli.relaxed_tasklist_character,
219-
},
220-
render: RenderOptions {
221-
hardbreaks: cli.hardbreaks,
222-
github_pre_lang: cli.github_pre_lang || cli.gfm,
223-
full_info_string: cli.full_info_string,
224-
width: cli.width,
225-
unsafe_: cli.unsafe_,
226-
escape: cli.escape,
227-
list_style: cli.list_style.into(),
228-
sourcepos: cli.sourcepos,
229-
},
230+
parse,
231+
render,
230232
};
231233

232234
let syntax_highlighter: Option<&dyn SyntaxHighlighterAdapter>;

src/parser/mod.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,6 @@ pub struct Options {
150150
pub render: RenderOptions,
151151
}
152152

153-
// NOTE: The shortcodes feature adds a new field, so mark this as non-exhaustive since it's part of
154-
// the public API
155153
#[non_exhaustive]
156154
#[derive(Default, Debug, Clone)]
157155
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
@@ -348,6 +346,7 @@ pub struct ExtensionOptions {
348346
pub shortcodes: bool,
349347
}
350348

349+
#[non_exhaustive]
351350
#[derive(Default, Debug, Clone)]
352351
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
353352
/// Options for parser functions.
@@ -384,6 +383,7 @@ pub struct ParseOptions {
384383
pub relaxed_tasklist_matching: bool,
385384
}
386385

386+
#[non_exhaustive]
387387
#[derive(Default, Debug, Clone, Copy)]
388388
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
389389
/// Options for formatter functions.
@@ -532,13 +532,15 @@ pub struct RenderOptions {
532532
pub sourcepos: bool,
533533
}
534534

535+
#[non_exhaustive]
535536
#[derive(Default, Debug)]
536537
/// Umbrella plugins struct.
537538
pub struct Plugins<'p> {
538539
/// Configure render-time plugins.
539540
pub render: RenderPlugins<'p>,
540541
}
541542

543+
#[non_exhaustive]
542544
#[derive(Default)]
543545
/// Plugins for alternative rendering.
544546
pub struct RenderPlugins<'p> {

0 commit comments

Comments
 (0)