16. Formatter
The IntelliJ Platform includes a powerful framework for implementing formatting for custom languages. A formatter enables reformatting code automatically based on code style settings. The formatter controls spaces, indents, wrap, and alignment.
Define a Block
The formatting model represents the formatting structure of a file as a tree of Block
objects, with associated indent, wrap, alignment and spacing settings. The goal is to cover each PSI element with such a block. Since each block builds its children's blocks, it can generate extra blocks or skip any PSI elements. Define SimpleBlock
based on AbstractBlock
.
Define a Formatting Model Builder
Define a formatter that removes extra spaces except for the single spaces around the property separator:
Create SimpleFormattingModelBuilder
by implementing FormattingModelBuilder
.
Register the Formatter
The SimpleFormattingModelBuilder
implementation is registered with the IntelliJ Platform in the plugin configuration file using the com.intellij.lang.formatter
extension point.
Run the Project
Run the plugin by using the Gradle runIde
task.
Open the example Simple Language properties file in the IDE Development Instance. Add some extra spaces around the =
separator between language
and English
. Reformat the code by invoking dialog and choose Run.