)]}'
{
  "log": [
    {
      "commit": "82285db8e1af42013d863701e44735b1e07bdefe",
      "tree": "82f5efdab38f1f91162dcdcd0ada1b5981c349da",
      "parents": [
        "f8f588752d5c23f5d288efa92b505082752eb9f7"
      ],
      "author": {
        "name": "Ulrich Huber",
        "email": "ulrich@huberulrich.de",
        "time": "Wed Oct 28 11:53:11 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 28 11:53:11 2026 +0100"
      },
      "message": "buildifier: add SARIF output (--format\u003dsarif) (#1529)\n\nAdds SARIF 2.1.0 as a third diagnostics format next to `text` and\n`json`. SARIF is understood by many CI, IDE and code-quality tools.\nFixes #1528.\n\n## Usage\n\n```\nbuildifier --mode\u003dcheck --lint\u003dwarn --format\u003dsarif -r . \u003e buildifier.sarif\n```\n\nAs with `json`, `--format\u003dsarif` only works with `--mode\u003dcheck`, and\n`-v` indents the output.\n\n## Mapping\n\n- Each lint warning becomes a result at level `warning`. Its `ruleId` is\nthe warning category, `helpUri` is the WARNINGS.md link, and the region\nis the start and end line and column.\n- A file that needs reformatting becomes a file-level result (no region)\nwith rule `format`, level `warning`.\n- A file that can\u0027t be parsed becomes a file-level result with rule\n`parse-error`, level `error`.\n- Rules are deduplicated per category.\n- With no findings, the output is still a valid log with empty `rules`\nand `results`.\n\n## Design notes\n\n- The serializer is a small in-tree struct set, so it adds no\ndependency.\n- Findings carry no severity today (only `actionable`, which `warn.go`\nalways sets to `true`). So every lint finding is a `warning`.\n- `autoFixable` is not mapped. It would need SARIF `fixes` with\nreplacement text, which can come in a follow-up.\n- A `format` finding has no region, because buildifier doesn\u0027t track\nwhere the formatting differs.\n- `artifactLocation.uri` is the path as passed on the command line, so\nrun from the repo root with relative paths for repo-relative URIs.\n\n## Commits\n\n1. Serializer (`utils/sarif.go`), unit tests, and the `Format` hook-up.\n2. Accept `--format\u003dsarif` in `--mode\u003dcheck` and update the help text.\n3. README section.\n4. Integration tests with goldens, covering many files, a single file,\nstdin and an invalid file.\n\n## Additional testing\n\n- Sample outputs validate against the official OASIS SARIF 2.1.0 schema.\n\n---------\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "f8f588752d5c23f5d288efa92b505082752eb9f7",
      "tree": "97ad708857889d04cf3a243a8cb0c132c8e8ee08",
      "parents": [
        "ca36e3965831a78e210294476601151e52d17fee"
      ],
      "author": {
        "name": "David Sanderson",
        "email": "32687193+dws@users.noreply.github.com",
        "time": "Sat Oct 17 18:54:17 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 22:54:17 2026 +0000"
      },
      "message": "fix: extend make-location lint to .bzl files (#1526)"
    },
    {
      "commit": "ca36e3965831a78e210294476601151e52d17fee",
      "tree": "46c8d431aaf12493452abd2a55c3c2332ed5948a",
      "parents": [
        "d94439c45d4c20c51987b383d2ec0ced278b902d"
      ],
      "author": {
        "name": "Keith Smiley",
        "email": "keithbsmiley@gmail.com",
        "time": "Thu Oct 08 12:38:03 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 08 21:38:03 2026 +0200"
      },
      "message": "Remove dep on safeopen (#1522)\n\nThis repo\u0027s readme recommends using the newer APIs from go itself for\nthis instead."
    },
    {
      "commit": "d94439c45d4c20c51987b383d2ec0ced278b902d",
      "tree": "5be6fa7f3c84f97fd01f8c7dc0ec63843895ead6",
      "parents": [
        "7d3bc3faf2b566d66755691bc030d8df298c3945"
      ],
      "author": {
        "name": "Julien Poumailloux",
        "email": "1029617+jpoumailloux@users.noreply.github.com",
        "time": "Tue Oct 06 06:38:30 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 06 15:38:30 2026 +0200"
      },
      "message": "buildozer: add print_all_lists command for \u0027+\u0027 list expressions (#1525)\n\nBuildozer\u0027s mutating list commands (`add`, `remove`, `replace`,\n`substitute`) and `print_comment \u003cattr\u003e \u003cvalue\u003e` traverse `+`\nconcatenation expressions via `edit.AllLists`, operating on all\ntop-level `*build.ListExpr` operands in expressions such as `[\"a\", \"b\"]\n+ select(...)` or `DEPS_VAR + [\"a\"]`.\n\nHowever, `print \u003cattr\u003e` relies on `Rule.AttrStrings` (`build.Strings`),\nwhich only matches a single `*build.ListExpr` and falls back to\nreturning the raw formatted expression string whenever `+` is used.\nUnconditionally changing `print \u003cattr\u003e` would break existing callers\nthat distinguish pure list literals from expressions containing\nvariables or `select(...)`.\n\nAdd `edit.AllListsStrings(e build.Expr) []string` to extract string\nliterals across all top-level `*build.ListExpr` operands returned by\n`edit.AllLists(e)`, and expose a `print_all_lists \u003cattribute(s)\u003e`\ncommand in Buildozer that prints the combined string elements from all\ntop-level list literals as a list (e.g. `[\"a\"] + select(...)` prints\n`[a]`, and `VAR + [\"a\"] + [\"b\"]` prints `[a b]`)."
    },
    {
      "commit": "7d3bc3faf2b566d66755691bc030d8df298c3945",
      "tree": "60968fc43078d4d70de7c23faa409d5c294348ab",
      "parents": [
        "d12fe38eb8b1680838af70fe9a797feb9c3f71ba"
      ],
      "author": {
        "name": "Keith Smiley",
        "email": "keithbsmiley@gmail.com",
        "time": "Wed Sep 23 01:17:45 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 23 10:17:45 2026 +0200"
      },
      "message": "Remove rules_proto dep (#1520)"
    },
    {
      "commit": "d12fe38eb8b1680838af70fe9a797feb9c3f71ba",
      "tree": "f8ebb25a966754956ca33e3e8c1d0aa79889f5a9",
      "parents": [
        "933e9bbe17f7619afaca1dd58ce22810042f1c13"
      ],
      "author": {
        "name": "Fabian Meumertzheim",
        "email": "fabian@meumertzhe.im",
        "time": "Tue Sep 22 23:41:31 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 22 23:41:31 2026 +0200"
      },
      "message": "Preserve comments on the final function parameter (#1519)\n\nBuildifier currently moves a trailing comment on the final function\nparameter past the closing `)` and any return annotation. For example:\n\n```python\ndef f(\n    x,  # @unused\n) -\u003e int:\n    return 1\n```\n\nbecomes:\n\n```python\ndef f(\n        x) -\u003e int:  # @unused\n    return 1\n```\n\nSince #1488, these two spellings have different AST attachments: the\nfirst comment belongs to `x`, while the second belongs to the function\nheader\u0027s colon. #1518 intentionally interprets an `@unused` comment on\nthe header as applying to the final parameter, preserving the\nlongstanding behavior of existing files. However, buildifier should not\nconvert the preferred parameter-attached form into that legacy\nheader-attached form. Keeping the forms distinguishable lets users write\nthe clearer form today and leaves room to change or deprecate the legacy\ninterpretation in the future.\n\nThis PR keeps signatures with parameter suffix comments multiline and\nemits a pending final parameter comment before the closing parenthesis:\n\n```python\ndef f(\n        x  # @unused\n) -\u003e int:\n    return 1\n```\n\nBoth forms remain supported, with `@unused` applying only to the final\nparameter:\n\n```python\n# Preferred: the comment is attached to y.\ndef f(\n        x,\n        y  # @unused\n):\n    pass\n\n# Legacy compatibility: a header comment applies to y, not x.\ndef g(x, y):  # @unused\n    pass\n```\n\nThe lexer previously treated a comment following a line containing only\n`):` as a body comment. That exception was added in #276 before\nblock-header comments had their own AST node. Remove it so comments\nvisibly written after the colon remain attached to the header, including\nmultiline `def`, `if`, and `for` headers.\n\nFinally, flush queued end-of-line comments before reducing the\nindentation margin. This keeps continuation comments on a final\nparameter aligned with that parameter and makes formatting idempotent.\n\nThe `unused-variable` documentation now recommends the\nparameter-attached form and documents the header-attached form as\nbackward compatibility behavior."
    },
    {
      "commit": "933e9bbe17f7619afaca1dd58ce22810042f1c13",
      "tree": "4ee24e1670831a46d2fc02469d8632a55fd8c546",
      "parents": [
        "8b07e7cfa479a6865e7b8dc10cd1ec7b78dc6814"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Mon Sep 21 08:30:02 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 08:30:02 2026 +0200"
      },
      "message": "only remove visibility matching explicit default_visibility (#1512)\n\n## Buildtools PR checklist\n\n- [x] The code in this PR is covered by unit/integration tests.\n- [x] I have tested these changes and provide testing instructions\nbelow.\n- [ ] I have either responded to, or resolved all Gemini comments on the\nPR.\n- [x] I have read Google Eng Practices on [Small\nChanges](https://google.github.io/eng-practices/review/developer/small-cls.html),\nthis PR either follows these guidelines or the description provides\nreasoning for why they can not be followed.\n\n## Description\n\nPreviously, buildozer\u0027s fix.go:105 routine stripped `visibility`\nattributes whenever they matched an explicit `default_visibility` or\ndefaulted to `[\"//visibility:private\"]` when `default_visibility` was\nomitted.\n\nHowever, Starlark macros and custom rules often implement their own\ndefault visibility logic (e.g., defaulting to public or custom targets\nwhen `visibility` is omitted). Stripping `visibility \u003d\n[\"//visibility:private\"]` when no package-level default is declared can\nsilently broaden visibility.\n\nRather than relying on fragile heuristics to identify macros and loaded\nrules, this change refactors fix.go:105 to only strip visibility\nattributes when `default_visibility` is **explicitly defined** in a\n`package()` declaration:\n\n- **Explicit `default_visibility` required**: If `default_visibility` is\nnot explicitly set on the package, rule `visibility` attributes are\npreserved.\n- **Unordered string list matching**: Compares string lists using\n`slices.Sorted`, allowing redundant visibility to be removed even if\nlist elements appear in a different order.\n- **Identifier matching**: Supports matching identifier expressions\n(e.g. `package(default_visibility \u003d PUBLIC)` and `visibility \u003d PUBLIC`).\n\n\n### (optional) These changes were tested using the following steps\n\nRan unit tests covering all cases:\n```bash\n    go test ./edit -run TestFix\n```\n\nUnit test cases in fix_test.go verify:\n\n  • Preserving visibility when default_visibility is not set\n  • Removing redundant visibility with differing slice order\n  • Removing redundant visibility matching identifiers\n  • Preserving non-matching visibility\n\n---------\n\nCo-authored-by: Kyle Dobitz \u003ckyledobitz@gmail.com\u003e\nCo-authored-by: Tim Malmström \u003coreflow@google.com\u003e"
    },
    {
      "commit": "8b07e7cfa479a6865e7b8dc10cd1ec7b78dc6814",
      "tree": "7b6b818dd7c6bd7d8e0fb4536d6f151cd5ec0a2b",
      "parents": [
        "660070f8469cd8a80536408db98e56facbd91580"
      ],
      "author": {
        "name": "Keith Smiley",
        "email": "keithbsmiley@gmail.com",
        "time": "Wed Sep 16 11:10:15 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 17:10:15 2026 +0000"
      },
      "message": "Fix @unused for last argument of function (#1518)\n\nRegressed in d2a20dc9d54727597d66fd091cb16711375cac2b\n\n---------\n\nCo-authored-by: Fabian Meumertzheim \u003cfabian@meumertzhe.im\u003e"
    },
    {
      "commit": "660070f8469cd8a80536408db98e56facbd91580",
      "tree": "453207ce6634cbf6034414d675df6996b794b121",
      "parents": [
        "d89dac5cfc572fe83a24e255f1dda922aadfc7c2"
      ],
      "author": {
        "name": "Alexandre Rostovtsev",
        "email": "arostovtsev@google.com",
        "time": "Wed Sep 16 07:05:50 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 11:05:50 2026 +0000"
      },
      "message": "Add cast and isinstance keywords (#1505)\n\nFinishing support for the type syntax proposed in\nhttps://github.com/bazelbuild/starlark/pull/362\n\nAfter some reflection, I think we should always parse cast/isinstance as\nkeywords (requiring 2 arguments, one of which is a value expression and\nthe other a type expression) since permitting pre-type Starlark syntax\nis likely to only lead to confusion, and would be quite difficult to get\nright.\n\nNote that this is an **incompatible change**: forms like `cast(x, y, z)`\nor `cast \u003d foo` will now be a parse error. However, in practice, I\nobserve no occurrences of `cast` or `isinstance` used as identifiers in\nany Starlark code in Google\u0027s monorepo, so I believe that it\u0027s rather\nunlikely to break anyone.\n\nStore the parsed cast/isinstance exprs as `CallExpr`-s (to avoid\ndiverging their formatting/walking/etc. support from call expressions)\nwith an enum field to mark that they are of a special kind.\n\n## Buildtools PR checklist\n\n- [X] The code in this PR is covered by unit/integration tests.\n- [X] I have tested these changes and provide testing instructions\nbelow.\n- [ ] I have either responded to, or resolved all Gemini comments on the\nPR.\n- [X] I have read Google Eng Practices on [Small\nChanges](https://google.github.io/eng-practices/review/developer/small-cls.html),\nthis PR either follows these guidelines or the description provides\nreasoning for why they can not be followed."
    },
    {
      "commit": "d89dac5cfc572fe83a24e255f1dda922aadfc7c2",
      "tree": "8dbe5de32baa93943659cf1192a898cbdd1a1577",
      "parents": [
        "9032bea7b0163c07d6c6fd877960ef9cd8209a4e"
      ],
      "author": {
        "name": "Fabian Meumertzheim",
        "email": "fabian@meumertzhe.im",
        "time": "Tue Sep 15 17:34:30 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 17:34:30 2026 +0200"
      },
      "message": "Replace PR template with updated CONTRIBUTING.md and AGENTS.md (#1516)\n\nThe checkboxes don\u0027t really add value and end up polluting the commit\nmessages."
    },
    {
      "commit": "9032bea7b0163c07d6c6fd877960ef9cd8209a4e",
      "tree": "217b6eb7d4856dbf2b53404bff551a307ea929bc",
      "parents": [
        "0cfe520f674ae009835d8ec30a9c20199a7d8701"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Tue Sep 15 16:26:32 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 16:26:32 2026 +0200"
      },
      "message": "Update lex.go (#1517)\n\nFixing printing error, printing rune instead of integer\n\n## Buildtools PR checklist\n\n- [x] The code in this PR is covered by unit/integration tests.\n- [ ] I have tested these changes and provide testing instructions\nbelow.\n- [ ] I have either responded to, or resolved all Gemini comments on the\nPR.\n- [x] I have read Google Eng Practices on [Small\nChanges](https://google.github.io/eng-practices/review/developer/small-cls.html),\nthis PR either follows these guidelines or the description provides\nreasoning for why they can not be followed.\n\n## Description\n\nWhat does this PR do? Please follow [Google Eng Practices -\nDescription](https://google.github.io/eng-practices/review/developer/cl-descriptions.html)\n\n### (optional) These changes were tested using the following steps\n\nSteps to reproduce / test the PR changes (if anything besides unit\ntests)."
    },
    {
      "commit": "0cfe520f674ae009835d8ec30a9c20199a7d8701",
      "tree": "7765617330f6a4cf15b99692afab122f614ff04e",
      "parents": [
        "9f7af7ec6acd5de1bcc8f24b8d7696ecd48ed3f9"
      ],
      "author": {
        "name": "Fabian Meumertzheim",
        "email": "fabian@meumertzhe.im",
        "time": "Tue Sep 15 15:07:06 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 15:07:06 2026 +0200"
      },
      "message": "Add a release workflow that builds and attaches binaries (#1515)\n\n## Buildtools PR checklist\n\n- [x] The code in this PR is covered by unit/integration tests.\n- [x] I have tested these changes and provide testing instructions\nbelow.\n- [x] I have either responded to, or resolved all Gemini comments on the\nPR.\n- [x] I have read Google Eng Practices on [Small\nChanges](https://google.github.io/eng-practices/review/developer/small-cls.html),\nthis PR either follows these guidelines or the description provides\nreasoning for why they can not be followed.\n\n## Description\n\nAdd a GitHub workflow that runs on a tag push, builds release binaries\nand creates a release with the binaries attached. The workflow supports\nimmutable releases and creates attestations."
    },
    {
      "commit": "9f7af7ec6acd5de1bcc8f24b8d7696ecd48ed3f9",
      "tree": "b4c6f6aa534ec6eebf260a108fcacd7940d13d6e",
      "parents": [
        "9452b00d289e4557880357f12a2016b71aec3c3b"
      ],
      "author": {
        "name": "Fabian Meumertzheim",
        "email": "fabian@meumertzhe.im",
        "time": "Tue Sep 15 14:38:13 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 14:38:13 2026 +0200"
      },
      "message": "Update deps and fix `go mod tidy` (#1514)\n\n## Buildtools PR checklist\n\n- [x] The code in this PR is covered by unit/integration tests.\n- [x] I have tested these changes and provide testing instructions\nbelow.\n- [x] I have either responded to, or resolved all Gemini comments on the\nPR.\n- [x] I have read Google Eng Practices on [Small\nChanges](https://google.github.io/eng-practices/review/developer/small-cls.html),\nthis PR either follows these guidelines or the description provides\nreasoning for why they can not be followed.\n\n## Description\n\n* Bump Bazel, rules_go, gazelle and Go version\n* Add missing generating code\n* Make go.mod the source of truth for Bazel builds and tidy it\n* Ensure go.mod/go.sum remain tidy and `go build ./...` passes via a CI\njob\n* Drop the EoL\u0027d ubuntu-20.04 run\n\nFixes https://github.com/bazel-contrib/buildtools/issues/1513"
    },
    {
      "commit": "9452b00d289e4557880357f12a2016b71aec3c3b",
      "tree": "d674b6e087135860b3bf2cd966e34794f48fbc26",
      "parents": [
        "42840eee04cbd3da882aa00134d03d78d824d649"
      ],
      "author": {
        "name": "Alexandre Rostovtsev",
        "email": "arostovtsev@google.com",
        "time": "Fri Sep 11 12:29:10 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 11 18:29:10 2026 +0200"
      },
      "message": "Allow ellipsis in value expressions (#1511)\n\nSee comments in https://github.com/bazelbuild/starlark/pull/362 - we\nwill need ellipsis for reified types (a type evaluated at runtime as\nopposed to compile/type-check time) in context such as defining a\nprovider field\u0027s type.\n\n## Buildtools PR checklist\n\n- [X] The code in this PR is covered by unit/integration tests.\n- [X] I have tested these changes and provide testing instructions\nbelow.\n- [ ] I have either responded to, or resolved all Gemini comments on the\nPR.\n- [X] I have read Google Eng Practices on [Small\nChanges](https://google.github.io/eng-practices/review/developer/small-cls.html),\nthis PR either follows these guidelines or the description provides\nreasoning for why they can not be followed."
    },
    {
      "commit": "42840eee04cbd3da882aa00134d03d78d824d649",
      "tree": "c803a76b3890279de989ce29114c4cafbe59ced3",
      "parents": [
        "eaa4d125b4237660202c4c4624863e0de67a4d44"
      ],
      "author": {
        "name": "Philipp Stephani",
        "email": "p.stephani2@gmail.com",
        "time": "Fri Sep 11 16:42:34 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 11 16:42:34 2026 +0200"
      },
      "message": "Fix module paths (#1502)\n\nSee https://go.dev/doc/modules/version-numbers#major-version.\n\n## Buildtools PR checklist\n\n- [x] The code in this PR is covered by unit/integration tests.\n- [x] I have tested these changes and provide testing instructions\nbelow.\n- [x] I have either responded to, or resolved all Gemini comments on the\nPR.\n- [x] I have read Google Eng Practices on [Small\nChanges](https://google.github.io/eng-practices/review/developer/small-cls.html),\nthis PR either follows these guidelines or the description provides\nreasoning for why they can not be followed.\n\n## Description\n\nWork towards https://github.com/bazel-contrib/buildtools/issues/1237\n\nAccording to https://go.dev/doc/modules/version-numbers#major-version,\nthe module path must include the major version for versions above v1."
    },
    {
      "commit": "eaa4d125b4237660202c4c4624863e0de67a4d44",
      "tree": "9803525f3ebb80ff135b74aa5050eceb43abbef9",
      "parents": [
        "047158be8a67a61db7246c01db253e6476970953"
      ],
      "author": {
        "name": "Philipp Stephani",
        "email": "p.stephani2@gmail.com",
        "time": "Fri Sep 04 09:31:37 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 09:31:37 2026 +0200"
      },
      "message": "Reformat a few files (#1503)\n\n## Buildtools PR checklist\n\n- [ ] The code in this PR is covered by unit/integration tests.\n- [ ] I have tested these changes and provide testing instructions\nbelow.\n- [x] I have either responded to, or resolved all Gemini comments on the\nPR.\n- [x] I have read Google Eng Practices on [Small\nChanges](https://google.github.io/eng-practices/review/developer/small-cls.html),\nthis PR either follows these guidelines or the description provides\nreasoning for why they can not be followed.\n\n## Description\n\nAs fallout from https://github.com/bazel-contrib/buildtools/pull/1502 a\nfew files got reformatted. This PR splits out the reformatting from\nhttps://github.com/bazel-contrib/buildtools/pull/1502."
    },
    {
      "commit": "047158be8a67a61db7246c01db253e6476970953",
      "tree": "22703192609246521c37825212fb1d22c0e347eb",
      "parents": [
        "d00ce382946a182a4e055dd6693b460646845b9b"
      ],
      "author": {
        "name": "Alexandre Rostovtsev",
        "email": "arostovtsev@google.com",
        "time": "Fri Sep 04 02:10:33 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 08:10:33 2026 +0200"
      },
      "message": "Unbreak support for Buck2 tuple type syntax (#1509)\n\nIn Buck2:\n\n* `()` is the type of the empty tuple (what Bazel calls `tuple[()]`)\n* `(T,)` is the type of a 1-element tuple of T\n* `(T, U)` or equivalently `(T, U,)` is the type of a 2-element tuple\ntype\n\netc.\n\nThis means we need to allow tuples of type expressions as type atoms.\n(And we may as well allow arbitrary parenthesized type expressions as\ntype atoms, since Buck2 suppports those too.)\n\nFixes #1508.\n\n## Buildtools PR checklist\n\n- [X] The code in this PR is covered by unit/integration tests.\n- [X] I have tested these changes and provide testing instructions\nbelow.\n- [ ] I have either responded to, or resolved all Gemini comments on the\nPR.\n- [X] I have read Google Eng Practices on [Small\nChanges](https://google.github.io/eng-practices/review/developer/small-cls.html),\nthis PR either follows these guidelines or the description provides\nreasoning for why they can not be followed.\n\n@fmeum @dtolnay"
    },
    {
      "commit": "d00ce382946a182a4e055dd6693b460646845b9b",
      "tree": "f1e106e04149cfb09f1c30b02ec01973c569627f",
      "parents": [
        "acfcf2bd50095e4eb8ff998034627c788ba844fa"
      ],
      "author": {
        "name": "Philipp Stephani",
        "email": "p.stephani2@gmail.com",
        "time": "Fri Sep 04 00:10:31 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 00:10:31 2026 +0200"
      },
      "message": "Update URLs (#1504)\n\n## Buildtools PR checklist\n\n- [x] The code in this PR is covered by unit/integration tests.\n- [ ] I have tested these changes and provide testing instructions\nbelow.\n- [x] I have either responded to, or resolved all Gemini comments on the\nPR.\n- [x] I have read Google Eng Practices on [Small\nChanges](https://google.github.io/eng-practices/review/developer/small-cls.html),\nthis PR either follows these guidelines or the description provides\nreasoning for why they can not be followed.\n\n## Description\n\nThis follows the org move so that users don\u0027t need to be redirected all\nthe time."
    },
    {
      "commit": "acfcf2bd50095e4eb8ff998034627c788ba844fa",
      "tree": "d137a361ebb0e3e1511f69c7e2ebeacbce5f106e",
      "parents": [
        "d171d550ae01199f36c07cb632dcbe6cebe7e8d4"
      ],
      "author": {
        "name": "Fabian Meumertzheim",
        "email": "fabian@meumertzhe.im",
        "time": "Thu Sep 03 23:39:17 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 23:39:17 2026 +0200"
      },
      "message": "Revert \"updates (#1386)\" (#1471)\n\n## Buildtools PR checklist\n\n- [x] The code in this PR is covered by unit/integration tests.\n- [x] I have tested these changes and provide testing instructions\nbelow.\n- [x] I have either responded to, or resolved all Gemini comments on the\nPR.\n- [x] I have read Google Eng Practices on [Small\nChanges](https://google.github.io/eng-practices/review/developer/small-cls.html),\nthis PR either follows these guidelines or the description provides\nreasoning for why they can not be followed.\n\n## Description\n\nThis reverts commit 4006b543a694f6cf77c2d8cc188c5f53f3bac1d9. As\nreported in\nhttps://github.com/bazelbuild/buildtools/pull/1386#issuecomment-3838906721\nand below, this has numerous false positives and causes a lot of churn.\nThe checks could potentially still be useful if scoped far more tightly,\nbut determining this scope isn\u0027t trivial, hence a revert."
    },
    {
      "commit": "d171d550ae01199f36c07cb632dcbe6cebe7e8d4",
      "tree": "3938b6c6d64d9c3267d849428d0e62fdcd5285b2",
      "parents": [
        "d2a20dc9d54727597d66fd091cb16711375cac2b"
      ],
      "author": {
        "name": "Philipp Stephani",
        "email": "p.stephani2@gmail.com",
        "time": "Thu Sep 03 12:36:48 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 12:36:48 2026 +0200"
      },
      "message": "Add --type\u003d{repo,vendor} to README and configuration test (#1496)\n\nFollow-up to https://github.com/bazel-contrib/buildtools/pull/1485.\n\n## Buildtools PR checklist\n\n- [x] The code in this PR is covered by unit/integration tests.\n- [x] I have tested these changes and provide testing instructions\nbelow.\n- [x] I have either responded to, or resolved all Gemini comments on the\nPR.\n- [x] I have read Google Eng Practices on [Small\nChanges](https://google.github.io/eng-practices/review/developer/small-cls.html),\nthis PR either follows these guidelines or the description provides\nreasoning for why they can not be followed."
    },
    {
      "commit": "d2a20dc9d54727597d66fd091cb16711375cac2b",
      "tree": "0df953ea646622018f5156bc035125d2951ccdef",
      "parents": [
        "be9e27766c199f1abc9846476898be65df15744d"
      ],
      "author": {
        "name": "Alexandre Rostovtsev",
        "email": "tetromino@gmail.com",
        "time": "Thu Sep 03 06:33:46 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 12:33:46 2026 +0200"
      },
      "message": "Complete support for Starlark type annotations (#1488)\n\nThis change introduces parsing, AST, formatting, and linting support for\nexperimental Bazel Starlark type annotations\n(https://github.com/bazelbuild/bazel/issues/27370) and Buck2 type\nsyntax:\n\n- Type alias statements (`type OptionalDict[T, U] \u003d dict[T, U] | None`).\n- Generic `def` statements (`def foo[T, U](x: T) -\u003e U`).\n- Var statements (`x: list[int]`)\n- `type_*` AST nodes to cleanly distinguish type syntax from standard\nexpressions. In particular, this allows us to improve formatting for\ncomplex type applications, and to allow the ellipsis (`...`) only in\ntype expressions.\n\nNot supported yet: `cast` and `isinstance` expressions - these will be\nadded in a follow-up PR; supporting them is a bit tricky due to the\nlimitations of yacc\u0027s LALR(1) grammar.\n\nDisclosure: Gemini-assisted.\n\nTAG\u003dagy\nCONV\u003dae2ff586-d57d-4fd4-a22a-883aec5d0802\n\n## Buildtools PR checklist\n\n- [x] The code in this PR is covered by unit/integration tests.\n- [x] I have tested these changes and provide testing instructions\nbelow.\n- [ ] I have either responded to, or resolved all Gemini comments on the\nPR.\n- [ ] I have read Google Eng Practices on [Small\nChanges](https://google.github.io/eng-practices/review/developer/small-cls.html),\nthis PR either follows these guidelines or the description provides\nreasoning for why they can not be followed.\n\n@brandjon @susinmotion FYI"
    },
    {
      "commit": "be9e27766c199f1abc9846476898be65df15744d",
      "tree": "2aa2e0d18da3bdfbcd8483b4e77784bf749ae040",
      "parents": [
        "7cca172268c748fd5f96ccd37ce1d0e8951423c7"
      ],
      "author": {
        "name": "Yulia Nikirova",
        "email": "nikirova.july@gmail.com",
        "time": "Thu Sep 03 12:08:59 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 12:08:59 2026 +0200"
      },
      "message": "Fix buildozer :expr changing E to e (#1499)\n\n## Buildtools PR checklist\n\n- [x] The code in this PR is covered by unit/integration tests.\n- [x] I have tested these changes and provide testing instructions\nbelow.\n- [x] I have either responded to, or resolved all Gemini comments on the\nPR.\n- [x] I have read Google Eng Practices on [Small\nChanges](https://google.github.io/eng-practices/review/developer/small-cls.html),\nthis PR either follows these guidelines or the description provides\nreasoning for why they can not be followed.\n\n## Description\nFix buildozer :expr changing E to e.\n\nWhen an :expr is added with a dot and an uppercase E (like\nSYSTEMS.SYS1), it is mistakenly treated as a float in scientific\nnotation. Because it was being saved by cmdAdd as a LiteralExpr node\n(which is strictly meant for numbers), the float formatter is triggered\nand the E is incorrectly changed to a lowercase e (SYSTeMS.SYS1).\nChanging cmdAdd to use an Ident node instead fixes this, because the\nfloat formatter is skipped entirely. This matches how cmdSet already\nhandles it."
    },
    {
      "commit": "7cca172268c748fd5f96ccd37ce1d0e8951423c7",
      "tree": "ff5b1a4463d4a8e0f88bf6502f6f9a50de93d333",
      "parents": [
        "6a795a4b8ad707ac8306967ec6695c7f0e1b5304"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Aug 26 15:13:24 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 15:13:24 2026 -0700"
      },
      "message": "perf: skip comment assignment when no comments exist (#1473)\n\nIn a large repo this made a _minor_ difference in memory consumption on\ngazelle invocations. This is minor enough it may not be worth it, or\nmaybe only the first commit is worth the extra code.\n\nThe first commit is simpler and has the largest gain in my large repo,\nbut doesn\u0027t cover as wide of a range of cases.\n\nRobot summary of results:\n```\n  ┌────────────────────────────────────────────────────┬───────────────┬─────────┐\n  │                       build                        │ order() alloc │ vs base │\n  ├────────────────────────────────────────────────────┼───────────────┼─────────┤\n  │ base (no buildtools change)                        │ 137.6 MB      │ —       │\n  ├────────────────────────────────────────────────────┼───────────────┼─────────┤\n  │ commit 1 (guard: skip when no comments)            │ 60.7 MB       │ −56%    │\n  ├────────────────────────────────────────────────────┼───────────────┼─────────┤\n  │ commit 1 + 2 (guard + finer-grained split)         │ 42.1 MB       │ −69%    │\n  └────────────────────────────────────────────────────┴───────────────┴─────────┘\n```\n\n## Buildtools PR checklist\n\n- [x] The code in this PR is covered by unit/integration tests.\n- [x] I have tested these changes and provide testing instructions\nbelow.\n- [x] I have either responded to, or resolved all Gemini comments on the\nPR.\n- [x] I have read Google Eng Practices on [Small\nChanges](https://google.github.io/eng-practices/review/developer/small-cls.html),\nthis PR either follows these guidelines or the description provides\nreasoning for why they can not be followed.\n\n## Description\n\n`assignComments` previously walked the full syntax tree on every parse,\nbuilding preorder and postorder node lists used to attach line and\nsuffix comments.\n\nThis change skips the walking and `pre/post` construction when no\ncomments exists.\n\n### (optional) These changes were tested using the following steps\n\nbazel tests, patching the go.mod when invoking gazelle in a large repo\nwhile profiling memory/GC"
    },
    {
      "commit": "6a795a4b8ad707ac8306967ec6695c7f0e1b5304",
      "tree": "657e516597656cf8b2db8acbe84a01d302a463ce",
      "parents": [
        "2aaefdfbf05996c3da0daa46b4fc20f1080282d9"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Aug 26 13:42:25 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 13:42:25 2026 -0700"
      },
      "message": "perf: reduce use of printf for printing spaces/indentation (#1474)\n\nIn a large repo the unnecessary use of `Printf` is actually fairly\nsignificant.\n\n## Buildtools PR checklist\n\n- [x] The code in this PR is covered by unit/integration tests.\n- [x] I have tested these changes and provide testing instructions\nbelow.\n- [x] I have either responded to, or resolved all Gemini comments on the\nPR.\n- [x] I have read Google Eng Practices on [Small\nChanges](https://google.github.io/eng-practices/review/developer/small-cls.html),\nthis PR either follows these guidelines or the description provides\nreasoning for why they can not be followed.\n\n## Description\n\nWhat does this PR do? Please follow [Google Eng Practices -\nDescription](https://google.github.io/eng-practices/review/developer/cl-descriptions.html)\n\n### (optional) These changes were tested using the following steps\n\nSteps to reproduce / test the PR changes (if anything besides unit\ntests)."
    },
    {
      "commit": "2aaefdfbf05996c3da0daa46b4fc20f1080282d9",
      "tree": "96249ffdd811fa2695144ef0a1374c78d911f6d7",
      "parents": [
        "674b29349bf1d98d19b5a0e611bba704bb67bc0f"
      ],
      "author": {
        "name": "Alex Eagle",
        "email": "aeagle@figma.com",
        "time": "Wed Aug 26 13:40:19 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 13:40:19 2026 -0700"
      },
      "message": "Add make-location lint for deprecated $(location) make variables (#1484)\n\n## Summary\n\n- Add a new buildifier lint category, `make-location`, that flags\ndeprecated `$(location)` and `$(locations)` make variables in BUILD\nfiles.\n- Dogfood the rule in this repo by replacing existing uses with\n`$(execpath ...)` and enforcing the lint via `//:make_location_lint`.\n\n## Background / deprecation context\n\nBazel\u0027s [`$(location)`](https://bazel.build/reference/be/make-variables)\nand [`$(locations)`](https://bazel.build/reference/be/make-variables)\nmake variables are legacy pre-Starlark synonyms for\n[`$(execpath)`](https://bazel.build/reference/be/make-variables) and\n[`$(rootpath)`](https://bazel.build/reference/be/make-variables). Which\npath they expand to depends on the attribute being expanded, which makes\nbehavior hard to predict and easy to get wrong.\n\nFrom the [Make\nVariables](https://bazel.build/reference/be/make-variables) reference:\n\n\u003e **`location`**: A synonym for either `execpath` or `rootpath`,\ndepending on the attribute being expanded. This is legacy pre-Starlark\nbehavior and **not recommended** unless you really know what it does for\na particular rule. See\n[#2475](https://github.com/bazelbuild/bazel/issues/2475) for details.\n\nThe underlying inconsistency is discussed in\n[bazelbuild/bazel#2475](https://github.com/bazelbuild/bazel/issues/2475)\n(e.g. `$(location)` expanding to an exec path in some attributes but a\nrunfiles path in others). Bazel\u0027s docs now steer users toward explicit\nvariables:\n\n- [`$(execpath ...)`](https://bazel.build/reference/be/make-variables) —\npath under the execroot where build actions run\n- [`$(rootpath ...)`](https://bazel.build/reference/be/make-variables) —\nrunfiles-relative path for runtime lookup (prefer [`$(rlocationpath\n...)`](https://bazel.build/reference/be/make-variables) for\ncross-platform runfiles)\n\nThis lint nudges BUILD authors toward those explicit forms instead of\nthe ambiguous legacy alias.\n\n## Changes\n\n- New `make-location` warning in `warn/warn_bazel.go` (BUILD files only;\ndoes not flag `load(\"location\", ...)`).\n- Tests, `WARNINGS.md` / `warnings.textproto` docs, and warning-list\nupdates.\n- Repo fixes: `buildifier/BUILD.bazel`, `buildozer/BUILD.bazel`,\n`build/build_defs.bzl`.\n- New `buildifier_test` target `//:make_location_lint` added to\n`//:tests`.\n\n## Test plan\n\n- [x] `bazel test //warn:warn_test\n--test_filter\u003dTestMakeLocationVariable`\n- [x] `bazel test //warn/docs:docs_test`\n- [x] `bazel test //buildifier/config:config_test`\n- [x] `bazel test //:make_location_lint`"
    },
    {
      "commit": "674b29349bf1d98d19b5a0e611bba704bb67bc0f",
      "tree": "b33a044ec50f7f771303b994e357d987db08b6b2",
      "parents": [
        "dfb4d78a3fd995154a255cac1c648ce2fea2146e"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Mon Aug 24 09:36:17 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 18:36:17 2026 +0200"
      },
      "message": "perf: preallocate sortStringExprs chunk slice size (#1475)\n\n## Buildtools PR checklist\n\n- [x] The code in this PR is covered by unit/integration tests.\n- [x] I have tested these changes and provide testing instructions\nbelow.\n- [x] I have either responded to, or resolved all Gemini comments on the\nPR.\n- [x] I have read Google Eng Practices on [Small\nChanges](https://google.github.io/eng-practices/review/developer/small-cls.html),\nthis PR either follows these guidelines or the description provides\nreasoning for why they can not be followed.\n\n## Description\n\nThe list size is guaranteed and can be pre-\\allocatted."
    },
    {
      "commit": "dfb4d78a3fd995154a255cac1c648ce2fea2146e",
      "tree": "f7c614fcd0bafc875436cd08419e4bd0c4eeae00",
      "parents": [
        "5d08cfd22031b639e408177d884f1b49c7dfd59e"
      ],
      "author": {
        "name": "Philipp Stephani",
        "email": "p.stephani2@gmail.com",
        "time": "Mon Aug 24 18:27:16 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 18:27:16 2026 +0200"
      },
      "message": "Add basic support for REPO.bazel and VENDOR.bazel files (#1485)\n\n## Buildtools PR checklist\n\n- [x] The code in this PR is covered by unit/integration tests.\n- [x] I have tested these changes and provide testing instructions\nbelow.\n- [x] I have either responded to, or resolved all Gemini comments on the\nPR.\n- [x] I have read Google Eng Practices on [Small\nChanges](https://google.github.io/eng-practices/review/developer/small-cls.html),\nthis PR either follows these guidelines or the description provides\nreasoning for why they can not be followed.\n\n## Description\n\nAdd basic support for REPO.bazel and VENDOR.bazel files\n\nAs these files are pretty trivial, we mostly treat them as generic\nBUILD-like files and only wire up type detection and the Buildifier\n--type flag.\n\n### (optional) These changes were tested using the following steps"
    },
    {
      "commit": "5d08cfd22031b639e408177d884f1b49c7dfd59e",
      "tree": "4082c51c55844e96f68cb8d8772547def4eb3884",
      "parents": [
        "c042ee3fc019adb2ac2fcbdbbea984fcdea01ad7"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Wed Aug 19 16:51:30 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 16:51:30 2026 +0300"
      },
      "message": "Update buildozer.go\n\nRollback accidental line change in https://github.com/bazelbuild/buildtools/pull/1491"
    },
    {
      "commit": "c042ee3fc019adb2ac2fcbdbbea984fcdea01ad7",
      "tree": "0a190fe45844347118daf4c9e1794aa54a681c64",
      "parents": [
        "04cf7de1434f42a6202eaabfa1416602c920c62c"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Wed Aug 19 15:39:51 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 16:39:51 2026 +0300"
      },
      "message": "Prevent unwanted path traversal in file writes from buildtools. (#1491)\n\n* Prevent unwanted path traversal in file writes from buildtools.\n\nBuildtools previously allowed file writes through arbitrary symlinks, which could result in unintended path traversal outside of the Bazel workspace.\n\nUse safeopen.WriteFileBeneath to ensure file writes remain confined within the Bazel workspace root. Add the -disable_symlink_safety flag to both buildifier and buildozer to allow opting out of this restriction when modifying files targeted via external symlinks.\n\nNew Behavior:\n- Without flag (default): both tools refused to write and exited with error (invalid cross-device link).\n- With -disable_symlink_safety: both tools successfully formatted/edited the target file.\n\n* Fixing MODULE.bazel\n\n* Disabling Symlink safety for windows\n\n* Only check symlink safety on Linux for now\n\n* Also OS-gating buildozer test\n\n---------\n\nCo-authored-by: Tim Malmström \u003coreflow@google.com\u003e"
    },
    {
      "commit": "04cf7de1434f42a6202eaabfa1416602c920c62c",
      "tree": "11977e9bf9cc67d112ebf88e461af996ed4c5316",
      "parents": [
        "05121c1d764057cbdb7f2e0a3d93999ea5787096"
      ],
      "author": {
        "name": "Matthias Kramm",
        "email": "kramm@quiss.org",
        "time": "Thu Jul 16 07:23:18 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 16:23:18 2026 +0200"
      },
      "message": "Allow to disable multiple warnings on one line (#1482)\n\n* Allow to disable multiple warnings on one line\n\n* edit_test: document current behavior\n\n* move tool enumeration into ContainsDisableComments\n\n* fix build and update documentation"
    },
    {
      "commit": "05121c1d764057cbdb7f2e0a3d93999ea5787096",
      "tree": "355c1240d442a6fab29045d79876f78ed6ea35bc",
      "parents": [
        "77b9b380c0a4f3d876f87d44a0027954157f7c41"
      ],
      "author": {
        "name": "Burt Matthews",
        "email": "80060660+earfman@users.noreply.github.com",
        "time": "Wed Jul 15 05:14:56 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 14:14:56 2026 +0200"
      },
      "message": "buildifier: make formatting idempotent for compact block statements followed by comments (#1481)\n\n* Make formatting idempotent for compact block statements followed by comments\n\nComments following a block statement (def/for/if) now parse as standalone CommentBlock statements, matching the expanded-form parse, so buildifier converges in a single pass. Fixes bazelbuild/buildtools#1470.\n\n* Regenerate parse.y.go with goyacc (x/tools v0.15.0)\n\n* Add regression testdata for #1470 (input)\n\n* Add regression testdata for #1470 (golden)\n\nAdd golden file 078.golden with function definitions and comments."
    },
    {
      "commit": "77b9b380c0a4f3d876f87d44a0027954157f7c41",
      "tree": "5606b09c5dbfd2c9e46a980f7b35860a8220b71b",
      "parents": [
        "84fa6c32aee6964c1d71ec7db96755ca6b6287f2"
      ],
      "author": {
        "name": "Yulia Nikirova",
        "email": "nikirova.july@gmail.com",
        "time": "Mon Jun 22 14:04:22 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 22 14:04:22 2026 +0200"
      },
      "message": "Fix: ignore comments in unreachable statement check. (#1478)"
    },
    {
      "commit": "84fa6c32aee6964c1d71ec7db96755ca6b6287f2",
      "tree": "c8c22f8240437cd1330e3b3333e81889885fef9d",
      "parents": [
        "eb0c58a06830038e398e1d5c3f9170210d054dd9"
      ],
      "author": {
        "name": "Keith Smiley",
        "email": "keithbsmiley@gmail.com",
        "time": "Thu May 28 06:53:16 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 28 15:53:16 2026 +0200"
      },
      "message": "Catch more file patterns (#1463)\n\nPreviously `buildifier -r .` would not pick up `foo.BUILD.bazel` files\nor `foo.BUILD` files even though the `runner.bash.template` would. This\nattempts to unify these."
    },
    {
      "commit": "eb0c58a06830038e398e1d5c3f9170210d054dd9",
      "tree": "0c8c327e79edcbdd81251589f18a507752ad9f1d",
      "parents": [
        "3b47c424ecf592d38f1cfe3beb7e463961d9d2f9"
      ],
      "author": {
        "name": "Vladimir Moskva",
        "email": "vladmos@google.com",
        "time": "Wed May 27 14:56:59 2026 +0000"
      },
      "committer": {
        "name": "Vladimir Moskva",
        "email": "vladmos@google.com",
        "time": "Wed May 27 14:56:59 2026 +0000"
      },
      "message": "Reformat\n"
    },
    {
      "commit": "3b47c424ecf592d38f1cfe3beb7e463961d9d2f9",
      "tree": "0baf38c8a6c03ff376fa8b59f7ce486f8f29fdf4",
      "parents": [
        "91f81fb9cd8a9fdd2de8f5d40374063d36ab77cc"
      ],
      "author": {
        "name": "Piper",
        "email": "piperchester@users.noreply.github.com",
        "time": "Wed May 27 06:51:31 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 27 15:51:31 2026 +0200"
      },
      "message": "Remove $ in buildifier/readme.md docs (#1466)"
    },
    {
      "commit": "91f81fb9cd8a9fdd2de8f5d40374063d36ab77cc",
      "tree": "13008b4b1b93e4a68c31379031bfb6fb0914db67",
      "parents": [
        "05d2ebe49b0f41aee2d480a72d5bcb0c20e26448"
      ],
      "author": {
        "name": "Vladimir Moskva",
        "email": "vladmos@google.com",
        "time": "Wed May 27 15:45:18 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 27 15:45:18 2026 +0200"
      },
      "message": "Allow callers to explicitly provide types for set and add commands (#1448)"
    },
    {
      "commit": "05d2ebe49b0f41aee2d480a72d5bcb0c20e26448",
      "tree": "40c88ff2899d7606ec41011af68cee38f84985c7",
      "parents": [
        "eb4b727fa09962e8a433a0514c63b6431bef6188"
      ],
      "author": {
        "name": "Nevena",
        "email": "kotlaja@google.com",
        "time": "Thu Mar 19 09:02:35 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 19 09:02:35 2026 +0100"
      },
      "message": "Fix protoc mismatch error (#1456)"
    },
    {
      "commit": "eb4b727fa09962e8a433a0514c63b6431bef6188",
      "tree": "e44e07f647f5ddbebe4ade7d9a270a5454af105f",
      "parents": [
        "859bfffeef82c78b21d8a506d09389d7a12e6d03"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Tue Mar 17 09:30:46 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 17 09:30:46 2026 +0100"
      },
      "message": "Create pull_request_template.md"
    },
    {
      "commit": "859bfffeef82c78b21d8a506d09389d7a12e6d03",
      "tree": "92ad78df5381c32c9bbbce17c6c61a2f6ee66afd",
      "parents": [
        "e24971d9d1a7b2ab9abcb5a1c37a36cd6f351680"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Wed Feb 11 08:34:12 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 11 09:34:12 2026 +0100"
      },
      "message": "Sortvisibility (#1452)\n\n* Sort starlark load visibility lists\n\n* Updating tests\n\n- Breaking apart so that .bzl behavior can differ from Default\n- Adding list of irreversible changes which can not be tested via Bzl-\u003eBuild or Build-\u003eBzl\n- Updating added test case 077 to not test no-op behavior, but actually sort list for .bzl, and not sort list for .build\n\n---------\n\nCo-authored-by: Liam Miller-Cushon \u003ccushon@google.com\u003e\nCo-authored-by: Tim Malmström \u003coreflow@google.com\u003e"
    },
    {
      "commit": "e24971d9d1a7b2ab9abcb5a1c37a36cd6f351680",
      "tree": "fa8d434a3d7151c88477e61aa060712b6be0d773",
      "parents": [
        "54a7200a18c1a32fceb9fe9615787188ba3b2157"
      ],
      "author": {
        "name": "Matt Brown",
        "email": "matt@mattnworb.com",
        "time": "Mon Feb 02 05:57:09 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 02 10:57:09 2026 +0000"
      },
      "message": "support AssignExpr statements in edit.FindRuleByName() (#1369)\n\n* support AssignExpr statements in edit.FindRuleByName()\n\nWe have what is probably an unconventional style in some of our BUILD\nfiles where a macro is used to define several targets and returns a\nstruct of some information so that things like labels of generated\ntargets can be passed as attributes to other targets in the same\nBUILD file, without the BUILD file needing to hardcode or be aware of\nthe naming convention of the macro\u0027s internals.\n\nbuildozer and unused_deps are unable to operate on targets in\n`AssignExpr` statements since `edit.FindRuleByName()` and\n`edit.IndexOfRuleByName()` skip over any nodes that are not call\nexpressions. This commit adapts these functions to be able to find call\nexpressions that are on the right-hand side of an assignment expression.\n\nfixes #1306\n\n* refactor test based on feedback\n\n* refactor check for CallExpr or AssignExpr based on feedback"
    },
    {
      "commit": "54a7200a18c1a32fceb9fe9615787188ba3b2157",
      "tree": "09f33179b70a4b232f72681cab1233704649aef1",
      "parents": [
        "069a00ae493f17078868119390a3d7fdd66a7e4f"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Fri Jan 30 10:48:08 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jan 30 11:48:08 2026 +0100"
      },
      "message": "Updating github release script to find binaries (#1446)\n\n* Updating github release script to find binaries\n\n- The old script relied on binaries for all targets existing in the symlinked `bazel-bin` directory. This seems to no longer be the case in recent bazel release, so this update instead uses `aquery` to find the various go_binary GoLink outputs, and uploads them from there.\n- Also reduces list of targets to only exist once in the bash script\n\n* Resolving some Gemini comments\n\n* Resolving some Gemini comments\n\n* replacing underscore with dash in output names\n\n---------\n\nCo-authored-by: Tim Malmström \u003coreflow@google.com\u003e"
    },
    {
      "commit": "069a00ae493f17078868119390a3d7fdd66a7e4f",
      "tree": "ff9630d3392a9ee1e9626e2aee552ac77e4eda62",
      "parents": [
        "227805bae286824aba0587cd422cd180bcb8d96d"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Fri Jan 30 10:25:42 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jan 30 11:25:42 2026 +0100"
      },
      "message": "suppressing canonical-repository warning (#1447)\n\nCo-authored-by: Tim Malmström \u003coreflow@google.com\u003e"
    },
    {
      "commit": "227805bae286824aba0587cd422cd180bcb8d96d",
      "tree": "cbd6512378632e4b2a365f5ca050d5a97d08e33d",
      "parents": [
        "f6a1982250030df9c2d24a675a04f150ff6aca6b"
      ],
      "author": {
        "name": "John Cater",
        "email": "jcater@engflow.com",
        "time": "Thu Jan 29 10:45:29 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 29 22:45:29 2026 +0700"
      },
      "message": "Updated to run properly under Bazel 9. (#1442)\n\n* Updated to run properly under Bazel 9.\n\n* Re-add WORKSPACE file creation"
    },
    {
      "commit": "f6a1982250030df9c2d24a675a04f150ff6aca6b",
      "tree": "928172932e3f01765fcbd478b4d02ec46255b848",
      "parents": [
        "8d909a2e81358fc8319159409bacef55f77d1fd2"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Wed Jan 28 15:47:11 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jan 28 15:47:11 2026 +0100"
      },
      "message": "Update .bazelversion (#1445)\n\n"
    },
    {
      "commit": "8d909a2e81358fc8319159409bacef55f77d1fd2",
      "tree": "c3430cd02319ad1c3e6ccd77b9482c5f0d2d2e33",
      "parents": [
        "bbf01ec6cb4927421cbba58f56fd5b68c33fa18a"
      ],
      "author": {
        "name": "Marcel",
        "email": "maleo@google.com",
        "time": "Wed Jan 28 09:58:05 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jan 28 09:58:05 2026 +0100"
      },
      "message": "Add wildcard support for key in dict_replace_if_equal (#1426)\n\n"
    },
    {
      "commit": "bbf01ec6cb4927421cbba58f56fd5b68c33fa18a",
      "tree": "9706d8d423647265d57d810dfd3429d52190d88c",
      "parents": [
        "9bdafcfba839f1d1799ca37551b093398b179c20"
      ],
      "author": {
        "name": "Sergey Tyurin",
        "email": "sergey.tyurin@cloudkitchens.com",
        "time": "Wed Jan 21 00:18:17 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jan 21 09:18:17 2026 +0100"
      },
      "message": "Add a buildifier warning to enforce symbol load location (#1318)\n\n* Add a buildifier warning to enforce rule load location\n\n* Minor refactoring\n\n* Rename to AllowedSymbolLoadLocations"
    },
    {
      "commit": "9bdafcfba839f1d1799ca37551b093398b179c20",
      "tree": "724f980db6bcc3cfcac8aa2bd4c64b9464172d4e",
      "parents": [
        "f026de8858b32ab9a8f884197e6309837b8d629f"
      ],
      "author": {
        "name": "Joshua Haberman",
        "email": "jhaberman@gmail.com",
        "time": "Mon Jan 19 00:49:00 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jan 19 09:49:00 2026 +0100"
      },
      "message": "Disable bzl-visibility lint if the target file has a `visibility()` declaration (#1439)\n\n* Disable bzl-visibility lint if the target file has a `visibility()` declaration.\n\nThe official docs for this lint say:\n\n\u003e This lint predates the load visibility feature and is unnecessary in workspaces where .bzl files declare visibilities.\n\nHowever the lint can sometimes get in the way, by warning about instances where the usage is actually intended.\n\nSince `visibility()` is more explicit, and more strictly enforced, there is no need for the lint to return any warnings if the target file has a visibility declaration.\n\nMARKDOWN\u003dtrue\n\n* Addressed edge case where call function is not an ident.\n\nCo-authored-by: gemini-code-assist[bot] \u003c176961590+gemini-code-assist[bot]@users.noreply.github.com\u003e\n\n* Added a test that files without visibility() still enforce the check.\n\nMARKDOWN\u003dtrue\n\n---------\n\nCo-authored-by: gemini-code-assist[bot] \u003c176961590+gemini-code-assist[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "f026de8858b32ab9a8f884197e6309837b8d629f",
      "tree": "c9f3a237b765438949c93091f9d3a8445a9b257a",
      "parents": [
        "8e18998f7d771dcd1a4078f27a0bed26e83ab6c5"
      ],
      "author": {
        "name": "Nevena",
        "email": "kotlaja.nevena@gmail.com",
        "time": "Tue Jan 13 14:40:51 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jan 13 14:40:51 2026 +0100"
      },
      "message": "Fix Bazel@HEAD - Upgrade rules_go version (#1438)\n\n"
    },
    {
      "commit": "8e18998f7d771dcd1a4078f27a0bed26e83ab6c5",
      "tree": "ca3221fc6e0a9cc25689ffdc641eebbf0e76a94b",
      "parents": [
        "eb7356da689578567b6ba8534b900c20781a835d"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Fri Jan 09 17:52:58 2026 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jan 09 11:52:58 2026 +0100"
      },
      "message": "Updating Warnings Validation to be unique (#1437)\n\nPrior to this change, warnings validation could return duplicates in the list of validated enabled warnings (e.g. when specified in .buildifier.json config #1383), leading to the same warning being checked and printed multiple times\n\nCo-authored-by: Tim Malmström \u003coreflow@google.com\u003e"
    },
    {
      "commit": "eb7356da689578567b6ba8534b900c20781a835d",
      "tree": "0ce9ed38392a286b1e7851a39636091ed36826a2",
      "parents": [
        "c3aa0b7e1fd6316641b881c18a8258e4e005958b"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Wed Dec 31 08:36:31 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Dec 31 08:36:31 2025 +0100"
      },
      "message": "Update utils.go\n\nFixes breakage caused by #1434"
    },
    {
      "commit": "c3aa0b7e1fd6316641b881c18a8258e4e005958b",
      "tree": "e2ee42990ec7f7307a8e94485a762def9bd7ab7a",
      "parents": [
        "0d0f1b178881c8cce4cd6db46ca22e920aef5295"
      ],
      "author": {
        "name": "Jean Barkhuysen",
        "email": "jean.barkhuysen@gmail.com",
        "time": "Tue Dec 30 07:18:03 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Dec 30 15:18:03 2025 +0100"
      },
      "message": "more comments to syntax.go (#723)\n\n* more comments to syntax.go\n\n* Update syntax.go\n\n* Update syntax.go\n\n---------\n\nCo-authored-by: Tim Malmström \u003coreflow@users.noreply.github.com\u003e"
    },
    {
      "commit": "0d0f1b178881c8cce4cd6db46ca22e920aef5295",
      "tree": "6dbf6132bcb69cc1a1bdc384c4871572fe65bb93",
      "parents": [
        "dc2c657ea7a30b0c1fbd00c865d433643bf44a62"
      ],
      "author": {
        "name": "Jordan",
        "email": "jordan.mele@outlook.com.au",
        "time": "Tue Dec 30 23:05:06 2025 +1100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Dec 30 12:05:06 2025 +0000"
      },
      "message": "Classify `.BUILD.bazel` suffixed files as `TypeBuild` (#1433)\n\nCo-authored-by: Tim Malmström \u003coreflow@users.noreply.github.com\u003e"
    },
    {
      "commit": "dc2c657ea7a30b0c1fbd00c865d433643bf44a62",
      "tree": "42d41b9240a63d00c2365a0da8c0b106ab5b8cf1",
      "parents": [
        "08c4adf5a2d2fe1e83073dd8cbc52962cff9fe3e"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Tue Dec 30 17:07:14 2025 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Dec 30 11:07:14 2025 +0100"
      },
      "message": "Fixing bug where comment added to multiline attribute was added as suffix (#1434)\n\n- Also implementing tests for cmdComment\n\nCo-authored-by: Tim Malmström \u003coreflow@google.com\u003e"
    },
    {
      "commit": "08c4adf5a2d2fe1e83073dd8cbc52962cff9fe3e",
      "tree": "3bf465223e5688e9b42da5d06350d1b9e757695e",
      "parents": [
        "da16ec8269d8fbb3a13a0eba7cf789e9e4d3b4f1"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Fri Dec 26 10:11:55 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Dec 26 10:11:55 2025 +0100"
      },
      "message": "Update stale.yml\n\nEnabling automated runs of the stale workflow"
    },
    {
      "commit": "da16ec8269d8fbb3a13a0eba7cf789e9e4d3b4f1",
      "tree": "5f05434c5c9e66e47f3efb6220781467636a9548",
      "parents": [
        "9e5607d3130a200688e71a56231417c87def73a1"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Mon Dec 22 09:03:48 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Dec 22 09:03:48 2025 +0100"
      },
      "message": "Update stale.yml\n\nCleaning up TODOs related to current cleanup effort.\r\n\r\nWorkflow was run to mark all currently stale issues as stale"
    },
    {
      "commit": "9e5607d3130a200688e71a56231417c87def73a1",
      "tree": "09d365ae9e1351af01c17b54d4e3112881801502",
      "parents": [
        "c9f3ac67542a6e289da4ee2850fe7d2fed5c6a30"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Fri Dec 19 09:46:25 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Dec 19 09:46:25 2025 +0100"
      },
      "message": "Update stale.yml\n\nIncrease action count to match Bazel default"
    },
    {
      "commit": "c9f3ac67542a6e289da4ee2850fe7d2fed5c6a30",
      "tree": "4a735a5ba971a5e9200a62244d6d33c679218204",
      "parents": [
        "d171b38a20c72301c432d33f511e0a6ad4437fdb"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Thu Dec 18 15:21:54 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Dec 18 15:21:54 2025 +0100"
      },
      "message": "Creating GitHub Stale workflow to auto close stale issues and PRs (#1431)\n\n* Creating GitHub Stale workflow to auto close stale issues and PRs\n\nConfig is based on https://github.com/bazelbuild/bazel/blob/master/.github/workflows/stale.yml, but leaves a number of TODOs to first test the workflow and then enable it to run automatically.\n\n* Update stale.yml\n\n---------\n\nCo-authored-by: Tim Malmström \u003coreflow@google.com\u003e"
    },
    {
      "commit": "d171b38a20c72301c432d33f511e0a6ad4437fdb",
      "tree": "78a3944d19cdb3e4e75325f3b110f007d82be0dd",
      "parents": [
        "4ad76a2b5f2cc6bea48eb8538ba768745e361aac"
      ],
      "author": {
        "name": "hvadehra",
        "email": "hvd@google.com",
        "time": "Tue Dec 09 12:57:52 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Dec 09 12:57:52 2025 +0100"
      },
      "message": "Add cc attributes for backwards compatibility (#1429)\n\n"
    },
    {
      "commit": "4ad76a2b5f2cc6bea48eb8538ba768745e361aac",
      "tree": "1a5e09b2be3fcd1d2ab312690387e7550408a46e",
      "parents": [
        "6e81bc356fa5c4e9b31c2368284f214edf3522f9"
      ],
      "author": {
        "name": "hvadehra",
        "email": "hvd@google.com",
        "time": "Mon Dec 08 10:56:07 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Dec 08 10:56:07 2025 +0100"
      },
      "message": "Fix type of `default_copts` (#1428)\n\nWith the cc rules removed from Bazel, the `copts` attribute is no longer a part of the build language proto"
    },
    {
      "commit": "6e81bc356fa5c4e9b31c2368284f214edf3522f9",
      "tree": "7ab69c9e72e753099875fe6ea70f652698e814a0",
      "parents": [
        "8e68360eeafa8a98c8ceaa792467cd20c667562e"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Wed Dec 03 16:42:31 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Dec 03 16:42:31 2025 +0100"
      },
      "message": "Update CODEOWNERS (#1424)\n\n"
    },
    {
      "commit": "8e68360eeafa8a98c8ceaa792467cd20c667562e",
      "tree": "c524254a0cac20438b797301dcfb89461bab2c51",
      "parents": [
        "9a9819efe30f571dda70302ebe7acca5d4f63bdf"
      ],
      "author": {
        "name": "Régis Desgroppes",
        "email": "rdesgroppes@gmail.com",
        "time": "Wed Nov 12 11:59:57 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 12 11:59:57 2025 +0100"
      },
      "message": "Revert \"buildifier: decouple runner scripts from binaries (#1398)\" (#1413)\n\nThis reverts commit 9a9819efe30f571dda70302ebe7acca5d4f63bdf."
    },
    {
      "commit": "9a9819efe30f571dda70302ebe7acca5d4f63bdf",
      "tree": "a1a65b649fc93258be12e8964f9be9d4a0f23391",
      "parents": [
        "e879524f2986d9b75488855aa938013db2cda4ea"
      ],
      "author": {
        "name": "Régis Desgroppes",
        "email": "rdesgroppes@gmail.com",
        "time": "Mon Nov 10 14:18:59 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 10 14:18:59 2025 +0100"
      },
      "message": "buildifier: decouple runner scripts from binaries (#1398)\n\nThis change aims at making `buildtools/buildifier` more modular and\neasier to consume by enabling use of prebuilt binaries without pulling\nin unnecessary dependencies - while strengthening upstream as the\nauthoritative home for runner script templates.\n\nToday, `buildifier/BUILD.bazel` exposes two different sets of rules:\n- exports for runner script templates (`runner.bash.template`,\n  `runner.bat.template`) as well as `README.md`,\n- `go` build \u0026 `sh` test rules which require external repos (`rules_go`,\n  `rules_shell`) even for consumers who don\u0027t need to build the\n  `buildifier` binary.\n\nIt is worth noticing there are two distinct community efforts on runner\nscripts, the present/upstream `bazelbuild/buildtools` and the derived\n`keith/buildifier-prebuilt` (Bazel Central Registry module).\nThese drift apart over time, leading to unsynchronized contents\n(`factory.bzl`, `runner.bash.template`) and efforts, e.g. on Windows\nsupport:\n- https://github.com/bazelbuild/buildtools/pull/1230\n- https://github.com/keith/buildifier-prebuilt/pull/89 (open for a year)\n\nIntended benefits of this change:\n- decoupling: by moving `go_binary` and `sh_test` targets into\n  `buildifier/cmd`, the top-level `buildifier/BUILD.bazel` no longer\n  requires `rules_go` nor `rules_shell`,\n- flexibility: users can either build binaries from source (via\n  `//buildifier/cmd`) or configure rules to use prebuilt binaries (e.g.\n  via `multitool`) while still consuming the same upstream runner script\n  templates,\n- backward compatibility: aliases keep `//buildifier:buildifier*`\n  working by delegating to `//buildifier/cmd:buildifier*`."
    },
    {
      "commit": "e879524f2986d9b75488855aa938013db2cda4ea",
      "tree": "c524254a0cac20438b797301dcfb89461bab2c51",
      "parents": [
        "61dad1f518dc104d688ad0e62f286a8fe1a16580"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Fri Nov 07 06:22:29 2025 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 07 12:22:29 2025 +0100"
      },
      "message": "Bugfix false positive for \"unused\" variable for nested `def`s (#1376)\n\nWhen detecting whether symbols are used or not, variables referenced as argument defaults of the inner def would count as \"use\" in the inner scope, and hence falsely trigger \"unused\" warning.\n\nExample:\n\n```\ndef outer_def(name, foo \u003d \"foo\"):\n    def inner_def(foo \u003d foo):\n        print(foo)  # buildifier: disable\u003dprint\n\n    inner_def()\n```\n\nUnused variable check for the above function would\n1. Check outer_def for variable usage\n2. Recursively check inner_def for variable usage\n  - Detect that `foo` is used\n  - Omit `foo` from returned usedSymbolsFromOuterScope since `foo` is a local variable\n3. Receive no \"usedSymbol\" for `foo`\n4. Output \"unused-variable\" warning\n\nIf there are RHS idents in a def statement, these idents are always from an outer scope, so these can check the later inner-scope definedSymbols check.\n\nCo-authored-by: Tim Malmström \u003coreflow@google.com\u003e"
    },
    {
      "commit": "61dad1f518dc104d688ad0e62f286a8fe1a16580",
      "tree": "61673b8eb1d79e4472cae1eadbb761e2c8848176",
      "parents": [
        "82ab6333f5cad40662fffb252fe1913336a2f3ca"
      ],
      "author": {
        "name": "Régis Desgroppes",
        "email": "rdesgroppes@gmail.com",
        "time": "Thu Nov 06 15:09:42 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 06 15:09:42 2025 +0100"
      },
      "message": "buildifier: improve Windows runner performance (#1404)\n\n* buildifier: improve Windows runner performance\n\nThis change aims to improve the `buildidier`\u0027s runner performance on\nWindows where it can sometimes take minutes to complete.\n\nIt consists in replacing the slow COM `Scripting.FileSystemObject` with\na \"native\" PowerShell `Get-ChildItem -Recurse` for file discovery, and\nbatch `buildifier` invocations (100 files at a time) instead of invoking\nonce per file.\n\nThis improves performance on large codebases (like from about 2 minutes\nto less than 3 seconds).\n\nNotes:\n- cross-process COM calls add latency, whereas `Get-ChildItem` is a\n  compiled \"cmdlet\".\n- by default, `Get-ChildItem` doesn\u0027t recurse into symbolic links to\n  directories, which is consistent with the current implementation that\n  explicitly avoids entering `ReparsePoint`s,\n- batching files passed to `buildifier` reduces process creation\n  overhead, with a limit to account for Windows command line length\n  limitations.\n\nReferences:\n- https://stackoverflow.com/questions/73893997/comments-in-a-long-line-powershell-code-in-a-batch-script\n- https://stackoverflow.com/questions/3205027/maximum-length-of-command-line-string\n- https://devblogs.microsoft.com/oldnewthing/20031210-00/?p\u003d41553"
    },
    {
      "commit": "82ab6333f5cad40662fffb252fe1913336a2f3ca",
      "tree": "7be9e7b4730657ba2f7a154e114da88d65b78f96",
      "parents": [
        "30d1c54c6ea736bec4747cae6c0fd4e392c63951"
      ],
      "author": {
        "name": "Mike Lundy",
        "email": "mike@fluffypenguin.org",
        "time": "Thu Nov 06 04:43:04 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 06 13:43:04 2025 +0100"
      },
      "message": "fix module file detection (#1407)\n\nThe naming scheme for module files is [prefix.]MODULE.bazel:\nhttps://bazel.build/rules/lib/globals/module#include"
    },
    {
      "commit": "30d1c54c6ea736bec4747cae6c0fd4e392c63951",
      "tree": "f3c82c48bec87d7e5cfd54e40e223de4539bb7bb",
      "parents": [
        "f48b2349353088f0c5c7c76e3d29e00399e63f37"
      ],
      "author": {
        "name": "Sergey Tyurin",
        "email": "sergey.v.tyurin@gmail.com",
        "time": "Wed Nov 05 07:39:19 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 05 16:39:19 2025 +0100"
      },
      "message": "[unused_deps] Improve usage (#1410)\n\n"
    },
    {
      "commit": "f48b2349353088f0c5c7c76e3d29e00399e63f37",
      "tree": "64d849cb8e388bc1fa1c18e6a4327ea0dfd68847",
      "parents": [
        "fca6deeee27bf5cc4ad61afe11110797af9038fe"
      ],
      "author": {
        "name": "Laurent Le Brun",
        "email": "laurentlb@gmail.com",
        "time": "Fri Oct 31 17:47:59 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 31 17:47:59 2025 +0100"
      },
      "message": "Add support for type annotations in assignments (#1403)\n\ne.g.\n  s: str \u003d \"hello\""
    },
    {
      "commit": "fca6deeee27bf5cc4ad61afe11110797af9038fe",
      "tree": "519031112dc0593547e55df49a63e2be670661b8",
      "parents": [
        "2eb4fccefb52eeea5cbae46bd145afc0dc625ad5"
      ],
      "author": {
        "name": "Nevena",
        "email": "kotlaja.nevena@gmail.com",
        "time": "Fri Oct 31 16:59:41 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 31 16:59:41 2025 +0100"
      },
      "message": "Update version of rules_go to fix xcode_config + Fix Bazel@HEAD (#1409)\n\n* Update version of rules_go to fix xcode_config error\n\n* fix error - upgrade go_sdk\n\n* fix api.gen error\n\n* update other genfiles\n\n* update deps for bazel@head"
    },
    {
      "commit": "2eb4fccefb52eeea5cbae46bd145afc0dc625ad5",
      "tree": "5ad97e295e03b49a732621f626d23a1871a187f8",
      "parents": [
        "8f135a59a74a7f6dd6a63529e3405a41a580da39"
      ],
      "author": {
        "name": "Fabian Meumertzheim",
        "email": "fabian@meumertzhe.im",
        "time": "Tue Sep 30 16:00:53 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 30 16:00:53 2025 +0200"
      },
      "message": "Also print `fixed ...` messages with `-stdout` (#1373)\n\n* Also print `fixed ...` messages with `-stdout`\n\nThis makes it easier for users to implement a \"check only\" mode that doesn\u0027t modify any files, but is able to tell which ones would have been changed by buildozer.\n\n* Use diff"
    },
    {
      "commit": "8f135a59a74a7f6dd6a63529e3405a41a580da39",
      "tree": "80024f30df011ba128fcfd81ab920849199157d3",
      "parents": [
        "6c4b75d794275e9a8257425e6f50c131431ca18c"
      ],
      "author": {
        "name": "Xùdōng Yáng",
        "email": "wyverald@gmail.com",
        "time": "Tue Sep 30 06:13:31 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 30 05:13:31 2025 -0500"
      },
      "message": "Fix build with HEAD Bazel (#1397)\n\nMinimal dependency version upgrades to fix compatibility with Bazel@HEAD."
    },
    {
      "commit": "6c4b75d794275e9a8257425e6f50c131431ca18c",
      "tree": "4e61eeda35a14e467a69855944ae57dce52d51d0",
      "parents": [
        "4006b543a694f6cf77c2d8cc188c5f53f3bac1d9"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Fri Sep 26 08:22:24 2025 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 26 08:22:24 2025 -0500"
      },
      "message": "Updating positional-args check to be more comprehensive (#1393)\n\n- Previous implementation just assumed that macros were called at the root of a BUILD file, and that all calls were to macros/rules except for explicit allowlist. Updating the check to more precisely validate whether something is a rule/macro, and checking all call expressions (including ones nested in dicts/attrs).\n- Also updating IsMacro implementation to correctly support symblic macro definitions (`my_macro \u003d macro(...)`)\n\nCo-authored-by: Tim Malmström \u003coreflow@google.com\u003e"
    },
    {
      "commit": "4006b543a694f6cf77c2d8cc188c5f53f3bac1d9",
      "tree": "515818c67eadba2d97be68c9a77b3f9b7201a1a8",
      "parents": [
        "62b9413b08bb4d1bbac0869eaff8fa8962c46744"
      ],
      "author": {
        "name": "Nick Schaap",
        "email": "nschaap@umd.edu",
        "time": "Tue Aug 26 07:13:27 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 26 13:13:27 2025 +0200"
      },
      "message": "updates (#1386)\n\nCo-authored-by: Nick Schaap \u003cschaap@adobe.com\u003e"
    },
    {
      "commit": "62b9413b08bb4d1bbac0869eaff8fa8962c46744",
      "tree": "0499a990676c10506a5c5f3bc3ee334dc06345ec",
      "parents": [
        "fdc626802fbc1f9d42ffb2fd918bffe8be9d2283"
      ],
      "author": {
        "name": "Fabian Meumertzheim",
        "email": "fabian@meumertzhe.im",
        "time": "Tue Jul 15 12:26:56 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 15 12:26:56 2025 +0200"
      },
      "message": "Don\u0027t fail on directories named `foo.bzl` (#1377)\n\n"
    },
    {
      "commit": "fdc626802fbc1f9d42ffb2fd918bffe8be9d2283",
      "tree": "67199d71ad8252a725c130766b8b445ebba002ef",
      "parents": [
        "b64e1da840478ad93c60ec4296cda36d2f91dc51"
      ],
      "author": {
        "name": "Sebastian Barfurth",
        "email": "s@barfurth.com",
        "time": "Thu Jul 03 16:13:24 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 03 16:13:24 2025 +0200"
      },
      "message": "Support multi-symbol replace_load correctly (#1366)\n\nThe logic for removing old loading symbols replaced by `replace_load` was flawed. It would leave behind old (redundant) loads, iff the `replace_load` was to replace two symbols from the same location. This change simplifies how loads are replaced by simply keeping track of non-replaced loads rather than trying to remove from the list with index manipulation.\n\nI\u0027ve added a few more test cases. Most of these new tests will fail on the old code."
    },
    {
      "commit": "b64e1da840478ad93c60ec4296cda36d2f91dc51",
      "tree": "041a2b19a0d5acb8388d126e64e9ab7ab82df234",
      "parents": [
        "a2a20c9c1c7cb85905a0fc5aad9ec02370cfdb1f"
      ],
      "author": {
        "name": "Alberto Cavalcante",
        "email": "alberto.cavalcante@jpmorgan.com",
        "time": "Thu Jul 03 07:07:22 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 03 16:07:22 2025 +0200"
      },
      "message": "feat: add `windows_arm64` releases (#1368)\n\n* feat(binaries): add go_binary targets for windows_arm64\n\n* refactor!: adopt consistent naming across go_binary targets to include the arch for all platforms. Simplifies copy_files defintiion.\n\n* feat: add windows_arm64 binaries to the release assets\n\n* feat(launcher.js): remove failure check for windows_arm64"
    },
    {
      "commit": "a2a20c9c1c7cb85905a0fc5aad9ec02370cfdb1f",
      "tree": "8acec2cd45061f3bda4c127d83da980a7ee4fbe6",
      "parents": [
        "4ee5cc34c8a48ed3e5c5b946fe0570e1dbc226fc"
      ],
      "author": {
        "name": "Paul Salaberria",
        "email": "psalaberria002@gmail.com",
        "time": "Tue Jun 24 13:34:44 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 24 06:34:44 2025 -0500"
      },
      "message": "Run buildifier against all MODULE.bazel -like files (#1374)\n\n* Run buildifier against all MODULE.bazel -like files\n\nI noticed the included files in our MODULE.bazel were not being linted.\r\n\r\nI tracked it to this runner.bash template.\r\n\r\nhttps://bazel.build/rules/lib/globals/module#include\n\n* Update runner.bash.template"
    },
    {
      "commit": "4ee5cc34c8a48ed3e5c5b946fe0570e1dbc226fc",
      "tree": "d5b1a106864dbdb772c4ce8f935e28605be05ca7",
      "parents": [
        "34c392ac4bc29807fe18f0d8da5e7c773cd17f38"
      ],
      "author": {
        "name": "David Sanderson",
        "email": "32687193+dws@users.noreply.github.com",
        "time": "Fri Jun 20 02:54:24 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 20 01:54:24 2025 -0500"
      },
      "message": "make backslashes visible in docs for dict_add and dict_set (#1372)\n\nIn order to escape colons in the keys and values that you provide to dict_add and dict_set, you must precede them with backslashes.  The raw README.md file has the backslashes, but they are not visibile when rendered.  We here double these backslashes so that they\u0027ll be visible when rendered."
    },
    {
      "commit": "34c392ac4bc29807fe18f0d8da5e7c773cd17f38",
      "tree": "7ab5c7bad849a7076b3ea9d3c5d5dc48163c033e",
      "parents": [
        "b1e23f1025b8556cc75eebb28ff7f40b8930d353"
      ],
      "author": {
        "name": "Philipp",
        "email": "ollendorff.philipp@gmail.com",
        "time": "Fri Jun 13 16:41:57 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 13 16:41:57 2025 +0200"
      },
      "message": "Revert \"Fix buildozer fix tests that assume 1/0 for known boolean fields (#1360)\" (#1370)\n\nThis reverts commit d5bd18580d56d474e654ba2b0439cf59bf3ac13d.\n\nCo-authored-by: Philipp Ollendorff \u003cpollendorff@google.com\u003e"
    },
    {
      "commit": "b1e23f1025b8556cc75eebb28ff7f40b8930d353",
      "tree": "5e2fd9242640cfca8ad8ced5d773ec5e49118203",
      "parents": [
        "04fb76e2ce2abfd2f0d5839e1e3d3fc7bacdd257"
      ],
      "author": {
        "name": "Kyle Dobitz",
        "email": "kyledobitz@gmail.com",
        "time": "Mon Jun 02 22:14:22 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 02 15:14:22 2025 -0500"
      },
      "message": "Update WARNINGS.md (#1353)\n\n* Update WARNINGS.md\n\nInclude a link to a more detailed explanation of how to handle accumulating dependencies before constructing a depset.\n\n* Updating warnings.textproto and regenerating WARNINGS.md\n\n---------\n\nCo-authored-by: Tim Malmström \u003coreflow@google.com\u003e\nCo-authored-by: Tim Malmström \u003coreflow@users.noreply.github.com\u003e"
    },
    {
      "commit": "04fb76e2ce2abfd2f0d5839e1e3d3fc7bacdd257",
      "tree": "69999cd0d52acb38a6a352e3b2da931c3705c454",
      "parents": [
        "b02f80d9ea9c87e88659d53ad428fadeec3cbc49"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Mon Jun 02 16:16:56 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 02 09:16:56 2025 -0500"
      },
      "message": "Add Starlarkified Python attributes to generate_tables.go (#1365)\n\n* Add Starlarkified Python attributes to generate_tables.go\n\nThis ensures backwards compatibility in the CLI for attributes like \"main\"\nand \"python_version\". Otherwise, they require quoting, when building buildozer\nagainst newer versions of Bazel.\n\n* Updating tables.gen.go to match new type definitions from generate_tables.go\n\n---------\n\nCo-authored-by: Jon Brandvein \u003cbrandjon@google.com\u003e\nCo-authored-by: Tim Malmström \u003coreflow@google.com\u003e"
    },
    {
      "commit": "b02f80d9ea9c87e88659d53ad428fadeec3cbc49",
      "tree": "7a0782e2f52a2150c1d284b1606b982ca1555c7d",
      "parents": [
        "5199712b8f8b61e5afd6b892dca5fec13c8bf1b3"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Fri May 30 12:20:19 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 30 12:20:19 2025 +0200"
      },
      "message": "Fixing unicode string split issue (#1364)\n\nhttps://github.com/bazelbuild/buildtools/pull/1361 caused an issue when splitting a string if the character before the split would be a unicode character since the character was inserted using byte offset.\nNew version only modifies string content which is known since it matches the regex separator\n\nCo-authored-by: Tim Malmström \u003coreflow@google.com\u003e"
    },
    {
      "commit": "5199712b8f8b61e5afd6b892dca5fec13c8bf1b3",
      "tree": "92d12ad009cc73773d5a305efb32382f6ba520f2",
      "parents": [
        "fdebdb3800e7597342648b3e8cdaf45e6f34d79b"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Fri May 30 11:21:20 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 30 04:21:20 2025 -0500"
      },
      "message": "Adding function to execute Buildozer commands on a single in-memory file (#1359)\n\nA buildozer client are looking to execute the commands of buildozer on the content of a build file, in a service environment (without direct access to the file storage). The new function enables this by running the commands without accessing the file system.\n\nCo-authored-by: Tim Malmström \u003coreflow@google.com\u003e"
    },
    {
      "commit": "fdebdb3800e7597342648b3e8cdaf45e6f34d79b",
      "tree": "8eb0bbc1ac3db5e2679840bbed490d88438f38f5",
      "parents": [
        "5d1447716aecda6813276f243c5bf5b42a4d0aed"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Wed May 28 09:36:01 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 28 09:36:01 2025 +0200"
      },
      "message": "Fixing go-lint issue to not use underscores in variable names (#1362)\n\nCo-authored-by: Tim Malmström \u003coreflow@google.com\u003e"
    },
    {
      "commit": "5d1447716aecda6813276f243c5bf5b42a4d0aed",
      "tree": "a9f0fcfb7c832e22c80c0bed83e7872e891fe6c9",
      "parents": [
        "9029539f409be51a8c5a0a93e63fde95e3f17b23"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Tue May 27 17:00:35 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 27 10:00:35 2025 -0500"
      },
      "message": "Allowing escaped colon character in dict operations (#1361)\n\ndict_add, dict_set and dict_remove can now be used with keys / values containing \"\\:\" escaped colon characters\nupdating existing pipe-escape functionality to reuse same operation\n\nCo-authored-by: Tim Malmström \u003coreflow@google.com\u003e"
    },
    {
      "commit": "9029539f409be51a8c5a0a93e63fde95e3f17b23",
      "tree": "e94f68cc5d4422796401937b2f21c903a8651018",
      "parents": [
        "d5bd18580d56d474e654ba2b0439cf59bf3ac13d"
      ],
      "author": {
        "name": "David Zbarsky",
        "email": "dzbarsky@gmail.com",
        "time": "Tue May 27 05:35:49 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 27 11:35:49 2025 +0200"
      },
      "message": "perf: Avoid recompiling regexes (#1293)\n\n"
    },
    {
      "commit": "d5bd18580d56d474e654ba2b0439cf59bf3ac13d",
      "tree": "632d64771af75cfe4dffb390ae1efae8a35b6ae5",
      "parents": [
        "9a75f394f94b53d9e7613163fa6706627184546e"
      ],
      "author": {
        "name": "Vladimir Moskva",
        "email": "vladmos@google.com",
        "time": "Tue May 27 11:18:35 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 27 11:18:35 2025 +0200"
      },
      "message": "Fix buildozer fix tests that assume 1/0 for known boolean fields (#1360)\n\n"
    },
    {
      "commit": "9a75f394f94b53d9e7613163fa6706627184546e",
      "tree": "d35c1c13247894ad3ba3da3d6f7b51550e918d9c",
      "parents": [
        "d9ed52af26ee7e03973f776739d46fd79742dc36"
      ],
      "author": {
        "name": "Alex Martani",
        "email": "amartani@gmail.com",
        "time": "Thu May 22 09:08:46 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 22 18:08:46 2025 +0200"
      },
      "message": "buildozer: Respect .bazelignore (#1343)\n\n* buildozer: Respect .bazelignore\n\n* buildozer: Do not ignore a folder when only a prefix of the folder name is in .bazelignore.\n\n* buildozer: Add flag --respect_bazelignore"
    },
    {
      "commit": "d9ed52af26ee7e03973f776739d46fd79742dc36",
      "tree": "83668666cdc8766f7cb95e777c2df37ec99c8d0e",
      "parents": [
        "5b1eeddb473735843ffb77300aec09714b097eb9"
      ],
      "author": {
        "name": "pdoyle12",
        "email": "pdoyle@gmail.com",
        "time": "Sun Apr 27 16:35:27 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 28 01:35:27 2025 +0200"
      },
      "message": "Bug fix. Correctly identify expressions using \u0026\u003d, ^\u003d, \u003e\u003e\u003d, and \u003c\u003c\u003d as assignment statements when parsing BUILD files. (#1357)\n\n* Add files via upload\n\nCorrectly include \u0026\u003d, ^\u003d, \u003e\u003e\u003d, \u003c\u003c\u003d as assignment statements when parsing BUILD files.\r\n\r\nThe Starlark grammar reference (https://github.com/bazelbuild/starlark/blob/master/spec.md#grammar-reference) identifies all of these as assignment statements, but the parser doesn\u0027t include them in the list, probably an old oversight.\r\n\r\nThis fixes issue #1330.\n\n* Update warn_control_flow_test\n\nThis change adds no-effect tests for \u0026\u003d, ^\u003d, \u003e\u003e\u003d, and \u003c\u003c\u003d to ensure they are recognized as having an effect."
    },
    {
      "commit": "5b1eeddb473735843ffb77300aec09714b097eb9",
      "tree": "7d5663fa7fba8a24cd0aba4f3144db24657b5155",
      "parents": [
        "870ee1bae25a0c8fc9a3f57339421f9594ca7d79"
      ],
      "author": {
        "name": "Xùdōng Yáng",
        "email": "wyverald@gmail.com",
        "time": "Fri Apr 25 15:42:47 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 25 21:42:47 2025 +0200"
      },
      "message": "Revert \"Keep targets like \"@foo//:foo\" formatted as-is. (#1355)\" (#1356)\n\nThis reverts commit 870ee1bae25a0c8fc9a3f57339421f9594ca7d79."
    },
    {
      "commit": "870ee1bae25a0c8fc9a3f57339421f9594ca7d79",
      "tree": "b93f466fcbdc17690174d11531ee276601c9f109",
      "parents": [
        "f37c35dc3237698f02b9123d39000a31e91db9c9"
      ],
      "author": {
        "name": "Laramie Leavitt",
        "email": "lar@google.com",
        "time": "Fri Apr 25 15:19:20 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 25 17:19:20 2025 +0200"
      },
      "message": "Keep targets like \"@foo//:foo\" formatted as-is. (#1355)\n\n* Keep targets like \"@foo//:foo\" formatted as-is.\n\nSee https://github.com/bazelbuild/buildtools/issues/1354\n\n* Update 019.build.golden\n\nUpdate golden file."
    },
    {
      "commit": "f37c35dc3237698f02b9123d39000a31e91db9c9",
      "tree": "7d5663fa7fba8a24cd0aba4f3144db24657b5155",
      "parents": [
        "16e6ff5138ea7b98190d7b810ea89e68aebf3e5c"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Thu Apr 10 16:48:51 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 10 09:48:51 2025 -0500"
      },
      "message": "Adding nil check for Rule Call Expression (#1351)\n\nRules can currently be created with CallExpr set to nil, which results in the code panicking. Checking for this error and using the type default if there is no other value defined.\n\nCo-authored-by: Tim Malmström \u003coreflow@google.com\u003e"
    },
    {
      "commit": "16e6ff5138ea7b98190d7b810ea89e68aebf3e5c",
      "tree": "2f754f961236f9b76cbab2966ae58342196baf60",
      "parents": [
        "f963a971214798f489be1ea818e0c40e43930629"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Thu Apr 10 14:19:44 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 10 07:19:44 2025 -0500"
      },
      "message": "Removing unused directory `buildifier2` (#1350)\n\nCo-authored-by: Tim Malmström \u003coreflow@google.com\u003e"
    },
    {
      "commit": "f963a971214798f489be1ea818e0c40e43930629",
      "tree": "80f0f93ce4e3cc0470c592e6403b51e2a952110a",
      "parents": [
        "c98d8e8051d11c59e8a84ec75b925993779d0849"
      ],
      "author": {
        "name": "Philipp",
        "email": "ollendorff.philipp@gmail.com",
        "time": "Fri Apr 04 16:11:43 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 04 16:11:43 2025 +0200"
      },
      "message": "Direct users to disable incorrect warning (#1349)\n\nCo-authored-by: Philipp Ollendorff \u003cpollendorff@google.com\u003e"
    },
    {
      "commit": "c98d8e8051d11c59e8a84ec75b925993779d0849",
      "tree": "40c4cd4db5ae581e92cf261ca2d9e3b65c8a6795",
      "parents": [
        "f79c8eafbddde3060ba64e845f0697a5cce053df"
      ],
      "author": {
        "name": "Philipp",
        "email": "ollendorff.philipp@gmail.com",
        "time": "Thu Apr 03 15:46:30 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 03 15:46:30 2025 +0200"
      },
      "message": "Note that list-append incorrectly warns on select statements (#1348)\n\n* Note that list-append incorrectly warns on select statements\n\n* rephrase informal sentence\n\n* regenerate .md\n\n* Rephrasing warning\n\n---------\n\nCo-authored-by: Philipp Ollendorff \u003cpollendorff@google.com\u003e"
    },
    {
      "commit": "f79c8eafbddde3060ba64e845f0697a5cce053df",
      "tree": "86580b940a3516ee7d44cf327c2ba4a111252d91",
      "parents": [
        "ee6c0a33bee5254ad64fb6b8f9537b7e969a6cdf"
      ],
      "author": {
        "name": "Levi Zim",
        "email": "rsworktech@outlook.com",
        "time": "Wed Mar 26 17:10:33 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 26 10:10:33 2025 +0100"
      },
      "message": "Build and ship binaries for riscv64 (#1346)\n\n"
    },
    {
      "commit": "ee6c0a33bee5254ad64fb6b8f9537b7e969a6cdf",
      "tree": "1c53eed9ad24d8cd4b87cad5479001c9423dde3a",
      "parents": [
        "737aaf84facd7b15986dba9b29b4c745ceef54f5"
      ],
      "author": {
        "name": "Fabian Meumertzheim",
        "email": "fabian@meumertzhe.im",
        "time": "Sat Mar 22 00:35:42 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 22 00:35:42 2025 +0100"
      },
      "message": "Keep `include` calls together in `MODULE.bazel` files (#1345)\n\n"
    },
    {
      "commit": "737aaf84facd7b15986dba9b29b4c745ceef54f5",
      "tree": "42c4c927880c8c6117dbb7fc2137b8d973b0abe3",
      "parents": [
        "931d76d6a6394bd42297a422c0658a9e41cbb7fb"
      ],
      "author": {
        "name": "Fabian Meumertzheim",
        "email": "fabian@meumertzhe.im",
        "time": "Wed Mar 12 16:15:47 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 12 16:15:47 2025 +0100"
      },
      "message": "Break module extension groups after a `use_repo` (#1339)\n\nThis allows users to separate tags and associated `use_repo` statements into separate groups.\n\nAlso use unified diffs in the integration tests since ordinary diffs make it very hard to reason about whitespace.\n\nBefore:\n```\ngo_deps \u003d use_extension(\"//:extensions.bzl\", \"go_deps\")\ngo_deps.from_file(go_mod \u003d \"//:go.mod\")\nuse_repo(\n    go_deps,\n    \"com_github_bazelbuild_buildtools\",\n)\ngo_deps.module(name \u003d \"foo\")\nuse_repo(go_deps, \"foo\")\n```\n\nAfter:\n```\ngo_deps \u003d use_extension(\"//:extensions.bzl\", \"go_deps\")\ngo_deps.from_file(go_mod \u003d \"//:go.mod\")\nuse_repo(\n    go_deps,\n    \"com_github_bazelbuild_buildtools\",\n)\n\ngo_deps.module(name \u003d \"foo\")\nuse_repo(go_deps, \"foo\")\n```"
    },
    {
      "commit": "931d76d6a6394bd42297a422c0658a9e41cbb7fb",
      "tree": "e6a26205d079ee31651c5752eadd150da9eb6fba",
      "parents": [
        "7cb8bf6374086beda65ad56d108f571fb0a143c9"
      ],
      "author": {
        "name": "Tim Malmström",
        "email": "oreflow@users.noreply.github.com",
        "time": "Thu Mar 06 17:11:21 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 06 11:11:21 2025 -0500"
      },
      "message": "Updating set kind to remember starting line of the rule\n\n"
    },
    {
      "commit": "7cb8bf6374086beda65ad56d108f571fb0a143c9",
      "tree": "4e5839533672da83ca9236de31306ab45c195bac",
      "parents": [
        "63f93c18e6243d2e31e45816818d4f2209197820"
      ],
      "author": {
        "name": "Vladimir Moskva",
        "email": "vladmos@google.com",
        "time": "Wed Mar 05 14:12:59 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 05 08:12:59 2025 -0500"
      },
      "message": "Update CODEOWNERS (#1340)\n\n"
    },
    {
      "commit": "63f93c18e6243d2e31e45816818d4f2209197820",
      "tree": "91b899c0037d9e0b432b52f489a36e5e4e9b0b7a",
      "parents": [
        "bc03ae50c2498fcc6e665714a9c480622e4b67e1"
      ],
      "author": {
        "name": "Vladimir Moskva",
        "email": "vladmos@google.com",
        "time": "Wed Mar 05 14:05:12 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 05 14:05:12 2025 +0100"
      },
      "message": "Release s390x binaries on Github (#1289)\n\n"
    }
  ],
  "next": "bc03ae50c2498fcc6e665714a9c480622e4b67e1"
}
