diff --git a/json/src/com/intellij/json/editor/JsonEnterHandler.java b/json/src/com/intellij/json/editor/JsonEnterHandler.java index 53a2a0470224..2d3758acf200 100644 --- a/json/src/com/intellij/json/editor/JsonEnterHandler.java +++ b/json/src/com/intellij/json/editor/JsonEnterHandler.java @@ -59,7 +59,9 @@ public class JsonEnterHandler extends EnterHandlerDelegateAdapter { private static boolean handleComma(@NotNull Ref caretOffsetRef, @NotNull PsiElement psiAtOffset, @NotNull Editor editor) { PsiElement nextSibling = psiAtOffset; + boolean hasNewlineBefore = false; while (nextSibling instanceof PsiWhiteSpace) { + hasNewlineBefore = nextSibling.getText().contains("\n"); nextSibling = nextSibling.getNextSibling(); } @@ -74,7 +76,7 @@ public class JsonEnterHandler extends EnterHandlerDelegateAdapter { if (prevSibling instanceof JsonProperty && ((JsonProperty)prevSibling).getValue() != null) { int offset = elementType == JsonElementTypes.COMMA ? nextSibling.getTextRange().getEndOffset() : prevSibling.getTextRange().getEndOffset(); if (offset < editor.getDocument().getTextLength()) { - if (elementType == JsonElementTypes.R_CURLY) { + if (elementType == JsonElementTypes.R_CURLY && hasNewlineBefore) { editor.getDocument().insertString(offset, ","); offset++; } diff --git a/json/tests/test/com/intellij/json/JsonTypingHandlingTest.java b/json/tests/test/com/intellij/json/JsonTypingHandlingTest.java index c95c40ccbd93..0bbbc049c48e 100644 --- a/json/tests/test/com/intellij/json/JsonTypingHandlingTest.java +++ b/json/tests/test/com/intellij/json/JsonTypingHandlingTest.java @@ -43,7 +43,7 @@ public class JsonTypingHandlingTest extends JsonTestCase { // JsonEnterHandler public void testEnterAfterProperty() { - doTestEnter("{\"a\": true}", "{\"a\": true,\n}"); + doTestEnter("{\"a\": true\n}", "{\"a\": true,\n \n}"); } public void testEnterMidProperty() { doTestEnter("{\"a\": true}", "{\"a\": true,\n}"); @@ -55,7 +55,7 @@ public class JsonTypingHandlingTest extends JsonTestCase { doTestEnter("{\"a\": {} \"b\": 5}", "{\"a\": {\n \n}, \"b\": 5}"); } public void testEnterAfterObject() { - doTestEnter("{\"a\": {}}", "{\"a\": {},\n}"); + doTestEnter("{\"a\": {}\n}", "{\"a\": {},\n \n}"); } // JsonTypedHandler @@ -158,4 +158,11 @@ public class JsonTypingHandlingTest extends JsonTestCase { public void testAddCommaWithPairedQuotes() { testWithPairQuotes(true, () -> doTypingTest("\"ccc\": \"", "{\"aaa\": \"bbb\"}", "{\"ccc\": \"\",\"aaa\": \"bbb\"}", "json")); } + + public void testNoCommaIfRBraceAndNoNewline() { + doTestEnter("{\n" + + " \"x\": 5}\n", "{\n" + + " \"x\": 5\n" + + "}\n"); + } }