3.2 KiB
16. Formatter
Sample implementation of Simple language formatter.
Code: SimpleBlock
,
SimpleFormattingModelBuilder
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
.
{src="simple_language_plugin/src/main/java/org/intellij/sdk/language/SimpleBlock.java" include-symbol="SimpleBlock"}
Define a Formatting Model Builder
Define a formatter that removes extra spaces except for the single spaces around the property separator:
foo = bar
foo = bar
Create SimpleFormattingModelBuilder
by implementing FormattingModelBuilder
.
{src="simple_language_plugin/src/main/java/org/intellij/sdk/language/SimpleFormattingModelBuilder.java" include-symbol="SimpleFormattingModelBuilder"}
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.
<extensions defaultExtensionNs="com.intellij">
<lang.formatter
language="Simple"
implementationClass="org.intellij.sdk.language.SimpleFormattingModelBuilder"/>
</extensions>
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 Code | Reformat File... dialog and choose Run.