diff --git a/json/src/com/intellij/json/JsonBundle.properties b/json/src/com/intellij/json/JsonBundle.properties
index e6022beb72a2..23321a4807e3 100644
--- a/json/src/com/intellij/json/JsonBundle.properties
+++ b/json/src/com/intellij/json/JsonBundle.properties
@@ -25,9 +25,7 @@ inspection.duplicate.keys.name=Duplicate keys in object literals
inspection.duplicate.keys.msg.duplicate.keys=Object contains duplicate keys "{0}"
# Formatter
-formatter.other.tab.group.title=Formatting options
-formatter.other.tab.label.align.properties=Align object &properties:
-formatter.other.tab.remove.trailing.comma=Remove trailing &comma
+formatter.align.properties.caption=Align
formatter.align.properties.none=Do not align
formatter.align.properties.on.colon=On colon
diff --git a/json/src/com/intellij/json/formatter/JsonCodeStylePanel.form b/json/src/com/intellij/json/formatter/JsonCodeStylePanel.form
deleted file mode 100644
index cdd5b2afc5f5..000000000000
--- a/json/src/com/intellij/json/formatter/JsonCodeStylePanel.form
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
diff --git a/json/src/com/intellij/json/formatter/JsonCodeStylePanel.java b/json/src/com/intellij/json/formatter/JsonCodeStylePanel.java
deleted file mode 100644
index 0b2f593dbbda..000000000000
--- a/json/src/com/intellij/json/formatter/JsonCodeStylePanel.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package com.intellij.json.formatter;
-
-import com.intellij.application.options.CodeStyleAbstractPanel;
-import com.intellij.json.JsonFileType;
-import com.intellij.json.JsonLanguage;
-import com.intellij.json.formatter.JsonCodeStyleSettings.PropertyAlignment;
-import com.intellij.openapi.editor.colors.EditorColorsScheme;
-import com.intellij.openapi.editor.highlighter.EditorHighlighter;
-import com.intellij.openapi.editor.highlighter.EditorHighlighterFactory;
-import com.intellij.openapi.fileTypes.FileType;
-import com.intellij.openapi.options.ConfigurationException;
-import com.intellij.psi.codeStyle.CodeStyleSettings;
-import com.intellij.testFramework.LightVirtualFile;
-import com.intellij.ui.ListCellRendererWrapper;
-import com.intellij.ui.components.JBCheckBox;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import javax.swing.*;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-
-/**
- * @author Mikhail Golubev
- */
-public class JsonCodeStylePanel extends CodeStyleAbstractPanel {
- public static final String ALIGNMENT_SAMPLE = "{\n" +
- " \"foo\": {\n" +
- " \"bar\": true,\n" +
- " \"baz\": false\n" +
- " },\n" +
- " \"quux\": [\n" +
- " 1, 2.0, 3e0, 4.0e0\n" +
- " ],\n" +
- " \"longPropertyName\": null\n" +
- "}";
-
- private JComboBox myPropertiesAlignmentCombo;
- private JPanel myPreviewPanel;
- private JPanel myPanel;
- private JBCheckBox myRemoveTrailingCommaCheckbox;
-
- @SuppressWarnings("unchecked")
- public JsonCodeStylePanel(@NotNull CodeStyleSettings settings) {
- super(JsonLanguage.INSTANCE, null, settings);
- addPanelToWatch(myPanel);
- installPreviewPanel(myPreviewPanel);
-
- // Initialize combo box with property value alignment types
- for (PropertyAlignment alignment : PropertyAlignment.values()) {
- myPropertiesAlignmentCombo.addItem(alignment);
- }
- myPropertiesAlignmentCombo.setRenderer(new ListCellRendererWrapper() {
- @Override
- public void customize(JList list, PropertyAlignment value, int index, boolean selected, boolean hasFocus) {
- setText(value.getDescription());
- }
- });
- myPropertiesAlignmentCombo.addItemListener(new ItemListener() {
- @Override
- public void itemStateChanged(ItemEvent e) {
- if (e.getStateChange() == ItemEvent.SELECTED) {
- somethingChanged();
- }
- }
- });
- }
-
- @Override
- protected int getRightMargin() {
- return 80;
- }
-
- @Nullable
- @Override
- protected EditorHighlighter createHighlighter(EditorColorsScheme scheme) {
- return EditorHighlighterFactory.getInstance().createEditorHighlighter(new LightVirtualFile("a.json"), scheme, null);
- }
-
- @NotNull
- @Override
- protected FileType getFileType() {
- return JsonFileType.INSTANCE;
- }
-
- @Nullable
- @Override
- protected String getPreviewText() {
- return ALIGNMENT_SAMPLE;
- }
-
- @Override
- public void apply(CodeStyleSettings settings) throws ConfigurationException {
- JsonCodeStyleSettings jsonSettings = getCustomSettings(settings);
- jsonSettings.PROPERTY_ALIGNMENT = getSelectedAlignmentType().getId();
- jsonSettings.REMOVE_TRAILING_COMMA = myRemoveTrailingCommaCheckbox.isSelected();
- }
-
- @Override
- public boolean isModified(CodeStyleSettings settings) {
- JsonCodeStyleSettings jsonSettings = getCustomSettings(settings);
- return jsonSettings.PROPERTY_ALIGNMENT != getSelectedAlignmentType().getId()
- || jsonSettings.REMOVE_TRAILING_COMMA != myRemoveTrailingCommaCheckbox.isSelected();
- }
-
- @Nullable
- @Override
- public JComponent getPanel() {
- return myPanel;
- }
-
- @Override
- protected void resetImpl(CodeStyleSettings settings) {
- JsonCodeStyleSettings jsonSettings = getCustomSettings(settings);
- myRemoveTrailingCommaCheckbox.setSelected(jsonSettings.REMOVE_TRAILING_COMMA);
- for (int i = 0; i < myPropertiesAlignmentCombo.getItemCount(); i++) {
- if (((PropertyAlignment)myPropertiesAlignmentCombo.getItemAt(i)).getId() == jsonSettings.PROPERTY_ALIGNMENT) {
- myPropertiesAlignmentCombo.setSelectedIndex(i);
- break;
- }
- }
- }
-
- @NotNull
- private PropertyAlignment getSelectedAlignmentType() {
- return (PropertyAlignment)myPropertiesAlignmentCombo.getSelectedItem();
- }
-
- @NotNull
- private JsonCodeStyleSettings getCustomSettings(@NotNull CodeStyleSettings settings) {
- return settings.getCustomSettings(JsonCodeStyleSettings.class);
- }
-}
diff --git a/json/src/com/intellij/json/formatter/JsonCodeStyleSettings.java b/json/src/com/intellij/json/formatter/JsonCodeStyleSettings.java
index 47a4895cc960..fa19c5e641e8 100644
--- a/json/src/com/intellij/json/formatter/JsonCodeStyleSettings.java
+++ b/json/src/com/intellij/json/formatter/JsonCodeStyleSettings.java
@@ -19,7 +19,7 @@ public class JsonCodeStyleSettings extends CustomCodeStyleSettings {
public boolean SPACE_AFTER_COLON = true;
public boolean SPACE_BEFORE_COLON = false;
- public boolean REMOVE_TRAILING_COMMA = true;
+ public boolean KEEP_TRAILING_COMMA = false;
// TODO: check whether it's possible to migrate CustomCodeStyleSettings to newer com.intellij.util.xmlb.XmlSerializer
/**
diff --git a/json/src/com/intellij/json/formatter/JsonCodeStyleSettingsProvider.java b/json/src/com/intellij/json/formatter/JsonCodeStyleSettingsProvider.java
index a463d3bfdcee..6a54a23351f0 100644
--- a/json/src/com/intellij/json/formatter/JsonCodeStyleSettingsProvider.java
+++ b/json/src/com/intellij/json/formatter/JsonCodeStyleSettingsProvider.java
@@ -31,7 +31,6 @@ public class JsonCodeStyleSettingsProvider extends CodeStyleSettingsProvider {
addSpacesTab(settings);
addBlankLinesTab(settings);
addWrappingAndBracesTab(settings);
- addTab(new JsonCodeStylePanel(settings));
}
};
}
diff --git a/json/src/com/intellij/json/formatter/JsonLanguageCodeStyleSettingsProvider.java b/json/src/com/intellij/json/formatter/JsonLanguageCodeStyleSettingsProvider.java
index 15636d8af88f..6e76e6768339 100644
--- a/json/src/com/intellij/json/formatter/JsonLanguageCodeStyleSettingsProvider.java
+++ b/json/src/com/intellij/json/formatter/JsonLanguageCodeStyleSettingsProvider.java
@@ -2,26 +2,40 @@ package com.intellij.json.formatter;
import com.intellij.application.options.IndentOptionsEditor;
import com.intellij.application.options.SmartIndentOptionsEditor;
+import com.intellij.json.JsonBundle;
import com.intellij.json.JsonLanguage;
import com.intellij.lang.Language;
import com.intellij.psi.codeStyle.CodeStyleSettingsCustomizable;
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
import com.intellij.psi.codeStyle.LanguageCodeStyleSettingsProvider;
+import com.intellij.util.ArrayUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.util.Arrays;
+import java.util.stream.Collectors;
+
import static com.intellij.psi.codeStyle.CodeStyleSettingsCustomizable.SPACES_OTHER;
/**
* @author Mikhail Golubev
*/
public class JsonLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSettingsProvider {
+ private static String[] ALIGN_OPTIONS = Arrays.stream(JsonCodeStyleSettings.PropertyAlignment.values())
+ .map(alignment -> alignment.getDescription())
+ .toArray(value -> new String[value]);
+
+ private static int[] ALIGN_VALUES =
+ ArrayUtil.toIntArray(Arrays.stream(JsonCodeStyleSettings.PropertyAlignment.values())
+ .map(alignment -> alignment.getId())
+ .collect(Collectors.toList()));
+
private static final String SAMPLE = "{\n" +
" \"json literals are\": {\n" +
" \"strings\": [\"foo\", \"bar\", \"\\u0062\\u0061\\u0072\"],\n" +
" \"numbers\": [42, 6.62606975e-34],\n" +
- " \"boolean values\": [true, false],\n" +
- " \"and\": {\"null\": null}\n" +
+ " \"boolean values\": [true, false,],\n" +
+ " \"objects\": {\"null\": null,\"another\": null,}\n" +
" }\n" +
"}";
@@ -45,6 +59,11 @@ public class JsonLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSett
"WRAP_ON_TYPING",
"KEEP_LINE_BREAKS",
"WRAP_LONG_LINES");
+
+ consumer.showCustomOption(JsonCodeStyleSettings.class,
+ "KEEP_TRAILING_COMMA",
+ "Trailing comma",
+ CodeStyleSettingsCustomizable.WRAPPING_KEEP);
consumer.showCustomOption(JsonCodeStyleSettings.class,
"ARRAY_WRAPPING",
@@ -60,6 +79,13 @@ public class JsonLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSett
CodeStyleSettingsCustomizable.WRAP_OPTIONS,
CodeStyleSettingsCustomizable.WRAP_VALUES);
+ consumer.showCustomOption(JsonCodeStyleSettings.class,
+ "PROPERTY_ALIGNMENT",
+ JsonBundle.message("formatter.align.properties.caption"),
+ "Objects",
+ ALIGN_OPTIONS,
+ ALIGN_VALUES);
+
}
}
diff --git a/json/src/com/intellij/json/formatter/JsonTrailingCommaRemover.java b/json/src/com/intellij/json/formatter/JsonTrailingCommaRemover.java
index 590f345fd47e..e84ce6943bc4 100644
--- a/json/src/com/intellij/json/formatter/JsonTrailingCommaRemover.java
+++ b/json/src/com/intellij/json/formatter/JsonTrailingCommaRemover.java
@@ -45,7 +45,7 @@ public class JsonTrailingCommaRemover implements PreFormatProcessor {
JsonCodeStyleSettings settings = CodeStyleSettingsManager.getInstance(rootPsi.getProject())
.getCurrentSettings()
.getCustomSettings(JsonCodeStyleSettings.class);
- if (!settings.REMOVE_TRAILING_COMMA) {
+ if (settings.KEEP_TRAILING_COMMA) {
return range;
}
PsiDocumentManager psiDocumentManager = PsiDocumentManager.getInstance(rootPsi.getProject());
diff --git a/json/tests/test/com/intellij/json/JsonFormattingTest.java b/json/tests/test/com/intellij/json/JsonFormattingTest.java
index 4233546c874c..94ef9d967d93 100644
--- a/json/tests/test/com/intellij/json/JsonFormattingTest.java
+++ b/json/tests/test/com/intellij/json/JsonFormattingTest.java
@@ -85,7 +85,6 @@ public class JsonFormattingTest extends JsonTestCase {
}
public void testRemoveTrailingCommas() {
- getCustomCodeStyleSettings().REMOVE_TRAILING_COMMA = true;
doTest();
}