)]}'
{
  "commit": "e6856de97d72225196444b7d969b8fe084140503",
  "tree": "7fe01d1c349a3e410fa50693d453c119af68e658",
  "parents": [
    "d380534c785dcb68a25b323e79a7b05bfec86fbc"
  ],
  "author": {
    "name": "Charlie Marsh",
    "email": "charlie.r.marsh@gmail.com",
    "time": "Wed Jul 01 11:18:36 2026 -0400"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Jul 01 11:18:36 2026 -0400"
  },
  "message": "Skip empty trivia scans in the source indexer (#26507)\n\n## Summary\n\n`Indexer::from_tokens` scans the trivia between consecutive tokens to\nfind continuation newlines. Most tokens are adjacent, but we still\nconstruct an empty slice and run `match_indices` for those pairs.\n\nSkip that scan when the previous token ends where the current token\nstarts. Non-empty gaps continue through the existing newline logic,\npreserving the indexed continuation lines.\n\nThis is split from #26506 so CodSpeed can measure the empty-trivia fast\npath independently.\n\n## Performance\n\nThe [full CodSpeed\nreport](https://app.codspeed.io/astral-sh/ruff/branches/charlie%2Fskip-empty-indexer-trivia)\ncompares `779b0c2` with `dc42d1d`. All 15 linter CPU-simulation\nmeasurements improve:\n\n| Configuration | Gain across the five workloads |\n| --- | ---: |\n| Default rules | 1.06-2.72% |\n| All rules | 0.30-0.64% |\n| All rules with preview | 0.25-0.53% |\n\nSumming the five default-rules head and base measurements gives a 2.38%\naggregate improvement. No individual benchmark crosses CodSpeed\u0027s\nsignificance threshold, which is why the GitHub bot does not list these\ngains even though they appear in the full report.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "fe28c301365efe10700ae5861d9d3e6291c9cfd0",
      "old_mode": 33188,
      "old_path": "crates/ruff_python_index/src/indexer.rs",
      "new_id": "a193ced98da998e2defd2ae958db90075d65a2c2",
      "new_mode": 33188,
      "new_path": "crates/ruff_python_index/src/indexer.rs"
    }
  ]
}
