From 9a25e00732acd5f0d372dd71cecaeb2d44e435cf Mon Sep 17 00:00:00 2001 From: Maxim Kropotov Date: Wed, 5 Apr 2017 19:14:17 +0300 Subject: [PATCH] WEB-25072: get rid of 'other' code style tab for JSON --- .../com/intellij/json/JsonBundle.properties | 4 +- .../json/formatter/JsonCodeStylePanel.form | 83 ----------- .../json/formatter/JsonCodeStylePanel.java | 133 ------------------ .../json/formatter/JsonCodeStyleSettings.java | 2 +- .../JsonCodeStyleSettingsProvider.java | 1 - ...JsonLanguageCodeStyleSettingsProvider.java | 30 +++- .../formatter/JsonTrailingCommaRemover.java | 2 +- .../com/intellij/json/JsonFormattingTest.java | 1 - 8 files changed, 31 insertions(+), 225 deletions(-) delete mode 100644 json/src/com/intellij/json/formatter/JsonCodeStylePanel.form delete mode 100644 json/src/com/intellij/json/formatter/JsonCodeStylePanel.java 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(); }