[JSONSerialization] Compact output for empty objects and arrays

Now, they are represented as `{}` and `[]` instead of:
  {

  }
and
  [

  ]
This commit is contained in:
Rintaro Ishizaki
2018-01-30 15:13:33 +09:00
parent 4087cff99d
commit d48a2a4071
3 changed files with 74 additions and 205 deletions

View File

@@ -20,9 +20,6 @@ using namespace swift;
unsigned Output::beginArray() { unsigned Output::beginArray() {
StateStack.push_back(ArrayFirstValue); StateStack.push_back(ArrayFirstValue);
Stream << '['; Stream << '[';
if (PrettyPrint) {
Stream << '\n';
}
return 0; return 0;
} }
@@ -30,11 +27,11 @@ bool Output::preflightElement(unsigned, void *&) {
if (StateStack.back() != ArrayFirstValue) { if (StateStack.back() != ArrayFirstValue) {
assert(StateStack.back() == ArrayOtherValue && "We must be in a sequence!"); assert(StateStack.back() == ArrayOtherValue && "We must be in a sequence!");
Stream << ','; Stream << ',';
if (PrettyPrint)
Stream << '\n';
} }
if (PrettyPrint) if (PrettyPrint) {
Stream << '\n';
indent(); indent();
}
return true; return true;
} }
@@ -46,8 +43,9 @@ void Output::postflightElement(void*) {
} }
void Output::endArray() { void Output::endArray() {
bool HadContent = StateStack.back() != ArrayFirstValue;
StateStack.pop_back(); StateStack.pop_back();
if (PrettyPrint) { if (PrettyPrint && HadContent) {
Stream << '\n'; Stream << '\n';
indent(); indent();
} }
@@ -66,13 +64,12 @@ bool Output::canElideEmptyArray() {
void Output::beginObject() { void Output::beginObject() {
StateStack.push_back(ObjectFirstKey); StateStack.push_back(ObjectFirstKey);
Stream << "{"; Stream << "{";
if (PrettyPrint)
Stream << '\n';
} }
void Output::endObject() { void Output::endObject() {
bool HadContent = StateStack.back() != ObjectFirstKey;
StateStack.pop_back(); StateStack.pop_back();
if (PrettyPrint) { if (PrettyPrint && HadContent) {
Stream << '\n'; Stream << '\n';
indent(); indent();
} }
@@ -86,11 +83,11 @@ bool Output::preflightKey(const char *Key, bool Required, bool SameAsDefault,
if (StateStack.back() != ObjectFirstKey) { if (StateStack.back() != ObjectFirstKey) {
assert(StateStack.back() == ObjectOtherKey && "We must be in an object!"); assert(StateStack.back() == ObjectOtherKey && "We must be in an object!");
Stream << ','; Stream << ',';
if (PrettyPrint)
Stream << '\n';
} }
if (PrettyPrint) if (PrettyPrint) {
Stream << '\n';
indent(); indent();
}
Stream << '"' << Key << "\":"; Stream << '"' << Key << "\":";
if (PrettyPrint) if (PrettyPrint)
Stream << ' '; Stream << ' ';

View File

@@ -18,16 +18,12 @@
"layout": [ "layout": [
{ {
"kind": "AttributeList", "kind": "AttributeList",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
"kind": "DeclModifier", "kind": "DeclModifier",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
@@ -65,9 +61,7 @@
"kind": "identifier", "kind": "identifier",
"text": "A" "text": "A"
}, },
"leadingTrivia": [ "leadingTrivia": [],
],
"trailingTrivia": [ "trailingTrivia": [
{ {
"kind": "Space", "kind": "Space",
@@ -78,23 +72,17 @@
}, },
{ {
"kind": "GenericParameterClause", "kind": "GenericParameterClause",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
"kind": "TypeInheritanceClause", "kind": "TypeInheritanceClause",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
"kind": "GenericWhereClause", "kind": "GenericWhereClause",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
@@ -104,19 +92,13 @@
"tokenKind": { "tokenKind": {
"kind": "l_brace" "kind": "l_brace"
}, },
"leadingTrivia": [ "leadingTrivia": [],
"trailingTrivia": [],
],
"trailingTrivia": [
],
"presence": "Present" "presence": "Present"
}, },
{ {
"kind": "DeclList", "kind": "DeclList",
"layout": [ "layout": [],
],
"presence": "Present" "presence": "Present"
}, },
{ {
@@ -129,9 +111,7 @@
"value": 1 "value": 1
} }
], ],
"trailingTrivia": [ "trailingTrivia": [],
],
"presence": "Present" "presence": "Present"
} }
], ],
@@ -144,12 +124,8 @@
"tokenKind": { "tokenKind": {
"kind": "semi" "kind": "semi"
}, },
"leadingTrivia": [ "leadingTrivia": [],
"trailingTrivia": [],
],
"trailingTrivia": [
],
"presence": "Missing" "presence": "Missing"
} }
], ],
@@ -163,16 +139,12 @@
"layout": [ "layout": [
{ {
"kind": "AttributeList", "kind": "AttributeList",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
"kind": "DeclModifier", "kind": "DeclModifier",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
@@ -198,9 +170,7 @@
"kind": "identifier", "kind": "identifier",
"text": "B" "text": "B"
}, },
"leadingTrivia": [ "leadingTrivia": [],
],
"trailingTrivia": [ "trailingTrivia": [
{ {
"kind": "Space", "kind": "Space",
@@ -211,23 +181,17 @@
}, },
{ {
"kind": "GenericParameterClause", "kind": "GenericParameterClause",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
"kind": "TypeInheritanceClause", "kind": "TypeInheritanceClause",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
"kind": "GenericWhereClause", "kind": "GenericWhereClause",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
@@ -237,19 +201,13 @@
"tokenKind": { "tokenKind": {
"kind": "l_brace" "kind": "l_brace"
}, },
"leadingTrivia": [ "leadingTrivia": [],
"trailingTrivia": [],
],
"trailingTrivia": [
],
"presence": "Present" "presence": "Present"
}, },
{ {
"kind": "DeclList", "kind": "DeclList",
"layout": [ "layout": [],
],
"presence": "Present" "presence": "Present"
}, },
{ {
@@ -262,9 +220,7 @@
"value": 1 "value": 1
} }
], ],
"trailingTrivia": [ "trailingTrivia": [],
],
"presence": "Present" "presence": "Present"
} }
], ],
@@ -277,12 +233,8 @@
"tokenKind": { "tokenKind": {
"kind": "semi" "kind": "semi"
}, },
"leadingTrivia": [ "leadingTrivia": [],
"trailingTrivia": [],
],
"trailingTrivia": [
],
"presence": "Missing" "presence": "Missing"
} }
], ],
@@ -307,9 +259,7 @@
"value": 1 "value": 1
} }
], ],
"trailingTrivia": [ "trailingTrivia": [],
],
"presence": "Present" "presence": "Present"
} }
], ],

View File

@@ -18,16 +18,12 @@
"layout": [ "layout": [
{ {
"kind": "AttributeList", "kind": "AttributeList",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
"kind": "DeclModifier", "kind": "DeclModifier",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
@@ -65,9 +61,7 @@
"kind": "identifier", "kind": "identifier",
"text": "Foo" "text": "Foo"
}, },
"leadingTrivia": [ "leadingTrivia": [],
],
"trailingTrivia": [ "trailingTrivia": [
{ {
"kind": "Space", "kind": "Space",
@@ -78,23 +72,17 @@
}, },
{ {
"kind": "GenericParameterClause", "kind": "GenericParameterClause",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
"kind": "TypeInheritanceClause", "kind": "TypeInheritanceClause",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
"kind": "GenericWhereClause", "kind": "GenericWhereClause",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
@@ -104,12 +92,8 @@
"tokenKind": { "tokenKind": {
"kind": "l_brace" "kind": "l_brace"
}, },
"leadingTrivia": [ "leadingTrivia": [],
"trailingTrivia": [],
],
"trailingTrivia": [
],
"presence": "Present" "presence": "Present"
}, },
{ {
@@ -120,16 +104,12 @@
"layout": [ "layout": [
{ {
"kind": "AttributeList", "kind": "AttributeList",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
"kind": "ModifierList", "kind": "ModifierList",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
@@ -168,9 +148,7 @@
"kind": "identifier", "kind": "identifier",
"text": "bar" "text": "bar"
}, },
"leadingTrivia": [ "leadingTrivia": [],
],
"trailingTrivia": [ "trailingTrivia": [
{ {
"kind": "Space", "kind": "Space",
@@ -189,9 +167,7 @@
"tokenKind": { "tokenKind": {
"kind": "colon" "kind": "colon"
}, },
"leadingTrivia": [ "leadingTrivia": [],
],
"trailingTrivia": [ "trailingTrivia": [
{ {
"kind": "Space", "kind": "Space",
@@ -208,19 +184,13 @@
"kind": "identifier", "kind": "identifier",
"text": "Int" "text": "Int"
}, },
"leadingTrivia": [ "leadingTrivia": [],
"trailingTrivia": [],
],
"trailingTrivia": [
],
"presence": "Present" "presence": "Present"
}, },
{ {
"kind": "GenericArgumentClause", "kind": "GenericArgumentClause",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
} }
], ],
@@ -231,28 +201,20 @@
}, },
{ {
"kind": "InitializerClause", "kind": "InitializerClause",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
"kind": "AccessorBlock", "kind": "AccessorBlock",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
"tokenKind": { "tokenKind": {
"kind": "comma" "kind": "comma"
}, },
"leadingTrivia": [ "leadingTrivia": [],
"trailingTrivia": [],
],
"trailingTrivia": [
],
"presence": "Missing" "presence": "Missing"
} }
], ],
@@ -269,16 +231,12 @@
"layout": [ "layout": [
{ {
"kind": "AttributeList", "kind": "AttributeList",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
"kind": "ModifierList", "kind": "ModifierList",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
@@ -317,9 +275,7 @@
"kind": "identifier", "kind": "identifier",
"text": "baz" "text": "baz"
}, },
"leadingTrivia": [ "leadingTrivia": [],
],
"trailingTrivia": [ "trailingTrivia": [
{ {
"kind": "Space", "kind": "Space",
@@ -338,9 +294,7 @@
"tokenKind": { "tokenKind": {
"kind": "colon" "kind": "colon"
}, },
"leadingTrivia": [ "leadingTrivia": [],
],
"trailingTrivia": [ "trailingTrivia": [
{ {
"kind": "Space", "kind": "Space",
@@ -357,9 +311,7 @@
"kind": "identifier", "kind": "identifier",
"text": "Array" "text": "Array"
}, },
"leadingTrivia": [ "leadingTrivia": [],
],
"trailingTrivia": [ "trailingTrivia": [
{ {
"kind": "Space", "kind": "Space",
@@ -375,9 +327,7 @@
"tokenKind": { "tokenKind": {
"kind": "l_angle" "kind": "l_angle"
}, },
"leadingTrivia": [ "leadingTrivia": [],
],
"trailingTrivia": [ "trailingTrivia": [
{ {
"kind": "Space", "kind": "Space",
@@ -400,9 +350,7 @@
"kind": "identifier", "kind": "identifier",
"text": "Int" "text": "Int"
}, },
"leadingTrivia": [ "leadingTrivia": [],
],
"trailingTrivia": [ "trailingTrivia": [
{ {
"kind": "Space", "kind": "Space",
@@ -413,9 +361,7 @@
}, },
{ {
"kind": "GenericArgumentClause", "kind": "GenericArgumentClause",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
} }
], ],
@@ -425,12 +371,8 @@
"tokenKind": { "tokenKind": {
"kind": "comma" "kind": "comma"
}, },
"leadingTrivia": [ "leadingTrivia": [],
"trailingTrivia": [],
],
"trailingTrivia": [
],
"presence": "Missing" "presence": "Missing"
} }
], ],
@@ -443,12 +385,8 @@
"tokenKind": { "tokenKind": {
"kind": "r_angle" "kind": "r_angle"
}, },
"leadingTrivia": [ "leadingTrivia": [],
"trailingTrivia": [],
],
"trailingTrivia": [
],
"presence": "Present" "presence": "Present"
} }
], ],
@@ -462,28 +400,20 @@
}, },
{ {
"kind": "InitializerClause", "kind": "InitializerClause",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
"kind": "AccessorBlock", "kind": "AccessorBlock",
"layout": [ "layout": [],
],
"presence": "Missing" "presence": "Missing"
}, },
{ {
"tokenKind": { "tokenKind": {
"kind": "comma" "kind": "comma"
}, },
"leadingTrivia": [ "leadingTrivia": [],
"trailingTrivia": [],
],
"trailingTrivia": [
],
"presence": "Missing" "presence": "Missing"
} }
], ],
@@ -512,9 +442,7 @@
"value": 6 "value": 6
} }
], ],
"trailingTrivia": [ "trailingTrivia": [],
],
"presence": "Present" "presence": "Present"
} }
], ],
@@ -527,12 +455,8 @@
"tokenKind": { "tokenKind": {
"kind": "semi" "kind": "semi"
}, },
"leadingTrivia": [ "leadingTrivia": [],
"trailingTrivia": [],
],
"trailingTrivia": [
],
"presence": "Missing" "presence": "Missing"
} }
], ],
@@ -557,9 +481,7 @@
"value": 1 "value": 1
} }
], ],
"trailingTrivia": [ "trailingTrivia": [],
],
"presence": "Present" "presence": "Present"
} }
], ],