)]}'
{
  "commit": "33b1f2a498b27ffbaab8af3c2301cbbe566074f0",
  "tree": "4a08953fd06e977dfff1e7e663bd7b654e8ea372",
  "parents": [
    "5d0997fef755b6eeb815dab82213792971db3160"
  ],
  "author": {
    "name": "Leon Senft",
    "email": "leonsenft@google.com",
    "time": "Fri Jul 24 14:56:33 2020 -0700"
  },
  "committer": {
    "name": "Leon Senft",
    "email": "leonsenft@users.noreply.github.com",
    "time": "Sat Jul 25 15:17:45 2020 -0700"
  },
  "message": "Support parsing identifiers with escape codes in them\n\nThe output of `CssPrinter` will now also retain escape codes in identifiers.\nThis ensures they remain valid identifiers, as the escaped values may not parse\nas valid identifiers.\n\nThe parser will also no longer accept an ID or class selector with space between\nthe first token (`#` or `.` respectively) and the identifier. The parser will\nnow fail immediately on these selector errors instead of attempting to recover.\nRecovering in a robust manner is difficult given that this parser immediately\nattempts to parse at the selector granularity, rather than first parsing the\nstyle sheet into rules as described [here][parse-rule].\n\n[parse-rule]: https://www.w3.org/TR/css-syntax-3/#consume-a-qualified-rule\n\nFixes https://github.com/dart-lang/csslib/issues/58.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ca1f465bbc1fea0720b4c6ddcde2ce107cd84f55",
      "old_mode": 33188,
      "old_path": "lib/parser.dart",
      "new_id": "099240d9a5f1f414b75246c5ff129696a4825e2f",
      "new_mode": 33188,
      "new_path": "lib/parser.dart"
    },
    {
      "type": "modify",
      "old_id": "8a17b534924c9ff5c744b8982d1a43fd190fd90c",
      "old_mode": 33188,
      "old_path": "lib/src/tree.dart",
      "new_id": "2961b6fee641c5e94bb1051026b6c0ae6102cb01",
      "new_mode": 33188,
      "new_path": "lib/src/tree.dart"
    },
    {
      "type": "modify",
      "old_id": "d24217683346538952130d22b2fac6173574dece",
      "old_mode": 33188,
      "old_path": "test/error_test.dart",
      "new_id": "5822c4c13b700267d157438802590ad9a7f5f7c5",
      "new_mode": 33188,
      "new_path": "test/error_test.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "af66469bb76d5db03fc558db0b50f9b193816de2",
      "new_mode": 33188,
      "new_path": "test/escape_codes_test.dart"
    }
  ]
}
