Skip to content

Commit 5bf0817

Browse files
committed
Added Code Style settings page to control indentation (#258, #92)
1 parent ba18e9a commit 5bf0817

File tree

4 files changed

+94
-3
lines changed

4 files changed

+94
-3
lines changed

resources/META-INF/plugin.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,8 @@
124124

125125
<!-- Formatting and folding -->
126126
<lang.formatter language="GraphQL" implementationClass="com.intellij.lang.jsgraphql.ide.formatter.GraphQLFormattingModelBuilder"/>
127+
<langCodeStyleSettingsProvider implementation="com.intellij.lang.jsgraphql.ide.formatter.GraphQLLanguageCodeStyleSettingsProvider"/>
128+
<codeStyleSettingsProvider implementation="com.intellij.lang.jsgraphql.ide.formatter.GraphQLCodeStyleSettingsProvider"/>
127129
<lang.foldingBuilder language="GraphQL" implementationClass="com.intellij.lang.jsgraphql.ide.editor.GraphQLFoldingBuilder"/>
128130

129131
<!-- Editing -->
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* Copyright (c) 2019-present, Jim Kynde Meyer
3+
* All rights reserved.
4+
* <p>
5+
* This source code is licensed under the MIT license found in the
6+
* LICENSE file in the root directory of this source tree.
7+
*/
8+
package com.intellij.lang.jsgraphql.ide.formatter;
9+
10+
import com.intellij.application.options.CodeStyleAbstractConfigurable;
11+
import com.intellij.application.options.CodeStyleAbstractPanel;
12+
import com.intellij.application.options.TabbedLanguageCodeStylePanel;
13+
import com.intellij.lang.Language;
14+
import com.intellij.lang.jsgraphql.GraphQLLanguage;
15+
import com.intellij.openapi.options.Configurable;
16+
import com.intellij.psi.codeStyle.CodeStyleSettings;
17+
import com.intellij.psi.codeStyle.CodeStyleSettingsProvider;
18+
import org.jetbrains.annotations.NotNull;
19+
import org.jetbrains.annotations.Nullable;
20+
21+
public class GraphQLCodeStyleSettingsProvider extends CodeStyleSettingsProvider {
22+
@NotNull
23+
@Override
24+
public Configurable createSettingsPage(CodeStyleSettings settings, CodeStyleSettings originalSettings) {
25+
return new CodeStyleAbstractConfigurable(settings, originalSettings, "GraphQL") {
26+
@Override
27+
protected CodeStyleAbstractPanel createPanel(CodeStyleSettings settings) {
28+
final Language language = GraphQLLanguage.INSTANCE;
29+
final CodeStyleSettings currentSettings = getCurrentSettings();
30+
return new TabbedLanguageCodeStylePanel(language, currentSettings, settings) {
31+
@Override
32+
protected void initTabs(CodeStyleSettings settings) {
33+
addIndentOptionsTab(settings);
34+
}
35+
};
36+
}
37+
};
38+
}
39+
40+
@Nullable
41+
@Override
42+
public String getConfigurableDisplayName() {
43+
return GraphQLLanguage.INSTANCE.getDisplayName();
44+
}
45+
46+
}

src/main/com/intellij/lang/jsgraphql/ide/formatter/GraphQLFormattingModelBuilder.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,6 @@ public class GraphQLFormattingModelBuilder implements FormattingModelBuilder {
2020
@NotNull
2121
@Override
2222
public FormattingModel createModel(PsiElement element, CodeStyleSettings settings) {
23-
// TODO: Use code style settings
24-
// settings.getIndentOptions().INDENT_SIZE = 2;
25-
2623
return FormattingModelProvider.createFormattingModelForPsiFile(
2724
element.getContainingFile(),
2825
new GraphQLBlock(element.getNode(), Wrap.createWrap(WrapType.NONE, false), null),
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* Copyright (c) 2019-present, Jim Kynde Meyer
3+
* All rights reserved.
4+
* <p>
5+
* This source code is licensed under the MIT license found in the
6+
* LICENSE file in the root directory of this source tree.
7+
*/
8+
package com.intellij.lang.jsgraphql.ide.formatter;
9+
10+
import com.intellij.application.options.IndentOptionsEditor;
11+
import com.intellij.lang.Language;
12+
import com.intellij.lang.jsgraphql.GraphQLLanguage;
13+
import com.intellij.psi.codeStyle.LanguageCodeStyleSettingsProvider;
14+
import org.jetbrains.annotations.NotNull;
15+
import org.jetbrains.annotations.Nullable;
16+
17+
public class GraphQLLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSettingsProvider {
18+
19+
private static final String SAMPLE = "query Hero($episode: Episode!, $withFriends: Boolean!) {\n" +
20+
" hero(episode: $episode) {\n" +
21+
" name\n" +
22+
" ...HeroDetails\n" +
23+
" acquaintances: friends @include(if: $withFriends) {\n" +
24+
" name\n" +
25+
" }\n" +
26+
" }\n" +
27+
"}";
28+
29+
@NotNull
30+
@Override
31+
public Language getLanguage() {
32+
return GraphQLLanguage.INSTANCE;
33+
}
34+
35+
@Nullable
36+
@Override
37+
public IndentOptionsEditor getIndentOptionsEditor() {
38+
return new IndentOptionsEditor();
39+
}
40+
41+
@Override
42+
public String getCodeSample(@NotNull SettingsType settingsType) {
43+
return SAMPLE;
44+
}
45+
46+
}

0 commit comments

Comments
 (0)