2020-02-10 09:40:22 -08:00

1.8 KiB

title
15. 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.

  • bullet list {:toc}

15.1. Define a Block

The formatting model builds represents the formatting structure of a file as a tree of Block objects, with associated indent, wrap, alignment and spacing setting 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.

{% include /code_samples/simple_language/src/main/java/com/intellij/sdk/language/SimpleBlock.java %}

15.2. Define a Formatting Model Builder

Define a formatter which removes extra spaces except the single spaces around the property separator. For example, reformat foo = bar to foo = bar.

{% include /code_samples/simple_language/src/main/java/com/intellij/sdk/language/SimpleFormattingModelBuilder.java %}

15.3. Register the Formatter

The SimpleFormattingModelBuilder implementation is registered with the IntelliJ Platform in plugin.xml using the lang.formatter extension point.

 <extensions defaultExtensionNs="com.intellij">
   <lang.formatter language="Simple" implementationClass="com.intellij.sdk.language.SimpleFormattingModelBuilder"/>
  </extensions>

15.4. Run the Project

Add some extra spaces around the = separator between language and English. Reformat the code by selecting Code | Show Reformat File Dialog and choose Run.

Formatter{:width="800px"}