1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
//! Configuration specific to the `forge fmt` command and the `forge_fmt` package
use serde::{Deserialize, Serialize};
/// Contains the config and rule set
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct FormatterConfig {
/// Maximum line length where formatter will try to wrap the line
pub line_length: usize,
/// Number of spaces per indentation level
pub tab_width: usize,
/// Print spaces between brackets
pub bracket_spacing: bool,
/// Style of uint/int256 types
pub int_types: IntTypes,
/// Style of multiline function header in case it doesn't fit
pub multiline_func_header: MultilineFuncHeaderStyle,
/// Style of quotation marks
pub quote_style: QuoteStyle,
/// Style of underscores in number literals
pub number_underscore: NumberUnderscore,
/// Style of single line blocks in statements
pub single_line_statement_blocks: SingleLineBlockStyle,
/// Print space in state variable, function and modifier `override` attribute
pub override_spacing: bool,
/// Wrap comments on `line_length` reached
pub wrap_comments: bool,
/// Globs to ignore
pub ignore: Vec<String>,
/// Add new line at start and end of contract declarations
pub contract_new_lines: bool,
}
/// Style of uint/int256 types
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum IntTypes {
/// Print the explicit uint256 or int256
Long,
/// Print the implicit uint or int
Short,
/// Use the type defined in the source code
Preserve,
}
/// Style of underscores in number literals
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum NumberUnderscore {
/// Remove all underscores
Remove,
/// Add an underscore every thousand, if greater than 9999
/// e.g. 1000 -> 1000 and 10000 -> 10_000
Thousands,
/// Use the underscores defined in the source code
Preserve,
}
/// Style of string quotes
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum QuoteStyle {
/// Use double quotes where possible
Double,
/// Use single quotes where possible
Single,
/// Use quotation mark defined in the source code
Preserve,
}
impl QuoteStyle {
/// Get associated quotation mark with option
pub fn quote(self) -> Option<char> {
match self {
QuoteStyle::Double => Some('"'),
QuoteStyle::Single => Some('\''),
QuoteStyle::Preserve => None,
}
}
}
/// Style of single line blocks in statements
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum SingleLineBlockStyle {
/// Prefer single line block when possible
Single,
/// Always use multiline block
Multi,
/// Preserve the original style
Preserve,
}
/// Style of function header in case it doesn't fit
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum MultilineFuncHeaderStyle {
/// Write function parameters multiline first
ParamsFirst,
/// Write function attributes multiline first
AttributesFirst,
/// If function params or attrs are multiline
/// split the rest
All,
}
impl Default for FormatterConfig {
fn default() -> Self {
FormatterConfig {
line_length: 120,
tab_width: 4,
bracket_spacing: false,
int_types: IntTypes::Long,
multiline_func_header: MultilineFuncHeaderStyle::AttributesFirst,
quote_style: QuoteStyle::Double,
number_underscore: NumberUnderscore::Preserve,
single_line_statement_blocks: SingleLineBlockStyle::Preserve,
override_spacing: false,
wrap_comments: false,
ignore: vec![],
contract_new_lines: false,
}
}
}