code: function Property(node, print) {
    print.list(node.decorators, { separator: "" });
  
    if (node.method || node.kind === "get" || node.kind === "set") {
      this._method(node, print);
    } else {
      if (node.computed) {
        this.push("[");
        print.plain(node.key);
        this.push("]");
      } else {
        // print `({ foo: foo = 5 } = {})` as `({ foo = 5 } = {});`
        if (t.isAssignmentPattern(node.value) && t.isIdentifier(node.key) && node.key.name === node.value.left.name) {
          print.plain(node.value);
          return;
        }
  
        print.plain(node.key);
  
        // shorthand!
        if (node.shorthand && t.isIdentifier(node.key) && t.isIdentifier(node.value) && node.key.name === node.value.name) {
          return;
        }
      }
  
      this.push(":");
      this.space();
      print.plain(node.value);
    }
  }
docs: Prints Property, prints decorators, key, and value, handles kind, computed, and shorthand.