)]}'
{
  "commit": "c9ea5584798279277cda8df97eb8224c40527c31",
  "tree": "36da31986ece66b3fcfc25343c872d034c59203a",
  "parents": [
    "c0daa7fbe5b36ad50cae9e03c802ce0d3752774f"
  ],
  "author": {
    "name": "Alan Donovan",
    "email": "adonovan@google.com",
    "time": "Thu Oct 23 20:55:40 2025 -0400"
  },
  "committer": {
    "name": "Gopher Robot",
    "email": "gobot@golang.org",
    "time": "Fri Oct 24 15:15:08 2025 -0700"
  },
  "message": "gopls/internal/golang: Hover: use Cursor throughout\n\nThis CL replaces the use of []Node slices from\nPathEnclosingInterval by the use of Cursor.FindByPos,\nwhich simplifies a number of algorithms.\n\nIn particular, the various ways of finding an\nObject from a source position have been consolidated\nand clarified in objectsAt.\n\nThis sets us up to fix the attached issue in the next CL.\n\nDetails:\n- Use cursorutil.FirstEnclosing in more places.\n- Ditto internalastutil.NodeContains.\n- Avoid numerous calls to PathEnclosingInterval.\n- pathEnclosingObjNode has gone away.\n  All callers use Cursor.Find* or objectsAt.\n  Its logic for StarExpr has moved into objectsAt.\n- hoverDefinitionObjectAtPos merged into objectsAt.\n  Its logic for embedded fields has been pulled\n  out into Definition and Hover (two copies),\n  which are the only callers that want it.\n  A follow-up CL will delete it from Hover since\n  it is the cause of golang/go#75975.\n- typeSwitchImplicits rewritten more simply (as\n  typeSwitchVars) using Cursor.\n\nFor golang/go#75975\n\nChange-Id: Ifd62dd3499320f7e7de590348d8769adcdae395e\nReviewed-on: https://go-review.googlesource.com/c/tools/+/714640\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nReviewed-by: Hongxiang Jiang \u003chxjiang@golang.org\u003e\nAuto-Submit: Alan Donovan \u003cadonovan@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "930559d6e0a5cfadcdd3542dfcdf6758339930fc",
      "old_mode": 33188,
      "old_path": "gopls/internal/analysis/yield/yield.go",
      "new_id": "ef94d4da3e17cc8045c485572f5e93cd15eb3a7b",
      "new_mode": 33188,
      "new_path": "gopls/internal/analysis/yield/yield.go"
    },
    {
      "type": "modify",
      "old_id": "36b1d9c40cf52187e9c1d2aac570f78428e230d2",
      "old_mode": 33188,
      "old_path": "gopls/internal/golang/definition.go",
      "new_id": "fba5448dff1b6ddf608a6608693f0d398d0cc756",
      "new_mode": 33188,
      "new_path": "gopls/internal/golang/definition.go"
    },
    {
      "type": "modify",
      "old_id": "e996eb6961afc4af7ff3da41657cda99f4ba80a3",
      "old_mode": 33188,
      "old_path": "gopls/internal/golang/highlight.go",
      "new_id": "3940669b2511dff84ebf577b9ba808e930f5e194",
      "new_mode": 33188,
      "new_path": "gopls/internal/golang/highlight.go"
    },
    {
      "type": "modify",
      "old_id": "ba0864a90af2abe740eebba6988a3b9c992ea2bb",
      "old_mode": 33188,
      "old_path": "gopls/internal/golang/hover.go",
      "new_id": "8f174ea51b08228fc4fd5c3fe0886317d753f86e",
      "new_mode": 33188,
      "new_path": "gopls/internal/golang/hover.go"
    },
    {
      "type": "modify",
      "old_id": "fcfc6eb682f8bfce9964c27927089442f604757b",
      "old_mode": 33188,
      "old_path": "gopls/internal/golang/identifier.go",
      "new_id": "2f6348334c83264e8a20121eda472582573d6a25",
      "new_mode": 33188,
      "new_path": "gopls/internal/golang/identifier.go"
    },
    {
      "type": "modify",
      "old_id": "0823793466fe16ce475730fcf138fe2cf9229450",
      "old_mode": 33188,
      "old_path": "gopls/internal/golang/identifier_test.go",
      "new_id": "a827514e6a120d169bcd9435800b6ce465d2fc7c",
      "new_mode": 33188,
      "new_path": "gopls/internal/golang/identifier_test.go"
    },
    {
      "type": "modify",
      "old_id": "971392feb5bcbacfcbd38a50a648530e63a7462a",
      "old_mode": 33188,
      "old_path": "gopls/internal/golang/implementation.go",
      "new_id": "1dd05ee4d4ac8ec1d2cf8689c0854fa60e55937a",
      "new_mode": 33188,
      "new_path": "gopls/internal/golang/implementation.go"
    },
    {
      "type": "modify",
      "old_id": "31866d5107a21cb1cb35046869b8e4770bc6bd2f",
      "old_mode": 33188,
      "old_path": "gopls/internal/golang/references.go",
      "new_id": "140e20c01fdc82bec3562647d35f33a8d099ab51",
      "new_mode": 33188,
      "new_path": "gopls/internal/golang/references.go"
    },
    {
      "type": "modify",
      "old_id": "137a11302c185b8489078054d986ff00f0903a0c",
      "old_mode": 33188,
      "old_path": "gopls/internal/golang/rename.go",
      "new_id": "a4a5e44eb398e92f5c62fce995d66215afda7b45",
      "new_mode": 33188,
      "new_path": "gopls/internal/golang/rename.go"
    },
    {
      "type": "modify",
      "old_id": "742b5d95157301e3a3c39c44b21e959d00f8d466",
      "old_mode": 33188,
      "old_path": "gopls/internal/golang/type_hierarchy.go",
      "new_id": "b1448ad35e4a37da8c9231e8665468b23501af41",
      "new_mode": 33188,
      "new_path": "gopls/internal/golang/type_hierarchy.go"
    },
    {
      "type": "modify",
      "old_id": "1654fa6347ba24246a2530574d10e6f4286f615b",
      "old_mode": 33188,
      "old_path": "gopls/internal/golang/undeclared.go",
      "new_id": "b3a298340b5a7f6e1d0566df210e3fe934035816",
      "new_mode": 33188,
      "new_path": "gopls/internal/golang/undeclared.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "69674bb523ae4baeb2eb676b64ce385e2998e28d",
      "new_mode": 33188,
      "new_path": "gopls/internal/test/marker/testdata/definition/nearby.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "99b2cffa504bd0271c13b2ce293c26b8302ca23a",
      "new_mode": 33188,
      "new_path": "gopls/internal/test/marker/testdata/hover/nearby.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ecd88b2809e24dd6073adaeaaba437df65012b15",
      "new_mode": 33188,
      "new_path": "gopls/internal/test/marker/testdata/rename/pkgpath.txt"
    }
  ]
}
