aboutsummaryrefslogtreecommitdiffstats
path: root/sd-plugin/src/main/java/org/intellij/sdk/language/SdFormattingModelBuilder.java
blob: 35f57f65c26070fb376c98d7466b66bbfede3e88 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package org.intellij.sdk.language;

import com.intellij.formatting.Alignment;
import com.intellij.formatting.FormattingContext;
import com.intellij.formatting.FormattingModel;
import com.intellij.formatting.FormattingModelBuilder;
import com.intellij.formatting.FormattingModelProvider;
import com.intellij.formatting.SpacingBuilder;
import com.intellij.formatting.Wrap;
import com.intellij.formatting.WrapType;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import org.intellij.sdk.language.psi.SdTypes;
import org.jetbrains.annotations.NotNull;

public class SdFormattingModelBuilder implements FormattingModelBuilder {

    private static SpacingBuilder createSpaceBuilder(CodeStyleSettings settings) {
        return new SpacingBuilder(settings, SdLanguage.INSTANCE)
            .around(SdTypes.SYMBOL)
            .spaceIf(settings.getCommonSettings(SdLanguage.INSTANCE.getID()).SPACE_AFTER_COLON)
            .before(SdTypes.DOCUMENT_FIELD_DEFINITION)
            .none();
    }

    @Override
    public @NotNull FormattingModel createModel(@NotNull FormattingContext formattingContext) {
        final CodeStyleSettings codeStyleSettings = formattingContext.getCodeStyleSettings();
        return FormattingModelProvider
            .createFormattingModelForPsiFile(formattingContext.getContainingFile(),
                                             new SdBlock(formattingContext.getNode(),
                                                             Wrap.createWrap(WrapType.NONE, false),
                                                             Alignment.createAlignment(),
                                                             createSpaceBuilder(codeStyleSettings)),
                                             codeStyleSettings);
    }

}