diff --git a/changelog_unreleased/graphql/18581.md b/changelog_unreleased/graphql/18581.md index e1a1b1ac7..e2d331681 100644 --- a/changelog_unreleased/graphql/18581.md +++ b/changelog_unreleased/graphql/18581.md @@ -1,4 +1,4 @@ -#### Fix comment print (#18581 by @fisker) +#### Fix crash with comment only object value (#18581 by @fisker) ```gql diff --git a/changelog_unreleased/graphql/19422.md b/changelog_unreleased/graphql/19422.md new file mode 100644 index 000000000..b8d3b6b80 --- /dev/null +++ b/changelog_unreleased/graphql/19422.md @@ -0,0 +1,23 @@ +#### Fix crash with comment only list value (#19422 by @fisker) + + +```gql +# Input +query { + a(x: [ + # only comment + ]) +} + +# Prettier stable +Error: Comment "only comment" was not printed. Please report this error! + +# Prettier main +query { + a( + x: [ + # only comment + ] + ) +} +``` diff --git a/src/language-graphql/printer-graphql.js b/src/language-graphql/printer-graphql.js index b6542974f..c9ed75645 100644 --- a/src/language-graphql/printer-graphql.js +++ b/src/language-graphql/printer-graphql.js @@ -133,16 +133,21 @@ function genericPrint(path, options, print) { case "Variable": return ["$", print("name")]; - case "ListValue": + case "ListValue": { + const isEmpty = !isNonEmptyArray(node.values); return group([ "[", - indent([ - softline, - join([ifBreak("", ", "), softline], path.map(print, "values")), - ]), + printDanglingComments(path, options, { indent: true }), + isEmpty + ? "" + : indent([ + softline, + join([ifBreak("", ", "), softline], path.map(print, "values")), + ]), softline, "]", ]); + } case "ObjectValue": { const isEmpty = !isNonEmptyArray(node.fields); diff --git a/tests/format/graphql/comments/__snapshots__/format.test.js.snap b/tests/format/graphql/comments/__snapshots__/format.test.js.snap index a5471841e..3432dcb82 100644 --- a/tests/format/graphql/comments/__snapshots__/format.test.js.snap +++ b/tests/format/graphql/comments/__snapshots__/format.test.js.snap @@ -37,6 +37,12 @@ query { } } +query { + a(x: [ + # only comment + ]) +} + =====================================output===================================== query { search( @@ -48,6 +54,14 @@ query { } } +query { + a( + x: [ + # only comment + ] + ) +} + ================================================================================ `; diff --git a/tests/format/graphql/comments/dangling.graphql b/tests/format/graphql/comments/dangling.graphql index 4d1b618ba..2aa4eba1c 100644 --- a/tests/format/graphql/comments/dangling.graphql +++ b/tests/format/graphql/comments/dangling.graphql @@ -5,3 +5,9 @@ query { id } } + +query { + a(x: [ + # only comment + ]) +}