#[cfg(feature = "config_serde")]
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default)]
#[cfg_attr(feature = "config_serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "config_serde", serde(default))]
pub struct FormatOptions {
#[cfg_attr(feature = "config_serde", serde(flatten))]
pub layout: LayoutOptions,
#[cfg_attr(feature = "config_serde", serde(flatten))]
pub language: LanguageOptions,
}
#[derive(Clone, Debug)]
#[cfg_attr(feature = "config_serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "config_serde", serde(default))]
pub struct LayoutOptions {
#[cfg_attr(feature = "config_serde", serde(alias = "printWidth"))]
pub print_width: usize,
#[cfg_attr(feature = "config_serde", serde(alias = "useTabs"))]
pub use_tabs: bool,
#[cfg_attr(feature = "config_serde", serde(alias = "indentWidth"))]
pub indent_width: usize,
#[cfg_attr(
feature = "config_serde",
serde(alias = "lineBreak", alias = "linebreak")
)]
pub line_break: LineBreak,
}
impl Default for LayoutOptions {
fn default() -> Self {
Self {
print_width: 80,
use_tabs: false,
indent_width: 2,
line_break: LineBreak::Lf,
}
}
}
#[derive(Clone, Debug, Default)]
#[cfg_attr(feature = "config_serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "config_serde", serde(rename_all = "kebab-case"))]
pub enum LineBreak {
#[default]
Lf,
Crlf,
}
impl From<LineBreak> for tiny_pretty::LineBreak {
fn from(value: LineBreak) -> Self {
match value {
LineBreak::Lf => tiny_pretty::LineBreak::Lf,
LineBreak::Crlf => tiny_pretty::LineBreak::Crlf,
}
}
}
#[derive(Clone, Debug)]
#[cfg_attr(feature = "config_serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "config_serde", serde(default))]
pub struct LanguageOptions {
#[cfg_attr(feature = "config_serde", serde(alias = "hexCase"))]
pub hex_case: HexCase,
#[cfg_attr(feature = "config_serde", serde(alias = "hexColorLength"))]
pub hex_color_length: Option<HexColorLength>,
pub quotes: Quotes,
#[cfg_attr(
feature = "config_serde",
serde(rename = "attr_selector.quotes", alias = "attrSelector.quotes")
)]
pub attr_selector_quotes: Option<Quotes>,
#[cfg_attr(
feature = "config_serde",
serde(alias = "operatorLinebreak", alias = "operatorLineBreak")
)]
pub operator_linebreak: OperatorLineBreak,
#[cfg_attr(
feature = "config_serde",
serde(alias = "blockSelectorLinebreak", alias = "blockSelectorLineBreak")
)]
pub block_selector_linebreak: BlockSelectorLineBreak,
#[cfg_attr(feature = "config_serde", serde(alias = "omitNumberLeadingZero"))]
pub omit_number_leading_zero: bool,
#[cfg_attr(feature = "config_serde", serde(alias = "trailingComma"))]
pub trailing_comma: bool,
#[cfg_attr(feature = "config_serde", serde(alias = "formatComments"))]
pub format_comments: bool,
#[cfg_attr(feature = "config_serde", serde(alias = "alignComments"))]
pub align_comments: bool,
#[cfg_attr(
feature = "config_serde",
serde(alias = "linebreakInPseudoParens", alias = "lineBreakInPseudoParens")
)]
pub linebreak_in_pseudo_parens: bool,
#[cfg_attr(feature = "config_serde", serde(alias = "declarationOrder"))]
pub declaration_order: Option<DeclarationOrder>,
#[cfg_attr(feature = "config_serde", serde(alias = "declarationOrderGroupBy"))]
pub declaration_order_group_by: DeclarationOrderGroupBy,
#[cfg_attr(feature = "config_serde", serde(alias = "singleLineBlockThreshold"))]
pub single_line_block_threshold: Option<usize>,
#[cfg_attr(feature = "config_serde", serde(alias = "keyframeSelectorNotation"))]
pub keyframe_selector_notation: Option<KeyframeSelectorNotation>,
#[cfg_attr(feature = "config_serde", serde(alias = "attrValueQuotes"))]
pub attr_value_quotes: AttrValueQuotes,
#[cfg_attr(feature = "config_serde", serde(alias = "preferSingleLine"))]
pub prefer_single_line: bool,
#[cfg_attr(
feature = "config_serde",
serde(
rename = "selectors.prefer_single_line",
alias = "selectors.preferSingleLine"
)
)]
pub selectors_prefer_single_line: Option<bool>,
#[cfg_attr(
feature = "config_serde",
serde(
rename = "function_args.prefer_single_line",
alias = "functionArgs.preferSingleLine"
)
)]
pub function_args_prefer_single_line: Option<bool>,
#[cfg_attr(
feature = "config_serde",
serde(
rename = "sass_content_at_rule.prefer_single_line",
alias = "sassContentAtRule.preferSingleLine"
)
)]
pub sass_content_at_rule_prefer_single_line: Option<bool>,
#[cfg_attr(
feature = "config_serde",
serde(
rename = "sass_include_at_rule.prefer_single_line",
alias = "sassIncludeAtRule.preferSingleLine"
)
)]
pub sass_include_at_rule_prefer_single_line: Option<bool>,
#[cfg_attr(
feature = "config_serde",
serde(
rename = "sass_map.prefer_single_line",
alias = "sassMap.preferSingleLine"
)
)]
pub sass_map_prefer_single_line: Option<bool>,
#[cfg_attr(
feature = "config_serde",
serde(
rename = "sass_module_config.prefer_single_line",
alias = "sassModuleConfig.preferSingleLine"
)
)]
pub sass_module_config_prefer_single_line: Option<bool>,
#[cfg_attr(
feature = "config_serde",
serde(
rename = "sass_params.prefer_single_line",
alias = "sassParams.preferSingleLine"
)
)]
pub sass_params_prefer_single_line: Option<bool>,
#[cfg_attr(
feature = "config_serde",
serde(
rename = "less_import_options.prefer_single_line",
alias = "lessImportOptions.preferSingleLine"
)
)]
pub less_import_options_prefer_single_line: Option<bool>,
#[cfg_attr(
feature = "config_serde",
serde(
rename = "less_mixin_args.prefer_single_line",
alias = "lessMixinArgs.preferSingleLine"
)
)]
pub less_mixin_args_prefer_single_line: Option<bool>,
#[cfg_attr(
feature = "config_serde",
serde(
rename = "less_mixin_params.prefer_single_line",
alias = "lessMixinParams.preferSingleLine"
)
)]
pub less_mixin_params_prefer_single_line: Option<bool>,
#[cfg_attr(
feature = "config_serde",
serde(alias = "singleLineTopLevelDeclarations")
)]
pub single_line_top_level_declarations: bool,
#[cfg_attr(
feature = "config_serde",
serde(alias = "selectorOverrideCommentDirective")
)]
pub selector_override_comment_directive: String,
#[cfg_attr(feature = "config_serde", serde(alias = "ignoreCommentDirective"))]
pub ignore_comment_directive: String,
#[cfg_attr(feature = "config_serde", serde(alias = "ignoreFileCommentDirective"))]
pub ignore_file_comment_directive: String,
}
impl Default for LanguageOptions {
fn default() -> Self {
LanguageOptions {
hex_case: HexCase::default(),
hex_color_length: None,
quotes: Quotes::default(),
attr_selector_quotes: None,
operator_linebreak: OperatorLineBreak::default(),
block_selector_linebreak: BlockSelectorLineBreak::default(),
omit_number_leading_zero: false,
trailing_comma: false,
format_comments: false,
align_comments: true,
linebreak_in_pseudo_parens: false,
declaration_order: None,
declaration_order_group_by: DeclarationOrderGroupBy::default(),
single_line_block_threshold: None,
keyframe_selector_notation: None,
attr_value_quotes: AttrValueQuotes::default(),
prefer_single_line: false,
selectors_prefer_single_line: None,
function_args_prefer_single_line: None,
sass_content_at_rule_prefer_single_line: None,
sass_include_at_rule_prefer_single_line: None,
sass_map_prefer_single_line: None,
sass_module_config_prefer_single_line: None,
sass_params_prefer_single_line: None,
less_import_options_prefer_single_line: None,
less_mixin_args_prefer_single_line: None,
less_mixin_params_prefer_single_line: None,
single_line_top_level_declarations: false,
selector_override_comment_directive: "malva-selector-override".into(),
ignore_comment_directive: "malva-ignore".into(),
ignore_file_comment_directive: "malva-ignore-file".into(),
}
}
}
#[derive(Clone, Debug, Default)]
#[cfg_attr(feature = "config_serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "config_serde", serde(rename_all = "kebab-case"))]
pub enum HexCase {
Ignore,
#[default]
Lower,
Upper,
}
#[derive(Clone, Debug)]
#[cfg_attr(feature = "config_serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "config_serde", serde(rename_all = "kebab-case"))]
pub enum HexColorLength {
Short,
Long,
}
#[derive(Clone, Copy, Debug, Default)]
#[cfg_attr(feature = "config_serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "config_serde", serde(rename_all = "kebab-case"))]
pub enum Quotes {
#[default]
#[cfg_attr(feature = "config_serde", serde(alias = "alwaysDouble"))]
AlwaysDouble,
#[cfg_attr(feature = "config_serde", serde(alias = "alwaysSingle"))]
AlwaysSingle,
#[cfg_attr(feature = "config_serde", serde(alias = "preferDouble"))]
PreferDouble,
#[cfg_attr(feature = "config_serde", serde(alias = "preferSingle"))]
PreferSingle,
}
#[derive(Clone, Debug, Default)]
#[cfg_attr(feature = "config_serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "config_serde", serde(rename_all = "kebab-case"))]
pub enum OperatorLineBreak {
Before,
#[default]
After,
}
#[derive(Clone, Debug, Default)]
#[cfg_attr(feature = "config_serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "config_serde", serde(rename_all = "kebab-case"))]
pub enum BlockSelectorLineBreak {
Always,
#[default]
Consistent,
Wrap,
}
#[derive(Clone, Debug)]
#[cfg_attr(feature = "config_serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "config_serde", serde(rename_all = "kebab-case"))]
pub enum DeclarationOrder {
Alphabetical,
Smacss,
Concentric,
}
#[derive(Clone, Debug, Default)]
#[cfg_attr(feature = "config_serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "config_serde", serde(rename_all = "kebab-case"))]
pub enum DeclarationOrderGroupBy {
#[default]
#[cfg_attr(feature = "config_serde", serde(alias = "nonDeclaration"))]
NonDeclaration,
#[cfg_attr(feature = "config_serde", serde(alias = "nonDeclarationAndEmptyLine"))]
NonDeclarationAndEmptyLine,
}
#[derive(Clone, Debug)]
#[cfg_attr(feature = "config_serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "config_serde", serde(rename_all = "kebab-case"))]
pub enum KeyframeSelectorNotation {
Keyword,
Percentage,
}
#[derive(Clone, Debug, Default)]
#[cfg_attr(feature = "config_serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "config_serde", serde(rename_all = "kebab-case"))]
pub enum AttrValueQuotes {
#[default]
Always,
Ignore,
}