)]}'
{
  "commit": "b41eb9ce4d72f741f23c923ed7f933236a55a590",
  "tree": "72be602d543d3f2ebe4b607e537eb4fb9442c23f",
  "parents": [
    "aa4fa660f16e0e7cf4671f0324eeb58a2bac3454"
  ],
  "author": {
    "name": "Sergei Lebedev",
    "email": "slebedev@google.com",
    "time": "Mon Feb 21 21:49:06 2022 +0000"
  },
  "committer": {
    "name": "Thiago Perrotta",
    "email": "tperrotta@google.com",
    "time": "Fri Feb 24 15:26:28 2023 -0500"
  },
  "message": "Generalized the ending comma heuristic to subscripts\n\nThis commit ensures that\n\n    G[A, B, C,]\n\nis split in a similar way to\n\n    [A, B, C,]\n\ni.e.\n\n    G[\n        A,\n        B,\n        C,\n     ]\n\ninstead of\n\n    G[A, B,\n      C,]\n\nassuming A, B and C do not fit on a single line.\n\nLong subscript expressions often occur when instantiating generic classes,\nand having YAPF reformat them to a more readable multi-line variant seems\nlike a \"good thing\".\n\n---\n\nNote that the heuristic is not perfect and in particular could produce\nunexpected/verbose outputs when one of the items is itself a list with\nan ending comma, e.g.\n\n    G[[A,], B, C,]\n\nis reformatted to\n\n    G[\n        [\n            A,\n        ],\n        B,\n        C,\n    ]\n\nwhere G could be typing.Callable.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f3ba6e9b31d2d685b5538c184ad7d67110881a03",
      "old_mode": 33188,
      "old_path": "CHANGELOG",
      "new_id": "467c491f41b4bdc74b5ed826bf30e38816b5b945",
      "new_mode": 33188,
      "new_path": "CHANGELOG"
    },
    {
      "type": "modify",
      "old_id": "3fe4ade08a478896351ac11e728639204412ab2a",
      "old_mode": 33188,
      "old_path": "yapf/pytree/pytree_unwrapper.py",
      "new_id": "ba1e0c4239bcead17dc262d7f05135065a392952",
      "new_mode": 33188,
      "new_path": "yapf/pytree/pytree_unwrapper.py"
    },
    {
      "type": "modify",
      "old_id": "edab8adadd92776d1bcbe3dc3a6913a5071b75f6",
      "old_mode": 33188,
      "old_path": "yapf/yapflib/format_decision_state.py",
      "new_id": "2468b1f9a4283ccd6561674f321fb887f6e1d5ae",
      "new_mode": 33188,
      "new_path": "yapf/yapflib/format_decision_state.py"
    },
    {
      "type": "modify",
      "old_id": "935c7c311820451e720baafabb46114765faa057",
      "old_mode": 33188,
      "old_path": "yapftests/reformatter_basic_test.py",
      "new_id": "e07d46d69946a07660f0427aea7be44a1802315d",
      "new_mode": 33188,
      "new_path": "yapftests/reformatter_basic_test.py"
    }
  ]
}
