message: Print n.variance correctly, whether string or Variance node.
diff: @@ -1191,24 +1191,29 @@ function genericPrintNoParens(path, options, print) {
  return concat(parts);
  case "ClassProperty":
  - if (n.static)
  + if (n.static) {
  parts.push("static ");
  + }
  var key = path.call(print, "key");
  +
  if (n.computed) {
  key = concat(["[", key, "]"]);
  - } else if (n.variance === "plus") {
  - key = concat(["+", key]);
  - } else if (n.variance === "minus") {
  - key = concat(["-", key]);
  }
  +
  + if (n.variance) {
  + key = concat([printVariance(path, print), key]);
  + }
  +
  parts.push(key);
  - if (n.typeAnnotation)
  + if (n.typeAnnotation) {
  parts.push(path.call(print, "typeAnnotation"));
  + }
  - if (n.value)
  + if (n.value) {
  parts.push(" = ", path.call(print, "value"));
  + }
  parts.push(";");
  return concat(parts);
  @@ -1479,12 +1484,8 @@ function genericPrintNoParens(path, options, print) {
  return path.call(print, "value");
  case "ObjectTypeIndexer":
  - var variance =
  - n.variance === "plus" ? "+" :
  - n.variance === "minus" ? "-" : "";
  -
  return concat([
  - variance,
  + printVariance(path, print),
  "[",
  path.call(print, "id"),
  ": ",
  @@ -1494,12 +1495,8 @@ function genericPrintNoParens(path, options, print) {
  ]);
  case "ObjectTypeProperty":
  - var variance =
  - n.variance === "plus" ? "+" :
  - n.variance === "minus" ? "-" : "";
  -
  return concat([
  - variance,
  + printVariance(path, print),
  path.call(print, "key"),
  n.optional ? "?" : "",
  ": ",
  @@ -1577,15 +1574,20 @@ function genericPrintNoParens(path, options, print) {
  ">"
  ]);
  + case "Variance":
  + if (n.kind === "plus") {
  + return fromString("+");
  + }
  +
  + if (n.kind === "minus") {
  + return fromString("-");
  + }
  +
  + return fromString("");
  +
  case "TypeParameter":
  - switch (n.variance) {
  - case 'plus':
  - parts.push('+');
  - break;
  - case 'minus':
  - parts.push('-');
  - break;
  - default:
  + if (n.variance) {
  + parts.push(printVariance(path, print));
  }
  parts.push(path.call(print, 'name'));
  @@ -1990,6 +1992,26 @@ function printFlowDeclaration(path, parts) {
  return concat(parts);
  }
  +function printVariance(path, print) {
  + return path.call(function (variancePath) {
  + var value = variancePath.getValue();
  +
  + if (value) {
  + if (value === "plus") {
  + return fromString("+");
  + }
  +
  + if (value === "minus") {
  + return fromString("-");
  + }
  +
  + return print(variancePath);
  + }
  +
  + return fromString("");
  + }, "variance");
  +}
  +
  function adjustClause(clause, options) {
  if (clause.length > 1)
  return concat([" ", clause]);
  