dprint_plugin_markdown/configuration/
types.rs

1use dprint_core::configuration::*;
2use dprint_core::generate_str_to_from;
3use serde::Deserialize;
4use serde::Serialize;
5
6/// Resolved markdown configuration.
7#[derive(Clone, Serialize, Deserialize)]
8#[serde(rename_all = "camelCase")]
9pub struct Configuration {
10  pub line_width: u32,
11  pub new_line_kind: NewLineKind,
12  pub text_wrap: TextWrap,
13  pub emphasis_kind: EmphasisKind,
14  pub strong_kind: StrongKind,
15  pub unordered_list_kind: UnorderedListKind,
16  pub ignore_directive: String,
17  pub ignore_file_directive: String,
18  pub ignore_start_directive: String,
19  pub ignore_end_directive: String,
20}
21
22/// Text wrapping possibilities.
23#[derive(Clone, PartialEq, Copy, Serialize, Deserialize)]
24#[serde(rename_all = "camelCase")]
25pub enum TextWrap {
26  /// Always wraps text.
27  Always,
28  /// Maintains line breaks (default).
29  Maintain,
30  /// Never wraps text.
31  Never,
32}
33
34generate_str_to_from![TextWrap, [Always, "always"], [Maintain, "maintain"], [Never, "never"]];
35
36/// The character to use for emphasis/italics.
37#[derive(Clone, PartialEq, Copy, Serialize, Deserialize)]
38#[serde(rename_all = "camelCase")]
39pub enum EmphasisKind {
40  /// Uses asterisks (*) for emphasis.
41  Asterisks,
42  /// Uses underscores (_) for emphasis (default).
43  Underscores,
44}
45
46generate_str_to_from![EmphasisKind, [Asterisks, "asterisks"], [Underscores, "underscores"]];
47
48/// The character to use for strong emphasis/bold.
49#[derive(Clone, PartialEq, Copy, Serialize, Deserialize)]
50#[serde(rename_all = "camelCase")]
51pub enum StrongKind {
52  /// Uses asterisks (**) for strong emphasis (default).
53  Asterisks,
54  /// Uses underscores (__) for strong emphasis.
55  Underscores,
56}
57
58generate_str_to_from![StrongKind, [Asterisks, "asterisks"], [Underscores, "underscores"]];
59
60/// The character to use primarily for lists.
61///
62/// Unnumbered lists will be formatted to use a common list character, i.e., the primary list
63/// character. Additionally, an alternate list character is used to separate lists which are not
64/// separated by other paragraphs. This parameter defines which character should be used as primary
65/// list character, i.e., either '-' (default) or '*'. The alternate list character will be the one
66/// which is _not_ primary.
67#[derive(Clone, PartialEq, Copy, Serialize, Deserialize)]
68#[serde(rename_all = "camelCase")]
69pub enum UnorderedListKind {
70  /// Uses dashes (-) as primary character for lists (default).
71  ///
72  /// In this case, asterisks are used as alternate list characters.
73  Dashes,
74  /// Uses asterisks (*) as primary character for lists.
75  ///
76  /// In this case, dashes are used as alternate list characters.
77  Asterisks,
78}
79
80impl UnorderedListKind {
81  /// Determine the character to use for a list, i.e., '-' or '*'.
82  ///
83  /// The result depends on the configuration and whether the primary or alternate character is
84  /// requested. See [`Self`].
85  pub fn list_char(&self, is_alternate: bool) -> char {
86    match (self, is_alternate) {
87      (Self::Dashes, true) | (Self::Asterisks, false) => '*',
88      _ => '-',
89    }
90  }
91}
92
93generate_str_to_from![UnorderedListKind, [Dashes, "dashes"], [Asterisks, "asterisks"]];