IDEA-138902 Do not omit wrapping for the first item in JSON arrays in objects
authorMikhail Golubev <mikhail.golubev@jetbrains.com>
Tue, 14 Apr 2015 12:48:19 +0000 (15:48 +0300)
committerMikhail Golubev <mikhail.golubev@jetbrains.com>
Tue, 14 Apr 2015 15:47:51 +0000 (18:47 +0300)
json/src/com/intellij/json/codeinsight/JsonStandardComplianceInspection.java
json/src/com/intellij/json/formatter/JsonBlock.java
json/tests/test/com/intellij/json/JsonFormattingTest.java
json/tests/testData/formatting/ObjectsWithSingleProperty.json [new file with mode: 0644]
json/tests/testData/formatting/ObjectsWithSingleProperty_after.json [new file with mode: 0644]
json/tests/testData/formatting/Wrapping_after.json
json/tests/testData/surround/SingleValue_after.json

index 58dab5945dfc6061cdd9abf7541bd1a35b80086d..ab31e67431fa57edd9556713faaab103a338a05f 100644 (file)
@@ -6,6 +6,7 @@ import com.intellij.codeInspection.ui.MultipleCheckboxOptionsPanel;
 import com.intellij.json.JsonBundle;
 import com.intellij.json.JsonElementTypes;
 import com.intellij.json.psi.*;
+import com.intellij.lang.ASTNode;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.text.StringUtil;
@@ -141,7 +142,9 @@ public class JsonStandardComplianceInspection extends LocalInspectionTool {
       final PsiElement element = descriptor.getPsiElement();
       if (element instanceof JsonLiteral || element instanceof JsonReferenceExpression) {
         final String content = StringUtil.stripQuotesAroundValue(element.getText());
-        element.replace(new JsonElementGenerator(project).createStringLiteral(content));
+        // TODO: find out better way to replace element and skip reformatting step afterwards
+        final ASTNode replacement = new JsonElementGenerator(project).createStringLiteral(content).getNode();
+        element.getParent().getNode().replaceChild(element.getNode(), replacement);
       }
       else if (element != null) {
         LOG.error("Quick fix was applied to unexpected element", element.getText(), element.getParent().getText());
index b57a366de1cfdaac28ac62d009fc0485e7fbcda6..174e1607f0100fdf2e5019972a302003efa31a5a 100644 (file)
@@ -12,7 +12,6 @@ import com.intellij.psi.PsiElement;
 import com.intellij.psi.TokenType;
 import com.intellij.psi.codeStyle.CodeStyleSettings;
 import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
-import com.intellij.psi.formatter.FormatterUtil;
 import com.intellij.psi.tree.TokenSet;
 import com.intellij.util.Function;
 import com.intellij.util.containers.ContainerUtil;
@@ -119,9 +118,7 @@ public class JsonBlock implements ASTBlock {
       }
       else if (!hasElementType(childNode, JSON_ALL_BRACES)) {
         assert myChildWrap != null;
-        if (!FormatterUtil.isPrecededBy(childNode, JSON_OPEN_BRACES)) {
-          wrap = myChildWrap;
-        }
+        wrap = myChildWrap;
         indent = Indent.getNormalIndent();
       }
       else if (hasElementType(childNode, JSON_OPEN_BRACES)) {
index ff2b8a915eaf78f225d1684d4726c4b195c75c90..f8d8d55f0691d46f9b586f84c41e58aed83ffd30 100644 (file)
@@ -101,6 +101,16 @@ public class JsonFormattingTest extends FormatterTestCase {
     });
   }
 
+  // IDEA-138902
+  public void testObjectsWithSingleProperty() throws Exception {
+    withPreservedSettings(new ThrowableRunnable<Exception>() {
+      @Override
+      public void run() throws Exception {
+        doTest();
+      }
+    });
+  }
+
   // Moved from JavaScript
 
   public void testWeb3830() throws Exception {
diff --git a/json/tests/testData/formatting/ObjectsWithSingleProperty.json b/json/tests/testData/formatting/ObjectsWithSingleProperty.json
new file mode 100644 (file)
index 0000000..a75a8d3
--- /dev/null
@@ -0,0 +1 @@
+{"level0": {"level1": {"level2": "someValue"}}}
\ No newline at end of file
diff --git a/json/tests/testData/formatting/ObjectsWithSingleProperty_after.json b/json/tests/testData/formatting/ObjectsWithSingleProperty_after.json
new file mode 100644 (file)
index 0000000..fe42890
--- /dev/null
@@ -0,0 +1,7 @@
+{
+  "level0": {
+    "level1": {
+      "level2": "someValue"
+    }
+  }
+}
\ No newline at end of file
index f6f41b61f43b3a00740de3ef501338e7b4ca3f61..e53138a182deeaa75247b19325d1fd9da29db0f7 100644 (file)
@@ -8,5 +8,7 @@
   5,
   6,
   7,
-  ["this line is long too"]
+  [
+    "this line is long too"
+  ]
 ]
\ No newline at end of file
index 440c9ce72ee78438bafec518d485dc9230eeac66..876ab8e46e6616b41dd496c6d433aafbdd6847a1 100644 (file)
@@ -1,3 +1,5 @@
 {
-  "<selection>property</selection>": [null]
+  "<selection>property</selection>": [
+    null
+  ]
 }
\ No newline at end of file