diff --git a/plugins/editorconfig/resources/messages/EditorConfigBundle.properties b/plugins/editorconfig/resources/messages/EditorConfigBundle.properties index ce412f362914..a8f2b8b8bbe4 100644 --- a/plugins/editorconfig/resources/messages/EditorConfigBundle.properties +++ b/plugins/editorconfig/resources/messages/EditorConfigBundle.properties @@ -211,4 +211,5 @@ export.topmost.file=Topmost file (root = true) export.properties.title=Properties export.properties.standard=EditorConfig Standard export.properties.intellij=IntelliJ IDEA-specific -export.languages.title=Languages \ No newline at end of file +export.languages.title=Languages +export.comment.out.properties=Comment out properties initially \ No newline at end of file diff --git a/plugins/editorconfig/src/org/editorconfig/configmanagement/create/CreateEditorConfigAction.java b/plugins/editorconfig/src/org/editorconfig/configmanagement/create/CreateEditorConfigAction.java index cdcd3ecea511..13717ee12329 100644 --- a/plugins/editorconfig/src/org/editorconfig/configmanagement/create/CreateEditorConfigAction.java +++ b/plugins/editorconfig/src/org/editorconfig/configmanagement/create/CreateEditorConfigAction.java @@ -52,7 +52,11 @@ public class CreateEditorConfigAction extends AnAction implements DumbAware { final VirtualFile dirVFile = dir.getVirtualFile(); File outputFile = getOutputFile(dirVFile); if (!outputFile.exists()) { - if (export(outputFile, project, settings, dialog.isRoot(), dialog.getLanguages(), dialog.getPropertyKinds())) { + if (export(outputFile, project, settings, + dialog.isRoot(), + dialog.isCommentProperties(), + dialog.getLanguages(), + dialog.getPropertyKinds())) { VirtualFile outputVFile = VfsUtil.findFileByIoFile(outputFile, true); if (outputVFile != null) { OpenFileAction.openFile(outputVFile, project); @@ -109,12 +113,13 @@ public class CreateEditorConfigAction extends AnAction implements DumbAware { @NotNull Project project, @NotNull CodeStyleSettings settings, boolean isRoot, + boolean commentOutProperties, @NotNull List languages, @NotNull EditorConfigPropertyKind... propertyKinds) { try (FileOutputStream outputStream = new FileOutputStream(outputFile)) { try ( EditorConfigSettingsWriter settingsWriter = - new EditorConfigSettingsWriter(project, outputStream, settings, isRoot) + new EditorConfigSettingsWriter(project, outputStream, settings, isRoot, commentOutProperties) .forLanguages(languages) .forPropertyKinds(propertyKinds)) { settingsWriter.writeSettings(); diff --git a/plugins/editorconfig/src/org/editorconfig/configmanagement/create/CreateEditorConfigDialog.java b/plugins/editorconfig/src/org/editorconfig/configmanagement/create/CreateEditorConfigDialog.java index 48d9edeb427b..d643539d52a0 100644 --- a/plugins/editorconfig/src/org/editorconfig/configmanagement/create/CreateEditorConfigDialog.java +++ b/plugins/editorconfig/src/org/editorconfig/configmanagement/create/CreateEditorConfigDialog.java @@ -44,6 +44,10 @@ public class CreateEditorConfigDialog extends DialogWrapper { return myForm.isRoot(); } + public boolean isCommentProperties() { + return myForm.isCommentProperties(); + } + public List getLanguages() { return myForm.getSelectedLanguages(); } diff --git a/plugins/editorconfig/src/org/editorconfig/configmanagement/create/CreateEditorConfigForm.form b/plugins/editorconfig/src/org/editorconfig/configmanagement/create/CreateEditorConfigForm.form index 1ef1038fa648..b2a5a7196bd5 100644 --- a/plugins/editorconfig/src/org/editorconfig/configmanagement/create/CreateEditorConfigForm.form +++ b/plugins/editorconfig/src/org/editorconfig/configmanagement/create/CreateEditorConfigForm.form @@ -62,6 +62,15 @@ + + + + + + + + + diff --git a/plugins/editorconfig/src/org/editorconfig/configmanagement/create/CreateEditorConfigForm.java b/plugins/editorconfig/src/org/editorconfig/configmanagement/create/CreateEditorConfigForm.java index 182f6d28d758..4ac4d4dfdabb 100644 --- a/plugins/editorconfig/src/org/editorconfig/configmanagement/create/CreateEditorConfigForm.java +++ b/plugins/editorconfig/src/org/editorconfig/configmanagement/create/CreateEditorConfigForm.java @@ -21,8 +21,9 @@ public class CreateEditorConfigForm { private JBCheckBox myStandardPropertiesCb; private JBCheckBox myIntelliJPropertiesCb; private JBCheckBox myRootCb; - private JPanel myPropertiesPanel; - private JPanel myLanguagesPanel; + private JPanel myPropertiesPanel; + private JPanel myLanguagesPanel; + private JBCheckBox myCommentProperties; private final List myLanguageCheckBoxes; @@ -34,6 +35,7 @@ public class CreateEditorConfigForm { myLanguagesPanel.setLayout(new BoxLayout(myLanguagesPanel, BoxLayout.X_AXIS)); myLanguageCheckBoxes = creteLanguageCheckBoxes(myLanguagesPanel); setLanguagePanelEnabled(false); + myCommentProperties.setEnabled(false); myIntelliJPropertiesCb.addActionListener(new LanguagePanelEnabler()); myStandardPropertiesCb.addActionListener(new LanguagePanelEnabler()); } @@ -41,7 +43,9 @@ public class CreateEditorConfigForm { private class LanguagePanelEnabler implements ActionListener { @Override public void actionPerformed(ActionEvent e) { - setLanguagePanelEnabled(myIntelliJPropertiesCb.isSelected() || myStandardPropertiesCb.isSelected()); + final boolean addProperties = myIntelliJPropertiesCb.isSelected() || myStandardPropertiesCb.isSelected(); + setLanguagePanelEnabled(addProperties); + myCommentProperties.setEnabled(addProperties); } } @@ -106,6 +110,10 @@ public class CreateEditorConfigForm { .map(rec -> rec.myLanguage).collect(Collectors.toList()); } + public boolean isCommentProperties() { + return myCommentProperties.isSelected(); + } + private static class LanguageCheckBoxRec { private final Language myLanguage; private final JCheckBox myCheckBox; diff --git a/plugins/editorconfig/src/org/editorconfig/configmanagement/export/EditorConfigExporter.java b/plugins/editorconfig/src/org/editorconfig/configmanagement/export/EditorConfigExporter.java index 510369423685..18f28122aaf7 100644 --- a/plugins/editorconfig/src/org/editorconfig/configmanagement/export/EditorConfigExporter.java +++ b/plugins/editorconfig/src/org/editorconfig/configmanagement/export/EditorConfigExporter.java @@ -17,7 +17,7 @@ public class EditorConfigExporter extends SchemeExporter { @NotNull CodeStyleScheme scheme, @NotNull OutputStream outputStream) throws Exception { final CodeStyleSettings settings = scheme.getCodeStyleSettings(); - try (EditorConfigSettingsWriter writer = new EditorConfigSettingsWriter(project, outputStream, settings, false)) { + try (EditorConfigSettingsWriter writer = new EditorConfigSettingsWriter(project, outputStream, settings, false, false)) { writer.writeSettings(); } } diff --git a/plugins/editorconfig/src/org/editorconfig/configmanagement/export/EditorConfigSettingsWriter.java b/plugins/editorconfig/src/org/editorconfig/configmanagement/export/EditorConfigSettingsWriter.java index 499d25d34dbc..029ccd69c5c2 100644 --- a/plugins/editorconfig/src/org/editorconfig/configmanagement/export/EditorConfigSettingsWriter.java +++ b/plugins/editorconfig/src/org/editorconfig/configmanagement/export/EditorConfigSettingsWriter.java @@ -33,6 +33,7 @@ public class EditorConfigSettingsWriter extends OutputStreamWriter { private final @Nullable Project myProject; private final Map myGeneralOptions = new HashMap<>(); private final boolean myAddRootFlag; + private final boolean myCommentOutProperties; private final static Comparator PAIR_COMPARATOR = (pair1, pair2) -> { EditorConfigPropertyKind pKind1 = getPropertyKind(pair1.getKey()); @@ -46,11 +47,16 @@ public class EditorConfigSettingsWriter extends OutputStreamWriter { private final Set myPropertyKinds = EnumSet.allOf(EditorConfigPropertyKind.class); // endregion - public EditorConfigSettingsWriter(@Nullable Project project, @NotNull OutputStream out, CodeStyleSettings settings, boolean isRoot) { + public EditorConfigSettingsWriter(@Nullable Project project, + @NotNull OutputStream out, + CodeStyleSettings settings, + boolean isRoot, + boolean commentOutProperties) { super(out, StandardCharsets.UTF_8); mySettings = settings; myProject = project; myAddRootFlag = isRoot; + myCommentOutProperties = commentOutProperties; fillGeneralOptions(); } @@ -97,7 +103,7 @@ public class EditorConfigSettingsWriter extends OutputStreamWriter { public void writeSettings() throws IOException { if (myAddRootFlag) { - writeProperties(Collections.singletonList(new OutPair("root", "true"))); + writeProperties(Collections.singletonList(new OutPair("root", "true")), false); write("\n"); } writeGeneralSection(); @@ -130,7 +136,7 @@ public class EditorConfigSettingsWriter extends OutputStreamWriter { .map(key -> new OutPair(key, myGeneralOptions.get(key))) .filter(pair -> isNameAllowed(pair.getKey())) .sorted(PAIR_COMPARATOR).collect(Collectors.toList()); - writeProperties(pairs); + writeProperties(pairs, myCommentOutProperties); } private boolean writeLangSection(@NotNull LanguageCodeStylePropertyMapper mapper, @Nullable String pattern) throws IOException { @@ -142,7 +148,7 @@ public class EditorConfigSettingsWriter extends OutputStreamWriter { write("\n[" + pattern + "]\n"); } Collections.sort(optionValueList, PAIR_COMPARATOR); - writeProperties(optionValueList); + writeProperties(optionValueList, myCommentOutProperties); return true; } } @@ -185,8 +191,11 @@ public class EditorConfigSettingsWriter extends OutputStreamWriter { return value != null && !value.trim().isEmpty(); } - private void writeProperties(@NotNull List outPairs) throws IOException { + private void writeProperties(@NotNull List outPairs, boolean commentOut) throws IOException { for (OutPair pair : outPairs) { + if (commentOut) { + write("# "); + } write(pair.getKey() + " = " + pair.getVal() + "\n"); } } diff --git a/plugins/editorconfig/test/org/editorconfig/configmanagement/export/EditorConfigExportTest.java b/plugins/editorconfig/test/org/editorconfig/configmanagement/export/EditorConfigExportTest.java index e2846ba58a29..e6be7466de7f 100644 --- a/plugins/editorconfig/test/org/editorconfig/configmanagement/export/EditorConfigExportTest.java +++ b/plugins/editorconfig/test/org/editorconfig/configmanagement/export/EditorConfigExportTest.java @@ -17,7 +17,7 @@ public class EditorConfigExportTest extends LightPlatformTestCase { setting.LINE_SEPARATOR = LineSeparator.CRLF.getSeparatorString(); ByteArrayOutputStream output = new ByteArrayOutputStream(); try (EditorConfigSettingsWriter writer = - new EditorConfigSettingsWriter(getProject(), output, setting, false) + new EditorConfigSettingsWriter(getProject(), output, setting, false, false) .forLanguages(EditorConfigLanguage.INSTANCE, XMLLanguage.INSTANCE)) { writer.writeSettings(); } @@ -59,7 +59,7 @@ public class EditorConfigExportTest extends LightPlatformTestCase { CodeStyleSettings setting = CodeStyleSettings.getDefaults().clone(); setting.LINE_SEPARATOR = LineSeparator.CRLF.getSeparatorString(); ByteArrayOutputStream output = new ByteArrayOutputStream(); - try (EditorConfigSettingsWriter writer = new EditorConfigSettingsWriter(getProject(), output, setting, false) + try (EditorConfigSettingsWriter writer = new EditorConfigSettingsWriter(getProject(), output, setting, false, false) .forLanguages(EditorConfigLanguage.INSTANCE, XMLLanguage.INSTANCE) .forPropertyKinds(EditorConfigPropertyKind.EDITOR_CONFIG_STANDARD)) { writer.writeSettings(); @@ -83,7 +83,7 @@ public class EditorConfigExportTest extends LightPlatformTestCase { setting.LINE_SEPARATOR = LineSeparator.CRLF.getSeparatorString(); ByteArrayOutputStream output = new ByteArrayOutputStream(); try (EditorConfigSettingsWriter writer = - new EditorConfigSettingsWriter(getProject(), output, setting, true) + new EditorConfigSettingsWriter(getProject(), output, setting, true, false) .forLanguages(EditorConfigLanguage.INSTANCE) .forPropertyKinds(EditorConfigPropertyKind.EDITOR_CONFIG_STANDARD)) { writer.writeSettings(); @@ -104,4 +104,30 @@ public class EditorConfigExportTest extends LightPlatformTestCase { result); } + public void testCommentedOut() throws IOException { + CodeStyleSettings setting = CodeStyleSettings.getDefaults().clone(); + setting.LINE_SEPARATOR = LineSeparator.CRLF.getSeparatorString(); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + try (EditorConfigSettingsWriter writer = + new EditorConfigSettingsWriter(getProject(), output, setting, true, true) + .forLanguages(EditorConfigLanguage.INSTANCE) + .forPropertyKinds(EditorConfigPropertyKind.EDITOR_CONFIG_STANDARD)) { + writer.writeSettings(); + } + String result = output.toString("UTF-8"); + assertEquals( + "root = true\n" + + "\n" + + "[*]\n" + + "# charset = utf-8\n" + + "# end_of_line = crlf\n" + + "# indent_size = 4\n" + + "# indent_style = space\n" + + "# insert_final_newline = false\n" + + "# max_line_length = 120\n" + + "# tab_width = 4\n", + + result); + } + }