Support readonly as Flow variance annotation#19022
Merged
Merged
Conversation
Flow now accepts `readonly` as a property variance annotation equivalent to `+` (covariant/read-only). Update the Variance node printer and type definition to handle `kind: "readonly"`, and update hermes-parser to 0.35.0 which supports emitting these nodes.
✅ Deploy Preview for prettier ready!Built without sensitive environment variables
To edit notification comments on pull requests, go to your Netlify project configuration. |
commit: |
✅ Deploy Preview for prettier ready!Built without sensitive environment variables
To edit notification comments on pull requests, go to your Netlify project configuration. |
✅ Deploy Preview for prettier ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
Member
|
Please follow the PR template. |
Contributor
Author
Thanks! I've updated the PR description & checklist according to the template |
fisker
approved these changes
Apr 11, 2026
marcoww6
added a commit
to pieterv/prettier
that referenced
this pull request
Apr 13, 2026
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: fisker Cheung <lionkay@gmail.com>
meta-codesync Bot
pushed a commit
to facebook/hermes
that referenced
this pull request
Apr 14, 2026
Summary: Commit picked in https://github.com/pieterv/prettier/commits/flow-fork. Also needed to bump a few package versions to make the test pass (see https://github.com/pieterv/prettier/commits/flow-fork/). mjs generated by `./scripts/build-prettier.sh` directly on devserver. Reviewed By: SamChou19815 Differential Revision: D100704164 fbshipit-source-id: 927cfebc54462ce6b42cf2e5087b0f88b42d6670
6 tasks
sys-support
pushed a commit
to 3caravelle/renovate
that referenced
this pull request
Jun 26, 2026
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [prettier](https://prettier.io) ([source](https://github.com/prettier/prettier)) | [`3.8.4` → `3.8.5`](https://renovatebot.com/diffs/npm/prettier/3.8.4/3.8.5) |  |  | --- ### Release Notes <details> <summary>prettier/prettier (prettier)</summary> ### [`v3.8.5`](https://github.com/prettier/prettier/releases/tag/3.8.5) [Compare Source](prettier/prettier@3.8.4...3.8.5) - Fix Flow variance annotation print ([#​19022](prettier/prettier#19022) by [@​marcoww6](https://github.com/marcoww6)) 🔗 [Changelog](https://github.com/prettier/prettier/blob/3.8.5/CHANGELOG.md#385) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi44MS4zIiwidXBkYXRlZEluVmVyIjoiNDIuODEuMyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Reviewed-on: https://git.3caravelle.net/3Caravelle/renovate/pulls/41 Co-authored-by: Renovate Bot <renovate-bot@3caravelle.com> Co-committed-by: Renovate Bot <renovate-bot@3caravelle.com>
bjw-s
added a commit
to bjw-s-labs/action-changed-files
that referenced
this pull request
Jun 28, 2026
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@rollup/rollup-linux-x64-gnu](https://rollupjs.org/) ([source](https://github.com/rollup/rollup)) | [`4.62.0` → `4.62.2`](https://renovatebot.com/diffs/npm/@rollup%2frollup-linux-x64-gnu/4.62.0/4.62.2) |  |  | | [@typescript-eslint/eslint-plugin](https://typescript-eslint.io/packages/eslint-plugin) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin)) | [`8.61.1` → `8.62.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2feslint-plugin/8.61.1/8.62.0) |  |  | | [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)) | [`8.61.1` → `8.62.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.61.1/8.62.0) |  |  | | [eslint](https://eslint.org) ([source](https://github.com/eslint/eslint)) | [`10.5.0` → `10.6.0`](https://renovatebot.com/diffs/npm/eslint/10.5.0/10.6.0) |  |  | | [eslint-plugin-jest](https://github.com/jest-community/eslint-plugin-jest) | [`29.15.2` → `29.15.3`](https://renovatebot.com/diffs/npm/eslint-plugin-jest/29.15.2/29.15.3) |  |  | | [globals](https://github.com/sindresorhus/globals) | [`17.6.0` → `17.7.0`](https://renovatebot.com/diffs/npm/globals/17.6.0/17.7.0) |  |  | | [prettier](https://prettier.io) ([source](https://github.com/prettier/prettier)) | [`3.8.4` → `3.9.1`](https://renovatebot.com/diffs/npm/prettier/3.8.4/3.9.1) |  |  | | [rollup](https://rollupjs.org/) ([source](https://github.com/rollup/rollup)) | [`4.62.0` → `4.62.2`](https://renovatebot.com/diffs/npm/rollup/4.62.0/4.62.2) |  |  | --- ### Release Notes <details> <summary>rollup/rollup (@​rollup/rollup-linux-x64-gnu)</summary> ### [`v4.62.2`](https://github.com/rollup/rollup/blob/HEAD/CHANGELOG.md#4622) [Compare Source](rollup/rollup@v4.62.1...v4.62.2) *2026-06-19* ##### Bug Fixes - Do not add spurious side-effect-free external imports to chunks when using minChunkSize ([#​6411](rollup/rollup#6411)) ##### Pull Requests - [#​6411](rollup/rollup#6411): Skip side-effect-free external imports when hoisting is disabled ([@​morgan-coded](https://github.com/morgan-coded), [@​lukastaegert](https://github.com/lukastaegert)) - [#​6416](rollup/rollup#6416): refactor(rust/parser\_ast): extract property AstConverter write buffer kind logic to new method ([@​fabianbernhart](https://github.com/fabianbernhart), [@​lukastaegert](https://github.com/lukastaegert)) ### [`v4.62.1`](https://github.com/rollup/rollup/blob/HEAD/CHANGELOG.md#4621) [Compare Source](rollup/rollup@v4.62.0...v4.62.1) *2026-06-19* ##### Bug Fixes - Preserve multipart file extensions when deconflicting output chunks ([#​6408](rollup/rollup#6408)) - Fix an issue where getLogFilter would match additional logs ([#​6415](rollup/rollup#6415)) ##### Pull Requests - [#​6393](rollup/rollup#6393): Use import attributes for importing JSON ([@​selfisekai](https://github.com/selfisekai), [@​lukastaegert](https://github.com/lukastaegert)) - [#​6408](rollup/rollup#6408): fix: insert conflict numbers before first extension in multi-extension filenames ([@​LeSingh1](https://github.com/LeSingh1), [@​lukastaegert](https://github.com/lukastaegert)) - [#​6415](rollup/rollup#6415): fix: advance value past wildcard prefix before suffix check in getLogFilter ([@​JSap0914](https://github.com/JSap0914), [@​lukastaegert](https://github.com/lukastaegert)) - [#​6417](rollup/rollup#6417): chore(deps): update msys2/setup-msys2 digest to [`66cd2cc`](rollup/rollup@66cd2cc) ([@​renovate](https://github.com/renovate)\[bot]) - [#​6418](rollup/rollup#6418): fix(deps): update minor/patch updates ([@​renovate](https://github.com/renovate)\[bot], [@​lukastaegert](https://github.com/lukastaegert)) - [#​6419](rollup/rollup#6419): chore(deps): update dependency eslint-plugin-unicorn to v66 ([@​renovate](https://github.com/renovate)\[bot]) - [#​6420](rollup/rollup#6420): chore(deps): lock file maintenance minor/patch updates ([@​renovate](https://github.com/renovate)\[bot], [@​lukastaegert](https://github.com/lukastaegert)) </details> <details> <summary>typescript-eslint/typescript-eslint (@​typescript-eslint/eslint-plugin)</summary> ### [`v8.62.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8620-2026-06-22) [Compare Source](typescript-eslint/typescript-eslint@v8.61.1...v8.62.0) ##### 🚀 Features - remove redundant package.json "files" ([#​12444](typescript-eslint/typescript-eslint#12444)) ##### ❤️ Thank You - Kirk Waiblinger [@​kirkwaiblinger](https://github.com/kirkwaiblinger) See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.62.0) for more information. You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website. </details> <details> <summary>typescript-eslint/typescript-eslint (@​typescript-eslint/parser)</summary> ### [`v8.62.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8620-2026-06-22) [Compare Source](typescript-eslint/typescript-eslint@v8.61.1...v8.62.0) ##### 🚀 Features - remove redundant package.json "files" ([#​12444](typescript-eslint/typescript-eslint#12444)) ##### ❤️ Thank You - Kirk Waiblinger [@​kirkwaiblinger](https://github.com/kirkwaiblinger) See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.62.0) for more information. You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website. </details> <details> <summary>eslint/eslint (eslint)</summary> ### [`v10.6.0`](https://github.com/eslint/eslint/releases/tag/v10.6.0) [Compare Source](eslint/eslint@v10.5.0...v10.6.0) #### Features - [`b1f9106`](eslint/eslint@b1f9106) feat: detect Symbol() and BigInt() in no-constant-binary-expression ([#​20981](eslint/eslint#20981)) (Taejin Kim) - [`f291007`](eslint/eslint@f291007) feat: add checkRelationalComparisons to no-constant-binary-expression ([#​20948](eslint/eslint#20948)) (sethamus) #### Bug Fixes - [`6b05784`](eslint/eslint@6b05784) fix: prefer-exponentiation-operator invalid autofix at statement start ([#​20997](eslint/eslint#20997)) (Milos Djermanovic) - [`bb9eb2a`](eslint/eslint@bb9eb2a) fix: account for shadowed `Boolean` in `no-extra-boolean-cast` ([#​21013](eslint/eslint#21013)) (den$) - [`8fd8741`](eslint/eslint@8fd8741) fix: don't report shadowed undefined in `radix` rule ([#​21011](eslint/eslint#21011)) (Pixel) - [`5784980`](eslint/eslint@5784980) fix: don't report shadowed undefined in no-throw-literal ([#​21010](eslint/eslint#21010)) (Pixel) - [`9cd1e6d`](eslint/eslint@9cd1e6d) fix: suppress invalid class suggestion in no-promise-executor-return ([#​21008](eslint/eslint#21008)) (Pixel) - [`d4eb2dc`](eslint/eslint@d4eb2dc) fix: don't report shadowed undefined in prefer-promise-reject-errors ([#​21006](eslint/eslint#21006)) (Pixel) - [`2360464`](eslint/eslint@2360464) fix: prefer-promise-reject-errors false positives for shadowed Promise ([#​21003](eslint/eslint#21003)) (den$) - [`63d52d2`](eslint/eslint@63d52d2) fix: restore max-classes-per-file report range ([#​21002](eslint/eslint#21002)) (Pixel) - [`7feaff0`](eslint/eslint@7feaff0) fix: callback detection logic for IIFEs in max-nested-callbacks ([#​20979](eslint/eslint#20979)) (fnx) - [`399a2ec`](eslint/eslint@399a2ec) fix: don't report inner non-callbacks in `max-nested-callbacks` ([#​20995](eslint/eslint#20995)) (Milos Djermanovic) #### Documentation - [`a83683d`](eslint/eslint@a83683d) docs: Update README (GitHub Actions Bot) - [`f5449f9`](eslint/eslint@f5449f9) docs: document userland patterns for global assertionOptions in RuleT… ([#​20986](eslint/eslint#20986)) (playgirl) - [`bea49f7`](eslint/eslint@bea49f7) docs: Update README (GitHub Actions Bot) - [`e5f70f9`](eslint/eslint@e5f70f9) docs: update code-path diagrams ([#​20984](eslint/eslint#20984)) (Tanuj Kanti) - [`8890c2d`](eslint/eslint@8890c2d) docs: add TypeScript config guidance for MCP server ([#​20796](eslint/eslint#20796)) (Pierluigi Lenoci) - [`3eb3d9b`](eslint/eslint@3eb3d9b) docs: Update README (GitHub Actions Bot) - [`c5bb59c`](eslint/eslint@c5bb59c) docs: Update README (GitHub Actions Bot) - [`eb3c97c`](eslint/eslint@eb3c97c) docs: fix grammar in prefer-const rule description ([#​20983](eslint/eslint#20983)) (lumir) #### Chores - [`6a42034`](eslint/eslint@6a42034) ci: run ecosystem tests on main branch ([#​20891](eslint/eslint#20891)) (sethamus) - [`3dbacdb`](eslint/eslint@3dbacdb) ci: bump actions/checkout from 6 to 7 ([#​21014](eslint/eslint#21014)) (dependabot\[bot]) - [`c3abfca`](eslint/eslint@c3abfca) chore: correct JSDoc param types in html formatter ([#​21018](eslint/eslint#21018)) (Minseon Kim) - [`a832320`](eslint/eslint@a832320) ci: split ecosystem tests into separate jobs ([#​21001](eslint/eslint#21001)) (xbinaryx) - [`27166e7`](eslint/eslint@27166e7) chore: update ecosystem plugins ([#​21005](eslint/eslint#21005)) (ESLint Bot) - [`865d76e`](eslint/eslint@865d76e) ci: bump pnpm/action-setup from 6.0.8 to 6.0.9 ([#​20989](eslint/eslint#20989)) (dependabot\[bot]) - [`27a88c9`](eslint/eslint@27a88c9) chore: update dependency markdown-it to v14 in root ([#​20994](eslint/eslint#20994)) (Milos Djermanovic) - [`970cea6`](eslint/eslint@970cea6) chore: update dependency markdown-it to v14 ([#​20993](eslint/eslint#20993)) (Milos Djermanovic) - [`b482120`](eslint/eslint@b482120) chore: update dependency prettier to v3.8.4 ([#​20990](eslint/eslint#20990)) (renovate\[bot]) - [`6993fb3`](eslint/eslint@6993fb3) chore: update ecosystem plugins ([#​20985](eslint/eslint#20985)) (ESLint Bot) </details> <details> <summary>jest-community/eslint-plugin-jest (eslint-plugin-jest)</summary> ### [`v29.15.3`](https://github.com/jest-community/eslint-plugin-jest/blob/HEAD/CHANGELOG.md#29153-2026-06-26) [Compare Source](jest-community/eslint-plugin-jest@v29.15.2...v29.15.3) ##### Bug Fixes - **no-export:** treat describe blocks as test files ([#​1978](jest-community/eslint-plugin-jest#1978)) ([70568b0](jest-community/eslint-plugin-jest@70568b0)) </details> <details> <summary>sindresorhus/globals (globals)</summary> ### [`v17.7.0`](https://github.com/sindresorhus/globals/releases/tag/v17.7.0) [Compare Source](sindresorhus/globals@v17.6.0...v17.7.0) - Update globals (2026-06-22) ([#​345](sindresorhus/globals#345)) [`33b75f9`](sindresorhus/globals@33b75f9) *** </details> <details> <summary>prettier/prettier (prettier)</summary> ### [`v3.9.1`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#391) [Compare Source](prettier/prettier@3.9.0...3.9.1) [diff](prettier/prettier@3.9.0...3.9.1) ##### CLI: Fix ignored file has been cached incorrectly ([#​19483](prettier/prettier#19483) by [@​kovsu](https://github.com/kovsu)) Bug details [#​18016](prettier/prettier#18016) ### [`v3.9.0`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#390) [Compare Source](prettier/prettier@3.8.5...3.9.0) [diff](prettier/prettier@3.8.5...3.9.0) 🔗 [Release Notes](https://prettier.io/blog/2026/06/27/3.9.0) ### [`v3.8.5`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#385) [Compare Source](prettier/prettier@3.8.4...3.8.5) [diff](prettier/prettier@3.8.4...3.8.5) ##### Flow: Support `readonly` as a variance annotation ([#​19022](prettier/prettier#19022) by [@​marcoww6](https://github.com/marcoww6)) Flow now accepts `readonly` as a property variance annotation, equivalent to `+` (covariant/read-only). <!-- prettier-ignore --> ```jsx // Input type T = { readonly foo: string, }; // Prettier 3.8.4 SyntaxError // Prettier 3.8.5 type T = { readonly foo: string, }; ``` </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Amsterdam) - Branch creation - "before 6am on monday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](undefined) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMjIuMSIsInVwZGF0ZWRJblZlciI6IjQzLjIzNC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJ0eXBlL21pbm9yIiwidHlwZS9wYXRjaCJdfQ==--> Co-authored-by: Bernd Schorgers <me@bjw-s.dev> Co-authored-by: lab-assistant <lab-assistant@git.bjw-s.dev> Reviewed-on: https://git.bjw-s.dev/bjw-s/action-changed-files/pulls/56
apricote
pushed a commit
to hetznercloud/fleeting-plugin-hetzner
that referenced
this pull request
Jul 1, 2026
…fleeting-plugin-hetzner!384) This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [prettier](https://prettier.io) ([source](https://github.com/prettier/prettier)) | `3.8.4` → `3.8.5` |  |  | Note: The `pre-commit` manager in Renovate is not supported by the `pre-commit` maintainers or community. Please do not report any problems there, instead [create a Discussion in the Renovate repository](https://github.com/renovatebot/renovate/discussions/new) if you have any questions. --- ### Release Notes <details> <summary>prettier/prettier (prettier)</summary> ### [`v3.8.5`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#385) [Compare Source](prettier/prettier@3.8.4...3.8.5) [diff](prettier/prettier@3.8.4...3.8.5) ##### Flow: Support `readonly` as a variance annotation ([#​19022](prettier/prettier#19022) by [@​marcoww6](https://github.com/marcoww6)) Flow now accepts `readonly` as a property variance annotation, equivalent to `+` (covariant/read-only). <!-- prettier-ignore --> ```jsx // Input type T = { readonly foo: string, }; // Prettier 3.8.4 SyntaxError // Prettier 3.8.5 type T = { readonly foo: string, }; ``` </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever MR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this MR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNDkuNSIsInVwZGF0ZWRJblZlciI6IjQzLjI0OS41IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Flow now accepts
readonlyas a property variance annotation equivalent to+(covariant/read-only).Variancenode printer to handlekind: "readonly"Variancetype definition to include"readonly"in the kind unionVariancenodes withkind: "readonly"readonlyvariance in object types, indexers, tuples, interfaces, and class propertiesChecklist
docs/directory).changelog_unreleased/*/XXXX.mdfile followingchangelog_unreleased/TEMPLATE.md.