Print ObjectTypeInternalSlot with both flow/babel parsers (#4869)

* Print ObjectTypeInternalSlot with both flow/babel parsers

* chore: update to flow-parser@0.78.0

* test: update snapshot
master
Brian Ng 2018-08-08 10:21:39 -05:00 committed by Suchipi
parent 418a04bf2b
commit 1391891ef6
6 changed files with 49 additions and 7 deletions

View File

@ -32,7 +32,7 @@
"esutils": "2.0.2",
"find-parent-dir": "0.3.0",
"find-project-root": "1.1.1",
"flow-parser": "0.75.0",
"flow-parser": "0.78.0",
"get-stream": "3.0.0",
"globby": "6.1.0",
"graphql": "0.13.2",

View File

@ -1086,6 +1086,18 @@ function printPathNoParens(path, options, print, args) {
parts.push(path.call(print, "body"));
return concat(parts);
case "ObjectTypeInternalSlot":
return concat([
n.static ? "static " : "",
"[[",
path.call(print, "id"),
"]]",
printOptionalToken(path),
n.method ? "" : ": ",
path.call(print, "value")
]);
case "ObjectExpression":
case "ObjectPattern":
case "ObjectTypeAnnotation":
@ -1140,7 +1152,7 @@ function printPathNoParens(path, options, print, args) {
}
if (isTypeAnnotation) {
fields.push("indexers", "callProperties");
fields.push("indexers", "callProperties", "internalSlots");
}
fields.push(propertiesField);
@ -2414,7 +2426,8 @@ function printPathNoParens(path, options, print, args) {
let isArrowFunctionTypeAnnotation =
n.type === "TSFunctionType" ||
!(
(parent.type === "ObjectTypeProperty" &&
((parent.type === "ObjectTypeProperty" ||
parent.type === "ObjectTypeInternalSlot") &&
!getFlowVariance(parent) &&
!parent.optional &&
options.locStart(parent) === options.locStart(n)) ||
@ -5553,7 +5566,8 @@ function isMemberExpressionChain(node) {
// type T = { method(): void };
function isObjectTypePropertyAFunction(node, options) {
return (
node.type === "ObjectTypeProperty" &&
(node.type === "ObjectTypeProperty" ||
node.type === "ObjectTypeInternalSlot") &&
node.value.type === "FunctionTypeAnnotation" &&
!node.static &&
!isFunctionNotation(node, options)

View File

@ -0,0 +1,20 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`internal_slot.js - flow-verify 1`] = `
declare class C { static [[foo]]: T }
declare class C { [[foo]]: T }
interface T { [[foo]]: X }
interface T { [[foo]](): X }
type T = { [[foo]]: X }
type T = { [[foo]](): X }
type T = { [[foo]]?: X }
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
declare class C { static [[foo]]: T }
declare class C { [[foo]]: T }
interface T { [[foo]]: X }
interface T { [[foo]](): X }
type T = { [[foo]]: X };
type T = { [[foo]](): X };
type T = { [[foo]]?: X };
`;

View File

@ -0,0 +1,7 @@
declare class C { static [[foo]]: T }
declare class C { [[foo]]: T }
interface T { [[foo]]: X }
interface T { [[foo]](): X }
type T = { [[foo]]: X }
type T = { [[foo]](): X }
type T = { [[foo]]?: X }

View File

@ -0,0 +1 @@
run_spec(__dirname, ["flow", "babylon"]);

View File

@ -2377,9 +2377,9 @@ flatten@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
flow-parser@0.75.0:
version "0.75.0"
resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.75.0.tgz#9a1891c48051c73017b6b5cc07b3681fda3fdfb0"
flow-parser@0.78.0:
version "0.78.0"
resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.78.0.tgz#4ec829a97fa68cff6e97691dfff7b6ddebbc187c"
for-in@^1.0.1, for-in@^1.0.2:
version "1.0.2"