## Formatter

Configuration related to the behavior of the Forge formatter. Each of these keys live under the `[fmt]` section.

### `line_length`

- Type: number
- Default: 120
- Environment: `FOUNDRY_FMT_LINE_LENGTH` or `DAPP_FMT_LINE_LENGTH`

Maximum line length where formatter will try to wrap the line.

### `tab_width`

- Type: number
- Default: 4
- Environment: `FOUNDRY_FMT_TAB_WIDTH` or `DAPP_FMT_TAB_WIDTH`

Number of spaces per indentation level. Ignored if `style` is set to `"tab"`.

### `style`

- Type: string
- Default: `space`
- Environment: `FOUNDRY_FMT_STYLE` or `DAPP_FMT_STYLE`

Indentation style. Valid values are:

- `space` (default): Use spaces for indentation
- `tab`: Use tabs for indentation

### `bracket_spacing`

- Type: bool
- Default: false
- Environment: `FOUNDRY_FMT_BRACKET_SPACING` or `DAPP_FMT_BRACKET_SPACING`

Whether or not to print spaces between brackets.

### `int_types`

- Type: string
- Default: `long`
- Environment: `FOUNDRY_FMT_INT_TYPES` or `DAPP_FMT_INT_TYPES`

Style of uint/int256 types. Valid values are:

- `long` (default): Use the explicit `uint256` or `int256`
- `short`: Use the implicit `uint` or `int`
- `preserve`: Use the type defined in the source code

### `multiline_func_header`

- Type: string
- Default: `attributes_first`
- Environment: `FOUNDRY_FMT_MULTILINE_FUNC_HEADER` or `DAPP_FMT_MULTILINE_FUNC_HEADER`

Style of multiline function header in case it doesn't fit in one line. Valid values are:

- `attributes_first` (default): Write function attributes multiline first
- `params_always`: Always write function parameters multiline
- `params_first_multi`: Write function parameters multiline first when there is more than one param
- `all`: If function params or attrs are multiline, multiline everything
- `all_params`: Same as `all` but writes function params multiline even when there is a single param

For example, with `params_always`:

```solidity
function myFunction(
    uint256 param1,
    uint256 param2,
    uint256 param3
) public returns (uint256) {
  // ...
}
```

And with `all`:

```solidity
function myFunction(
    uint256 param1,
    uint256 param2,
    uint256 param3
)
    public
    returns (uint256)
{
  // ...
}
```

### `quote_style`

- Type: string
- Default: `double`
- Environment: `FOUNDRY_FMT_QUOTE_STYLE` or `DAPP_FMT_QUOTE_STYLE`

Defines the quotation mark style. Valid values are:

- `double` (default): Use double quotes where possible (`"`)
- `single`: Use single quotes where possible (`'`)
- `preserve`: Use quotation mark defined in the source code

### `number_underscore`

- Type: string
- Default: `preserve`
- Environment: `FOUNDRY_FMT_NUMBER_UNDERSCORE` or `DAPP_FMT_NUMBER_UNDERSCORE`

Style of underscores in number literals. Valid values are:

- `preserve` (default): Use the underscores defined in the source code
- `thousands`: Add an underscore every thousand, if greater than 9999. i.e. `1000` is formatted as `1000` and `10000` as `10_000`
- `remove`: Remove all underscores

### `hex_underscore`

- Type: string
- Default: `remove`
- Environment: `FOUNDRY_FMT_HEX_UNDERSCORE` or `DAPP_FMT_HEX_UNDERSCORE`

Style of underscores in hex literals. Valid values are:

- `preserve`: Use the underscores defined in the source code
- `remove` (default): Remove all underscores
- `bytes`: Add underscore as separator between byte boundaries. i.e. `hex"deadbeef"` is formatted as `hex"de_ad_be_ef"`

### `single_line_statement_blocks`

- Type: string
- Default: `preserve`
- Environment: `FOUNDRY_FMT_SINGLE_LINE_STATEMENT_BLOCKS` or `DAPP_FMT_SINGLE_LINE_STATEMENT_BLOCKS`

Style of single line blocks in statements. Valid values are:

- `preserve` (default): Keep the existing single/multi line formatting of statement blocks
- `single`: Statement blocks will be formatted to a single line if possible
- `multi`: Statement blocks will always be formatted to multiple lines

For example, with `single`:

```solidity
if (true) { return true; }
```

With `multi`:

```solidity
if (true) {
    return true;
}
```

### `override_spacing`

- Type: bool
- Default: false
- Environment: `FOUNDRY_FMT_OVERRIDE_SPACING` or `DAPP_FMT_OVERRIDE_SPACING`

Whether to print a space in state variable, function and modifier `override` attribute.

When enabled:

```solidity
function foo() override (Parent) public { }
```

When disabled:

```solidity
function foo() override(Parent) public { }
```

### `wrap_comments`

- Type: bool
- Default: false
- Environment: `FOUNDRY_FMT_WRAP_COMMENTS` or `DAPP_FMT_WRAP_COMMENTS`

Whether or not to wrap comments on `line_length` reached.

### `docs_style`

- Type: string
- Default: `preserve`
- Environment: `FOUNDRY_FMT_DOCS_STYLE` or `DAPP_FMT_DOCS_STYLE`

Style of doc comments. Valid values are:

- `preserve` (default): Preserve the source code style
- `line`: Use single-line style (`///`)
- `block`: Use block style (`/** ... */`)

### `ignore`

- Type: array of strings (patterns)
- Default: `[]`
- Environment: `FOUNDRY_FMT_IGNORE` or `DAPP_FMT_IGNORE`

List of files to ignore when formatting. This is a comma separated list of glob patterns.

```toml
[fmt]
ignore = ["src/vendor/**/*.sol", "lib/**/*.sol"]
```

### `contract_new_lines`

- Type: bool
- Default: false
- Environment: `FOUNDRY_FMT_CONTRACT_NEW_LINES` or `DAPP_FMT_CONTRACT_NEW_LINES`

Whether to add new lines before and after contract declarations.

When enabled:

```solidity
// imports...

contract MyContract {
    // ...
}

contract AnotherContract {
    // ...
}
```

### `sort_imports`

- Type: bool
- Default: false
- Environment: `FOUNDRY_FMT_SORT_IMPORTS` or `DAPP_FMT_SORT_IMPORTS`

Whether to sort import statements alphabetically within their import groups. Groups are separated by blank lines.

### `namespace_import_style`

- Type: string
- Default: `prefer_plain`
- Environment: `FOUNDRY_FMT_NAMESPACE_IMPORT_STYLE` or `DAPP_FMT_NAMESPACE_IMPORT_STYLE`

Choose between import styles. Valid values are:

- `prefer_plain` (default): Prefer `import "source" as name;`
- `prefer_glob`: Prefer `import * as name from "source";`
- `preserve`: Preserve the original style

### `pow_no_space`

- Type: bool
- Default: false
- Environment: `FOUNDRY_FMT_POW_NO_SPACE` or `DAPP_FMT_POW_NO_SPACE`

Whether to suppress spaces around the power operator (`**`).

When enabled:

```solidity
uint256 result = base**exponent;
```

When disabled (default):

```solidity
uint256 result = base ** exponent;
```

### `prefer_compact`

- Type: string
- Default: `all`
- Environment: `FOUNDRY_FMT_PREFER_COMPACT` or `DAPP_FMT_PREFER_COMPACT`

Style that determines if a broken list should keep its elements together on their own line, before breaking individually. Valid values are:

- `all` (default): All elements are preferred compact
- `none`: All elements are preferred consistent
- `calls`: Calls are preferred compact; events and errors break consistently
- `events`: Events are preferred compact; calls and errors break consistently
- `errors`: Errors are preferred compact; calls and events break consistently
- `events_errors`: Events and errors are preferred compact; calls break consistently

### `single_line_imports`

- Type: bool
- Default: false
- Environment: `FOUNDRY_FMT_SINGLE_LINE_IMPORTS` or `DAPP_FMT_SINGLE_LINE_IMPORTS`

Keep single imports on a single line even if they exceed `line_length`.
