Added support for the graph ql comment tag (#4395)
* Added support for the graph ql comment tag As described in the issue https://github.com/prettier/prettier/issues/4360 Prettier still adds a space inbetween the comment tag and the template literal. * Added comment explaining the random spaces around GraphQL * Fixed failing AST_COMPARE tests
This commit is contained in:
1 parent
ab452ddc38
commit
8cf591447c
4 files changed
+92
-18
No files matched your search
@@ -133,12 +133,24 @@ function clean(ast, newObj, parent) {
|
|||||||
) {
|
) {
|
||||||
newObj.quasi.quasis.forEach(quasi => delete quasi.value);
|
newObj.quasi.quasis.forEach(quasi => delete quasi.value);
|
||||||
}
|
}
|
||||||
if (
|
if (ast.type === "TemplateLiteral") {
|
||||||
ast.type === "TemplateLiteral" &&
|
// This checks for a leading comment that is exactly `/* GraphQL */`
|
||||||
parent.type === "CallExpression" &&
|
// In order to be in line with other implementations of this comment tag
|
||||||
parent.callee.name === "graphql"
|
// we will not trim the comment value and we will expect exactly one space on
|
||||||
) {
|
// either side of the GraphQL string
|
||||||
newObj.quasis.forEach(quasi => delete quasi.value);
|
// Also see ./embed.js
|
||||||
|
const hasGraphQLComment =
|
||||||
|
ast.leadingComments &&
|
||||||
|
ast.leadingComments.some(
|
||||||
|
comment =>
|
||||||
|
comment.type === "CommentBlock" && comment.value === " GraphQL "
|
||||||
|
);
|
||||||
|
if (
|
||||||
|
hasGraphQLComment ||
|
||||||
|
(parent.type === "CallExpression" && parent.callee.name === "graphql")
|
||||||
|
) {
|
||||||
|
newObj.quasis.forEach(quasi => delete quasi.value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+42
-12
@@ -48,18 +48,7 @@ function embed(path, print, textToDoc /*, options */) {
|
|||||||
* This intentionally excludes Relay Classic tags, as Prettier does not
|
* This intentionally excludes Relay Classic tags, as Prettier does not
|
||||||
* support Relay Classic formatting.
|
* support Relay Classic formatting.
|
||||||
*/
|
*/
|
||||||
if (
|
if (isGraphQL(path)) {
|
||||||
parent &&
|
|
||||||
((parent.type === "TaggedTemplateExpression" &&
|
|
||||||
((parent.tag.type === "MemberExpression" &&
|
|
||||||
parent.tag.object.name === "graphql" &&
|
|
||||||
parent.tag.property.name === "experimental") ||
|
|
||||||
(parent.tag.type === "Identifier" &&
|
|
||||||
(parent.tag.name === "gql" || parent.tag.name === "graphql")))) ||
|
|
||||||
(parent.type === "CallExpression" &&
|
|
||||||
parent.callee.type === "Identifier" &&
|
|
||||||
parent.callee.name === "graphql"))
|
|
||||||
) {
|
|
||||||
const expressionDocs = node.expressions
|
const expressionDocs = node.expressions
|
||||||
? path.map(print, "expressions")
|
? path.map(print, "expressions")
|
||||||
: [];
|
: [];
|
||||||
@@ -421,4 +410,45 @@ function isStyledExtend(node) {
|
|||||||
return /^[A-Z]/.test(node.object.name) && node.property.name === "extend";
|
return /^[A-Z]/.test(node.object.name) && node.property.name === "extend";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* react-relay and graphql-tag
|
||||||
|
* graphql`...`
|
||||||
|
* graphql.experimental`...`
|
||||||
|
* gql`...`
|
||||||
|
* GraphQL comment block
|
||||||
|
*
|
||||||
|
* This intentionally excludes Relay Classic tags, as Prettier does not
|
||||||
|
* support Relay Classic formatting.
|
||||||
|
*/
|
||||||
|
function isGraphQL(path) {
|
||||||
|
const node = path.getValue();
|
||||||
|
const parent = path.getParentNode();
|
||||||
|
|
||||||
|
// This checks for a leading comment that is exactly `/* GraphQL */`
|
||||||
|
// In order to be in line with other implementations of this comment tag
|
||||||
|
// we will not trim the comment value and we will expect exactly one space on
|
||||||
|
// either side of the GraphQL string
|
||||||
|
// Also see ./clean.js
|
||||||
|
const hasGraphQLComment =
|
||||||
|
node.leadingComments &&
|
||||||
|
node.leadingComments.some(
|
||||||
|
comment =>
|
||||||
|
comment.type === "CommentBlock" && comment.value === " GraphQL "
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
hasGraphQLComment ||
|
||||||
|
(parent &&
|
||||||
|
((parent.type === "TaggedTemplateExpression" &&
|
||||||
|
((parent.tag.type === "MemberExpression" &&
|
||||||
|
parent.tag.object.name === "graphql" &&
|
||||||
|
parent.tag.property.name === "experimental") ||
|
||||||
|
(parent.tag.type === "Identifier" &&
|
||||||
|
(parent.tag.name === "gql" || parent.tag.name === "graphql")))) ||
|
||||||
|
(parent.type === "CallExpression" &&
|
||||||
|
parent.callee.type === "Identifier" &&
|
||||||
|
parent.callee.name === "graphql")))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = embed;
|
module.exports = embed;
|
||||||
@@ -17,6 +17,29 @@ gql\`
|
|||||||
|
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
exports[`comment-tag.js 1`] = `
|
||||||
|
const query = /* GraphQL */\`
|
||||||
|
{
|
||||||
|
user( id : 5 ) {
|
||||||
|
firstName
|
||||||
|
|
||||||
|
lastName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
\`;
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
const query = /* GraphQL */ \`
|
||||||
|
{
|
||||||
|
user(id: 5) {
|
||||||
|
firstName
|
||||||
|
|
||||||
|
lastName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
\`;
|
||||||
|
|
||||||
|
`;
|
||||||
|
|
||||||
exports[`expressions.js 1`] = `
|
exports[`expressions.js 1`] = `
|
||||||
graphql(schema, \`
|
graphql(schema, \`
|
||||||
query allPartsByManufacturerName($name: String!) {
|
query allPartsByManufacturerName($name: String!) {
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
const query = /* GraphQL */`
|
||||||
|
{
|
||||||
|
user( id : 5 ) {
|
||||||
|
firstName
|
||||||
|
|
||||||
|
lastName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
Reference in new issue
Block a user