)]}'
{
  "commit": "1a7304b8a42a37366946de00f449b1b6a041ebee",
  "tree": "361dc8b08d9fa1f78a0bd70d02d425a4a468fa2b",
  "parents": [
    "c703c8d13456d4a6fdc83c9b39b370af3df12d00"
  ],
  "author": {
    "name": "Travis Cross",
    "email": "tc@traviscross.com",
    "time": "Thu May 15 15:00:56 2025 +0000"
  },
  "committer": {
    "name": "Travis Cross",
    "email": "tc@traviscross.com",
    "time": "Fri May 16 07:27:34 2025 +0000"
  },
  "message": "Parse grammar without regexes\n\nWe\u0027d been parsing the grammar with a combination of recursive descent\nand regular expression matchers.  This combination has its merits, and\nit\u0027s done tastefully here, but it seems maybe more straightforward to\ndo the parsing entirely with recursive descent.  Among other things,\ndoing it this way allows us to provide more precise error reporting on\nmalformed inputs.\n\nThe cost, in terms of lines of code, of doing this is rather modest,\nand the result seems at least as clear -- there\u0027s some mental cost to\ncode switching between the two worlds.  So let\u0027s make the switch and\nparse the grammar without regular expressions.\n\nWe verified that the rendered output of the Reference is byte\nidentical before and after this change.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7a92f47729653f78d6885ee9d80f8bb836a998e6",
      "old_mode": 33188,
      "old_path": "mdbook-spec/src/grammar/parser.rs",
      "new_id": "631fb7ae8f9b18147d9c69b5d916833106162087",
      "new_mode": 33188,
      "new_path": "mdbook-spec/src/grammar/parser.rs"
    }
  ]
}
