)]}'
{
  "commit": "a985a6c3bc48af5287caea541276315ac12ae8b0",
  "tree": "c68621487ca63e959da35b14fd7be2cf2eb5e40a",
  "parents": [
    "b992291264ee3a0c144838237fbc8d1e812baf48"
  ],
  "author": {
    "name": "Alan Donovan",
    "email": "adonovan@google.com",
    "time": "Fri Jul 18 17:35:37 2025 -0400"
  },
  "committer": {
    "name": "Alan Donovan",
    "email": "adonovan@google.com",
    "time": "Tue Jul 29 13:04:06 2025 -0700"
  },
  "message": "gopls/internal/template: use protocol.Mapper and simplify\n\nThis CL replaces all the complex bookkeeping logic with\nthe existing protocol.Mapper. This fixes the associated\nbug.\n\nDetails:\n- eliminate parsed.{nls,lastnl,check,nonASCII}.\n- use UTF-16 or byte offsets, never runes.\n- propagate all Mapper errors upwards and handle them properly.\n- eliminate unnecessary \"multiline\" token distinction\n  and alternative logic. Mapper works fine.\n- remove tests that reduced to tests of Mapper.\n- remove append to file.Handle.Content buffer (a data race).\n\nThe only behavior changes to tests are:\n- the extent of a string token \"foo\" now includes its quote marks\n- the length of an identifier or literal is in bytes, not runes\n\nAlso:\n- use clearer variable names.\n- mark existing comments as TODO where appropriate.\n- move symAtPosition\n- rename findWordAt -\u003e wordAt\n\nFixes golang/go#74635\n\nChange-Id: Ia25b7dcbe28e3bc472ae103bd85f71e3c09e3a30\nReviewed-on: https://go-review.googlesource.com/c/tools/+/688937\nReviewed-by: Robert Findley \u003crfindley@google.com\u003e\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nAuto-Submit: Alan Donovan \u003cadonovan@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "86332d37e1a20c7682e7445a7cab99ac8d270ea7",
      "old_mode": 33188,
      "old_path": "gopls/internal/protocol/semtok/semtok.go",
      "new_id": "99228391e6ac42f20f750404b13082b04eb8a168",
      "new_mode": 33188,
      "new_path": "gopls/internal/protocol/semtok/semtok.go"
    },
    {
      "type": "modify",
      "old_id": "acd3be5a50cb48180cc480c353229a8d13d581bc",
      "old_mode": 33188,
      "old_path": "gopls/internal/template/completion.go",
      "new_id": "fb09ba4ba01d552f35d04f8853d98a8721b18751",
      "new_mode": 33188,
      "new_path": "gopls/internal/template/completion.go"
    },
    {
      "type": "modify",
      "old_id": "8863e054b3b0c84a2a4a3e6f8af13489b74d56c3",
      "old_mode": 33188,
      "old_path": "gopls/internal/template/completion_test.go",
      "new_id": "279864ab80d786f5f7c3aeeaffecf50da3898551",
      "new_mode": 33188,
      "new_path": "gopls/internal/template/completion_test.go"
    },
    {
      "type": "modify",
      "old_id": "9e458ff198160d77d340f59a16e7717513724b30",
      "old_mode": 33188,
      "old_path": "gopls/internal/template/highlight.go",
      "new_id": "8a8244d4c36c1bc57629cf982c35cf59d794822b",
      "new_mode": 33188,
      "new_path": "gopls/internal/template/highlight.go"
    },
    {
      "type": "modify",
      "old_id": "303ccbbdc2911d83ad0e001760eb1e2c8c4a2ccb",
      "old_mode": 33188,
      "old_path": "gopls/internal/template/implementations.go",
      "new_id": "7c69c01c184085db0badde03543e3bb1a298fdf3",
      "new_mode": 33188,
      "new_path": "gopls/internal/template/implementations.go"
    },
    {
      "type": "modify",
      "old_id": "5cb825c4d929ec0a42b74ddc48a41b0e9a747f28",
      "old_mode": 33188,
      "old_path": "gopls/internal/template/parse.go",
      "new_id": "2050b32431d6a66516fe75a79fa2739ee1979eaa",
      "new_mode": 33188,
      "new_path": "gopls/internal/template/parse.go"
    },
    {
      "type": "modify",
      "old_id": "507e39e4be2fcdaf0abbb09580a1e00aa928643b",
      "old_mode": 33188,
      "old_path": "gopls/internal/template/parse_test.go",
      "new_id": "dc023f34bd9213da10bc83ffb1dc714405c845cb",
      "new_mode": 33188,
      "new_path": "gopls/internal/template/parse_test.go"
    },
    {
      "type": "modify",
      "old_id": "72add91b693b5c8c5f631973e6768a6576697461",
      "old_mode": 33188,
      "old_path": "gopls/internal/template/symbols.go",
      "new_id": "00745c29dc5c54bb5e3272fbeda96e2ae593d5ae",
      "new_mode": 33188,
      "new_path": "gopls/internal/template/symbols.go"
    },
    {
      "type": "modify",
      "old_id": "22eff5eddb63b4155ac8f4858eea6c8ed6c5f7f6",
      "old_mode": 33188,
      "old_path": "gopls/internal/test/integration/template/template_test.go",
      "new_id": "0cf359221549496a8837869ad4261d905be4b8d6",
      "new_mode": 33188,
      "new_path": "gopls/internal/test/integration/template/template_test.go"
    }
  ]
}
