Skip to content

Configuration reference

While Mago's formatter is opinionated and works great out-of-the-box with its PER-CS compliant defaults, you can customize its behavior in your mago.toml file.

All settings go under the [formatter] table.

toml
[formatter]
print-width = 100
use-tabs = true

Presets

Instead of configuring individual settings, you can use a preset that provides a complete set of formatter options optimized for specific coding standards.

toml
[formatter]
preset = "laravel"

Available presets:

  • "default" — PER-CS compliant settings (same as the default configuration)
  • "psr-12" — Optimized for PSR-12 coding standard
  • "laravel-pint" — Laravel Pint's 'laravel' preset

Preset Versions

Presets support versioning to allow applications to pin to specific versions of coding standards:

toml
[formatter]
preset = "psr-12@latest"  # Use the latest PSR-12 rules
preset = "psr-12"         # Same as above (latest is default)

Currently, only latest is supported for all presets. Future versions will allow pinning to specific standard versions (e.g., [email protected]).

Combining presets with individual settings

You can combine a preset with individual settings. When you specify both, the preset provides the base configuration, and any individual settings you specify will override the preset values:

toml
[formatter]
preset = "laravel"
print-width = 140  # Overrides the preset's print-width

This allows you to start with a preset that matches your project's coding standard and then fine-tune specific options as needed.

Configuration options

OptionTypeDefaultDescription
presetstringnullUse a preset configuration. Available values: "default", "psr-12", "laravel".
excludesstring[][]A list of paths or glob patterns to exclude from formatting.

Tool-Specific Excludes

The excludes option here is additive to the global source.excludes defined in the [source] section of your configuration. Files excluded globally will always be excluded from formatting, and this option allows you to exclude additional files from the formatter specifically.

For example:

toml
[source]
excludes = ["cache/**"]  # Excluded from ALL tools

[formatter]
excludes = ["src/**/AutoGenerated/**/*.php"]  # Additionally excluded from formatter only
OptionTypeDefaultDescription
print-widthinteger120Maximum line length that the printer will wrap on.
tab-widthinteger4Number of spaces per indentation level.
use-tabsbooleanfalseUse tabs instead of spaces for indentation.
end-of-lineenum("auto", "lf", "crlf", "cr")"lf"The end-of-line character sequence to use.
single-quotebooleantruePrefer single quotes over double quotes for strings.
indent-heredocbooleantrueIndent heredoc/nowdoc body content to match the surrounding scope (PER-CS 3.0 Section 10 compliant). When enabled, content is indented one level past the declaration scope, and the closing label is at scope level. When disabled, content and closing label are at column 0 (legacy behavior).
trailing-commabooleantrueAdd a trailing comma to multi-line arrays, parameter lists, etc.
remove-trailing-close-tagbooleantrueRemove the trailing PHP close tag (?>) from files.
control-brace-styleenum("same-line", "next-line")"same-line"Brace style for control structures.
following-clause-on-newlinebooleanfalsePlace else, elseif, catch, and finally on a new line.
closure-brace-styleenum("same-line", "next-line")"same-line"Brace style for closures.
function-brace-styleenum("same-line", "next-line")"next-line"Brace style for functions.
method-brace-styleenum("same-line", "next-line")"next-line"Brace style for methods.
classlike-brace-styleenum("same-line", "next-line")"next-line"Brace style for classes, traits, etc.
inline-empty-control-bracesbooleanfalsePlace empty control structure bodies on the same line.
inline-empty-closure-bracesbooleantruePlace empty closure bodies on the same line.
inline-empty-function-bracesbooleanfalsePlace empty function bodies on the same line.
inline-empty-method-bracesbooleanfalsePlace empty method bodies on the same line.
inline-empty-constructor-bracesbooleantruePlace empty constructor bodies on the same line.
inline-empty-classlike-bracesbooleantruePlace empty class-like bodies on the same line.
inline-empty-anonymous-class-bracesbooleantruePlace empty anonymous class bodies on the same line.
method-chain-breaking-styleenum("same-line", "next-line")"next-line"How to break method chains.
first-method-chain-on-new-linebooleantrueWhen method chaining breaks across lines, place the first method call on a new line. Only applies to object method calls (->, ?->), not static methods (::) or property access (PER-CS 4.7 compliant).
preserve-breaking-member-access-chainbooleanfalsePreserve existing line breaks in method chains.
preserve-breaking-argument-listbooleanfalsePreserve existing line breaks in argument lists.
preserve-breaking-array-likebooleantruePreserve existing line breaks in array-like structures.
preserve-breaking-parameter-listbooleanfalsePreserve existing line breaks in parameter lists.
preserve-breaking-attribute-listbooleanfalsePreserve existing line breaks in attribute lists.
preserve-breaking-conditional-expressionbooleanfalsePreserve existing line breaks in ternary expressions.
break-promoted-properties-listbooleantrueAlways break parameter lists with promoted properties.
line-before-binary-operatorbooleantruePlace the binary operator on the next line when breaking.
always-break-named-arguments-listbooleanfalseAlways break named argument lists into multiple lines.
always-break-attribute-named-argument-listsbooleanfalseAlways break named argument lists in attributes.
array-table-style-alignmentbooleantrueUse table-style alignment for arrays.
align-assignment-likebooleanfalseAlign consecutive assignment-like constructs (variable assignments, array key-value pairs, class properties, constants, enum cases) in columns.
sort-usesbooleantrueSort use statements alphabetically.
sort-class-methodsbooleanfalseSort class methods by visibility and type (constructor first, then static methods, then instance methods by visibility, destructor last).
separate-use-typesbooleantrueInsert a blank line between different types of use statements.
expand-use-groupsbooleantrueExpand grouped use statements into individual statements.
null-type-hintenum("null_pipe", "question")"question"How to format null type hints (null|T vs ?T).
parentheses-around-new-in-member-accessbooleanfalseAdd parentheses around new in member access ((new Foo)->bar()).
parentheses-in-new-expressionbooleantrueAdd parentheses to new expressions without arguments (new Foo()).
parentheses-in-exit-and-diebooleantrueAdd parentheses to exit and die constructs.
parentheses-in-attributebooleanfalseAdd parentheses to attributes without arguments.
space-before-arrow-function-parameter-list-parenthesisbooleanfalseAdd a space before arrow function parameters.
space-before-closure-parameter-list-parenthesisbooleantrueAdd a space before closure parameters.
space-before-hook-parameter-list-parenthesisbooleanfalseAdd a space before hook parameters.
space-before-closure-use-clause-parenthesisbooleantrueAdd a space before closure use parentheses.
space-after-colon-in-enum-backing-typebooleantrueAdd a space after the colon in enum backing types.
space-after-cast-unary-prefix-operatorsbooleantrueAdd a space after cast operators like (int).
space-after-reference-unary-prefix-operatorbooleanfalseAdd a space after the reference operator (&).
space-after-error-control-unary-prefix-operatorbooleanfalseAdd a space after the error control operator (@).
space-after-logical-not-unary-prefix-operatorbooleanfalseAdd a space after the logical not operator (!).
space-after-bitwise-not-unary-prefix-operatorbooleanfalseAdd a space after the bitwise not operator (~).
space-after-increment-unary-prefix-operatorbooleanfalseAdd a space after the prefix increment operator (++).
space-after-decrement-unary-prefix-operatorbooleanfalseAdd a space after the prefix decrement operator (--).
space-after-additive-unary-prefix-operatorbooleanfalseAdd a space after unary + and -.
space-around-concatenation-binary-operatorbooleantrueAdd spaces around the concatenation operator (.).
space-around-assignment-in-declarebooleanfalseAdd spaces around = in declare statements.
space-within-grouping-parenthesisbooleanfalseAdd spaces inside grouping parentheses ( 1 + 2 ).
empty-line-after-control-structurebooleanfalseAdd an empty line after control structures.
empty-line-after-opening-tagbooleantrueAdd an empty line after the opening <?php tag.
empty-line-after-declarebooleantrueAdd an empty line after a declare statement.
empty-line-after-namespacebooleantrueAdd an empty line after a namespace declaration.
empty-line-after-usebooleantrueAdd an empty line after use statement blocks.
empty-line-after-symbolsbooleantrueAdd an empty line after top-level symbols (class, function, etc.).
empty-line-between-same-symbolsbooleantrueAdd an empty line between consecutive symbols of the same type. Only applies when empty-line-after-symbols is true.
empty-line-after-class-like-openbooleanfalseEnsure there is an empty line immediately after the opening brace of a class-like structure (class, trait, interface, enum). Useful for styles that prefer a blank line after the opening brace (opt-in).
empty-line-after-class-like-constantbooleanfalseAdd an empty line after a class constant.
empty-line-before-class-like-closebooleanfalseInsert an empty line immediately before the closing brace of a non-empty class-like structure (class, trait, interface, enum). Only applies when the class body contains at least one member.
empty-line-after-enum-casebooleanfalseAdd an empty line after an enum case.
empty-line-after-trait-usebooleanfalseAdd an empty line after a use statement inside a trait.
empty-line-after-propertybooleanfalseAdd an empty line after a property.
empty-line-after-methodbooleantrueAdd an empty line after a method.
empty-line-before-returnbooleanfalseAdd an empty line before a return statement.
empty-line-before-dangling-commentsbooleantrueAdd an empty line before dangling comments.
separate-class-like-membersbooleantrueSeparate different kinds of class members with a blank line.
uppercase-literal-keywordbooleanfalseWhen true, format boolean and null literal keywords (true, false, null) in UPPERCASE (TRUE, FALSE, NULL).