)]}'
{
  "commit": "047158be8a67a61db7246c01db253e6476970953",
  "tree": "22703192609246521c37825212fb1d22c0e347eb",
  "parents": [
    "d00ce382946a182a4e055dd6693b460646845b9b"
  ],
  "author": {
    "name": "Alexandre Rostovtsev",
    "email": "arostovtsev@google.com",
    "time": "Fri Sep 04 02:10:33 2026 -0400"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Sep 04 08:10:33 2026 +0200"
  },
  "message": "Unbreak support for Buck2 tuple type syntax (#1509)\n\nIn Buck2:\n\n* `()` is the type of the empty tuple (what Bazel calls `tuple[()]`)\n* `(T,)` is the type of a 1-element tuple of T\n* `(T, U)` or equivalently `(T, U,)` is the type of a 2-element tuple\ntype\n\netc.\n\nThis means we need to allow tuples of type expressions as type atoms.\n(And we may as well allow arbitrary parenthesized type expressions as\ntype atoms, since Buck2 suppports those too.)\n\nFixes #1508.\n\n## Buildtools PR checklist\n\n- [X] The code in this PR is covered by unit/integration tests.\n- [X] I have tested these changes and provide testing instructions\nbelow.\n- [ ] I have either responded to, or resolved all Gemini comments on the\nPR.\n- [X] I have read Google Eng Practices on [Small\nChanges](https://google.github.io/eng-practices/review/developer/small-cls.html),\nthis PR either follows these guidelines or the description provides\nreasoning for why they can not be followed.\n\n@fmeum @dtolnay",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b4feb590e63a38afad9043f37cdb8503c9979494",
      "old_mode": 33188,
      "old_path": "build/parse.y",
      "new_id": "bd7fa5e2cfc7c3e4edb4f7de382e4cf33679a0d4",
      "new_mode": 33188,
      "new_path": "build/parse.y"
    },
    {
      "type": "modify",
      "old_id": "a3bf7452a35de33f674b475a41566ee07070a110",
      "old_mode": 33188,
      "old_path": "build/parse.y.go",
      "new_id": "5d80db399030f777f6f5ea08c53e845889a29284",
      "new_mode": 33188,
      "new_path": "build/parse.y.go"
    },
    {
      "type": "modify",
      "old_id": "b9f7b5f035d74fded2c76ce1f7d19a7bd5de2833",
      "old_mode": 33188,
      "old_path": "build/parse_test.go",
      "new_id": "20202e0c93af10759bd51f1184b3c1a6e8dbd00d",
      "new_mode": 33188,
      "new_path": "build/parse_test.go"
    },
    {
      "type": "modify",
      "old_id": "c96bfb85c248af3e45b433321d6102a6000a913b",
      "old_mode": 33188,
      "old_path": "build/testdata/079.build.golden",
      "new_id": "107d8f8998ccfe35d2549e76491e336877b084cf",
      "new_mode": 33188,
      "new_path": "build/testdata/079.build.golden"
    },
    {
      "type": "modify",
      "old_id": "47db610f96fbe9ddf6c0870ce5a74238eb307249",
      "old_mode": 33188,
      "old_path": "build/testdata/079.bzl.golden",
      "new_id": "364aef57fbdfdefa711475d3d965223e7e99960f",
      "new_mode": 33188,
      "new_path": "build/testdata/079.bzl.golden"
    },
    {
      "type": "modify",
      "old_id": "ef3d71ad5bd5c8163bcb05778513453950dfd5d9",
      "old_mode": 33188,
      "old_path": "build/testdata/079.in",
      "new_id": "01c03f9cebd1a4ff0ff0eb29a1c933651b9e2c25",
      "new_mode": 33188,
      "new_path": "build/testdata/079.in"
    }
  ]
}
