Add the formatter changes to the CHANGELOG.
Change-Id: Ib8e0e8e99f77ebfa00f53eb3e2b4442b60b392ff
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/394571
Commit-Queue: Leaf Petersen <leafp@google.com>
Auto-Submit: Bob Nystrom <rnystrom@google.com>
Reviewed-by: Leaf Petersen <leafp@google.com>
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a7b61eb..3801fa7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -82,6 +82,137 @@
- Add the experimental `omit_obvious_property_types` lint rule.
- Deprecate the `package_api_docs` lint rule.
+#### Dart format
+
+The formatter implements a [new style][tall style] better suited for the kind of
+declarative code that many Dart users are writing today. The new style looks
+similar to the style you get when you add trailing commas to argument lists,
+except that now the formatter will add and remove those commas for you.
+
+The `dart format` command [uses the language version][formatter lang version] of
+each input file to determine which style it gets. If the language version is 3.6
+or lower, the code is formatted with the old style. If 3.7 or later, it gets the
+new tall style.
+
+You typically control the language version by [setting a min SDK constraint in
+your package's pubspec][versioning]. This means that when you update the SDK
+constraint in your pubspec to move to 3.7, you are also opting in to the new
+style.
+
+In order to correctly determine the language version of each file it formats,
+`dart format` (like other `dart` commands) looks for a `package_config.json`
+file surrounding the files being formatted. This means that **you need to run
+`dart pub get` before formatting code in your package.** If you have format
+checks in your continuous integration server, you'll want to make sure it runs
+`dart pub get` too.
+
+We don't intend to support both styles indefinitely. At some point in the
+future when most of the ecosystem is on 3.7 or later, support for the old style
+will be removed.
+
+[tall style]: https://github.com/dart-lang/dart_style/issues/1253
+
+[versioning]: https://dart.dev/guides/language/evolution
+
+[formatter lang version]: https://github.com/dart-lang/dart_style/issues/1402
+
+In addition to the new formatting style, a number of other changes are included,
+some of them breaking:
+
+* **Project-wide page width configuration.** By long request, you can now
+ configure your preferred formatting page width on a project-wide basis. When
+ formatting a file, the formatter will look in the file's directory and any
+ surrounding directories for an `analysis_options.yaml` file. If it finds one,
+ it looks for YAML like so:
+
+ ```yaml
+ formatter:
+ page_width: 123
+ ```
+
+ If it finds a page width matching that schema, then the file is formatted
+ using that width. Since the formatter will walk the surrounding directories
+ until it finds an `analysis_options.yaml` file, this can be used to globally
+ set the page width for an entire directory, package, or even collection of
+ packages. Since `analysis_options.yaml` files already support an `include`
+ key to reference other `analysis_options.yaml` files, you can define a single
+ configuration and share it across a number of packages.
+
+* **Opting out a region of code from formatting.** In code formatted using the
+ new style, you can use a pair of special marker comments to opt a region of
+ code out of automated formatting:
+
+ ```dart
+ main() {
+ this.isFormatted();
+ // dart format off
+ no + formatting
+ +
+ here;
+ // dart format on
+ formatting.isBackOnHere();
+ }
+ ```
+
+ The comments must be exactly `// dart format off` and `// dart format on`.
+ A file may have multiple regions, but they can't overlap or nest.
+
+ This can be useful for highly structured data where custom layout helps the
+ reader understand the data, like large lists of numbers.
+
+* **Overriding the page width for a single file.** In code formatted
+ using the new tall style, you can use a special marker comment to control the
+ page width that it's formatted using:
+
+ ```dart
+ // dart format width=30
+ main() {
+ someExpression +
+ thatSplitsAt30;
+ }
+ ```
+
+ This comment must appear before any code in the file and must match that
+ format exactly. The width set by the comment overrides the width set by any
+ surrounding `analysis_options.yaml` file.
+
+ This feature is mainly for code generators that generate and immediately
+ format code but don't know about any surrounding `analysis_options.yaml`
+ that might be configuring the page width. By inserting this comment in the
+ generated code before formatting, it ensures that the code generator's
+ behavior matches the behavior of `dart format`.
+
+ End users should mostly use `analysis_options.yaml` for configuring their
+ preferred page width (or do nothing and continue to use the default page width
+ of 80).
+
+* **Breaking change: Remove support for `dart format --fix`.** Instead, use
+ `dart fix`. It supports all of the fixes that `dart format --fix` could apply
+ and many more.
+
+* **Treat the `--stdin-name` name as a path when inferring language version.**
+ When reading input on stdin, the formatter still needs to know its language
+ version to know what style to apply. If the `--stdin-name` option is set, then
+ that is treated as a file path and the formatter looks for a package config
+ surrounding that file path to infer the language version from.
+
+ If you don't want that behavior, pass in an explicit language version using
+ `--language-version=`, or use `--language-version=latest` to parse the input
+ using the latest language version supported by the formatter.
+
+ If `--stdin-name` and `--language-version` are both omitted, then the
+ formatter parses stdin using the latest supported language version.
+
+* **Rename the `--line-length` option to `--page-width`.** This is consistent
+ with the public API, internal implementation, and docs, which all use "page
+ width" to refer to the limit that the formatter tries to fit code into.
+
+ The `--line-length` name is still supported for backwards compatibility, but
+ may be removed at some point in the future. You're encouraged to move to
+ `--page-width`. Use of this option (however it's named) is rare, and will
+ likely be even rarer now that project-wide configuration is supported, so
+ this shouldn't affect many users.
+
## 3.6.0
### Language