)]}'
{
  "log": [
    {
      "commit": "ce379a15fc8d30b4d955e24589897b183c476722",
      "tree": "b2d305b7bc978e870f83d384d5b30e5f2f5239d0",
      "parents": [
        "34d0e7b96e4c6e4cb244803c9793080cc9d96995"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Tue Jul 21 13:52:10 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 13:52:10 2026 -0700"
      },
      "message": "Make DartFormatter.lineEnding immutable. (#1878)\n\nMake DartFormatter.lineEnding immutable.\n\nThis property was always intended to be semantically immutable but\nsince the early days, it was exposed as a public writable field.\n\nThis retains the setter to avoid a compile-time breaking change in the\noff chance there is some code calling the setter, but invoking it does\nnothing.\n\nThis also fixes the weird behavior where if you omit a line ending\n(which I\u0027m guessing all users do), it infers the line ending from the\nfirst format() call and then persists that to later calls. This is a\nweird subtle kind of mutability. In practice, it\u0027s harmless because\nusers rarely reuse a DartFormatter instance to format code with\ndifferent line endings. But it never felt like a good design.\n\nThis is technically a breaking change, but in a corpus of 2,000 pub\npackages, I couldn\u0027t find a single reference to an identifier named\n\"lineEnding\", so I suspect no code in the wild will actually break,\nwhich is why I only bumped the patch version.\n\nFix #1337."
    },
    {
      "commit": "34d0e7b96e4c6e4cb244803c9793080cc9d96995",
      "tree": "0d0d00f0e9db3d30bb2cacc4d314ed2ea9cc635d",
      "parents": [
        "005cc441998aac14b1e623130ccb8c67577844fb"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Fri Jul 10 13:03:48 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 13:03:48 2026 -0700"
      },
      "message": "Allow package_config 3.x.x. (#1877)\n\nNo changes were needed in dart_style to work with the new version since\ndart_style doesn\u0027t call any of the changed functions, so I just widened\nthe constraint range.\n\nThe version bumps here are not \"-wip\" because I intend to immediately\npublish this to unblock users that need to get onto analyzer 14.0.0.\n\nFix #1876."
    },
    {
      "commit": "005cc441998aac14b1e623130ccb8c67577844fb",
      "tree": "9f72581643ec73bf624c4daac9ae70feed038e28",
      "parents": [
        "965ed1b54c60510e50aeb5a986c967df32f3df29"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Thu Jul 09 10:34:54 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 10:34:54 2026 -0700"
      },
      "message": "Bump version to publish 3.1.11. (#1874)\n\nThe only meaningful change here is widening the version constraint on\nanalyzer to allow 14.0.0 (https://github.com/dart-lang/sdk/issues/63682),\nso I plan to publish this directly and not bother rolling it into the\nDart SDK since there are no formatter changes.\n\n(Also fixed a redundant incorrect print in the ship script.)"
    },
    {
      "commit": "965ed1b54c60510e50aeb5a986c967df32f3df29",
      "tree": "e797efb58cc4769c5228967f57a8e7a688294b64",
      "parents": [
        "680f5f2b09f4b98a8b12a9de3bd9779e14f2f8c9"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Wed Jul 08 17:54:06 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 17:54:06 2026 -0700"
      },
      "message": "Move CHANGELOG entry. (#1873)\n\nI merged #1864, but the author sent the PR before I had published\n3.1.10. This moves the CHANGELOG entry up to the new in-progress\nversion."
    },
    {
      "commit": "680f5f2b09f4b98a8b12a9de3bd9779e14f2f8c9",
      "tree": "38813e38856411cb802b7ed1ee01d9f2cb22e788",
      "parents": [
        "ca964808fc7e254c6ceaf5552f90254a2fa3e824"
      ],
      "author": {
        "name": "Pavel Akhrameev",
        "email": "P.akhrameev@gmail.com",
        "time": "Thu Jul 09 04:35:56 2026 +0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 17:35:56 2026 -0700"
      },
      "message": "Allow analyzer version 14. (#1864)\n\nWiden the analyzer dependency constraint to allow both 13.x and 14.x.\nThe library and all tests pass unchanged against analyzer 14.0.0\n(verified via a temporary dependency override)"
    },
    {
      "commit": "ca964808fc7e254c6ceaf5552f90254a2fa3e824",
      "tree": "446531f2759052069436211f5a8f6ab1b8eab425",
      "parents": [
        "d178919af339ed6a1c8237d3fca3d29e5df4b775"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Wed Jul 08 17:34:58 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 17:34:58 2026 -0700"
      },
      "message": "Move tool_utils.dart into tool/src/utils.dart. (#1872)"
    },
    {
      "commit": "d178919af339ed6a1c8237d3fca3d29e5df4b775",
      "tree": "d909b9f7688603dc02ba76981fafc506740614cb",
      "parents": [
        "96dc847e820c94f45c7f7820357115c9859384cf"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Wed Jul 08 17:26:33 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 17:26:33 2026 -0700"
      },
      "message": "Migrate off the grinder package and test that versions match. (#1871)\n\nMigrate off the grinder package and test that versions match.\n\nThe formatter supports `--version` to print its version. Since the\nshipped package doesn\u0027t include the pubspec, we have a constant inside\nthe codebase that mirrors the pubspec\u0027s version number.\n\nKeeping that in sync is an annoying source of bugs. I\u0027ve partially\nalleviated that by having a grinder script to update the version\nnumbers in parallel.\n\nThis PR migrates that code to standalone scripts to remove the\ndependency on grinder (which I hear is no longer maintained).\n\nI also updated the pre-publish script to validate that the CHANGELOG\nhas an entry for the new version.\n\nAnd I added a test that will fail if the two version numbers ever get\nout of sync."
    },
    {
      "commit": "96dc847e820c94f45c7f7820357115c9859384cf",
      "tree": "d1a95d2f64949bd0b7f984d53385a646b3f6d17d",
      "parents": [
        "3f6252628fa01f98c2bef4d6866752e2a28235b4"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Wed Jul 08 11:29:02 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 11:29:02 2026 -0700"
      },
      "message": "Bump version number to publish 3.1.10. (#1870)\n\nAlso tweak the CHANGELOG a bit."
    },
    {
      "commit": "3f6252628fa01f98c2bef4d6866752e2a28235b4",
      "tree": "b697ac5bf834f03115273c5b4eba21112db1e76e",
      "parents": [
        "dfdf6420c7ea923d28edef3f11e89b4ff23d03bf"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Jul 01 13:13:09 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 13:13:09 2026 +0000"
      },
      "message": "Bump actions/checkout from 6.0.3 to 7.0.0 in the github-actions group (#1867)\n\nBumps the github-actions group with 1 update: [actions/checkout](https://github.com/actions/checkout).\n\nUpdates `actions/checkout` from 6.0.3 to 7.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/actions/checkout/releases\"\u003eactions/checkout\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev7.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eblock checking out fork pr for pull_request_target and workflow_run by \u003ca href\u003d\"https://github.com/aiqiaoy\"\u003e\u003ccode\u003e@​aiqiaoy\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2454\"\u003eactions/checkout#2454\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/publish-immutable-action from 0.0.3 to 0.0.4 in the minor-actions-dependencies group across 1 directory by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2458\"\u003eactions/checkout#2458\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump flatted from 3.3.1 to 3.4.2 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2460\"\u003eactions/checkout#2460\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump js-yaml from 4.1.0 to 4.2.0 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2461\"\u003eactions/checkout#2461\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003e@​actions/core\u003c/code\u003e and \u003ccode\u003e@​actions/tool-cache\u003c/code\u003e and Remove uuid by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2459\"\u003eactions/checkout#2459\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eupgrade module to esm and update dependencies by \u003ca href\u003d\"https://github.com/aiqiaoy\"\u003e\u003ccode\u003e@​aiqiaoy\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2463\"\u003eactions/checkout#2463\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the minor-npm-dependencies group across 1 directory with 3 updates by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2462\"\u003eactions/checkout#2462\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003egetting ready for checkout v7 release by \u003ca href\u003d\"https://github.com/aiqiaoy\"\u003e\u003ccode\u003e@​aiqiaoy\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2464\"\u003eactions/checkout#2464\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eupdate error wording by \u003ca href\u003d\"https://github.com/aiqiaoy\"\u003e\u003ccode\u003e@​aiqiaoy\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2467\"\u003eactions/checkout#2467\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/aiqiaoy\"\u003e\u003ccode\u003e@​aiqiaoy\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2454\"\u003eactions/checkout#2454\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href\u003d\"https://github.com/actions/checkout/compare/v6.0.3...v7.0.0\"\u003ehttps://github.com/actions/checkout/compare/v6.0.3...v7.0.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/actions/checkout/blob/main/CHANGELOG.md\"\u003eactions/checkout\u0027s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003ch2\u003ev7.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBlock checking out fork PR for pull_request_target and workflow_run by \u003ca href\u003d\"https://github.com/aiqiaoy\"\u003e\u003ccode\u003e@​aiqiaoy\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2454\"\u003eactions/checkout#2454\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/publish-immutable-action from 0.0.3 to 0.0.4 in the minor-actions-dependencies group across 1 directory by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2458\"\u003eactions/checkout#2458\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump flatted from 3.3.1 to 3.4.2 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2460\"\u003eactions/checkout#2460\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump js-yaml from 4.1.0 to 4.2.0 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2461\"\u003eactions/checkout#2461\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003e@​actions/core\u003c/code\u003e and \u003ccode\u003e@​actions/tool-cache\u003c/code\u003e and Remove uuid by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2459\"\u003eactions/checkout#2459\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eupgrade module to esm and update dependencies by \u003ca href\u003d\"https://github.com/aiqiaoy\"\u003e\u003ccode\u003e@​aiqiaoy\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2463\"\u003eactions/checkout#2463\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the minor-npm-dependencies group across 1 directory with 3 updates by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2462\"\u003eactions/checkout#2462\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev6.0.3\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix checkout init for SHA-256 repositories by \u003ca href\u003d\"https://github.com/yaananth\"\u003e\u003ccode\u003e@​yaananth\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2439\"\u003eactions/checkout#2439\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: expand merge commit SHA regex and add SHA-256 test cases by \u003ca href\u003d\"https://github.com/yaananth\"\u003e\u003ccode\u003e@​yaananth\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2414\"\u003eactions/checkout#2414\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev6.0.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix tag handling: preserve annotations and explicit fetch-tags by \u003ca href\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2356\"\u003eactions/checkout#2356\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev6.0.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd worktree support for persist-credentials includeIf by \u003ca href\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2327\"\u003eactions/checkout#2327\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev6.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePersist creds to a separate file by \u003ca href\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2286\"\u003eactions/checkout#2286\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate README to include Node.js 24 support details and requirements by \u003ca href\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2248\"\u003eactions/checkout#2248\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev5.0.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePort v6 cleanup to v5 by \u003ca href\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2301\"\u003eactions/checkout#2301\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev5.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate actions checkout to use node 24 by \u003ca href\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2226\"\u003eactions/checkout#2226\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.3.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePort v6 cleanup to v4 by \u003ca href\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2305\"\u003eactions/checkout#2305\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.3.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003edocs: update README.md by \u003ca href\u003d\"https://github.com/motss\"\u003e\u003ccode\u003e@​motss\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1971\"\u003eactions/checkout#1971\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd internal repos for checking out multiple repositories by \u003ca href\u003d\"https://github.com/mouismail\"\u003e\u003ccode\u003e@​mouismail\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1977\"\u003eactions/checkout#1977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocumentation update - add recommended permissions to Readme by \u003ca href\u003d\"https://github.com/benwells\"\u003e\u003ccode\u003e@​benwells\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2043\"\u003eactions/checkout#2043\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust positioning of user email note and permissions heading by \u003ca href\u003d\"https://github.com/joshmgross\"\u003e\u003ccode\u003e@​joshmgross\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2044\"\u003eactions/checkout#2044\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate README.md by \u003ca href\u003d\"https://github.com/nebuk89\"\u003e\u003ccode\u003e@​nebuk89\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2194\"\u003eactions/checkout#2194\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CODEOWNERS for actions by \u003ca href\u003d\"https://github.com/TingluoHuang\"\u003e\u003ccode\u003e@​TingluoHuang\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2224\"\u003eactions/checkout#2224\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate package dependencies by \u003ca href\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2236\"\u003eactions/checkout#2236\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.2.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eurl-helper.ts\u003c/code\u003e now leverages well-known environment variables by \u003ca href\u003d\"https://github.com/jww3\"\u003e\u003ccode\u003e@​jww3\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1941\"\u003eactions/checkout#1941\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExpand unit test coverage for \u003ccode\u003eisGhes\u003c/code\u003e by \u003ca href\u003d\"https://github.com/jww3\"\u003e\u003ccode\u003e@​jww3\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1946\"\u003eactions/checkout#1946\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.2.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCheck out other refs/* by commit if provided, fall back to ref by \u003ca href\u003d\"https://github.com/orhantoy\"\u003e\u003ccode\u003e@​orhantoy\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1924\"\u003eactions/checkout#1924\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0\"\u003e\u003ccode\u003e9c091bb\u003c/code\u003e\u003c/a\u003e update error wording (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2467\"\u003e#2467\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/1044a6dea927916f2c38ba5aeffbc0a847b1221a\"\u003e\u003ccode\u003e1044a6d\u003c/code\u003e\u003c/a\u003e getting ready for checkout v7 release (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2464\"\u003e#2464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/f0282184c7ce73ab54c7e4ab5a617122602e575f\"\u003e\u003ccode\u003ef028218\u003c/code\u003e\u003c/a\u003e Bump the minor-npm-dependencies group across 1 directory with 3 updates (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2462\"\u003e#2462\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/d914b262ffc244530a203ab40decab34c3abf34d\"\u003e\u003ccode\u003ed914b26\u003c/code\u003e\u003c/a\u003e upgrade module to esm and update dependencies (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2463\"\u003e#2463\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/537c7ef99cef6e5ddb5e7ff5d16d14510503801d\"\u003e\u003ccode\u003e537c7ef\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003e@​actions/core\u003c/code\u003e and \u003ccode\u003e@​actions/tool-cache\u003c/code\u003e and Remove uuid (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2459\"\u003e#2459\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/130a169078a413d3a5246a393625e8e742f387f6\"\u003e\u003ccode\u003e130a169\u003c/code\u003e\u003c/a\u003e Bump js-yaml from 4.1.0 to 4.2.0 (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2461\"\u003e#2461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/7d09575332117a40b46e5e020664df234cd416f3\"\u003e\u003ccode\u003e7d09575\u003c/code\u003e\u003c/a\u003e Bump flatted from 3.3.1 to 3.4.2 (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2460\"\u003e#2460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/0f9f3aa320cb53abeb534aeb54048075d9697a0e\"\u003e\u003ccode\u003e0f9f3aa\u003c/code\u003e\u003c/a\u003e Bump actions/publish-immutable-action (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2458\"\u003e#2458\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/f9e715a95fcd1f9253f77dd28f11e88d2d6460c7\"\u003e\u003ccode\u003ef9e715a\u003c/code\u003e\u003c/a\u003e block checking out fork pr for pull_request_target and workflow_run (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2454\"\u003e#2454\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href\u003d\"https://github.com/actions/checkout/compare/df4cb1c069e1874edd31b4311f1884172cec0e10...9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dactions/checkout\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d6.0.3\u0026new-version\u003d7.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s major version (unless you unignore this specific dependency\u0027s major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s minor version (unless you unignore this specific dependency\u0027s minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\u003c/details\u003e"
    },
    {
      "commit": "dfdf6420c7ea923d28edef3f11e89b4ff23d03bf",
      "tree": "21e42aad373003eeef4312183021bcc1b09804fb",
      "parents": [
        "95f4456e28da0783b2fe55e4b70eed3f30c86a3b"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Tue Jun 16 17:59:50 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 17:59:50 2026 -0700"
      },
      "message": "Fix regression that incorrectly moved a blank line around a comment. (#1862)\n\nIn #1831, I tweaked how comments and blank lines at the ends of blocks are handled. An unintended consequence of that change (that surprisingly was not caught by any tests) was that it sometimes moves a blank line around a comment. If you have code like:\n\n```dart\nclass C {}\n// Comment.\n\nclass D {}\n```\n\nIt would change it to:\n\n```dart\nclass C {}\n\n// Comment.\nclass D {}\n```\n\nThat actually does look nice most of the time. However, it can be less nice in code like:\n\n```dart\nimport \u0027package:foo/foo.dart\u0027;\n//import \u0027package:bar/bar.dart\u0027;\n\nimport \u0027something/relative.dart\u0027;\n```\n\nAnd it\u0027s *really* problematic inside the Dart SDK where static error tests use line comments directly below code to determine error locations:\n\n```dart\nString v2 \u003d await fi;\n//          ^^^^^^^^\n// [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT\n// [cfe] A value of type \u0027int\u0027 can\u0027t be assigned to a variable of type \u0027String\u0027.\n```\n\nHere, that `//          ^^^^^^^^` comment stops working if the formatter puts a blank line above it.\n\nNow, granted, the formatter\u0027s job isn\u0027t to support a bespoke test format used inside the SDK. But it\u0027s a real pain to break all the static error tests. And in real world code, there are sometimes cases where the user *does* want the blank line below the comment and not above.\n\nThis PR fixes that unintended regression. This change (as with the previous comment change) is not language-versioned. I ran this PR on a corpus of already-formatted code, and it produced no changes. The output of the previous format run leaves a set of blank lines that this change doesn\u0027t interfere with. I also ran this PR on a corpus of unformatted code and generated a diff relative to that same corpus formatted before this PR. The diff is [here](https://gist.github.com/munificent/051274a8e76154520a31b234eb364c80). As expected, the difference is that it keeps blank lines where they were in some places where the previous formatter would delete or move the blank line.\n\nI\u0027ve tested this change on the SDK and it correctly doesn\u0027t break static error test marker comments."
    },
    {
      "commit": "95f4456e28da0783b2fe55e4b70eed3f30c86a3b",
      "tree": "9e061d89624f67b5e976055b811ad699ecdc6592",
      "parents": [
        "48609ba5e38f40f2df76bb2d5b0ae2193417f191"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Wed Jun 10 17:09:03 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 17:09:03 2026 -0700"
      },
      "message": "Do some clean-up on the CHANGELOG. (#1861)\n\n- Organize the style changes into language-versioned ones and non-language versioned ones.\n- Make some less verbose.\n- Move the unnecessary splitting bug fix into style change. It is technically a bug fix (i.e. fixing an unintended behavior) but it\u0027s user-visible as a change in formatting behavior."
    },
    {
      "commit": "48609ba5e38f40f2df76bb2d5b0ae2193417f191",
      "tree": "04e00f59e6525ec22fb364d2f108a4bd69e8d669",
      "parents": [
        "c94640f218dd6eb51538d4860094a294531d5f70"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Wed Jun 10 16:18:04 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 16:18:04 2026 -0700"
      },
      "message": "Handle overflowing solutions more gracefully. (#1848)\n\nHandle overflowing solutions more gracefully.\n\nWhen no solution fits in the page width, prefer solutions where the\noverflowing characters are from string literals or comments, since those\nare the most common cause. We want the user to see them overflowing so\nthey realize that\u0027s what they need to manually split.\n\nFix #1802.\nFix #1803.\nFix #1837."
    },
    {
      "commit": "c94640f218dd6eb51538d4860094a294531d5f70",
      "tree": "43cee301ac764a7d269e92716bf87471ca7ff3f9",
      "parents": [
        "4bb0704cf488d838abf96cf46aaddf1684c85405"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Wed Jun 10 16:15:43 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 16:15:43 2026 -0700"
      },
      "message": "Support a trailing comma in extension type representation clauses. (#1860)\n\nIn Dart 3.13, we changed the grammar for extension types to match primary constructors (with restrictions). A side effect of that is that where the old grammar (inadvertently) didn\u0027t allow a trailing comma in a split representation clause, the new grammar does (because it\u0027s just a formal parameter list now).\n\nSo in Dart 3.13 and later libraries, the formatter will write a trailing comma there, to be consistent with most other places in the language were we write a trailing comma.\n\nFix #1845."
    },
    {
      "commit": "4bb0704cf488d838abf96cf46aaddf1684c85405",
      "tree": "054f3cf99c492844b1b380202520e5b65094e8f2",
      "parents": [
        "7949dc2a383c0cfed8bcb0f54b48694936bf6f62"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Wed Jun 10 12:25:28 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 12:25:28 2026 -0700"
      },
      "message": "Move fixing a piece\u0027s state by page width to before solving. (#1849)\n\nMove fixing a piece\u0027s state by page width to before solving.\n\nA key optimization the formatter performs is that if it can tell that the contents of a Piece are so large that the Piece will be forced to split regardless of any surrounding context, then it binds the Piece to the split state eagerly before solving gets involved. This radically speeds up solving because the solver doesn\u0027t have to explore a large number of *combinations* of piece states before finding the state for one piece.\n\nBefore this PR, that optimization was applied in the middle of building and formatting a solution. When writing an piece inline to a solution, we\u0027d try to see if it had a fixed state based on its contents and the remaining page width at that point. Doing this optimization in the middle of writing the piece was good for performance because it gave us more information about the surrounding indentation. That in turn effectively reduced the page width which made it more likely the optimization would apply and successfully pick a state for the piece.\n\nHowever, the process of exploring the solution tree is pretty complex and having some pieces get bound in the solution right in the middle of that process is brittle. In particular, it turns out there was at least one bug. When formatting a solution, we might eagerly bind some piece deep in the middle of the piece tree to a state based on its contents (the optimization). At that point, we would also increment the solution\u0027s cost to pay for that state.\n\nLater, we might derive a new solution from that solution that formats part of its subtree separately. Separate formatting is another optimization where we can reuse formatted subtrees across multiple solutions. When we separately format, we add in the entire formatted output of a subtree. We also need to include the cost of any pieces split in that subtree.\n\nThese two optimizations didn\u0027t play nice together. In some cases, the eager piece binding would bind a piece to some state and pay its cost. Later, that piece would be part of a subtree that was separately formatted. When the subtree was merged, we would pay its cost again. The result is that when the eager piece binding optimization applied, sometimes a piece\u0027s state cost would be double counted.\n\nThat in turn would cause that solution to be not as desirable as it should be and sometimes other worse solutions would win. Looking through the diff, it mostly seems to manifest in code where you have a `.` method call whose argument list contains a large collection literal. The split list literal\u0027s cost would be double counted and instead some other solution that doesn\u0027t push the collection far enough to the right to trigger the optimization would win.\n\nFor example, currently the formatter produces:\n\n```dart\nmain() async {\n  {\n    await MethodChannelContainer()\n        .onMethodChannelInvoke(\"reportCrash\", \u003cString, dynamic\u003e{\n          \"time\": nowTime,\n          \"errorValue\": errorName,\n          \"reason\": reason,\n          \"stacktrace\": stacktrace,\n        });\n  }\n}\n```\n\nThere is no reason to split before `.onMethodChannelInvoke`. It\u0027s just double-counting the cost of the split list literal which incorrectly bumps the cost of the solution that should win:\n\n```dart\nmain() async {\n  {\n    await MethodChannelContainer().onMethodChannelInvoke(\n      \"reportCrash\",\n      \u003cString, dynamic\u003e{\n        \"time\": nowTime,\n        \"errorValue\": errorName,\n        \"reason\": reason,\n        \"stacktrace\": stacktrace,\n      },\n    );\n  }\n}\n```\n\nThis PR fixes that by moving the \"eagerly bind pieces based on contents\" optimization out of the solver. Instead, we do one big traversal of the piece tree first and bind what we can. When we do, since the piece will now be bound to that state for all possible solutions, there\u0027s no need to count its cost. And thus we never double-count it (or even single-count it for that matter).\n\nYou can see the diff applied to a large corpus [here](https://gist.github.com/munificent/db66c4c2573d99cb9d25dbd0c1cb7b13). That\u0027s the entire diff from a very large corpus, so the amount of code affected is relatively small. Interestingly, it seems to be very often in method channel calls. I\u0027m guessing because those often combine a call chain with a large collection literal.\n\nThis does regress performance. :( Doing the optimization earlier is beneficial in some ways because we\u0027ll only try to apply it to a given piece once instead of once per solution that happens to reach it. But it\u0027s also worse because the effective page width is always the full width of the file without taking any indentation for where the piece appears into account. Thus the optimization kicks in less frequently. Overall, it\u0027s a regression but not catastrophic:\n\nHere\u0027s the benchmarks on my Macbook (higher percentages \u003d faster):\n\n```\nBenchmark (tall)                fastest   median  slowest  average  baseline\n-----------------------------  --------  -------  -------  -------  --------\nblock                             0.080    0.088    0.174    0.091     82.7%\nchain                             0.704    0.721    0.759    0.724     95.5%\ncollection                        0.408    0.420    0.447    0.422     64.1%\ncollection_large                  1.759    1.797    1.936    1.806    101.2%\nconditional                       0.084    0.085    0.105    0.087     80.0%\ncurry                             0.173    0.175    0.203    0.178     99.4%\ncurry_2                           0.346    0.356    0.398    0.360     99.5%\nffi                               0.159    0.162    0.185    0.166     99.2%\nflutter_popup_menu_test           0.542    0.559    0.595    0.559     93.1%\nflutter_scrollbar_test            1.996    2.017    2.055    2.019     48.8%\nfunction_call                     1.781    1.822    1.904    1.821     99.6%\ninfix_large                       0.714    0.737    0.775    0.740    101.4%\ninfix_small                       0.182    0.185    0.222    0.189    107.5%\ninterpolation                     0.142    0.146    0.175    0.148     96.3%\ninterpolation_1516                0.125    0.126    0.141    0.128     95.5%\nlarge                             4.046    4.145    4.362    4.149     93.3%\ntop_level                         0.149    0.155    0.181    0.157     97.3%\n```\n\nAnd here\u0027s the time formatting a giant corpus of pub code:\n\n```\nBefore this PR: 233.91s user 30.02s system 109% cpu 4:01.20 total\nAfter:          261.15s user 30.66s system 108% cpu 4:27.88 total\n```\n\nFix #1847."
    },
    {
      "commit": "7949dc2a383c0cfed8bcb0f54b48694936bf6f62",
      "tree": "b4f42455aaa374ea7789d142e594f3cf106e9ac5",
      "parents": [
        "8e713e4bdb8cbfd5064b763c98d2dd4efd55b7e1",
        "488c5c48c0d0a46b9e0ba1e08a2126dac846af53"
      ],
      "author": {
        "name": "Alexander Thomas",
        "email": "athom@google.com",
        "time": "Tue Jun 09 07:50:14 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 07:50:14 2026 +0200"
      },
      "message": "Merge pull request #1859 from dart-lang/merge-dart-sdk-main\n\nMerge commit for Dart SDK main branch roll"
    },
    {
      "commit": "8e713e4bdb8cbfd5064b763c98d2dd4efd55b7e1",
      "tree": "b4f42455aaa374ea7789d142e594f3cf106e9ac5",
      "parents": [
        "42796575b805d75011aed10b3ab9e577c1525e99",
        "ab65753fd75cdcf9f1a8021e0d4a4deb2afd7465"
      ],
      "author": {
        "name": "Alexander Thomas",
        "email": "athom@google.com",
        "time": "Tue Jun 09 07:48:51 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 07:48:51 2026 +0200"
      },
      "message": "Merge pull request #1856 from dart-lang/merge-dart-sdk-stable\n\nMerge commit for stable cherry-pick"
    },
    {
      "commit": "488c5c48c0d0a46b9e0ba1e08a2126dac846af53",
      "tree": "b4f42455aaa374ea7789d142e594f3cf106e9ac5",
      "parents": [
        "42796575b805d75011aed10b3ab9e577c1525e99",
        "2ed8c591717128b3c9c19a95698c1a758ae1c04b"
      ],
      "author": {
        "name": "Robert Nystrom",
        "email": "rnystrom@google.com",
        "time": "Mon Jun 08 18:58:57 2026 -0700"
      },
      "committer": {
        "name": "Robert Nystrom",
        "email": "rnystrom@google.com",
        "time": "Mon Jun 08 18:58:57 2026 -0700"
      },
      "message": "Merge remote-tracking branch \u0027origin/dart-sdk-main\u0027 into merge-dart-sdk-main\n\nMerge commit with 2ed8c59 (from #1858) as a parent so that that commit is reachable from main. That commit is rolled into the Dart SDK main branch, so we need to make sure it doesn\u0027t get GCed by Git.\n"
    },
    {
      "commit": "2ed8c591717128b3c9c19a95698c1a758ae1c04b",
      "tree": "0c21f72b31aaccf82b67d72b39023a21a19badc9",
      "parents": [
        "d7b366261228340b5ef99aa4152891e8ac7f34a8"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Mon Jun 08 18:50:38 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 18:50:38 2026 -0700"
      },
      "message": "Fix io_file_system_test.dart. (#1858)\n\nI added a new mandatory named parameter to readAnalysisOptions() and somehow I missed one callsite in a test.\n\nFor this test, no file reads should fail, so we just provide it with a closure that fails the test if invoked."
    },
    {
      "commit": "ab65753fd75cdcf9f1a8021e0d4a4deb2afd7465",
      "tree": "b4f42455aaa374ea7789d142e594f3cf106e9ac5",
      "parents": [
        "42796575b805d75011aed10b3ab9e577c1525e99",
        "20ab21773a526f480ca5948f32cf8c77e37d0dc9"
      ],
      "author": {
        "name": "Robert Nystrom",
        "email": "rnystrom@google.com",
        "time": "Mon Jun 08 17:49:58 2026 -0700"
      },
      "committer": {
        "name": "Robert Nystrom",
        "email": "rnystrom@google.com",
        "time": "Mon Jun 08 17:49:58 2026 -0700"
      },
      "message": "Merge remote-tracking branch \u0027origin/dart-sdk-stable\u0027 into merge-dart-sdk-stable\n\nThis branch contains a commit that is cherry-picked into the Dart stabl SDK. This merge commit exists to ensure the commit is reachable from main so that the commit doesn\u0027t get GCed and Google\u0027s Git mirror continues to find it.\n"
    },
    {
      "commit": "d7b366261228340b5ef99aa4152891e8ac7f34a8",
      "tree": "cefb37c70e17176569d82d2d905f62eca7f23277",
      "parents": [
        "f1d10e1e052116aeb3851f90ace55e5447b3bc21"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Mon Jun 08 14:00:16 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 14:00:16 2026 -0700"
      },
      "message": "[dart main] Don\u0027t crash on a missing analysis_options.yaml include. (#1855)\n\nIf an analysis_options.yaml file has an include that points to another relative path and reading that other file fails, print a warning and continue as if the file was found and empty.\n\nFix #1840.\n\nThis is sort of a short-term fix for the root cause of that issue which is that the formatter is trying to format code in `build/` directories that contain packages that aren\u0027t fully resolved with all of their dependencies and shouldn\u0027t be formatted anyway.\n\nI think the right long-term solution for that is to support file exclusion (#864). I plan to work on that soon, but it will take a while because it\u0027s part of revising the overall library API and how configuration data is plumbed from hosts to the formatter.\n\nEven when that long-term solution is done, I think this change is good too. It\u0027s still possible for users to get into this situation, as simply as having a typo in an analysis_options.yaml file. When that happens, the formatter should degrade more gracefully. Warning and continuing as in this PR is consistent with how we handle other configuration failures.\n\n---\n\nNote: This PR is identical to #1851 except:\n\n* Its parent commit is f1d10e1e, which is the commit that Dart SDK main branch currently has for dart_style.\n\n* It includes [the changes to `io_file_system.dart`](https://github.com/dart-lang/dart_style/commit/5ed5aadd8cfb0228668e286ab45977f989352b48#diff-cd6508e68de5dc72aa1bb51352d5258b9d1dd228d66fae6b1b0831b25b507726) from #1818 which this fix relies on.\n\n* It has a slightly different CHANGELOG entry."
    },
    {
      "commit": "20ab21773a526f480ca5948f32cf8c77e37d0dc9",
      "tree": "589086241ca8391d1e631be433ff92ac63f9726b",
      "parents": [
        "9b302dd20b4b38979352f21cf515b44617d344ce"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Mon Jun 08 10:26:24 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 10:26:24 2026 -0700"
      },
      "message": "[dart stable] Don\u0027t crash on a missing analysis_options.yaml include. (#1853)\n\nDon\u0027t crash on a missing analysis_options.yaml include.\n\nIf an analysis_options.yaml file has an include that points to another relative path and reading that other file fails, print a warning and continue as if the file was found and empty.\n\nFix #1840.\n\nThis is sort of a short-term fix for the root cause of that issue which is that the formatter is trying to format code in `build/` directories that contain packages that aren\u0027t fully resolved with all of their dependencies and shouldn\u0027t be formatted anyway.\n\nI think the right long-term solution for that is to support file exclusion (#864). I plan to work on that soon, but it will take a while because it\u0027s part of revising the overall library API and how configuration data is plumbed from hosts to the formatter.\n\nEven when that long-term solution is done, I think this change is good too. It\u0027s still possible for users to get into this situation, as simply as having a typo in an analysis_options.yaml file. When that happens, the formatter should degrade more gracefully. Warning and continuing as in this PR is consistent with how we handle other configuration failures.\n\n---\n\nNote: This PR is identical to #1851 except:\n\n* It is intended to be merged onto the dart-sdk-stable branch so that it can be cherry-picked to the stable Dart SDK without pulling in other changes on dart_style main that the stable SDK shouldn\u0027t get.\n\n* It includes [the changes to `io_file_system.dart`](https://github.com/dart-lang/dart_style/commit/5ed5aadd8cfb0228668e286ab45977f989352b48#diff-cd6508e68de5dc72aa1bb51352d5258b9d1dd228d66fae6b1b0831b25b507726) from #1818 which this fix relies on."
    },
    {
      "commit": "42796575b805d75011aed10b3ab9e577c1525e99",
      "tree": "b4f42455aaa374ea7789d142e594f3cf106e9ac5",
      "parents": [
        "693ca19ee8e3e10da3b9b0768a8182a39e06184f"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Fri Jun 05 18:23:57 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 05 18:23:57 2026 -0700"
      },
      "message": "Don\u0027t crash on a missing analysis_options.yaml include. (#1851)\n\nDon\u0027t crash on a missing analysis_options.yaml include.\n\nIf an analysis_options.yaml file has an include that points to another relative path and reading that other file fails, print a warning and continue as if the file was found and empty.\n\nFix #1840.\n\nThis is sort of a short-term fix for the root cause of that issue which is that the formatter is trying to format code in `build/` directories\nthat contain packages that aren\u0027t fully resolved with all of their dependencies and shouldn\u0027t be formatted anyway.\n\nI think the right long-term solution for that is to support file exclusion (#864). I plan to work on that soon, but it will take a while because it\u0027s part of revising the overall library API and how configuration data is plumbed from hosts to the formatter.\n\nEven when that long-term solution is done, I think this change is good too. It\u0027s still possible for users to get into this situation, as simply as having a typo in an analysis_options.yaml file. When that happens, the formatter should degrade more gracefully. Warning and continuing as in this PR is consistent with how we handle other configuration failures."
    },
    {
      "commit": "693ca19ee8e3e10da3b9b0768a8182a39e06184f",
      "tree": "a991fd035974ca32c49e5d5459c1c26089b928cd",
      "parents": [
        "c70bffb37801775d83fc780216565eb807ad4baa"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Fri Jun 05 18:18:10 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 05 18:18:10 2026 -0700"
      },
      "message": "Update to analyzer 13.1.0 and fix deprecation warnings. (#1854)"
    },
    {
      "commit": "c70bffb37801775d83fc780216565eb807ad4baa",
      "tree": "ebd557d87d1ed9bb89e98c6b3b98448e22f325ec",
      "parents": [
        "2aef82f53b210e4c28a0b0b242e682db1ffb8462"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Jun 02 15:30:05 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 15:30:05 2026 +0000"
      },
      "message": "Bump actions/checkout from 6.0.2 to 6.0.3 in the github-actions group (#1846)\n\nBumps the github-actions group with 1 update: [actions/checkout](https://github.com/actions/checkout).\n\nUpdates `actions/checkout` from 6.0.2 to 6.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/actions/checkout/releases\"\u003eactions/checkout\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev6.0.3\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate changelog by \u003ca href\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2357\"\u003eactions/checkout#2357\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: expand merge commit SHA regex and add SHA-256 test cases by \u003ca href\u003d\"https://github.com/yaananth\"\u003e\u003ccode\u003e@​yaananth\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2414\"\u003eactions/checkout#2414\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix checkout init for SHA-256 repositories by \u003ca href\u003d\"https://github.com/yaananth\"\u003e\u003ccode\u003e@​yaananth\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2439\"\u003eactions/checkout#2439\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate changelog for v6.0.3 by \u003ca href\u003d\"https://github.com/yaananth\"\u003e\u003ccode\u003e@​yaananth\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2446\"\u003eactions/checkout#2446\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/yaananth\"\u003e\u003ccode\u003e@​yaananth\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2414\"\u003eactions/checkout#2414\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href\u003d\"https://github.com/actions/checkout/compare/v6...v6.0.3\"\u003ehttps://github.com/actions/checkout/compare/v6...v6.0.3\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/actions/checkout/blob/main/CHANGELOG.md\"\u003eactions/checkout\u0027s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003ch2\u003ev6.0.3\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix checkout init for SHA-256 repositories by \u003ca href\u003d\"https://github.com/yaananth\"\u003e\u003ccode\u003e@​yaananth\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2439\"\u003eactions/checkout#2439\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: expand merge commit SHA regex and add SHA-256 test cases by \u003ca href\u003d\"https://github.com/yaananth\"\u003e\u003ccode\u003e@​yaananth\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2414\"\u003eactions/checkout#2414\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev6.0.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix tag handling: preserve annotations and explicit fetch-tags by \u003ca href\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2356\"\u003eactions/checkout#2356\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev6.0.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd worktree support for persist-credentials includeIf by \u003ca href\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2327\"\u003eactions/checkout#2327\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev6.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePersist creds to a separate file by \u003ca href\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2286\"\u003eactions/checkout#2286\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate README to include Node.js 24 support details and requirements by \u003ca href\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2248\"\u003eactions/checkout#2248\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev5.0.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePort v6 cleanup to v5 by \u003ca href\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2301\"\u003eactions/checkout#2301\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev5.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate actions checkout to use node 24 by \u003ca href\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2226\"\u003eactions/checkout#2226\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.3.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePort v6 cleanup to v4 by \u003ca href\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2305\"\u003eactions/checkout#2305\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.3.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003edocs: update README.md by \u003ca href\u003d\"https://github.com/motss\"\u003e\u003ccode\u003e@​motss\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1971\"\u003eactions/checkout#1971\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd internal repos for checking out multiple repositories by \u003ca href\u003d\"https://github.com/mouismail\"\u003e\u003ccode\u003e@​mouismail\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1977\"\u003eactions/checkout#1977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocumentation update - add recommended permissions to Readme by \u003ca href\u003d\"https://github.com/benwells\"\u003e\u003ccode\u003e@​benwells\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2043\"\u003eactions/checkout#2043\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust positioning of user email note and permissions heading by \u003ca href\u003d\"https://github.com/joshmgross\"\u003e\u003ccode\u003e@​joshmgross\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2044\"\u003eactions/checkout#2044\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate README.md by \u003ca href\u003d\"https://github.com/nebuk89\"\u003e\u003ccode\u003e@​nebuk89\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2194\"\u003eactions/checkout#2194\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CODEOWNERS for actions by \u003ca href\u003d\"https://github.com/TingluoHuang\"\u003e\u003ccode\u003e@​TingluoHuang\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2224\"\u003eactions/checkout#2224\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate package dependencies by \u003ca href\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2236\"\u003eactions/checkout#2236\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.2.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eurl-helper.ts\u003c/code\u003e now leverages well-known environment variables by \u003ca href\u003d\"https://github.com/jww3\"\u003e\u003ccode\u003e@​jww3\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1941\"\u003eactions/checkout#1941\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExpand unit test coverage for \u003ccode\u003eisGhes\u003c/code\u003e by \u003ca href\u003d\"https://github.com/jww3\"\u003e\u003ccode\u003e@​jww3\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1946\"\u003eactions/checkout#1946\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.2.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCheck out other refs/* by commit if provided, fall back to ref by \u003ca href\u003d\"https://github.com/orhantoy\"\u003e\u003ccode\u003e@​orhantoy\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1924\"\u003eactions/checkout#1924\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.2.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Ref and Commit outputs by \u003ca href\u003d\"https://github.com/lucacome\"\u003e\u003ccode\u003e@​lucacome\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1180\"\u003eactions/checkout#1180\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDependency updates by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e- \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1777\"\u003eactions/checkout#1777\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1872\"\u003eactions/checkout#1872\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.1.7\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the minor-npm-dependencies group across 1 directory with 4 updates by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1739\"\u003eactions/checkout#1739\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 3 to 4 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1697\"\u003eactions/checkout#1697\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCheck out other refs/* by commit by \u003ca href\u003d\"https://github.com/orhantoy\"\u003e\u003ccode\u003e@​orhantoy\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1774\"\u003eactions/checkout#1774\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/df4cb1c069e1874edd31b4311f1884172cec0e10\"\u003e\u003ccode\u003edf4cb1c\u003c/code\u003e\u003c/a\u003e Update changelog for v6.0.3 (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2446\"\u003e#2446\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/1cce3390c2bfda521930d01229c073c7ff920824\"\u003e\u003ccode\u003e1cce339\u003c/code\u003e\u003c/a\u003e Fix checkout init for SHA-256 repositories (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/900f2210b1d28bbbd0bd22d17926b9e224e8f231\"\u003e\u003ccode\u003e900f221\u003c/code\u003e\u003c/a\u003e fix: expand merge commit SHA regex and add SHA-256 test cases (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2414\"\u003e#2414\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/0c366fd6a839edf440554fa01a7085ccba70ac98\"\u003e\u003ccode\u003e0c366fd\u003c/code\u003e\u003c/a\u003e Update changelog (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2357\"\u003e#2357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href\u003d\"https://github.com/actions/checkout/compare/de0fac2e4500dabe0009e67214ff5f5447ce83dd...df4cb1c069e1874edd31b4311f1884172cec0e10\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dactions/checkout\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d6.0.2\u0026new-version\u003d6.0.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s major version (unless you unignore this specific dependency\u0027s major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s minor version (unless you unignore this specific dependency\u0027s minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\u003c/details\u003e"
    },
    {
      "commit": "2aef82f53b210e4c28a0b0b242e682db1ffb8462",
      "tree": "15f9bbb6976e38918b67f40c2942c8831464aacc",
      "parents": [
        "596479f3134541ab1ae46c27fb91eaaee2ef26cc"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Mon Jun 01 18:29:24 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 01 18:29:24 2026 -0700"
      },
      "message": "Prefer to split call chains for single-element targets. (#1842)\n\nPrefer to split call chains for single-element targets.\n\nOne of the most challenging parts of formatting Dart code well is dealing with method call chains on targets that can themselves split. The formatter needs to decide whether to split the target and avoid splitting the call chain or vice versa. For example:\n\n```dart\n// Split target:\nfunction(\n  argument,\n).method().another();\n\n// Or split chain:\nfunction(argument)\n  .method()\n  .another();\n```\n\nHeuristics for that choice that look great on some callsites often make others look worse. I\u0027ve toyed with many variations over the years.\n\nThis adds a fairly simple rule based on the examples in (#1732): If the target of a call chain only has *one* element or argument, then prefer to split the call chain and keep the target together. So in the above example, if prefers the second output. If `function()` had multiple arguments, it would prefer the first.\n\nAn intuitive argument in favor of this rule is that when we split a comma-separated argument or element list, what feels most intuitive to readers is splitting *between* the elements. Then as a secondary effect, we also split around the delimiting brackets to. If there is only one element, then there\u0027s no way to split between them, only around them. That doesn\u0027t look as good, so this style change avoids that.\n\nPragmatically, I think the results of the new rule look good. You can see a diff of running this on a random assortment of pub packages [here](https://gist.github.com/munificent/7d39fa6cd7667e8b9d9458638753e4f3).\n\nThis is a larger change than most these days. I ran it on a large corpus of files from Pub:\n\n```\nAffected / total files : 3,511 / 93,664 (~3.7%)\nAffected / total lines : 35,770 / 22,424,287 (0.13%)\n```\n\nFor affected lines, I\u0027m ignoring additions and counting only the number of deleted lines from running `git diff --stat`. Since the formatter is always replacing a chunk of lines with another, I think that\u0027s a good way to measure the number of original lines which are impacted.\n\nFix #1732"
    },
    {
      "commit": "596479f3134541ab1ae46c27fb91eaaee2ef26cc",
      "tree": "43bcf99e13a973271090676774e4937d1d521718",
      "parents": [
        "1126984b4b86aeb8248095090dd914d0f5a00e66"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Thu May 28 14:56:40 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 28 14:56:40 2026 -0700"
      },
      "message": "Separate imports into sections. (#1843)\n\nSeparate imports into sections.\n\n\"Effective Dart\" has long told users to group imports by \"dart:\", \"package:\", and relative, with a blank line between each section. The formatter doesn\u0027t reorder imports, but it can at least put a blank line between imports that belong in different sections.\n\nFix #1120."
    },
    {
      "commit": "1126984b4b86aeb8248095090dd914d0f5a00e66",
      "tree": "9a5276b029697a62df5607c7cb323f94795ac178",
      "parents": [
        "6bb49059813823519002b1403650efa2194ef455"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Fri May 22 17:10:01 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 22 17:10:01 2026 -0700"
      },
      "message": "Move all tests to be explicitly versioned (#1841)\n\nMake tool/update_tests.dart smarter about versioning.\n\nBefore, it would only update the version-specific sections for each test that were explicitly authored, but wouldn\u0027t split them itself. Now, it fully handles generating the set of version-specific output expectations that are needed for each test.\n\nAlso updated all of the tests. This tweaked a few of them that either:\n\n* Had identical outputs specified for different versions which could be combined.\n\n* Had different outputs at different versions that weren\u0027t captured by the tests.\n\nThen remove support for unversioned test outputs.\n\nWhen I first added support for language versioning to the formatter, I was under time pressure and trying to minimize the scope of the changes. I didn\u0027t want a large amount of churn in the tests, so I left most of the tests alone and added support for both unversioned and versioned test outputs.\n\nNow that update_tests.dart is smart enough to handle versions, it\u0027s easy to update all of the tests to have all of their outputs versioned. This simplifies the test code because now we don\u0027t need to distinguish unversioned and versioned tests. I also thinks it makes it easier to read and understand the tests because each section always has an explicit version number now.\n\nI updated all of the tests using update_tests.dart. The changes are purely mechanical: adding \"3.6\" to every unversioned short test and \"3.7\" to every unversioned tall test."
    },
    {
      "commit": "6bb49059813823519002b1403650efa2194ef455",
      "tree": "87883efe2ea833841a08d3800f8b6c231e8c496b",
      "parents": [
        "f1d10e1e052116aeb3851f90ace55e5447b3bc21"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Fri May 01 16:10:02 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 01 16:10:02 2026 -0700"
      },
      "message": "Format the guard in an if-case to split if the pattern block splits. (#1836)\n\nFormat the guard in an if-case to split if the pattern block splits.\n\nThe formatter allows block-formatting in if-case patterns, like:\n\n```dart\nif (expression case Thing(\n  :var property,\n  :var another,\n)) {\n  ...\n}\n```\n\nIt also allows this if there is a guard clause:\n\n```dart\nif (expression case Thing(\n  :var property,\n  :var another,\n) when condition) {\n  ...\n}\n```\n\nBut, in general, I don\u0027t like when code gets buried at the end of a line like that. Also, because we allow this and because block-formatting is usually lower cost than other kinds of splits, it means the formatter prefers this:\n\n```dart\nif (expression case Thing(\n  :var property,\n) when condition) {\n  ...\n}\n```\n\nInstead of:\n\n```dart\nif (expression case Thing(:var property)\n    when condition) {\n  ...\n}\n```\n\nBut I think the latter is strictly better. This PR tweaks the formatting rule so that an if-case can only block-format the pattern if there is no guard clause. That leads it to prefer the latter of the previous two examples.\n\nIn practice, this tweak turns out to affect very little code. I ran it on a huge corpus of pub packages and there were [only 32 changes](https://gist.github.com/munificent/6be922e612850e98e849af20c6688ce0). To my eye, those all look like improvements.\n\nFix #1596."
    },
    {
      "commit": "f1d10e1e052116aeb3851f90ace55e5447b3bc21",
      "tree": "bb74f7958c54a27aac1493c7e6d673dfe578848b",
      "parents": [
        "0b95649f6b84b0220531c54b294410710f16b632"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Wed Apr 29 11:36:35 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 29 11:36:35 2026 -0700"
      },
      "message": "Allow block formatting \"as\", \"is\", and \"is!\" expressions. (#1835)\n\nAllow block formatting \"as\", \"is\", and \"is!\" expressions.\n\nType test expressions are in a funny spot. They aren\u0027t formatted consistently with other binary operators. But they also don\u0027t allow block-formatting. The end result is weird formatting in contexts where block-formatting is possible:\n\n```dart\n      // A block-formatted expression:\n      final buildConfig \u003d await BuildConfig.build(\n        outputDirectory: outputDirectory,\n        packageName: await _packageName(),\n        packageRoot: Directory.current.uri,\n      );\n\n      // A binary operator:\n      final buildConfig \u003d\n          BuildConfig.build(\n            outputDirectory: outputDirectory,\n            packageName: await _packageName(),\n            packageRoot: Directory.current.uri,\n          ) +\n          someLongExpression;\n\n      // A type test today:\n      final buildConfig \u003d\n          BuildConfig.build(\n                outputDirectory: outputDirectory,\n                packageName: await _packageName(),\n                packageRoot: Directory.current.uri,\n              )\n              as BuildConfigImpl;\n```\n\nDaco requested that the formatter allow them to be block-formatted, like:\n\n```dart\nfinal buildConfig \u003d BuildConfig.build(\n  outputDirectory: outputDirectory,\n  packageName: await _packageName(),\n  packageRoot: Directory.current.uri,\n) as BuildConfigImpl;\n```\n\nThat\u0027s what this PR does. You can see the overall effect on a random corpus of code [here](https://gist.github.com/munificent/07f1dd403bd3e055e64042719853703b)."
    },
    {
      "commit": "0b95649f6b84b0220531c54b294410710f16b632",
      "tree": "0c13ca6b31a03c535b3f077c91ec584b5a5b6b03",
      "parents": [
        "acfe70675968dd483f438e01223ca47aa47d6fc4"
      ],
      "author": {
        "name": "Kallen Tu",
        "email": "kallentu@google.com",
        "time": "Wed Apr 29 09:47:27 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 29 09:47:27 2026 -0700"
      },
      "message": "Tests with \u0027final\u0027 or \u0027var\u0027 are unsupported by 3.13. (#1834)"
    },
    {
      "commit": "acfe70675968dd483f438e01223ca47aa47d6fc4",
      "tree": "a378d3a21bb8d78bdbf00b80497d3f00028b2851",
      "parents": [
        "c365f88280ca77870f02ee9ff2158a48f1e2e5bc"
      ],
      "author": {
        "name": "Kevin Moore",
        "email": "kevmoo@users.noreply.github.com",
        "time": "Tue Apr 28 19:45:54 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 19:45:54 2026 -0700"
      },
      "message": "Optimize Solution state tracking by lazifying and sharing state. (#1824)\n\nThe tall style solver creates thousands of Solution objects during its\nbest-first search. Previously, each Solution eagerly initialized two empty\nmaps (_pieceStates and _allowedStates) and performed a shallow copy of\n_pieceStates during every expansion.\n\nThis change optimizes the state representation to eliminate redundant\nallocations and O(N) map copies:\n\n1.  Lazify map allocations: _pieceStates and _allowedStates are now\n    nullable and only allocated when a piece is bound or a constraint is\n    applied. This skips map creation for the majority of Solutions.\n2.  Persistent state tracking: Replaced the _pieceStates Map with a\n    persistent linked list (_StateNode).\n    - \u0027Copying\u0027 a solution\u0027s state is now O(1) by sharing the list tail.\n    - Lookups are O(N) where N is the number of bound pieces. Since N is\n      typically very small in the solver\u0027s hot path (\u003c 20), this is faster\n      than map hashing and allocation.\n\nCumulative Performance Impact:\n- infix_large.unit: ~10.4% faster (0.51ms -\u003e 0.46ms)\n- large.unit:       ~16.5% faster (3.30ms -\u003e 2.83ms)\n- chain.unit:       ~18.4% faster (0.68ms -\u003e 0.58ms)\n\nThese changes are strictly behavior-neutral and result in a significant\nreduction in GC pressure and solver execution time."
    },
    {
      "commit": "c365f88280ca77870f02ee9ff2158a48f1e2e5bc",
      "tree": "e738341208b4b5150def244e67957a5be392512a",
      "parents": [
        "91f85cc453a27cbb0cfa852cf9d673b61bc92eb7"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Tue Apr 28 18:18:35 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 18:18:35 2026 -0700"
      },
      "message": "Support block-formatting parameter lists. (#1832)\n\nWhen I first designed the tall style, as the name implies, I erred on the side of taller, simpler formatting. I knew some things should be block formatted. (No one wants their `test(() { ... })` calls to split after the first `(`.) But it wasn\u0027t clear if every bracketed syntax should be.\n\nInitially the answer was yes for argument lists and collection literals. Then a user requested we include record type annotations. Then another user pointed out that block-formatting record types in typedefs but not function types is inconsistent. So here, I go ahead and block format parameter lists too.\n\nThis change doesn\u0027t affect a ton of code in the wild because type annotations don\u0027t often occur in contexts where block formatting comes into play. Block formatting is mainly for the RHS of `\u003d` and `:` and you don\u0027t usually have function types or function declarations there. But you can have a function type on the right of `\u003d` in a typedef, and you can have function *expressions* on the right of `\u003d`, especially in default values.\n\nStill, this change effects enough that I figured it was safest to language-version it.\n\nFix #1693."
    },
    {
      "commit": "91f85cc453a27cbb0cfa852cf9d673b61bc92eb7",
      "tree": "3e209413f97469ae3bc32be26123b44a36eb232e",
      "parents": [
        "155c6aed52cff7293f35edc840108b0be71dffef"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Tue Apr 28 16:17:44 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 16:17:44 2026 -0700"
      },
      "message": "Handle unsupported language versions in formatter tests. (#1829)\n\nHandle unsupported language versions in formatter tests.\n\nIt\u0027s rare but sometimes Dart removes support for syntax. That means a formatter test may need to be run at some version X but not be valid at X+1. Until recently, the only tests where that was true was the tests for the old constant expression syntax in Dart prior to 3.0. To handle that, there were some hacks where a versioned short style test only ran at that version. This is unlike other versioned tests where the version specifies the lower bound to run at, not the upper.\n\nWith primary constructors, we have more syntax that is no longer valid in a later Dart version: using `var` and `final` as modifiers. I expect that over time, we\u0027ll have more removed syntax like this.\n\nTo accommodate that, formatter tests can now directly specify an upper limit version where the test should no longer be run at. This removes the hack for short style and gives us a more explicit way to handle future syntax removals.\n\nI also:\n\n- Updated the short style switch test to use the new test syntax.\n\n- Updated the `var` and `final` on parameter tests to use the new test syntax.\n\n- Moved the somewhat hacky code for figuring out what language versions exist to a centralized `DartVersionHistory` class.\n\n- Made `dart format --version --verbose` print the supported language versions."
    },
    {
      "commit": "155c6aed52cff7293f35edc840108b0be71dffef",
      "tree": "308afa660d55ac547fa807ad9e3d418fa4216dcf",
      "parents": [
        "8d9e0b7e88c74d4947eb0ee8c5873676c160b4c9"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Tue Apr 28 16:04:18 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 16:04:18 2026 -0700"
      },
      "message": "Fix bug in list splitting optimization. (#1828)\n\nFix bug in list splitting optimization.\n\nIf we can tell that a Piece must split into a certain state simply\nbecause of the size of its contents, it\u0027s helpful to figure that out\nearly on before running the solver. Knowing that there are fixed splits\nbefore solving lets us break the piece tree into smaller individually\nformatted sections.\n\nIt\u0027s important that this optimization is conservative: it should never\nforce a piece to split when the solver may actually find a way to not\nsplit it.\n\nThe most important piece to apply this optimization to is ListPiece\nsince so much Dart code (especially Flutter UI code) is big nested trees\nof argument lists and collection literals which all use ListPiece.\n\nThe optimization is simple in most lists: if the character length of all\nof the elements is wider than the page, the list will definitely split.\nBut some lists contain elements that may be block formatted, which\ncomplicates this:\n\n```dart\n  test(\u0027------------------ my long test name ------------------\u0027, () async {\n    // My test code\n  }, testOn: \u0027vm \u0026\u0026 linux\u0027);\n```\n\nHere, since `testOn:` can be block formatted, we can\u0027t treat it like a\nnormal element when seeing if the list should split. In particular, the\nelements before and after it are no longer on the same line, so we\nshouldn\u0027t add their lengths when seeing if the list should be forced to\nsplit.\n\nThis regresses the flutter_scrollbar_test microbenchmark by 50%, which\nis a drag, but the other benchmarks are unchanged or slightly improved.\nSince this is fixing a correctness issue, I think it\u0027s worth the cost.\n\nFix #1809."
    },
    {
      "commit": "8d9e0b7e88c74d4947eb0ee8c5873676c160b4c9",
      "tree": "392d0747a44d4522be99d2f1ef59e17073bd17ac",
      "parents": [
        "08680414e682fcf7ad34a135a6bafbd5360081e9"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Tue Apr 28 15:59:25 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 15:59:25 2026 -0700"
      },
      "message": "Don\u0027t add a blank line before a comment at the end of a file or body. (#1831)\n\nDon\u0027t add a blank line before a comment at the end of a file or body.\n\nIn rare cases where you have a declaration with a braced body at the end of a block or file and there is a comment immediately after it, the formatter would place a blank line before the comment. It wouldn\u0027t do that if there was any other code after the comment.\n\nFor example, prior to this change, if you ran the formatter on:\n\n```dart\nmain() {\n  a() {\n    ;\n  }\n  // Comment 1.\n\n  b() {\n    ;\n  }\n  // Comment 2.\n}\n```\n\nIt would produce:\n\n```dart\nmain() {\n  a() {\n    ;\n  }\n  // Comment 1.\n\n  b() {\n    ;\n  }\n\n  // Comment 2.\n}\n```\n\nNote how a blank line was added above `// Comment 2.` but not `// Comment 1.`. Now, it won\u0027t add a blank line before the last comment.\n\nFix #1644."
    },
    {
      "commit": "08680414e682fcf7ad34a135a6bafbd5360081e9",
      "tree": "9504b0d3e0f0932c20db8f5fc6990efcdfa4f1a7",
      "parents": [
        "7133478dc3bd0a16999e5939ceff6d19e460e97f"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Tue Apr 28 15:36:16 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 15:36:16 2026 -0700"
      },
      "message": "Update workflows and SDK constraint to 3.11. (#1830)\n\nUpdate workflows and SDK constraint to 3.11.\n\nNow that dart_style requires analyzer 13.0.0, it doesn\u0027t work on older SDKs."
    },
    {
      "commit": "7133478dc3bd0a16999e5939ceff6d19e460e97f",
      "tree": "9b504041f0d9d1e8816cbe58239b60385632ad41",
      "parents": [
        "c9975c66895011079bb3a98dc2271f4e038d45e8"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Mon Apr 20 15:29:54 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 20 15:29:54 2026 -0700"
      },
      "message": "Add a script to run a single test. (#1827)\n\nHarvesting this code out of example/format.dart to make it easier for\nagents to invoke it."
    },
    {
      "commit": "c9975c66895011079bb3a98dc2271f4e038d45e8",
      "tree": "848f33ac8cfbe196c04aa8a886bb691060f23f2b",
      "parents": [
        "4b77cd8a0c217673de6f6f23dc56a5e1192144d6"
      ],
      "author": {
        "name": "Konstantin Scheglov",
        "email": "scheglov@google.com",
        "time": "Thu Apr 16 13:23:53 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 13:23:53 2026 -0700"
      },
      "message": "Require analyzer ^13.0.0, with breaking changes. (#1821)\n\n* Require analyzer ^13.0.0, with breaking changes.\n\n* Update comment on writeTokenAssignment()\n\n* Remove unnecessary type arguments."
    },
    {
      "commit": "4b77cd8a0c217673de6f6f23dc56a5e1192144d6",
      "tree": "0eaed11b494ecee07ff0c48c3330b08316e3649d",
      "parents": [
        "f510a0a5f5f5b41a59dfbbd9853da821e1a02d90"
      ],
      "author": {
        "name": "Kallen Tu",
        "email": "kallentu@google.com",
        "time": "Mon Apr 13 15:31:36 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 13 15:31:36 2026 -0700"
      },
      "message": "Support primary constructors in short style. (#1823)\n\n* Support primary constructors in short style.\n\n* Update name part.\n\n* Enum tests.\n\n* Remove lines.\n\n* Formatting for enums and adding helpers.\n\n* Refactor visitors."
    },
    {
      "commit": "f510a0a5f5f5b41a59dfbbd9853da821e1a02d90",
      "tree": "f9d302e33fbdc90751bc084e81fb8fa022d62b32",
      "parents": [
        "25880b121540d0ef69a5cf24d937b8095d307976"
      ],
      "author": {
        "name": "Kallen Tu",
        "email": "kallentu@google.com",
        "time": "Fri Apr 10 13:29:43 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 10 13:29:43 2026 -0700"
      },
      "message": "Fix tests with final and/or var parameters. (#1822)"
    },
    {
      "commit": "25880b121540d0ef69a5cf24d937b8095d307976",
      "tree": "b2c39ee208af9ce6c01893ef9f25bf435ea5caad",
      "parents": [
        "5ed5aadd8cfb0228668e286ab45977f989352b48"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Apr 01 16:35:51 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 01 16:35:51 2026 +0000"
      },
      "message": "Bump dart-lang/setup-dart in the github-actions group (#1819)\n\nBumps the github-actions group with 1 update: [dart-lang/setup-dart](https://github.com/dart-lang/setup-dart).\n\nUpdates `dart-lang/setup-dart` from 1.7.1 to 1.7.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/dart-lang/setup-dart/releases\"\u003edart-lang/setup-dart\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.7.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Node.js requirement to Node 24.\u003c/li\u003e\n\u003cli\u003eFix open Dependabot alerts by bumping \u003ccode\u003eundici\u003c/code\u003e to \u003ccode\u003e\u0026gt;\u003d6.24.0\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eUpdate GitHub Action dependencies (\u003ccode\u003e@actions/core\u003c/code\u003e, \u003ccode\u003e@actions/exec\u003c/code\u003e, \u003ccode\u003e@actions/tool-cache\u003c/code\u003e, \u003ccode\u003e@actions/http-client\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eUpdate workflow actions to their latest versions (\u003ccode\u003eactions/checkout\u003c/code\u003e v6, \u003ccode\u003esetup-flutter\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/dart-lang/setup-dart/blob/main/CHANGELOG.md\"\u003edart-lang/setup-dart\u0027s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.7.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Node.js requirement to Node 24.\u003c/li\u003e\n\u003cli\u003eFix open Dependabot alerts by bumping \u003ccode\u003eundici\u003c/code\u003e to \u003ccode\u003e\u0026gt;\u003d6.24.0\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eUpdate GitHub Action dependencies (\u003ccode\u003e@actions/core\u003c/code\u003e, \u003ccode\u003e@actions/exec\u003c/code\u003e, \u003ccode\u003e@actions/tool-cache\u003c/code\u003e, \u003ccode\u003e@actions/http-client\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eUpdate workflow actions to their latest versions (\u003ccode\u003eactions/checkout\u003c/code\u003e v6, \u003ccode\u003esetup-flutter\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.7.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRoll \u003ccode\u003eundici\u003c/code\u003e dependency to address \u003ca href\u003d\"https://github.com/nodejs/undici/security/advisories/GHSA-c76h-2ccp-4975\"\u003eCVE-2025-22150\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdate to the latest npm dependencies.\u003c/li\u003e\n\u003cli\u003eRecompile the action using the new Dart / JavaScript interop.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.7.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eInstall flutter sdk in publishing step, allowing Flutter packages to be\npublished (\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/68\"\u003e#68\u003c/a\u003e[])\u003c/p\u003e\n\u003cp\u003e\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/68\"\u003e#68\u003c/a\u003e: \u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/68\"\u003edart-lang/setup-dart#68\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.6.5\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix zip path handling on Windows 11 (\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/118\"\u003e#118\u003c/a\u003e[])\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/118\"\u003e#118\u003c/a\u003e: \u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/118\"\u003edart-lang/setup-dart#118\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.6.4\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRebuild JS code.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.6.3\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRoll \u003ccode\u003eundici\u003c/code\u003e dependency to address \u003ca href\u003d\"https://github.com/nodejs/undici/security/advisories/GHSA-m4v8-wqvr-p9f7\"\u003eCVE-2024-30260\u003c/a\u003e and \u003ca href\u003d\"https://github.com/nodejs/undici/security/advisories/GHSA-9qxr-qj54-h672\"\u003eCVE-2024-30261\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.6.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSwitch to running the workflow on \u003ccode\u003enode20`` from \u003c/code\u003enode16`. See also\n\u003ca href\u003d\"https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/\"\u003eTransitioning from Node 16 to Node 20\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.6.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated the google storage url for \u003ccode\u003emain\u003c/code\u003e channel releases.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/dart-lang/setup-dart/commit/65eb853c7ba17dde3be364c3d2858773e7144260\"\u003e\u003ccode\u003e65eb853\u003c/code\u003e\u003c/a\u003e chore: prepare v1.7.2 release (\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/175\"\u003e#175\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/dart-lang/setup-dart/commit/6e0ff0bc3a029a9532ae6a86b1ea4906038921bc\"\u003e\u003ccode\u003e6e0ff0b\u003c/code\u003e\u003c/a\u003e Node 24 (\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/174\"\u003e#174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/dart-lang/setup-dart/commit/03a180dbe1de8ea7fb700663cbb7d24ca4bbe82c\"\u003e\u003ccode\u003e03a180d\u003c/code\u003e\u003c/a\u003e Group npm dependency updates (\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/172\"\u003e#172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/dart-lang/setup-dart/commit/74195ec01a320a45702f5d8d9aaae896f5a0b540\"\u003e\u003ccode\u003e74195ec\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003e@​actions/exec\u003c/code\u003e from 1.1.1 to 3.0.0 (\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/167\"\u003e#167\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/dart-lang/setup-dart/commit/41705c951d02aaf00ead5b0423d0808ea495d9b5\"\u003e\u003ccode\u003e41705c9\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003e@​actions/core\u003c/code\u003e from 1.11.1 to 3.0.0 (\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/168\"\u003e#168\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/dart-lang/setup-dart/commit/dd42013d4425790a72c8c6107773a99edeefd2a9\"\u003e\u003ccode\u003edd42013\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003e@​actions/tool-cache\u003c/code\u003e from 2.0.2 to 4.0.0 (\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/169\"\u003e#169\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/dart-lang/setup-dart/commit/b36cb5e0e609c7313088a6614db391df98780dce\"\u003e\u003ccode\u003eb36cb5e\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003e@​actions/http-client\u003c/code\u003e from 3.0.0 to 4.0.0 (\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/170\"\u003e#170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/dart-lang/setup-dart/commit/21e68f4d54916e6c2f68f8c290b2aed9b02cbd3e\"\u003e\u003ccode\u003e21e68f4\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 5 to 6 in the github-actions group (\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/162\"\u003e#162\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/dart-lang/setup-dart/commit/0bdb60234eb044854c1c73fb77b0f063cf290512\"\u003e\u003ccode\u003e0bdb602\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003e@​actions/http-client\u003c/code\u003e from 2.2.3 to 3.0.0 (\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/160\"\u003e#160\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/dart-lang/setup-dart/commit/daef289245bc5d4ab7864e0788a58108a9be6c99\"\u003e\u003ccode\u003edaef289\u003c/code\u003e\u003c/a\u003e Bump flutter-actions/setup-flutter in the github-actions group (\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/159\"\u003e#159\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href\u003d\"https://github.com/dart-lang/setup-dart/compare/e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c...65eb853c7ba17dde3be364c3d2858773e7144260\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003ddart-lang/setup-dart\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d1.7.1\u0026new-version\u003d1.7.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s major version (unless you unignore this specific dependency\u0027s major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s minor version (unless you unignore this specific dependency\u0027s minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\u003c/details\u003e"
    },
    {
      "commit": "5ed5aadd8cfb0228668e286ab45977f989352b48",
      "tree": "e5553a99223ffb6e0a022868db2c26ce4e0e56d9",
      "parents": [
        "f662cf6281b9417c1b731ae5639d80e8aaad4187"
      ],
      "author": {
        "name": "Kevin Moore",
        "email": "kevmoo@users.noreply.github.com",
        "time": "Mon Mar 30 10:16:10 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 10:16:10 2026 -0700"
      },
      "message": "Fix IOFileSystemPath printing during package resolution exceptions (#1818)\n\nThe `IOFileSystemPath` object lacked a `toString()` method, leading to `Instance of \u0027IOFileSystemPath\u0027` being rendered in error strings. When `PackageResolutionException` was thrown encountering package resolution errors while reading analysis options, the path output was masked.\n\nThis change adds `toString()` to `IOFileSystemPath` to output the correct underlying file system `.path`. A test is also added to `io_file_system_test.dart` preventing regressions.\n\n* Also improve incorrect error messages about while analysis_options couldn\u0027t be found"
    },
    {
      "commit": "f662cf6281b9417c1b731ae5639d80e8aaad4187",
      "tree": "69c48e2d1631eb14c2cdbe13a209501fe6b2b6e3",
      "parents": [
        "2d8c5dccad840a231f56bd840b0412b86b3e023e"
      ],
      "author": {
        "name": "Kallen Tu",
        "email": "kallentu@google.com",
        "time": "Fri Mar 20 17:09:36 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 20 17:09:36 2026 -0700"
      },
      "message": "Unit tests for mixins, enums and extensions with a `;` body. (#1817)"
    },
    {
      "commit": "2d8c5dccad840a231f56bd840b0412b86b3e023e",
      "tree": "5b6fc51bce52833f060149db9e0bd8a3b186bd44",
      "parents": [
        "9b302dd20b4b38979352f21cf515b44617d344ce"
      ],
      "author": {
        "name": "Kevin Moore",
        "email": "kevmoo@users.noreply.github.com",
        "time": "Wed Mar 18 21:40:35 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 18 21:40:35 2026 -0700"
      },
      "message": "Bump version to 3.1.8 (#1816)\n\nCo-authored-by: Kallen Tu \u003ckallentu@google.com\u003e"
    },
    {
      "commit": "9b302dd20b4b38979352f21cf515b44617d344ce",
      "tree": "441e88d23b6ead1510389f08e03fc1f65d22cd70",
      "parents": [
        "3359feac81da31e28a4f3fb8672afa46a368bc5f"
      ],
      "author": {
        "name": "Konstantin Scheglov",
        "email": "scheglov@google.com",
        "time": "Sun Mar 15 09:28:54 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 15 09:28:54 2026 -0700"
      },
      "message": "Require analyzer ^12.0.0, with breaking changes. (#1815)"
    },
    {
      "commit": "3359feac81da31e28a4f3fb8672afa46a368bc5f",
      "tree": "c74cbb453d627533e55c5e74ef86b1c42326ae51",
      "parents": [
        "a0f21e86a7a0ba52f11f46e3ed2ad1144616b512"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Mon Mar 09 15:43:09 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 09 15:43:09 2026 -0700"
      },
      "message": "Primary constructors (#1807)\n\n* Begin supporting primary constructors.\n\nSince primary constructors adds a lot of new syntax and fairly complex\nformatting for all of the things that can now go in a class header, I\u0027m\nbreaking it into several commits.\n\nThis first commit only adds support for `;` as a class or extension type\nbody. That adds yet another wrinkle to writeType(), which was getting\nvery cumbersome, so I went ahead and split it out into a builder class\nthat makes it easier to mix and match the various things that can go in\nthe header and the different kinds of bodies.\n\n* Format constructors defined using `new` or `factory`.\n\nSince those are already allowed as modifiers, there isn\u0027t much to do\nhere except to add tests and remove the extra space if there is nothing\nbetween the keyword and the parameter list.\n\n* Format primary constructor parameter lists.\n\nThis is the big change. Now that we have both parameter lists and other\nclauses in the class header, deciding how to split and indent them gets\na lot more complex.\n\nThis introduces a new piece to manage the constraints between the\nparameter list and clauses. I think it produces pretty nice output and\ngenerally avoids leaving the clauses hanging when the parameter list\nsplits.\n\nThis change also unifies how extension type representation clauses are\nformatted with how primary constructors are formatted. Prior to this,\nit had its own bespoke code path. That code path didn\u0027t follow the\nexact same formatting rules as parameter lists and could look different\nin weird cases. It also didn\u0027t have the nice rules this PR adds for\nprimary constructors.\n\nIn practice, I think it\u0027s rare for an extension type representation to\nsplit and, when it does, I think this PR produces uniformly better\nformatting. Because of that, I didn\u0027t language version that minor style\nchange. Preserving the old formatting for older language versions would\nbe pretty annoying because it would have to have a separate code path\nfor the extension extension type.\n\n* Format declaring parameters.\n\nDidn\u0027t require much implementation work because the language already\nsupported `final` and `var` on parameters (with different meaning), so\nthe formatter support was there.\n\n* Set 3.13 as the anticipated release version for primary constructors.\n\n(We can change it again if it ends up not being 3.13, but it definitely\nwon\u0027t be 3.11 or 3.12.)\n\n* Tweak blank lines around top-level declarations.\n\n* Don\u0027t force blank lines around declarations whose body is `;`. This\n  allows:\n\n  ```dart\n  sealed class Expr;\n  class IntExpr(final int value) extends Expr;\n  class PlusExpr(final Expr left, final Expr right) extends Expr;\n  ```\n\n* Do force blank lines around mixin and extension types whose body is\n  not `;`. The formatter should have always worked this way, but I\n  overlooked mixins and extension types. Classes, enums, extensions all\n  already are formatted this way.\n\n* Test splitting around \"const\" or primary constructor name.\n\n* Format primary constructor initializer bodies.\n\n* Test that named and optional parameters work in a primary constructor.\n\n* Add tests for preserving trailing commas in primary constructors.\n\n* Apply review feedback.\n\n* Fix duplicated 3.1.6 entry.\n\n---------\n\nCo-authored-by: Kallen Tu \u003ckallentu@google.com\u003e"
    },
    {
      "commit": "a0f21e86a7a0ba52f11f46e3ed2ad1144616b512",
      "tree": "1b60eaa701990cffcf902311ab4c47a81713a368",
      "parents": [
        "4f93caf9c638bb6efc62356a3e35b0b342f10c00"
      ],
      "author": {
        "name": "Kevin Moore",
        "email": "kevmoo@users.noreply.github.com",
        "time": "Fri Mar 06 17:40:47 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 06 17:40:47 2026 -0800"
      },
      "message": "v3.1.7: support the latest pkg:analyzer (#1812)"
    },
    {
      "commit": "4f93caf9c638bb6efc62356a3e35b0b342f10c00",
      "tree": "8e5d9750ff15f17473e16d0be33ed6d88141ee8e",
      "parents": [
        "a6b10dcc3db33597d058cdd602c6059137550b9b"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Wed Feb 25 17:24:30 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 25 17:24:30 2026 -0800"
      },
      "message": "Bump version to get ready to publish. (#1811)\n\n"
    },
    {
      "commit": "a6b10dcc3db33597d058cdd602c6059137550b9b",
      "tree": "235ea136c03f00e35f6224d48f669ff738a0a61a",
      "parents": [
        "a1458c4397882444efa6fe3cbbb8343c7149e52a"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Tue Feb 24 13:36:32 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Feb 24 13:36:32 2026 -0800"
      },
      "message": "Add enum trailing comma fix to CHANGELOG. (#1810)\n\nThis is the CHANGELOG entry for:\n\nhttps://github.com/dart-lang/dart_style/pull/1806."
    },
    {
      "commit": "a1458c4397882444efa6fe3cbbb8343c7149e52a",
      "tree": "d5230952e5e807d98d3bf6ca77e1b3fb194b7611",
      "parents": [
        "b9867aa70dc322fe1b647f75a7a561c151a80c38"
      ],
      "author": {
        "name": "Barbirosha",
        "email": "132715839+Barbirosha@users.noreply.github.com",
        "time": "Tue Feb 24 23:09:16 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Feb 24 13:09:16 2026 -0800"
      },
      "message": "Fix enum semicolon moved to new line with  trailing_commas: preserve (#1806)\n\n"
    },
    {
      "commit": "b9867aa70dc322fe1b647f75a7a561c151a80c38",
      "tree": "d4d7ca149c2aabd59c7e723bf3e56785d23ae222",
      "parents": [
        "0d56d8550440f19bb2a67b691859a22304486e02"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Mon Feb 23 15:53:43 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 23 15:53:43 2026 -0800"
      },
      "message": "Bump the latest supported language version to 3.12. (#1808)\n\n"
    },
    {
      "commit": "0d56d8550440f19bb2a67b691859a22304486e02",
      "tree": "305d2eceb4ed656d8e92733d6dd32e217dda388c",
      "parents": [
        "726465dd6827d107176dc61d7833e1224c0a4f59"
      ],
      "author": {
        "name": "Naman Goyal",
        "email": "namangoyaldev@gmail.com",
        "time": "Sat Feb 14 20:49:43 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Feb 14 07:19:43 2026 -0800"
      },
      "message": "Fix package resolution error to include file path (#1799)\n\nFixes #1797"
    },
    {
      "commit": "726465dd6827d107176dc61d7833e1224c0a4f59",
      "tree": "893ea9fa3d72d3d3c3564e7d3e683e25dc349c19",
      "parents": [
        "4d4c889df64f9cbe7055ed2596376b643684e015"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Feb 13 11:16:24 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 13 11:16:24 2026 -0800"
      },
      "message": "Bump actions/checkout from 6.0.1 to 6.0.2 in the github-actions group (#1800)\n\nBumps the github-actions group with 1 update: [actions/checkout](https://github.com/actions/checkout).\n\n\nUpdates `actions/checkout` from 6.0.1 to 6.0.2\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/8e8c483db84b4bee98b60c0593521ed34d9990e8...de0fac2e4500dabe0009e67214ff5f5447ce83dd)\n\n---\nupdated-dependencies:\n- dependency-name: actions/checkout\n  dependency-version: 6.0.2\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "4d4c889df64f9cbe7055ed2596376b643684e015",
      "tree": "fa942c41bab14768c6b408a11f277ca0ba07fadd",
      "parents": [
        "f4d6e4d1a41ba1f8aaa95aa44732bc42913d5300"
      ],
      "author": {
        "name": "Kevin Moore",
        "email": "kevmoo@users.noreply.github.com",
        "time": "Fri Feb 13 11:13:14 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 13 11:13:14 2026 -0800"
      },
      "message": "fix: new analyzer lints (#1804)\n\n"
    },
    {
      "commit": "f4d6e4d1a41ba1f8aaa95aa44732bc42913d5300",
      "tree": "51eaab1db65b2e8975aea9ee401e24ced1c07ae5",
      "parents": [
        "f624489a5013ec58de469d4fd8793c283f62b5d8"
      ],
      "author": {
        "name": "Lasse R.H. Nielsen",
        "email": "lrn@google.com",
        "time": "Thu Feb 05 16:32:29 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 05 16:32:29 2026 +0100"
      },
      "message": "Retire experiments that are now released. (#1779)\n\n* Retire experiments that are now released.\n"
    },
    {
      "commit": "f624489a5013ec58de469d4fd8793c283f62b5d8",
      "tree": "7ee0c245866ffdb7c3fbd8f81001494bb3e46436",
      "parents": [
        "bdae98cead73a436920f890626aa81cf3f2f8904"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Fri Jan 23 11:13:47 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jan 23 11:13:47 2026 -0800"
      },
      "message": "Add support for language version 3.11. (#1798)\n\nThere are no meaningful changes."
    },
    {
      "commit": "bdae98cead73a436920f890626aa81cf3f2f8904",
      "tree": "d68fb61988f20d20b97e0783596f76920067cea2",
      "parents": [
        "af2e7702d8746c673547e1a2325da615a9e5142f"
      ],
      "author": {
        "name": "Konstantin Scheglov",
        "email": "scheglov@google.com",
        "time": "Mon Jan 12 10:31:16 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jan 12 10:31:16 2026 -0800"
      },
      "message": "Require analyzer 10.0.0, stop using deprecated nodes and properties. (#1795)\n\n* Require analyzer 10.0.0, stop using deprecated nodes and properties.\n\n* Prepare for publishing 3.1.4, remove -wip.\n\n* Fixes for review comments."
    },
    {
      "commit": "af2e7702d8746c673547e1a2325da615a9e5142f",
      "tree": "89be074a3a72ce4a3039dac2d2451254c0b7f8bb",
      "parents": [
        "d1c9edc90370c3feaea703b418e8ef7818bc46f6"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Jan 01 13:05:06 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 01 13:05:06 2026 +0000"
      },
      "message": "Bump actions/checkout from 6.0.0 to 6.0.1 in the github-actions group (#1793)\n\nBumps the github-actions group with 1 update: [actions/checkout](https://github.com/actions/checkout).\n\nUpdates `actions/checkout` from 6.0.0 to 6.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/actions/checkout/releases\"\u003eactions/checkout\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev6.0.1\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate all references from v5 and v4 to v6 by \u003ca href\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2314\"\u003eactions/checkout#2314\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd worktree support for persist-credentials includeIf by \u003ca href\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2327\"\u003eactions/checkout#2327\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClarify v6 README by \u003ca href\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2328\"\u003eactions/checkout#2328\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href\u003d\"https://github.com/actions/checkout/compare/v6...v6.0.1\"\u003ehttps://github.com/actions/checkout/compare/v6...v6.0.1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/8e8c483db84b4bee98b60c0593521ed34d9990e8\"\u003e\u003ccode\u003e8e8c483\u003c/code\u003e\u003c/a\u003e Clarify v6 README (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2328\"\u003e#2328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/033fa0dc0b82693d8986f1016a0ec2c5e7d9cbb1\"\u003e\u003ccode\u003e033fa0d\u003c/code\u003e\u003c/a\u003e Add worktree support for persist-credentials includeIf (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2327\"\u003e#2327\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/c2d88d3ecc89a9ef08eebf45d9637801dcee7eb5\"\u003e\u003ccode\u003ec2d88d3\u003c/code\u003e\u003c/a\u003e Update all references from v5 and v4 to v6 (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2314\"\u003e#2314\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href\u003d\"https://github.com/actions/checkout/compare/1af3b93b6815bc44a9784bd300feb67ff0d1eeb3...8e8c483db84b4bee98b60c0593521ed34d9990e8\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dactions/checkout\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d6.0.0\u0026new-version\u003d6.0.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s major version (unless you unignore this specific dependency\u0027s major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s minor version (unless you unignore this specific dependency\u0027s minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\u003c/details\u003e"
    },
    {
      "commit": "d1c9edc90370c3feaea703b418e8ef7818bc46f6",
      "tree": "bddb231891a8ff6315feb7e662473d9125f27f17",
      "parents": [
        "f9825b8cfdc41dc4d41bc73974f30e14e634b78c"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Dec 01 15:36:12 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Dec 01 15:36:12 2025 +0000"
      },
      "message": "Bump actions/checkout from 5.0.0 to 6.0.0 in the github-actions group (#1790)\n\nBumps the github-actions group with 1 update: [actions/checkout](https://github.com/actions/checkout).\n\nUpdates `actions/checkout` from 5.0.0 to 6.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/actions/checkout/releases\"\u003eactions/checkout\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev6.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate README to include Node.js 24 support details and requirements by \u003ca href\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2248\"\u003eactions/checkout#2248\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePersist creds to a separate file by \u003ca href\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2286\"\u003eactions/checkout#2286\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ev6-beta by \u003ca href\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2298\"\u003eactions/checkout#2298\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eupdate readme/changelog for v6 by \u003ca href\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2311\"\u003eactions/checkout#2311\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href\u003d\"https://github.com/actions/checkout/compare/v5.0.0...v6.0.0\"\u003ehttps://github.com/actions/checkout/compare/v5.0.0...v6.0.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev6-beta\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cp\u003eUpdated persist-credentials to store the credentials under \u003ccode\u003e$RUNNER_TEMP\u003c/code\u003e instead of directly in the local git config.\u003c/p\u003e\n\u003cp\u003eThis requires a minimum Actions Runner version of \u003ca href\u003d\"https://github.com/actions/runner/releases/tag/v2.329.0\"\u003ev2.329.0\u003c/a\u003e to access the persisted credentials for \u003ca href\u003d\"https://docs.github.com/en/actions/tutorials/use-containerized-services/create-a-docker-container-action\"\u003eDocker container action\u003c/a\u003e scenarios.\u003c/p\u003e\n\u003ch2\u003ev5.0.1\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePort v6 cleanup to v5 by \u003ca href\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2301\"\u003eactions/checkout#2301\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href\u003d\"https://github.com/actions/checkout/compare/v5...v5.0.1\"\u003ehttps://github.com/actions/checkout/compare/v5...v5.0.1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/actions/checkout/blob/main/CHANGELOG.md\"\u003eactions/checkout\u0027s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003ch2\u003eV6.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePersist creds to a separate file by \u003ca href\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2286\"\u003eactions/checkout#2286\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate README to include Node.js 24 support details and requirements by \u003ca href\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2248\"\u003eactions/checkout#2248\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eV5.0.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePort v6 cleanup to v5 by \u003ca href\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2301\"\u003eactions/checkout#2301\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eV5.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate actions checkout to use node 24 by \u003ca href\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2226\"\u003eactions/checkout#2226\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eV4.3.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePort v6 cleanup to v4 by \u003ca href\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2305\"\u003eactions/checkout#2305\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eV4.3.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003edocs: update README.md by \u003ca href\u003d\"https://github.com/motss\"\u003e\u003ccode\u003e@​motss\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1971\"\u003eactions/checkout#1971\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd internal repos for checking out multiple repositories by \u003ca href\u003d\"https://github.com/mouismail\"\u003e\u003ccode\u003e@​mouismail\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1977\"\u003eactions/checkout#1977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocumentation update - add recommended permissions to Readme by \u003ca href\u003d\"https://github.com/benwells\"\u003e\u003ccode\u003e@​benwells\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2043\"\u003eactions/checkout#2043\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust positioning of user email note and permissions heading by \u003ca href\u003d\"https://github.com/joshmgross\"\u003e\u003ccode\u003e@​joshmgross\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2044\"\u003eactions/checkout#2044\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate README.md by \u003ca href\u003d\"https://github.com/nebuk89\"\u003e\u003ccode\u003e@​nebuk89\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2194\"\u003eactions/checkout#2194\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CODEOWNERS for actions by \u003ca href\u003d\"https://github.com/TingluoHuang\"\u003e\u003ccode\u003e@​TingluoHuang\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2224\"\u003eactions/checkout#2224\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate package dependencies by \u003ca href\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2236\"\u003eactions/checkout#2236\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.2.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eurl-helper.ts\u003c/code\u003e now leverages well-known environment variables by \u003ca href\u003d\"https://github.com/jww3\"\u003e\u003ccode\u003e@​jww3\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1941\"\u003eactions/checkout#1941\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExpand unit test coverage for \u003ccode\u003eisGhes\u003c/code\u003e by \u003ca href\u003d\"https://github.com/jww3\"\u003e\u003ccode\u003e@​jww3\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1946\"\u003eactions/checkout#1946\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.2.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCheck out other refs/* by commit if provided, fall back to ref by \u003ca href\u003d\"https://github.com/orhantoy\"\u003e\u003ccode\u003e@​orhantoy\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1924\"\u003eactions/checkout#1924\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.2.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Ref and Commit outputs by \u003ca href\u003d\"https://github.com/lucacome\"\u003e\u003ccode\u003e@​lucacome\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1180\"\u003eactions/checkout#1180\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDependency updates by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e- \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1777\"\u003eactions/checkout#1777\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1872\"\u003eactions/checkout#1872\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.1.7\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the minor-npm-dependencies group across 1 directory with 4 updates by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1739\"\u003eactions/checkout#1739\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 3 to 4 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1697\"\u003eactions/checkout#1697\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCheck out other refs/* by commit by \u003ca href\u003d\"https://github.com/orhantoy\"\u003e\u003ccode\u003e@​orhantoy\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1774\"\u003eactions/checkout#1774\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePin actions/checkout\u0027s own workflows to a known, good, stable version. by \u003ca href\u003d\"https://github.com/jww3\"\u003e\u003ccode\u003e@​jww3\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1776\"\u003eactions/checkout#1776\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.1.6\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCheck platform to set archive extension appropriately by \u003ca href\u003d\"https://github.com/cory-miller\"\u003e\u003ccode\u003e@​cory-miller\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1732\"\u003eactions/checkout#1732\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.1.5\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate NPM dependencies by \u003ca href\u003d\"https://github.com/cory-miller\"\u003e\u003ccode\u003e@​cory-miller\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1703\"\u003eactions/checkout#1703\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump github/codeql-action from 2 to 3 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1694\"\u003eactions/checkout#1694\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/setup-node from 1 to 4 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1696\"\u003eactions/checkout#1696\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/upload-artifact from 2 to 4 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1695\"\u003eactions/checkout#1695\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/1af3b93b6815bc44a9784bd300feb67ff0d1eeb3\"\u003e\u003ccode\u003e1af3b93\u003c/code\u003e\u003c/a\u003e update readme/changelog for v6 (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2311\"\u003e#2311\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/71cf2267d89c5cb81562390fa70a37fa40b1305e\"\u003e\u003ccode\u003e71cf226\u003c/code\u003e\u003c/a\u003e v6-beta (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2298\"\u003e#2298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/069c6959146423d11cd0184e6accf28f9d45f06e\"\u003e\u003ccode\u003e069c695\u003c/code\u003e\u003c/a\u003e Persist creds to a separate file (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2286\"\u003e#2286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493\"\u003e\u003ccode\u003eff7abcd\u003c/code\u003e\u003c/a\u003e Update README to include Node.js 24 support details and requirements (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2248\"\u003e#2248\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href\u003d\"https://github.com/actions/checkout/compare/08c6903cd8c0fde910a37f88322edcfb5dd907a8...1af3b93b6815bc44a9784bd300feb67ff0d1eeb3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dactions/checkout\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d5.0.0\u0026new-version\u003d6.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s major version (unless you unignore this specific dependency\u0027s major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s minor version (unless you unignore this specific dependency\u0027s minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\u003c/details\u003e"
    },
    {
      "commit": "f9825b8cfdc41dc4d41bc73974f30e14e634b78c",
      "tree": "e2cda19c14c749aeeae5f3c96cff1546a8e5b726",
      "parents": [
        "e8190bf2242654daee7ebf21fd6d8c8046989822"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Mon Nov 17 16:43:41 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 17 16:43:41 2025 -0800"
      },
      "message": "Test that private named initializing formals can be formatted. (#1788)\n\nThis covers half of #1772, but I\u0027ll leave that open until primary\nconstructors are implemented too so that I can ensure that we can format\ndeclaring field parameters as well."
    },
    {
      "commit": "e8190bf2242654daee7ebf21fd6d8c8046989822",
      "tree": "ea43bb24822ee57f368f4de834c9e7e394494ec3",
      "parents": [
        "de7e7260b81a4d4e2475c37faf0e89b83454dfdb"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Fri Nov 14 16:24:39 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 14 16:24:39 2025 -0800"
      },
      "message": "Remove uses of internal analyzer implementation. (#1787)\n\nIn the very rare case that a user called formatStatement() and gave the\nformatter something longer than a single statement, we need to throw a\nFormatException but don\u0027t actually have a diagnostic from the analyzer\nto use.\n\nTo deal with that, it used to import some internal implementation\nlibraries in order to conjure up a diagnostic. Instead, this has a local\nimplementation of the necessary public analyzer classes.\n\nThis will avoid dart_style being broken with analyzer 9.0.0 when that\ninternal code changes."
    },
    {
      "commit": "de7e7260b81a4d4e2475c37faf0e89b83454dfdb",
      "tree": "d8393461022766ade0106cca88b1335fcf6f3a7c",
      "parents": [
        "ade6076f731c39306e3dd32608dfd00622e4492f"
      ],
      "author": {
        "name": "Kevin Moore",
        "email": "kevmoo@users.noreply.github.com",
        "time": "Tue Nov 11 15:33:12 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 11 15:33:12 2025 -0800"
      },
      "message": "Clean up use of pkg:args, bump args dep (#1784)\n\n"
    },
    {
      "commit": "ade6076f731c39306e3dd32608dfd00622e4492f",
      "tree": "2511225acb159f59f97c603cece0059de1b77613",
      "parents": [
        "ec0048b9977f5403149798e45ace7e7d722996f0"
      ],
      "author": {
        "name": "Kevin Moore",
        "email": "kevmoo@users.noreply.github.com",
        "time": "Tue Nov 11 15:24:58 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 11 15:24:58 2025 -0800"
      },
      "message": "Latest analyzer, prepare release (#1783)\n\n* Latest analyzer, prepare release\n* bump sdk\n* formatting the formatter"
    },
    {
      "commit": "ec0048b9977f5403149798e45ace7e7d722996f0",
      "tree": "03d780e529c69518b36bda64454014b2a80c0b05",
      "parents": [
        "34742d7a6adcdc93ba7451f0a8b2fc396cdffa9b"
      ],
      "author": {
        "name": "Martino Yovo",
        "email": "martinosoyen@gmail.com",
        "time": "Tue Oct 14 14:45:40 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 14 14:45:40 2025 -0700"
      },
      "message": "Fix stray backtick in markdown documentation (#1761)\n\n"
    },
    {
      "commit": "34742d7a6adcdc93ba7451f0a8b2fc396cdffa9b",
      "tree": "28fd6ab56030757f61de34f4d94dd498befc886c",
      "parents": [
        "ca019b0498692ad78f5f0f0f6208a1258e17fc90"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Sep 02 00:52:53 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 02 00:52:53 2025 +0000"
      },
      "message": "Bump actions/checkout from 4.2.2 to 5.0.0 in the github-actions group (#1767)\n\nBumps the github-actions group with 1 update: [actions/checkout](https://github.com/actions/checkout).\n\nUpdates `actions/checkout` from 4.2.2 to 5.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/actions/checkout/releases\"\u003eactions/checkout\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev5.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate actions checkout to use node 24 by \u003ca href\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2226\"\u003eactions/checkout#2226\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare v5.0.0 release by \u003ca href\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2238\"\u003eactions/checkout#2238\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚠️ Minimum Compatible Runner Version\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ev2.327.1\u003c/strong\u003e\u003cbr /\u003e\n\u003ca href\u003d\"https://github.com/actions/runner/releases/tag/v2.327.1\"\u003eRelease Notes\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eMake sure your runner is updated to this version or newer to use this release.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href\u003d\"https://github.com/actions/checkout/compare/v4...v5.0.0\"\u003ehttps://github.com/actions/checkout/compare/v4...v5.0.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.3.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003edocs: update README.md by \u003ca href\u003d\"https://github.com/motss\"\u003e\u003ccode\u003e@​motss\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1971\"\u003eactions/checkout#1971\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd internal repos for checking out multiple repositories by \u003ca href\u003d\"https://github.com/mouismail\"\u003e\u003ccode\u003e@​mouismail\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1977\"\u003eactions/checkout#1977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocumentation update - add recommended permissions to Readme by \u003ca href\u003d\"https://github.com/benwells\"\u003e\u003ccode\u003e@​benwells\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2043\"\u003eactions/checkout#2043\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust positioning of user email note and permissions heading by \u003ca href\u003d\"https://github.com/joshmgross\"\u003e\u003ccode\u003e@​joshmgross\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2044\"\u003eactions/checkout#2044\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate README.md by \u003ca href\u003d\"https://github.com/nebuk89\"\u003e\u003ccode\u003e@​nebuk89\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2194\"\u003eactions/checkout#2194\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CODEOWNERS for actions by \u003ca href\u003d\"https://github.com/TingluoHuang\"\u003e\u003ccode\u003e@​TingluoHuang\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2224\"\u003eactions/checkout#2224\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate package dependencies by \u003ca href\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2236\"\u003eactions/checkout#2236\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release v4.3.0 by \u003ca href\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2237\"\u003eactions/checkout#2237\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/motss\"\u003e\u003ccode\u003e@​motss\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1971\"\u003eactions/checkout#1971\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/mouismail\"\u003e\u003ccode\u003e@​mouismail\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1977\"\u003eactions/checkout#1977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/benwells\"\u003e\u003ccode\u003e@​benwells\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2043\"\u003eactions/checkout#2043\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/nebuk89\"\u003e\u003ccode\u003e@​nebuk89\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2194\"\u003eactions/checkout#2194\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2236\"\u003eactions/checkout#2236\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href\u003d\"https://github.com/actions/checkout/compare/v4...v4.3.0\"\u003ehttps://github.com/actions/checkout/compare/v4...v4.3.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/actions/checkout/blob/main/CHANGELOG.md\"\u003eactions/checkout\u0027s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003ch2\u003eV5.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate actions checkout to use node 24 by \u003ca href\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2226\"\u003eactions/checkout#2226\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eV4.3.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003edocs: update README.md by \u003ca href\u003d\"https://github.com/motss\"\u003e\u003ccode\u003e@​motss\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1971\"\u003eactions/checkout#1971\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd internal repos for checking out multiple repositories by \u003ca href\u003d\"https://github.com/mouismail\"\u003e\u003ccode\u003e@​mouismail\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1977\"\u003eactions/checkout#1977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocumentation update - add recommended permissions to Readme by \u003ca href\u003d\"https://github.com/benwells\"\u003e\u003ccode\u003e@​benwells\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2043\"\u003eactions/checkout#2043\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust positioning of user email note and permissions heading by \u003ca href\u003d\"https://github.com/joshmgross\"\u003e\u003ccode\u003e@​joshmgross\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2044\"\u003eactions/checkout#2044\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate README.md by \u003ca href\u003d\"https://github.com/nebuk89\"\u003e\u003ccode\u003e@​nebuk89\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2194\"\u003eactions/checkout#2194\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CODEOWNERS for actions by \u003ca href\u003d\"https://github.com/TingluoHuang\"\u003e\u003ccode\u003e@​TingluoHuang\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2224\"\u003eactions/checkout#2224\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate package dependencies by \u003ca href\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/2236\"\u003eactions/checkout#2236\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.2.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eurl-helper.ts\u003c/code\u003e now leverages well-known environment variables by \u003ca href\u003d\"https://github.com/jww3\"\u003e\u003ccode\u003e@​jww3\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1941\"\u003eactions/checkout#1941\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExpand unit test coverage for \u003ccode\u003eisGhes\u003c/code\u003e by \u003ca href\u003d\"https://github.com/jww3\"\u003e\u003ccode\u003e@​jww3\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1946\"\u003eactions/checkout#1946\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.2.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCheck out other refs/* by commit if provided, fall back to ref by \u003ca href\u003d\"https://github.com/orhantoy\"\u003e\u003ccode\u003e@​orhantoy\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1924\"\u003eactions/checkout#1924\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.2.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Ref and Commit outputs by \u003ca href\u003d\"https://github.com/lucacome\"\u003e\u003ccode\u003e@​lucacome\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1180\"\u003eactions/checkout#1180\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDependency updates by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e- \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1777\"\u003eactions/checkout#1777\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1872\"\u003eactions/checkout#1872\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.1.7\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the minor-npm-dependencies group across 1 directory with 4 updates by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1739\"\u003eactions/checkout#1739\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 3 to 4 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1697\"\u003eactions/checkout#1697\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCheck out other refs/* by commit by \u003ca href\u003d\"https://github.com/orhantoy\"\u003e\u003ccode\u003e@​orhantoy\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1774\"\u003eactions/checkout#1774\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePin actions/checkout\u0027s own workflows to a known, good, stable version. by \u003ca href\u003d\"https://github.com/jww3\"\u003e\u003ccode\u003e@​jww3\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1776\"\u003eactions/checkout#1776\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.1.6\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCheck platform to set archive extension appropriately by \u003ca href\u003d\"https://github.com/cory-miller\"\u003e\u003ccode\u003e@​cory-miller\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1732\"\u003eactions/checkout#1732\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.1.5\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate NPM dependencies by \u003ca href\u003d\"https://github.com/cory-miller\"\u003e\u003ccode\u003e@​cory-miller\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1703\"\u003eactions/checkout#1703\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump github/codeql-action from 2 to 3 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1694\"\u003eactions/checkout#1694\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/setup-node from 1 to 4 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1696\"\u003eactions/checkout#1696\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/upload-artifact from 2 to 4 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1695\"\u003eactions/checkout#1695\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eREADME: Suggest \u003ccode\u003euser.email\u003c/code\u003e to be \u003ccode\u003e41898282+github-actions[bot]@users.noreply.github.com\u003c/code\u003e by \u003ca href\u003d\"https://github.com/cory-miller\"\u003e\u003ccode\u003e@​cory-miller\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1707\"\u003eactions/checkout#1707\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.1.4\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDisable \u003ccode\u003eextensions.worktreeConfig\u003c/code\u003e when disabling \u003ccode\u003esparse-checkout\u003c/code\u003e by \u003ca href\u003d\"https://github.com/jww3\"\u003e\u003ccode\u003e@​jww3\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1692\"\u003eactions/checkout#1692\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd dependabot config by \u003ca href\u003d\"https://github.com/cory-miller\"\u003e\u003ccode\u003e@​cory-miller\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1688\"\u003eactions/checkout#1688\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the minor-actions-dependencies group with 2 updates by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1693\"\u003eactions/checkout#1693\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump word-wrap from 1.2.3 to 1.2.5 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/checkout/pull/1643\"\u003eactions/checkout#1643\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.1.3\u003c/h2\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/08c6903cd8c0fde910a37f88322edcfb5dd907a8\"\u003e\u003ccode\u003e08c6903\u003c/code\u003e\u003c/a\u003e Prepare v5.0.0 release (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2238\"\u003e#2238\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/9f265659d3bb64ab1440b03b12f4d47a24320917\"\u003e\u003ccode\u003e9f26565\u003c/code\u003e\u003c/a\u003e Update actions checkout to use node 24 (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2226\"\u003e#2226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/08eba0b27e820071cde6df949e0beb9ba4906955\"\u003e\u003ccode\u003e08eba0b\u003c/code\u003e\u003c/a\u003e Prepare release v4.3.0 (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2237\"\u003e#2237\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/631c7dc4f80f88219c5ee78fee08c6b62fac8da1\"\u003e\u003ccode\u003e631c7dc\u003c/code\u003e\u003c/a\u003e Update package dependencies (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2236\"\u003e#2236\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/8edcb1bdb4e267140fa742c62e395cd74f332709\"\u003e\u003ccode\u003e8edcb1b\u003c/code\u003e\u003c/a\u003e Update CODEOWNERS for actions (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2224\"\u003e#2224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/09d2acae674a48949e3602304ab46fd20ae0c42f\"\u003e\u003ccode\u003e09d2aca\u003c/code\u003e\u003c/a\u003e Update README.md (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2194\"\u003e#2194\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/85e6279cec87321a52edac9c87bce653a07cf6c2\"\u003e\u003ccode\u003e85e6279\u003c/code\u003e\u003c/a\u003e Adjust positioning of user email note and permissions heading (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2044\"\u003e#2044\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/009b9ae9e446ad8d9b8c809870b0fbcc5e03573e\"\u003e\u003ccode\u003e009b9ae\u003c/code\u003e\u003c/a\u003e Documentation update - add recommended permissions to Readme (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/2043\"\u003e#2043\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/cbb722410c2e876e24abbe8de2cc27693e501dcb\"\u003e\u003ccode\u003ecbb7224\u003c/code\u003e\u003c/a\u003e Update README.md (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/1977\"\u003e#1977\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/checkout/commit/3b9b8c884f6b4bb4d5be2779c26374abadae0871\"\u003e\u003ccode\u003e3b9b8c8\u003c/code\u003e\u003c/a\u003e docs: update README.md (\u003ca href\u003d\"https://redirect.github.com/actions/checkout/issues/1971\"\u003e#1971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href\u003d\"https://github.com/actions/checkout/compare/11bd71901bbe5b1630ceea73d27597364c9af683...08c6903cd8c0fde910a37f88322edcfb5dd907a8\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dactions/checkout\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d4.2.2\u0026new-version\u003d5.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s major version (unless you unignore this specific dependency\u0027s major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s minor version (unless you unignore this specific dependency\u0027s minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\u003c/details\u003e"
    },
    {
      "commit": "ca019b0498692ad78f5f0f0f6208a1258e17fc90",
      "tree": "63ec516d7f1095bc4472b67abfc0effee191cb76",
      "parents": [
        "3499c1ee7a9bc30f3d5b94af932e8f6ac2cffa14"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Fri Aug 29 10:32:22 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 29 10:32:22 2025 -0700"
      },
      "message": "Use \"@dart\u003d\" comment when determining which style rules to apply. (#1766)\n\nUse \"@dart\u003d\" comment when determining which style rules to apply.\n\nThe formatter correctly used those comments to switch between the old\nshort and new tall style, but ignored them for language versioned style\nrule changes after 3.7. Now the language version of the file is\nconsistently respected for all style rules.\n\nIn the process of fixing this, I made two other clean-ups:\n\n* Introduce a FormattingStyle class separate from DartFormatter. The\n  latter had dual use as both the public API used to configure\n  formatting and the internal object passed around by the formatter to\n  access that configuration. That was annoying because it meant I\n  couldn\u0027t hang handy utility methods that the implementation wants off\n  that class because it\u0027s public. And it meant that I couldn\u0027t change\n  what state it stored (like the language version from the \"@dart\"\n  comment) without it being a breaking API change.\n\n  Now there is a separate internal class that wraps the DartFormatter\n  that can contain that logic. By consistently passing that around and\n  not the DartFormatter, it ensures that code can\u0027t accidentally forget\n  to use the language version in the \"@dart\" comment.\n\n* Pick a consistent naming convention for version numbers in\n  identifiers. When we shipped Dart 3.8, a bunch of style rules changed.\n  I needed a way to refer to the older style and couldn\u0027t come up with\n  anything better than \"3.7\". But you can\u0027t have a dot in identifier,\n  so I did \"37\". With Dart 3.10 on the horizon, that doesn\u0027t make sense:\n  \"310\" is confusing and ambiguous. I considered \"3_7\", but that\n  violates the lint for type names which shouldn\u0027t contain \"_\". Went\n  with \"3Dot7\" instead which I don\u0027t love but seems to work.\n\nFix #1762.\n"
    },
    {
      "commit": "3499c1ee7a9bc30f3d5b94af932e8f6ac2cffa14",
      "tree": "8a215b75fd456e02b474430d596bdf7366979cd2",
      "parents": [
        "bacc9bf8fcec6fffc15ad7e9257b7faba5298ea9"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Fri Aug 08 17:02:03 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 08 17:02:03 2025 -0700"
      },
      "message": "Synchronize the dart_style version in its own help output. (#1759)\n\nThe pubspec is already bumped to 3.1.3-wip."
    },
    {
      "commit": "bacc9bf8fcec6fffc15ad7e9257b7faba5298ea9",
      "tree": "18157c1a1bce34e9add368c57a4de5702795e61f",
      "parents": [
        "b5a166e63316ca8ababe49f51466d1ae2cbc7331"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Fri Aug 08 16:03:44 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 08 16:03:44 2025 -0700"
      },
      "message": "Remove tests of invalid import syntax. (#1758)\n\nRemove tests of invalid import syntax.\n\nThe language specifies that import configuration URIs must appear before\nany import prefix, like:\n\n```dart\nimport \u0027foo.dart\u0027 if (cond) \u0027bar.dart\u0027 as prefix;\n```\n\nIf a user wrote them in the wrong order:\n\n```dart\nimport \u0027foo.dart\u0027 as prefix if (cond) \u0027bar.dart\u0027;\n```\n\nThen the parser used to not report an error and would accept the code,\nwhich would then be compiled successfully. Some users in the wild,\nprobably inadvertently, ended up relying on this. So I added support in\nthe formatter to handle it.\n\nI also filed:\n\nhttps://github.com/dart-lang/sdk/issues/56641\n\nThat issue will be fixed soon:\n\nhttps://github.com/dart-lang/sdk/issues/61264\n\nIt\u0027s going to be a parse error to have the clauses in the wrong order.\nThese formatter tests are failing in the bleeding edge SDK. So now it\u0027s\ntime to remove the tests and support for the broken code.\n\n(Note that the comment in the tests are backwards. Configuration before\nprefix is the correct order. It\u0027s prefix before configuration that\u0027s\nwrong.)\n"
    },
    {
      "commit": "b5a166e63316ca8ababe49f51466d1ae2cbc7331",
      "tree": "036b920b5c740aa69dc64d2987f3d5e3e9e74995",
      "parents": [
        "00b5f3f5256cb179bc340c1e60bb52fd1c2ae1ac"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Fri Aug 08 11:34:34 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 08 11:34:34 2025 -0700"
      },
      "message": "Remove special case handling of dot shorthands in null aware elements. (#1757)\n\nWe fixed the parser so that it can correctly handle:\n\n```dart\n[?.property]\n```\n\nEven if there is no space between `?` and `.`, it knows to treat it as\na dot shorthand inside a null-aware element here. So the formatter\ndoesn\u0027t need to force insert a space in there to avoid `?.` from being\ntokenized as a null-aware access."
    },
    {
      "commit": "00b5f3f5256cb179bc340c1e60bb52fd1c2ae1ac",
      "tree": "930dad0f6b847e3b8b6d5fd4ca2d8e186c07ac38",
      "parents": [
        "5cb56273f5c9260ade502a7d1611e3597648e6dc"
      ],
      "author": {
        "name": "Kevin Moore",
        "email": "kevmoo@users.noreply.github.com",
        "time": "Thu Aug 07 14:40:19 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 07 14:40:19 2025 -0700"
      },
      "message": "Update deps to their lowest allowed, prepare release (#1756)\n\nUsed\n`_PUB_TEST_SDK_VERSION\u003d3.7.0 dart pub downgrade --tighten`"
    },
    {
      "commit": "5cb56273f5c9260ade502a7d1611e3597648e6dc",
      "tree": "4479e433e9a3289beb17e81b2adea3513cc4356e",
      "parents": [
        "a1e405f0bcd5d894109084a7a4b9b19a14653fb9"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Mon Jul 28 18:27:42 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 28 18:27:42 2025 -0700"
      },
      "message": "Make preserved trailing commas apply to record types too. (#1751)\n\nI missed this part of the language when I added support of preserving\ntrailing commas. They should have always been preserved here, so I\ndidn\u0027t language version this change. If someone has preserve trailing\ncommas on but isn\u0027t on 3.10 yet, I think they will still want this\nchange.\n\nFix #1721."
    },
    {
      "commit": "a1e405f0bcd5d894109084a7a4b9b19a14653fb9",
      "tree": "e860e57c2ab87118fdad6430ffdbe22b1d3aff5d",
      "parents": [
        "7278eff793e80b5bdccfbe49b0aac01513d65285"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Mon Jul 28 18:26:10 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 28 18:26:10 2025 -0700"
      },
      "message": "Add a regression test for an idempotency bug. (#1752)\n\nIdempotency bugs where the formatter produces another change if you\nre-run it on its own output are like Whac-a-mole. We don\u0027t have a\nsystematic way to prevent them, so I just fix them as they come up.\n\nWe do *test* for them systematically now. Every single test is formatted\ntwice, again on the output of the first format to ensure that what we\ntest is at least idempotent.\n\nThis one appears to no longer be an issue because the test is already\npassing. Probably got fixed in some of the changes around comment\nhandling.\n\nThis just adds a regression test.\n\nClose #1625."
    },
    {
      "commit": "7278eff793e80b5bdccfbe49b0aac01513d65285",
      "tree": "bb3b8356b52a7654800904beec656ab2aadb4f63",
      "parents": [
        "5d2ad56bf523cd017febe54514e72c41e86520ee"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Mon Jul 28 15:09:19 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 28 15:09:19 2025 -0700"
      },
      "message": "Preserve trailing commas enum with members (#1750)\n\nPreserve trailing commas for enums with members when commas are preserved (#1703)\n\nThis PR changes the formatter to have it maintain trailing commas of last enum constants when there are members.\n\nSo:\n```dart\nenum E { a, b, c,; int x; }\n```\n\nBecomes:\n```dart\nenum E {\n  a,\n  b,\n  c,\n  ;\n\n  int x;\n}\n```\nInstead of:\n\n```dart\nenum E {\n  a,\n  b,\n  c;\n\n  int x;\n}\n```\n\nFixes #1678 \nFixes #1729\n\nAdditionally, a similar style choice was presented in https://github.com/dart-lang/dart_style/issues/1660#issuecomment-2729244122\n\n**Affected users**:\n- Those passing the `trailing_commas: preserve` config option and adding a trailing comma to their enum cases.\n- Users who don\u0027t already pass a trailing comma, aren\u0027t affected. So this PR shouldn\u0027t have undesirable effects on existing users.\n\n**Benefits**:\n- Maintains developer\u0027s intent\n- Less churn when adding additional member cases\n(Personally, I always add a trailing semicolon to avoid churn and to also make it even clearer this is an advanced enum with members.)\n\n**Downsides**:\n- 7 additional logical lines of code to maintain\n\n**Additional considerations**:\nI also considered implementing this for `enum E { a, b,; }`, however, that would require more drastic changes to the formatter as far as I can tell.\n\nAdditionally, in this case the trailing semicolon provides fewer benefits:\n- churn when adding new members is the same if there was a trailing semicolon or not\n- giving the enum other members also only amounts to new lines being added rather than changed so again, no real churn.\n\n**Notes**\n- One test was changed due to this being a change in behavior.\n- This was surprisingly easy and enjoyable to implement (compliment to the existing code base).\n- I didn\u0027t make any changes to the `CHANGELOG.md` since this trailing commas preservation hasn\u0027t shipped yet so its behaviour is still undefined.\n\nCo-authored-by: jellynoone \u003c77585130+jellynoone@users.noreply.github.com\u003e"
    },
    {
      "commit": "5d2ad56bf523cd017febe54514e72c41e86520ee",
      "tree": "1e054765544b6d566338d9fab68c19a75015c485",
      "parents": [
        "4f2fe385bc9a5bee615553588a0dfa6c1dc20306"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Tue Jul 22 14:49:52 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 22 14:49:52 2025 -0700"
      },
      "message": "Preserve space between \"?\" and \".\" in null aware element dot shorthand. (#1748)\n\nPreserve space between \"?\" and \".\" in null aware element dot shorthand.\n\nFix #1642."
    },
    {
      "commit": "4f2fe385bc9a5bee615553588a0dfa6c1dc20306",
      "tree": "19273a8f2c8aca9bbe2c5b533c3b4675bd30e5f6",
      "parents": [
        "05215a6b92ab6080a0e38651f1813ba3c3881ce7"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Tue Jul 22 13:30:40 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 22 13:30:40 2025 -0700"
      },
      "message": "Enable language version 3.10 and format dot shorthands. (#1745)\n\nEnable language version 3.10 and format dot shorthands.\n"
    },
    {
      "commit": "05215a6b92ab6080a0e38651f1813ba3c3881ce7",
      "tree": "8e33979da9f2e3201990f82ea818aab6961be33d",
      "parents": [
        "6c4166afed745c2f33c33a4b66a76e2ae986193f"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Fri Jul 18 10:29:25 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 18 10:29:25 2025 -0700"
      },
      "message": "Bump version to publish 3.1.1. (#1746)\n\nThe only change in this version is allowing 3.9 as a supported language\nversion. This was rolled into the SDK a couple of weeks ago, but not\npublished.\n\nI figure I should publish this before rolling the supported version\nagain to 3.10 just in case any external needs 3.9 support.\n\nI\u0027ll land this before landing #1745."
    },
    {
      "commit": "6c4166afed745c2f33c33a4b66a76e2ae986193f",
      "tree": "71c0991358a4df51a9daf43da311d70426df8c4c",
      "parents": [
        "ac2650aafbc055266f1f9be4739cc898889ddfb2"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Thu Jul 17 17:19:02 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 17 17:19:02 2025 -0700"
      },
      "message": "Smarter versioned tests (#1744)\n\nRedo how versioned tests work.\n\nThe diff in the README.md and the doc comments in the .dart file changes should explain what\u0027s going on here. The basic idea is that now a test is either completely unversioned with only a single output, or completely versioned where all of the output sections have a version number.\n\nI think that\u0027s easier to read than a test like:\n\n```\n\u003c\u003c\u003c\nsome.code();\n\u003e\u003e\u003e 3.8\nsome.code();\n\u003e\u003e\u003e\nsome.code();\n```\n\nAnd you have to try to figure out what versions the last section applies to.\n\nThis commit also updates the tests to match the new style. This just means adding `3.8` to a bunch of output sections where that was previously implicit. The set of tested versions and their expectations are the same.\n\nI also updated the test updater to support the new output styles.\n\nThis change also speeds up running the formatter tests by skipping running tests on language versions where the output is the same as a previous and subsequent version. Prior to this change, running tall_format_test.dart runs 8,674 tests. If you bump the highest supported language version from 3.9 to 3.10 (which I\u0027m about to do for dot shorthands), that jumps to 11,556 because it runs every test at every language version.\n\nWith this change, it runs 5,940 tests when the maximum supported version is both 3.9 and 3.10. The number of tests being run only increases when there are actual new tests or new version-specific expectations.\n"
    },
    {
      "commit": "ac2650aafbc055266f1f9be4739cc898889ddfb2",
      "tree": "e0c918235f4692857b4855b92e9bd5bce1ce2454",
      "parents": [
        "44e8cfe7ba5a873ef81b6b39c07d50171eccf021"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Thu Jul 17 15:40:40 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 17 15:40:40 2025 -0700"
      },
      "message": "Get the test updater script working again. (#1743)\n\nWhen I made the style changes language versions for Dart 3.8, I changed\nhow tests are written to allow a single test to have different expected\noutputs at different language versions.\n\nI was pressed for time, so that broke the automated test updater which\ndoesn\u0027t know how to handle versions. This gets it working again.\n\nIn the process, I decided to tweak how the final newline in test files\nis handled. For years, I avoided having a trailing newline because I\nthough it would confuse the formatter. At some point that may have even\nbeen true. But it turns out to be fine and it\u0027s more idiomatic to have a\ntrailing newline at the end of a text file.\n\nThe test updater now ensures that and I went ahead and normalized all\nof the tests to have trailing newlines. There are no other changes to\nthe test files."
    },
    {
      "commit": "44e8cfe7ba5a873ef81b6b39c07d50171eccf021",
      "tree": "968d41920e64d613bd4ea7d0d1adc804b433b5b8",
      "parents": [
        "2a6c97b7e05234f3bd16b08dbd3150e63c8bb4ca"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Tue Jul 01 17:38:00 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 01 17:38:00 2025 -0700"
      },
      "message": "Bump latest supported language version to 3.9. (#1740)\n\n"
    },
    {
      "commit": "2a6c97b7e05234f3bd16b08dbd3150e63c8bb4ca",
      "tree": "8a44711c7660958304b23665a6594e1c6282c96a",
      "parents": [
        "90227c5d32ee80ee5e15d785034b440b77224c98"
      ],
      "author": {
        "name": "Daco Harkes",
        "email": "dacoharkes@google.com",
        "time": "Mon Jun 23 17:11:46 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 23 17:11:46 2025 +0200"
      },
      "message": "Add configurable category to `FormatCommand` (#1735)\n\n"
    },
    {
      "commit": "90227c5d32ee80ee5e15d785034b440b77224c98",
      "tree": "b0fa258a0be894efe3d64c25b8e09c150b812bfb",
      "parents": [
        "121e5e35460439e725ad184b58ea26f76f17502a"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Tue May 20 10:45:38 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 20 10:45:38 2025 -0700"
      },
      "message": "Fix permissions in the CI publish workflow. (#1720)\n\n"
    },
    {
      "commit": "121e5e35460439e725ad184b58ea26f76f17502a",
      "tree": "8c4820e9e911c6fd1c6ca5481c2699fc3e3a7354",
      "parents": [
        "e7264fc65b06efd600ad6e64bf83e5ff51dbf05a"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Tue May 20 10:35:25 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 20 10:35:25 2025 -0700"
      },
      "message": "Bump version to publish 3.1.0. (#1719)\n\nBump version to publish 3.1.0.\n\nThese changes have already rolled into the SDK, Flutter, and google3.\n"
    },
    {
      "commit": "e7264fc65b06efd600ad6e64bf83e5ff51dbf05a",
      "tree": "fbbf52b7da502cd4c3ff6e49eee23e7f573e5a74",
      "parents": [
        "7c16cf2ca19c7efe1d0eda52673b9745bae98601"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Thu Apr 24 15:24:41 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 24 15:24:41 2025 -0700"
      },
      "message": "Add regression test for #1712. (#1715)\n\nThis was already fixed by #1687.\n\nClose #1712."
    },
    {
      "commit": "7c16cf2ca19c7efe1d0eda52673b9745bae98601",
      "tree": "58b1ecdf0810f60b4cd4cfab181d17632a10e829",
      "parents": [
        "100db45075abdd66fd8788b205243e90ff0595df"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Thu Apr 24 11:22:14 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 24 11:22:14 2025 -0700"
      },
      "message": "Update the README. (#1713)\n\nLink to the new configuration docs and tweak the examples."
    },
    {
      "commit": "100db45075abdd66fd8788b205243e90ff0595df",
      "tree": "18148571ad999426880d9371ca10750699aa0964",
      "parents": [
        "c7f6131466d2de2109b03288557176ef45d6f002"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Thu Apr 10 07:50:32 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 10 07:50:32 2025 -0700"
      },
      "message": "Language version all of the formatting changes since Dart 3.7. (#1707)\n\nLanguage version all of the formatting changes since Dart 3.7.\n\nThe new formatter launch was pretty rocky, but one thing I think helped mitigate that was that the formatting style was gated on language version. Users could install the new SDK and their code wouldn\u0027t be spontaneously reformatted under them until they deliberately updated their SDK constraint to opt in to the new language version.\n\nThis PR applies that same logic to the changes we\u0027ve made since Dart 3.7.\n\nAny source file at language version 3.7 is formatted (almost, see below) identically to how it would be formatted with the SDK as it shipped in 3.7. Source files at language version 3.8 or higher get all of the new style changes I\u0027ve landed since then.\n\nThis increases the complexity of the formatter codebase a decent amount, but it\u0027s mostly just a lot of \"if 3.7 do X else do Y\". Tedious but not intractable.\n\nI expect to continue to language version changes like this going forward. So after Dart 3.8 ships, whatever formatter style is in that version will be locked down and style changes after that will have to support 3.7 and 3.8 fallback behavior. I expect there to be much less style churn going forward, so it\u0027s probably manageable.\n\nIn cases where there are *bugs* (i.e. the formatter produces invalid syntax or rearranges code), those won\u0027t be language versioned. But most other style changes will be.\n\nIt\u0027s important to make sure we don\u0027t regress and accidentally affect the formatting of older language versioned files when making changes to the formatter. To avoid that, this also expands testing to be multi-versioned. Every test is now run on multiple versions and for cases where the style differs between versions, there are different expectations for each. Fortunately, the tests run very fast, so it doesn\u0027t slow down things more than a couple of seconds.\n\nIn addition to running through the formatter\u0027s own test suite and regression tests, I also tested this on a giant corpus of pub packages. I formatted them all using the shipped Dart 3.7 formatter, then using this PR with `--language-version\u003d3.7`. Of the 89,468 files, 7 had differences. They all relate to a single weird corner case around giant multiline strings containing multiline string interpolation expressions where the formatting is slightly different. #1706 helps that somewhat -- there were about dozen diffs before -- but doesn\u0027t totally eliminate it. I think it\u0027s close enough to be tolerable.\n"
    },
    {
      "commit": "c7f6131466d2de2109b03288557176ef45d6f002",
      "tree": "90e99b27d1e3807a8d8405db404ff6a91e363311",
      "parents": [
        "eaa3f2da2ca1b5a21a12f6a3de1a710990502aae"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Wed Apr 09 16:13:35 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 09 16:13:35 2025 -0700"
      },
      "message": "Don\u0027t invalidate solutions from pinned pieces. (#1706)\n\nIf a string interpolation contains a splittable expression which in\nturn contains an expression with a mandatory newline (like a multiline\nstring or `;`), then the solver gets confused.\n\nThe splittable expression is already pinned to state 0 to prevent there\nfrom being newlines in the string interpolation. But now the newline\ninside the subexpression tries to force the splittable expression to\nsplit.\n\nThat leads the solver to invalidate the solution and then try to find\nsomething better. Ultimately, it ends up unnecessarily splitting some\npiece surrounding the interpolated string. (In the examples I\u0027ve seen\nin the wild, it\u0027s always a function\u0027s argument list.)\n\nTo avoid that, if a piece is already pinned, then we ignore invalidation\nfrom it. This fixes the few rare cases I\u0027ve seen in a large corpus and\ndoesn\u0027t impact anything else.\n\n(Also, this fixes an edge case where the formatter in Dart 3.7 behaves\ndifferently from the current formatter. The 3.7 formatter doesn\u0027t have\nthis bug. Something about the new shape-based solver seems to tickle\nit. I\u0027m not sure why.)"
    },
    {
      "commit": "eaa3f2da2ca1b5a21a12f6a3de1a710990502aae",
      "tree": "6a50ec30e29b371ae628bff0656438e384fb1222",
      "parents": [
        "cd73f3e3cc255958bef66efb3779b2f8ecff1715"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Thu Apr 03 17:07:23 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 03 17:07:23 2025 -0700"
      },
      "message": "Make the eager argument list splitting heuristic more conservative. (#1700)\n\nSome folks on the Flutter team pointed out that the previous rule is too aggressive and splits even simple common code like:\n\n```dart\nText(\u0027Item 1\u0027, style: TextStyle(color: Colors.white));\n```\n\nThat\u0027s probably simple enough to stay on one line. So this tweaks the heuristic to allow that to remain unsplit. Where the old heuristic split any argument list with a named argument that contained a nested named argument, this requires there to be at least *three* named arguments.\n\nIt\u0027s sort of an arbitrary cutoff, but it seems to do a good job when run on a large corpus."
    },
    {
      "commit": "cd73f3e3cc255958bef66efb3779b2f8ecff1715",
      "tree": "d0e42be9524104530be7b2dd24f8449e05ae0ee3",
      "parents": [
        "8dd0e3bb09fde5de3a6ea299b6be5c7386109189"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Wed Apr 02 12:05:01 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 02 12:05:01 2025 -0700"
      },
      "message": "Add regression test for #1645. (#1697)\n\nThis is already fixed (probably by #1687).\n\nClose #1645."
    },
    {
      "commit": "8dd0e3bb09fde5de3a6ea299b6be5c7386109189",
      "tree": "44728631bec0a063d9dd4f40e1dcfa7dcb71b924",
      "parents": [
        "4d5edfc54291068356123383e398efce74aa00f1"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Wed Apr 02 12:04:45 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 02 12:04:45 2025 -0700"
      },
      "message": "Add issue templates. (#1698)\n\nI\u0027ve been getting a lot of issues lately with screenshots instead of text which isn\u0027t super helpful. Adding a couple of issue templates to help guide users towards more actionable issues."
    },
    {
      "commit": "4d5edfc54291068356123383e398efce74aa00f1",
      "tree": "4243501af6f5ddc8bbbf86d371bb86d13dcfdc75",
      "parents": [
        "71421b328391a6ed9c1a9e7229c394d9ed613d77"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Wed Apr 02 12:04:22 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 02 12:04:22 2025 -0700"
      },
      "message": "Fix bug with comments being reordered. (#1696)\n\nIn certain locations, if you had multiple inline block comments on the same line, they would get reordered. That in turn would (correctly) trip the formatter\u0027s internal \"whitespace-only changes\" sanity check and lead to it aborting.\n\nFix #1667."
    },
    {
      "commit": "71421b328391a6ed9c1a9e7229c394d9ed613d77",
      "tree": "914ae63207a95f218721566875b224f7299b7aef",
      "parents": [
        "8a17214e2f591ab30952f9f20179b22901ee882b"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Tue Apr 01 17:57:44 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 01 17:57:44 2025 -0700"
      },
      "message": "Allow shape to propagate through AssignPieces. (#1694)\n\nConsider:\n\n```dart\nfunction(name: (param) \u003d\u003e another(argument1, argument2, argument3));\n```\n\nHere we have a ListPiece for the `another(...)` call wrapped in an AssignPiece for the `\u003d\u003e` wrapped in an AssignPiece for the `name:`. When the inner ListPiece splits, it will be block-shaped. That in turn allows the surrounding AssignPiece to block format, giving:\n\n```dart\n(param) \u003d\u003e another(\n  argument1,\n  argument2,\n  argument3,\n)\n```\n\n(If the ListPiece wasn\u0027t block-shaped, then the formatter would split after `\u003d\u003e`.)\n\nAn interesting question is then \"what is the shape of that AssignPiece?\" Prior to this PR, the answer was always \"other\". Regardless of the shape of the AssignPiece\u0027s RHS, a split AssignPiece always had shape other. That meant that the entire original example would end up like:\n\n```dart\nfunction(\n  name:\n      (param) \u003d\u003e another(\n        argument1,\n        argument2,\n        argument3,\n      ),\n);\n```\n\nBecause the `(param) \u003d\u003e ...` piece had shape \"other\", the AssignPiece for the named argument couldn\u0027t block format it, so it would split after the `:`.\n\nThat\u0027s not ideal. In practice with `\u003d` and espectially with named arguments, users really want code on the same line as the argument name (and less indented) if at all possible.\n\nThis PR propagates the shape of the AssignPiece\u0027s contents out to its surrounding context. This means that a headline-shaped RHS causes the assignment to be headline-shaped, and likewise for block-shaped. That lets the above example be formatted as:\n\n```dart\nfunction(\n  name: (param) \u003d\u003e another(\n    argument1,\n    argument2,\n    argument3,\n  ),\n);\n```\n\nSince `\u003d`, `:`, and `\u003d\u003e` all use AssignPiece, this theoretically means that arbitrarily complex chains of those propagate the shape out. For example, chained assignments like this now work:\n\n```dart\nouter \u003d inner \u003d [\n  element,\n  element,\n];\n```\n\nIn practice, 99% of the time this comes into play, it\u0027s a named argument whose expression is a `\u003d\u003e` function. But those are very common for callbacks in Flutter code, so this makes a big difference.\n\nFix #1536.\nFix #1545.\nFix #1668.\nFix #1679."
    },
    {
      "commit": "8a17214e2f591ab30952f9f20179b22901ee882b",
      "tree": "febab2b925df139ae953c9bc980803a2af529b2e",
      "parents": [
        "d8eb9c919ace055e11e308cf42d4b746597455d5"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Tue Apr 01 17:56:15 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 01 17:56:15 2025 -0700"
      },
      "message": "Eagerly split argument lists based on their contents. (#1690)\n\nEagerly split argument lists based on their contents.\n\nThis is similar to the existing rule where nested non-empty collection literals force the outer one to split. The rules are basically:\n\n* If an argument list contains any named arguments and contains any other calls whose argument lists contain any named arguments (directly or indirectly), then split the outer one. We make an exception where a named argument whose expression is a simple number, Boolean, or null literal doesn\u0027t count as a named argument.\n\n* If a list, set, or map literal is the immediate expression in a named argument and one of the above kinds of argument lists (directly or indirectly), then force the collection to split.\n\n```dart\n// Before:\nStack(children: [result, Semantics(label: indexLabel)]);\n\n// After:\nStack(\n  children: [\n    result,\n    Semantics(label: indexLabel),\n  ],\n);\n```\n\nI\u0027ve uploaded a diff of this change applied to a corpus here:\n\nhttps://github.com/munificent/temp-eager-split-sample/commit/b864a67965c4db736e8a067985446134c5e4d9d5\n\nFix #1660.\n"
    },
    {
      "commit": "d8eb9c919ace055e11e308cf42d4b746597455d5",
      "tree": "f1817196505aefb52a42870dcc94befa1ca115dc",
      "parents": [
        "496740ab8a167836478a5462df54c460d863d03b"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Mon Mar 31 17:39:55 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 31 17:39:55 2025 -0700"
      },
      "message": "Avoid splitting chains containing only properties. (#1689)\n\n* Avoid splitting chains containing only properties.\n\nI was trying out the new formatter on a corpus after #1687 and saw a bunch of diffs like:\n\n```dart\n// Before:\nWidget(\n  name:\n      some.property.chain,\n)\n\n// After:\nWidget(\n  name: some\n      .property\n      .chain,\n)\n```\n\nWhile the new headline style looks nice for most method call chains, it looks weird if it\u0027s only just a series of properties. In particular, a single `foo.bar` looks really silly when split.\n\nThis PR bumps the split cost of a chain up if it only contains properties. That leads the solver to prefer splitting the surrounding construct when possible.\n\n* Add test for property chain that still doesn\u0027t fit."
    },
    {
      "commit": "496740ab8a167836478a5462df54c460d863d03b",
      "tree": "aaf92e6c657f90f92175703db12ebdfd3dc305bb",
      "parents": [
        "da2d0fa98610493d1ba1debfaf135020578436b6"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Mon Mar 31 17:11:12 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 31 17:11:12 2025 -0700"
      },
      "message": "Add regression tests for issues that are fixed now. (#1688)\n\n(Most were fixed by #1687, but some were already better.)\n\nClose #900 (!).\nClose #1525.\nClose #1526.\nClose #1603.\nClose #1685."
    },
    {
      "commit": "da2d0fa98610493d1ba1debfaf135020578436b6",
      "tree": "efd0c0472acab1283ec5407e4c0e7169e19aeda7",
      "parents": [
        "71ac08514f771363b9b4b105786042d0ab91d569"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Fri Mar 28 14:46:14 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 28 14:46:14 2025 -0700"
      },
      "message": "Smarter handling of \"block\" and \"headline\" formatting. (#1687)\n\n* Start adding support for \"shape\" parent constraints.\n\nCurrently, a parent can only indicate whether a child can contain newlines or not when determining whether a solution is invalid. This\nworks fine for most pieces, but isn\u0027t sophisticated enough to allow fixing #1465 and #1466 where we want to say that the child can have newlines but only in certain styles.\n\nThis is a step towards supporting those more sophisticated constraints. It doesn\u0027t change the underlying semantics at all, but it replaces the basic boolean newlines yes/no, with a Set\u003cShape\u003e.\n\n* Make indentation semantic.\n\nInstead of pushing a raw integer for how much indentation a piece adds, use an enum with different values for each kind of indentation.\n\nThen, instead of a separate \"canCollapse\" parameter, have some logic that understands that certain pairs of semantic indentation can be merged. The hope is that this should then simplify some of the complex indentation handling in AssignPiece (and maybe elsewhere).\n\nThere\u0027s no behavioral change or deep refactoring in this commit. It just replaces the int indentation and \"canCollapse\" parameter with an enum.\n\nNote that the old short style code also has a class named Indent which has static constants for various indentation levels. The tall code also used that same class. Now it uses its own Indent class which is an actual enum. That\u0027s why much of the change in this commit is just removing an import. The existing uses of Indent silently switch over to the new enum in code_writer.dart.\n\n* Use indentation merging to handle flattened indentation in assignments.\n\nIt looks nice if we align binary operands when the first operand is on its own line, which is often the case after `\u003d`, `:`, and `\u003d\u003e`:\n\n```dart\nvariable \u003d\n    operand +\n    another;\n```\n\nThis is also true for adjacent strings and conditional expressions.\n\nPreviously, we had some somewhat hacky code that looked at the AST node surrounding an expression to determine if it should indent itself or not. This removes that in favor of using the new merging ability of Indent. We use a separate Indent type for assignment and infix operators and then merge those two together.\n\nThis simplifies a bunch of things and lends itself to more uniform formatting since every AST node that lowers to a piece using Indent.infix will get this behavior. In fact, this commit highlighted that `is` and `as` expressions currently *aren\u0027t* formatted the same way as other binary operators, which I think was just an oversight.\n\nThis commit still formats them differently, but I\u0027ll probably change that later. For now, it just leaves TODOs.\n\nThis commit does change the formatter behavior very slightly, but only in obscure edge cases.\n\n* Add support for block shapes and use that for block formatting.\n\nThis is (hopefully) the big commit. It\u0027s largely a refactoring but also has some style changes. Most of the style changes in places where the prior formatting was unintentional or a compromise to the old architecture.\n\nThe changes in this commit are:\n\n- Add a new \"block\" shape. Pieces that split into delimited lists (collection literals, blocks, argument lists) have block shape.\n\n- Change AssignPiece, CasePiece, ChainPiece, and ForInPiece to use that for handling their block-formatted child pieces. Previous commits already let a piece constrain its children to a subset of the allowed shapes, and now we use that to let them say not just whether not a newline is allowed, but what resulting shape the child must have.\n\n- Add some machinery to CodeWriter to control the shape of the resulting piece when a newline is written. Coming up with a nice API for that is pretty hard, but I think what I have here works OK. There is also some machinery to determine how a child piece\u0027s shape affects the resulting shape of the parent. It isn\u0027t used heavily yet but will probably be used more in future changes to tweak the style for more complex nested expressions.\n\nThis commit has two negative consequences:\n\n- Perf is regressed roughly 15% across the board. That\u0027s not great, but it\u0027s not catastrophic. To avoid a new pathological corner case, I added a hack where nested `\u003d\u003e` expressions (which occur when someone really wants to write Haskell in Dart) always force the outer ones to split. Without that, curried code gets catastrophically slow. I have some ideas on how to get some performance back but I\u0027ll save that for later.\n\n- Some \"headline\"-shaped output is no longer supported. It\u0027s always been a goal of the formatter to support output like:\n\n  ```dart\n  variable \u003d target\n      .method()\n      .another();\n  ```\n\n  Prior to this commit, that *sort of* worked for most expressions, but really only incidentally and you could run into places where it should work but didn\u0027t. Moving to shape-based constraints makes it uniformly *not* work. In a future commit, I plan to add another \"headline\" shape that will get code like this working again, reliably.\n\nOn the plus side, the behavior of the formatter is overall more consistent with this change.\n\n* Fix double indentation of const pattern.\n\n* Get \"headline\"-style formatting working.\n\nWe now allow some non-block shaped pieces on the right side of an assignment without splitting if it those pieces are \"headline\"-shaped. That means they have a single first line that makes sense on the `\u003d` line followed by other subordinate code. There are three kinds of expressions that support that:\n\n```dart\n// Conditionals:\nvariable \u003d condition\n    ? thenBranch\n    : elseBranch;\n\n// Split method chains:\nvariable \u003d target\n    .method()\n    .another();\n\n// (Also with unsplit properties):\nvariable \u003d target.some.props\n    .method()\n    .another();\n\n// Multi-line strings:\nvariable \u003d \u0027\u0027\u0027\n    A very long string\n    that is multiple lines.\u0027\u0027\u0027;\n```\n"
    },
    {
      "commit": "71ac08514f771363b9b4b105786042d0ab91d569",
      "tree": "d79423af241f9a35771513a62875131e4f2be823",
      "parents": [
        "2772c8d2393c332fcb66125a3bbc2b42bf561c3f"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Mon Mar 17 11:03:34 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 17 11:03:34 2025 -0700"
      },
      "message": "Add an optional configuration to preserve trailing commas. (#1672)\n\nAdd an optional configuration to preserve trailing commas.\n\nIn the old short formatter, when a delimited construct had a trailing comma, it had two effects:\n\n1.  The construct would be formatted \"Flutter style\" where the closing bracket would be moved to the next line and the contents indented +2, as opposed to the earlier style where the bracket stays on the same line as the last element and the elements are indented +4).\n\n2.  The construct is forced to split even if it otherwise wouldn\u0027t.\n\nThe new formatter always uses a Flutter-like style for commas-separated constructors, so trailing commas are no longer needed for point 1.\n\nWhen it does split a construct, it always adds a trailing comma. This means that point 2 breaks reversibility. Because of that, and because many users don\u0027t want to decide for every construct whether it should split or not, the new tall formatter no longer does point 2. It will remove a trailing comma and collapse a construct if it decides to.\n\nHowever, some users rely heavily on that feature and strongly prefer control over forcing argument lists and other constructs to split.\n\nThis PR restores that functionality with an opt-in configuration:\n\n```\nformatter:\n  trailing_commas: preserve\n```\n\nWhen enabled, if a construct has a trailing comma, the formatter will always split it. Users that preferred that behavior from the old formatter can enable the option and continue to work that way.\n\nThis does not mean we are generally moving in the direction of a more configurable formatter. This was a behavior that the formatter already supported and we removed it to the detriment of some users\u0027 experience. We\u0027re restoring that existing behavior for those users who want it.\n\nFix #1652.\n"
    },
    {
      "commit": "2772c8d2393c332fcb66125a3bbc2b42bf561c3f",
      "tree": "85768f9c2084c4aaa26024529e6a02bb302c9db9",
      "parents": [
        "348a14679f315c5f21033facb38f8d2397455944"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Wed Mar 12 16:22:02 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 12 16:22:02 2025 -0700"
      },
      "message": "Update the SDK constraint and move onto the new formatter. (#1669)\n\nUpdate the SDK constraint and move onto the new formatter.\n\nFinally get to dogfood it in the dart_style repo.\n\nI tweaked a couple of very minor things to play nice with the new style:\n\n- A couple of test() calls had their test body indented because the\n  description string didn\u0027t fit. Reworded or split the strings.\n\n- Hoisted out one very large closure because it got indented farther.\n\n- Rewrapped a couple of comments.\n\nOtherwise, no real surprises.\n\nI also took the opportunity to ensure every formatter test file had a\nconsistent newline at the end.\n"
    },
    {
      "commit": "348a14679f315c5f21033facb38f8d2397455944",
      "tree": "4b807be2aeb3b701c346eb7d7395236a034aff3f",
      "parents": [
        "852e54f726f818c871b108885cf557a03e765ab1"
      ],
      "author": {
        "name": "Chloe Stefantsova",
        "email": "519320+chloestefantsova@users.noreply.github.com",
        "time": "Wed Mar 05 16:28:19 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 05 07:28:19 2025 -0800"
      },
      "message": "Format null-aware elements (#1663)\n\nFormat null-aware elements\n\n- Add support for passing experiment flags with tests. The old way of\n  doing this was to just hardcode experiments inside the formatter when\n  a new feature was supported. That made sense when the formatter didn\u0027t\n  know about language version, but now that it does, it should probably\n  require experiment flags explicitly and tests for new features should\n  enable them.\n"
    },
    {
      "commit": "852e54f726f818c871b108885cf557a03e765ab1",
      "tree": "3038caa077d689bba3d3346bc7e014f45ee2d570",
      "parents": [
        "1a6119afc65eaafcc1e58ab96c1c44b4d01d2e4c"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Mar 01 13:30:21 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 01 13:30:21 2025 +0000"
      },
      "message": "Bump dart-lang/setup-dart in the github-actions group (#1662)\n\nBumps the github-actions group with 1 update: [dart-lang/setup-dart](https://github.com/dart-lang/setup-dart).\n\nUpdates `dart-lang/setup-dart` from 1.7.0 to 1.7.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/dart-lang/setup-dart/releases\"\u003edart-lang/setup-dart\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.7.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRoll \u003ccode\u003eundici\u003c/code\u003e dependency to address \u003ca href\u003d\"https://github.com/nodejs/undici/security/advisories/GHSA-c76h-2ccp-4975\"\u003eCVE-2025-22150\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdate to the latest npm dependencies.\u003c/li\u003e\n\u003cli\u003eRecompile the action using the new Dart / JavaScript interop.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/dart-lang/setup-dart/blob/main/CHANGELOG.md\"\u003edart-lang/setup-dart\u0027s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.7.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRoll \u003ccode\u003eundici\u003c/code\u003e dependency to address \u003ca href\u003d\"https://github.com/nodejs/undici/security/advisories/GHSA-c76h-2ccp-4975\"\u003eCVE-2025-22150\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdate to the latest npm dependencies.\u003c/li\u003e\n\u003cli\u003eRecompile the action using the new Dart / JavaScript interop.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.7.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eInstall flutter sdk in publishing step, allowing Flutter packages to be\npublished (\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/68\"\u003e#68\u003c/a\u003e[])\u003c/p\u003e\n\u003cp\u003e\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/68\"\u003e#68\u003c/a\u003e: \u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/68\"\u003edart-lang/setup-dart#68\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.6.5\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix zip path handling on Windows 11 (\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/118\"\u003e#118\u003c/a\u003e[])\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/118\"\u003e#118\u003c/a\u003e: \u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/118\"\u003edart-lang/setup-dart#118\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.6.4\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRebuild JS code.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.6.3\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRoll \u003ccode\u003eundici\u003c/code\u003e dependency to address \u003ca href\u003d\"https://github.com/nodejs/undici/security/advisories/GHSA-m4v8-wqvr-p9f7\"\u003eCVE-2024-30260\u003c/a\u003e and \u003ca href\u003d\"https://github.com/nodejs/undici/security/advisories/GHSA-9qxr-qj54-h672\"\u003eCVE-2024-30261\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.6.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSwitch to running the workflow on \u003ccode\u003enode20`` from \u003c/code\u003enode16`. See also\n\u003ca href\u003d\"https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/\"\u003eTransitioning from Node 16 to Node 20\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.6.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated the google storage url for \u003ccode\u003emain\u003c/code\u003e channel releases.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.6.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEnable provisioning of the latest Dart SDK patch release by specifying just\nthe major and minor version (e.g. \u003ccode\u003e3.2\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.1\u003c/h2\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/dart-lang/setup-dart/commit/e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c\"\u003e\u003ccode\u003ee51d8e5\u003c/code\u003e\u003c/a\u003e prep for releasing 1.7.1 (\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/150\"\u003e#150\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/dart-lang/setup-dart/commit/1faf8e64e5464d6b727016aa2467794f7dc410fb\"\u003e\u003ccode\u003e1faf8e6\u003c/code\u003e\u003c/a\u003e updates to move away from dart:js_util (\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/148\"\u003e#148\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/dart-lang/setup-dart/commit/614cb8d798824d682e7086a5d8b14e588723bc5c\"\u003e\u003ccode\u003e614cb8d\u003c/code\u003e\u003c/a\u003e Bump flutter-actions/setup-flutter in the github-actions group (\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/146\"\u003e#146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/dart-lang/setup-dart/commit/55f49ad7b2b8b71f3043f80dc4cd4e0eca4aa90b\"\u003e\u003ccode\u003e55f49ad\u003c/code\u003e\u003c/a\u003e Bump undici from 5.28.4 to 5.28.5 (\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/149\"\u003e#149\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/dart-lang/setup-dart/commit/2c0db8f5ec902ee2420de88e6ece2f275d1f26f1\"\u003e\u003ccode\u003e2c0db8f\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003e@​actions/tool-cache\u003c/code\u003e from 2.0.1 to 2.0.2 (\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/147\"\u003e#147\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/dart-lang/setup-dart/commit/6123db65aca0aa1e30809215875310f1ca706148\"\u003e\u003ccode\u003e6123db6\u003c/code\u003e\u003c/a\u003e Bump dart-lang/setup-dart in the github-actions group (\u003ca href\u003d\"https://redirect.github.com/dart-lang/setup-dart/issues/145\"\u003e#145\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href\u003d\"https://github.com/dart-lang/setup-dart/compare/e630b99d28a3b71860378cafdc2a067c71107f94...e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003ddart-lang/setup-dart\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d1.7.0\u0026new-version\u003d1.7.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s major version (unless you unignore this specific dependency\u0027s major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s minor version (unless you unignore this specific dependency\u0027s minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\u003c/details\u003e"
    },
    {
      "commit": "1a6119afc65eaafcc1e58ab96c1c44b4d01d2e4c",
      "tree": "62a0c276812468f1f056ecb10b9d623950bc4c39",
      "parents": [
        "33aefe348d596dcc09d61bcf52982f74babddeb5"
      ],
      "author": {
        "name": "Bob Nystrom",
        "email": "rnystrom@google.com",
        "time": "Fri Feb 28 17:28:08 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 28 17:28:08 2025 -0800"
      },
      "message": "Allow block formatting record types in typedefs. (#1661)\n\nFix #1651."
    }
  ],
  "next": "33aefe348d596dcc09d61bcf52982f74babddeb5"
}
