Skip to content

[flutter_tools] Fix crash when migrating flow-style exclude lists in analysis_options.yaml - #191269

Merged
auto-submit[bot] merged 4 commits into
flutter:masterfrom
bkonyi:issue-191060
Aug 21, 2026
Merged

auto-submit[bot] merged 4 commits into
flutter:masterfrom
bkonyi:issue-191060

Conversation

@bkonyi

@bkonyi bkonyi commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Description

Avoids a crash in the yaml_edit package when migrating analysis_options.yaml where the exclude list is formatted in flow style (e.g. [ ... ]) and contains internal newlines and trailing commas.

The yaml_edit package (version 2.2.4) has a bug when appending to such lists via appendToList, which results in invalid YAML generation and triggers a _YamlAssertionError (tracked upstream in dart-lang/tools#2532).

To work around this, AnalysisOptionsMigration checks if the exclude list's style is CollectionStyle.FLOW. If it is, it updates the entire list using editor.update instead of appending. This converts the list to block style (which is preferred in analysis_options.yaml) and avoids the crash. Invalid types within the list are preserved for consistency with block-style migration.

Related Issues

Fixes #191060
Upstream issue: dart-lang/tools#2532

Tests

  • Added migrates and merges excludes when list is in flow style with newlines to packages/flutter_tools/test/general.shard/migrations/analysis_options_migration_test.dart.

bkonyi added 2 commits August 18, 2026 03:29
…analysis_options.yaml

Avoid a crash in the `yaml_edit` package when migrating `analysis_options.yaml`
where the `exclude` list is formatted in flow style (e.g. `[ ... ]`) and
contains newlines and trailing commas.

The `yaml_edit` package (version 2.2.4) has a bug when appending to such lists
via `appendToList`, which results in invalid YAML generation and triggers a
`_YamlAssertionError`.

To work around this, `AnalysisOptionsMigration` now checks if the `exclude`
list's style is `CollectionStyle.FLOW`. If it is, it updates the entire list
using `editor.update` instead of appending. This converts the list to block
style (which is preferred anyway) and avoids the crash. Invalid types in the
list are preserved for consistency with block-style migration.

Fixes flutter#191060
@github-actions github-actions Bot added the tool Affects the "flutter" command-line tool. See also t: labels. label Aug 18, 2026
@bkonyi bkonyi added the CICD Run CI/CD label Aug 20, 2026
@bkonyi
bkonyi requested a review from chingjun August 20, 2026 16:26
@bkonyi
bkonyi marked this pull request as ready for review August 20, 2026 16:26

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request adds a workaround in the analysis options migration to handle flow-style exclude lists, rewriting them as block lists to avoid a YamlEditor crash, and includes a corresponding test. The review feedback suggests filtering out duplicate entries when merging the missing excludes into the flow-style list to ensure consistency with the block-style migration path.

// Workaround for https://github.com/dart-lang/tools/issues/2532.
// Appending to a multiline flow-style list with a trailing comma crashes YamlEditor.
// Instead, rewrite the entire exclude list as a block list.
final newExcludes = <Object?>[...exclude, ...missingExcludes];

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Unconditionally appending missingExcludes to exclude can introduce duplicate entries if some of the missing excludes are already present in the existing flow-style list. To maintain consistency with the block-style migration path (which checks !exclude.contains(missingExclude)), we should filter out any elements that are already present in exclude.

          final newExcludes = <Object?>[
            ...exclude,
            ...missingExcludes.where((Object? item) => !exclude.contains(item)),
          ];

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. Updated to filter out existing excludes before merging.

@bkonyi bkonyi added the autosubmit Merge PR when tree becomes green via auto submit App label Aug 21, 2026
@auto-submit
auto-submit Bot added this pull request to the merge queue Aug 21, 2026
Merged via the queue into flutter:master with commit 9479bb7 Aug 21, 2026
22 checks passed
@flutter-dashboard flutter-dashboard Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Aug 21, 2026
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Aug 22, 2026
Roll Flutter from c2437523d308 to 65c9a8dc60bc (195 revisions)

flutter/flutter@c243752...65c9a8d

2026-08-22 [email protected] Roll ICU from d578f2e8b7bd to 8cc91d9b6ab9 (1 revision) (flutter/flutter#191542)
2026-08-22 [email protected] Roll Skia from 666a9b3d5cf0 to ad2106c0bb64 (3 revisions) (flutter/flutter#191527)
2026-08-22 [email protected] Roll Fuchsia Test Scripts from KaOq3EE4qJ9fnaaaK... to 0iCv10IlKfiilEBOU... (flutter/flutter#191524)
2026-08-22 [email protected] [flutter_tools] Add tests for negative lookahead regex in test runner and batch entrypoints (flutter/flutter#191438)
2026-08-22 [email protected] Roll Skia from 0c37868737fa to 666a9b3d5cf0 (2 revisions) (flutter/flutter#191518)
2026-08-21 [email protected] Revert "[input] Migrate fuchsia.ui.pointerinjector to TouchSource (#190855) (flutter/flutter#191509)
2026-08-21 [email protected] Fixes windows gallery benchmarks by forcing mobile layout (flutter/flutter#191507)
2026-08-21 [email protected] [flutter_tools] Restrict WebAssetServer source resolution to source map extensions (flutter/flutter#191501)
2026-08-21 [email protected] Roll Skia from f6900c5b8439 to 0c37868737fa (2 revisions) (flutter/flutter#191504)
2026-08-21 [email protected] Refactor `FlutterDevice.connect` and VM service discovery (flutter/flutter#191221)
2026-08-21 [email protected] [flutter_tools] Fix crash when migrating flow-style exclude lists in analysis_options.yaml (flutter/flutter#191269)
2026-08-21 [email protected] [rules] Add packages/flutter_tools/gradle/AGENTS.md rules (flutter/flutter#191486)
2026-08-21 [email protected] [flutter_tools] refactor CLI argument architecture with typed option descriptors and bundles (PoC) (flutter/flutter#191018)
2026-08-21 [email protected] tools: Extract Dart SDK to temp directory before moving to final location (flutter/flutter#191263)
2026-08-21 [email protected] [web] Move CanvasKit fragment shader classes to canvaskit/fragment_shader.dart (flutter/flutter#191451)
2026-08-21 [email protected] Roll Fuchsia Linux SDK from GCQlmt6h-esJsNubS... to ic6GjOSn-KN508XyK... (flutter/flutter#191485)
2026-08-21 [email protected] [Widget Preview] Isolate PageStorage scope in widget preview group expansion tile (flutter/flutter#191378)
2026-08-21 [email protected] [flutter_tools] Deprecate --build and --no-build flags on flutter run (flutter/flutter#191358)
2026-08-21 [email protected] Roll Skia from 70988bed1b3b to f6900c5b8439 (2 revisions) (flutter/flutter#191481)
2026-08-21 [email protected] Roll Packages from 1785501 to 252bb33 (6 revisions) (flutter/flutter#191480)
2026-08-21 [email protected] Roll Fuchsia Linux SDK from 20IJas24bZiNmCZTK... to GCQlmt6h-esJsNubS... (flutter/flutter#191415)
2026-08-21 [email protected] Roll Skia from 2ba6971bd0d1 to 70988bed1b3b (2 revisions) (flutter/flutter#191476)
2026-08-21 [email protected] Roll Skia from 1d5f72537ba6 to 2ba6971bd0d1 (2 revisions) (flutter/flutter#191473)
2026-08-21 [email protected] Roll Skia from 2c25efd2e369 to 1d5f72537ba6 (1 revision) (flutter/flutter#191472)
2026-08-21 [email protected] Roll Skia from 09b1b810850a to 2c25efd2e369 (9 revisions) (flutter/flutter#191470)
2026-08-21 [email protected] [Impeller] fix position of cached single glyph text shadows (flutter/flutter#191325)
2026-08-21 [email protected] Roll Skia from abdf8821f313 to 09b1b810850a (15 revisions) (flutter/flutter#191458)
2026-08-21 [email protected] Document that programmatic TextEditingController changes do not run input formatters (flutter/flutter#190166)
2026-08-21 [email protected] Adds new gallery benchmarks to windows (skia and impeller) (flutter/flutter#191454)
2026-08-21 [email protected] iOS: Deprecate FlutterEngine.isGpuDisabled (flutter/flutter#191393)
2026-08-21 [email protected] Revert: [web] Unskip decoration image lerp tests (flutter/flutter#191462)
2026-08-20 [email protected] android_hardware_smoke_test: Improve reliability (flutter/flutter#191374)
2026-08-20 [email protected] Don't size or offset the Android platform view before it is laid out (flutter/flutter#190895)
2026-08-20 [email protected] [iOS][add2app] Skip building SwiftPM plugins when generating CocoaPods artifacts (flutter/flutter#190736)
2026-08-20 [email protected] Optimize JSONMessageCodec UTF-8 conversion (flutter/flutter#190529)
2026-08-20 [email protected] [FML] Replace deprecated wstring_convert with Win32 APIs (flutter/flutter#191394)
2026-08-20 [email protected] SliverFillRemaining extends beyond viewport size when fillOverscroll is true (flutter/flutter#191236)
2026-08-20 [email protected] [flutter_tools] Update argParser usageLineLength when --wrap-column is passed (flutter/flutter#191264)
2026-08-20 [email protected] [flutter_tools] Fix UNC path resolution in depfile parsing on Windows (flutter/flutter#191265)
2026-08-20 [email protected] [web] Unskip decoration image lerp tests (flutter/flutter#191426)
2026-08-20 [email protected] Do not inject 'type' and 'method' into service extension responses (flutter/flutter#190946)
2026-08-20 [email protected] [flutter_tools] Fix crash in symbolize command on stream error (flutter/flutter#191273)
2026-08-20 [email protected] [flutter_tools] Prevent deletion of shared native asset hooks outputs as stale (flutter/flutter#191272)
2026-08-20 [email protected] [flutter_tools] Support package wildcard assets in app pubspec (flutter/flutter#191266)
2026-08-20 [email protected] Add SliverClipRect and SliverClipRRect (flutter/flutter#179003)
2026-08-20 [email protected] [flutter_tools] Implement Diagnostics extension slice and doctor integration (flutter/flutter#191162)
...
@bkonyi bkonyi added the cp: stable cherry pick this pull request to stable release candidate branch label Aug 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CICD Run CI/CD cp: stable cherry pick this pull request to stable release candidate branch tool Affects the "flutter" command-line tool. See also t: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[tool_crash] _YamlAssertionError: (#0 YamlEditor._performEdit (package:yaml_edit/src/editor.dart:576:7))

2 participants