Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(yaml): do not put singleline values on a separate line from the key #4916

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
126 changes: 97 additions & 29 deletions src/language-yaml/printer-yaml.js
Expand Up @@ -348,36 +348,52 @@ function _print(node, parentNode, path, options, print) {
": ",
align(2, value)
])
: conditionalGroup([
concat([
group(
concat([ifBreak("? "), group(align(2, key), { id: groupId })])
),
ifBreak(
concat([hardline, ": ", align(2, value)]),
indent(
concat([
needsSpaceInFrontOfMappingValue(node) ? " " : "",
":",
hasLeadingComments(node.value.node) ||
(parentNode.type === "mapping" &&
hasTrailingComments(node.key.node) &&
isInlineNode(node.value.node)) ||
((node.value.node.type === "mapping" ||
node.value.node.type === "sequence") &&
node.value.node.tag.type === "null" &&
node.value.node.anchor.type === "null")
? hardline
: node.value.node.type === "null"
? ""
: line,
value
])
),
{ groupId }
)
: // force singleline
isSingleLineNode(node.key.node) &&
!hasLeadingComments(node.key.node) &&
!hasMiddleComments(node.key.node) &&
!hasTrailingComments(node.key.node) &&
!hasEndComments(node.key) &&
!hasLeadingComments(node.value.node) &&
!hasMiddleComments(node.value.node) &&
!hasEndComments(node.value) &&
isAbsolutelyPrintedAsSingleLineNode(node.value.node, options)
? concat([
key,
needsSpaceInFrontOfMappingValue(node) ? " " : "",
": ",
value
])
]);
: conditionalGroup([
concat([
group(
concat([ifBreak("? "), group(align(2, key), { id: groupId })])
),
ifBreak(
concat([hardline, ": ", align(2, value)]),
indent(
concat([
needsSpaceInFrontOfMappingValue(node) ? " " : "",
":",
hasLeadingComments(node.value.node) ||
(parentNode.type === "mapping" &&
hasTrailingComments(node.key.node) &&
isInlineNode(node.value.node)) ||
((node.value.node.type === "mapping" ||
node.value.node.type === "sequence") &&
node.value.node.tag.type === "null" &&
node.value.node.anchor.type === "null")
? hardline
: node.value.node.type === "null"
? ""
: line,
value
])
),
{ groupId }
)
])
]);
}
case "flowMapping":
case "flowSequence": {
Expand Down Expand Up @@ -462,6 +478,58 @@ function isInlineNode(node) {
}
}

function isSingleLineNode(node) {
switch (node.type) {
case "plain":
case "quoteDouble":
case "quoteSingle":
return node.position.start.line === node.position.end.line;
case "alias":
return true;
default:
return false;
}
}

function isAbsolutelyPrintedAsSingleLineNode(node, options) {
switch (node.type) {
case "plain":
case "quoteSingle":
case "quoteDouble":
break;
case "alias":
return true;
default:
return false;
}

if (options.proseWrap === "preserve") {
return node.position.start.line === node.position.end.line;
}

if (
// backslash-newline
/\\$/m.test(
options.originalText.slice(
node.position.start.offset,
node.position.end.offset
)
)
) {
return false;
}

switch (options.proseWrap) {
case "never":
return node.value.indexOf("\n") === -1;
case "always":
return !/[\n ]/.test(node.value);
// istanbul ignore next
default:
return false;
}
}

function needsSpaceInFrontOfMappingValue(node) {
// istanbul ignore else
if (node.key.type !== "null") {
Expand Down
27 changes: 9 additions & 18 deletions tests/yaml_flow_mapping/__snapshots__/jsfmt.spec.js.snap
Expand Up @@ -571,12 +571,9 @@ exports[`long-key-long-value.yml - yaml-verify 1`] = `
{longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong1: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong2: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong3: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong1:
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong2:
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong3:
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong1: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong2: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong3: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
}

`;
Expand All @@ -585,12 +582,9 @@ exports[`long-key-long-value.yml - yaml-verify 2`] = `
{longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong1: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong2: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong3: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong1:
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong2:
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong3:
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong1: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong2: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong3: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
}

`;
Expand All @@ -599,12 +593,9 @@ exports[`long-key-long-value.yml - yaml-verify 3`] = `
{longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong1: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong2: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong3: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong1:
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong2:
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong3:
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong1: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong2: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong3: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
}

`;
Expand Down
27 changes: 9 additions & 18 deletions tests/yaml_flow_sequence/__snapshots__/jsfmt.spec.js.snap
Expand Up @@ -562,12 +562,9 @@ exports[`long-key-long-value.yml - yaml-verify 1`] = `
[longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong:
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong:
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong:
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
]

`;
Expand All @@ -576,12 +573,9 @@ exports[`long-key-long-value.yml - yaml-verify 2`] = `
[longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong:
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong:
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong:
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
]

`;
Expand All @@ -590,12 +584,9 @@ exports[`long-key-long-value.yml - yaml-verify 3`] = `
[longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong:
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong:
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong:
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglong,
]

`;
Expand Down
18 changes: 6 additions & 12 deletions tests/yaml_mapping/__snapshots__/jsfmt.spec.js.snap
Expand Up @@ -107,8 +107,7 @@ key1: value
key2: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
key1: value
key2:
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong
key2: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong

`;

Expand All @@ -117,8 +116,7 @@ key1: value
key2: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
key1: value
key2:
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong
key2: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong

`;

Expand All @@ -131,10 +129,8 @@ exports[`explicit-key.yml - yaml-verify 1`] = `
: value
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
key1: value
key2:
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong
? longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong
: value
key2: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong: value

`;

Expand All @@ -147,10 +143,8 @@ exports[`explicit-key.yml - yaml-verify 2`] = `
: value
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
key1: value
key2:
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong
? longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong
: value
key2: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong
longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong: value

`;

Expand Down
77 changes: 77 additions & 0 deletions tests/yaml_plain/__snapshots__/jsfmt.spec.js.snap
@@ -1,5 +1,82 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`force-singleline-in-mapping-value.yml - yaml-verify 1`] = `
no-whitesapce: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong

whitespace: longlonglonglonglonglonglonglonglonglonglong longlonglonglonglonglonglonglonglonglonglong

literal-newline: longlonglonglonglonglonglonglonglonglonglong
longlonglonglonglonglonglonglonglonglonglong

newline: longlonglonglonglonglonglonglonglonglonglong

longlonglonglonglonglonglonglonglonglonglong
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
no-whitesapce: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong

whitespace: longlonglonglonglonglonglonglonglonglonglong longlonglonglonglonglonglonglonglonglonglong

literal-newline: longlonglonglonglonglonglonglonglonglonglong
longlonglonglonglonglonglonglonglonglonglong

newline: longlonglonglonglonglonglonglonglonglonglong

longlonglonglonglonglonglonglonglonglonglong

`;

exports[`force-singleline-in-mapping-value.yml - yaml-verify 2`] = `
no-whitesapce: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong

whitespace: longlonglonglonglonglonglonglonglonglonglong longlonglonglonglonglonglonglonglonglonglong

literal-newline: longlonglonglonglonglonglonglonglonglonglong
longlonglonglonglonglonglonglonglonglonglong

newline: longlonglonglonglonglonglonglonglonglonglong

longlonglonglonglonglonglonglonglonglonglong
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
no-whitesapce: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong

whitespace: longlonglonglonglonglonglonglonglonglonglong longlonglonglonglonglonglonglonglonglonglong

literal-newline: longlonglonglonglonglonglonglonglonglonglong longlonglonglonglonglonglonglonglonglonglong

newline: longlonglonglonglonglonglonglonglonglonglong

longlonglonglonglonglonglonglonglonglonglong

`;

exports[`force-singleline-in-mapping-value.yml - yaml-verify 3`] = `
no-whitesapce: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong

whitespace: longlonglonglonglonglonglonglonglonglonglong longlonglonglonglonglonglonglonglonglonglong

literal-newline: longlonglonglonglonglonglonglonglonglonglong
longlonglonglonglonglonglonglonglonglonglong

newline: longlonglonglonglonglonglonglonglonglonglong

longlonglonglonglonglonglonglonglonglonglong
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
no-whitesapce: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong

whitespace:
longlonglonglonglonglonglonglonglonglonglong
longlonglonglonglonglonglonglonglonglonglong

literal-newline:
longlonglonglonglonglonglonglonglonglonglong
longlonglonglonglonglonglonglonglonglonglong

newline: longlonglonglonglonglonglonglonglonglonglong

longlonglonglonglonglonglonglonglonglonglong

`;

exports[`middle-comment.yml - yaml-verify 1`] = `
!!str # comment
hello
Expand Down
10 changes: 10 additions & 0 deletions tests/yaml_plain/force-singleline-in-mapping-value.yml
@@ -0,0 +1,10 @@
no-whitesapce: longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong

whitespace: longlonglonglonglonglonglonglonglonglonglong longlonglonglonglonglonglonglonglonglonglong

literal-newline: longlonglonglonglonglonglonglonglonglonglong
longlonglonglonglonglonglonglonglonglonglong

newline: longlonglonglonglonglonglonglonglonglonglong

longlonglonglonglonglonglonglonglonglonglong