diff --git a/lib/src/chunk_builder.dart b/lib/src/chunk_builder.dart
index b2e08d4..249250e 100644
--- a/lib/src/chunk_builder.dart
+++ b/lib/src/chunk_builder.dart
@@ -588,7 +588,9 @@
 
   /// Starts a new block as a child of the current chunk.
   ///
-  /// Nested blocks are handled using their own independent [LineWriter].
+  /// Nested blocks are handled using their own independent [LineWriter]. If
+  /// [indent] is `false` then the first line of the block will not get a level
+  /// of leading indentation. Otherwise it does.
   ChunkBuilder startBlock(Chunk? argumentChunk, {bool indent = true}) {
     var chunk = _chunks.last;
     chunk.makeBlock(argumentChunk, indent: indent);
diff --git a/lib/src/source_visitor.dart b/lib/src/source_visitor.dart
index ccb00c4..9b0517d 100644
--- a/lib/src/source_visitor.dart
+++ b/lib/src/source_visitor.dart
@@ -634,15 +634,7 @@
   ///
   /// To handle that, we don't put the last section in the block and instead
   /// format it with the surrounding expression. So, from the formatter's
-  /// view, a cascade like:
-  ///
-  ///     var x = someLeadingExpression
-  ///       ..firstCascade()
-  ///       ..secondCascade()
-  ///       ..thirdCascade()
-  ///       ..fourthCascade();
-  ///
-  /// Is formatted like:
+  /// view, the above casade is formatted like:
   ///
   ///     var x = someLeadingExpression
   ///       [ begin block ]
@@ -665,7 +657,12 @@
     zeroSplit();
 
     // If there are comments before the first section, keep them outside of the
-    // block.
+    // block. That way code like:
+    //
+    //     receiver // comment
+    //       ..cascade();
+    //
+    // Keeps the comment on the first line.
     var firstCommentToken = node.cascadeSections.first.beginToken;
     writePrecedingCommentsAndNewlines(firstCommentToken);
     _suppressPrecedingCommentsAndNewLines.add(firstCommentToken);
diff --git a/tool/change_metrics.dart b/tool/change_metrics.dart
deleted file mode 100644
index ab67523..0000000
--- a/tool/change_metrics.dart
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-import 'dart:io';
-
-/// Calculates the amount of formatting changes in a given directory of code.
-///
-/// This should be run with a path to a directory. That directory should
-/// contain a Git repo. The committed state of the repo should be the formatted
-/// output before the change in question. Then the result of the new formatting
-/// should be unstaged changes.
-///
-/// Uses `git diff --shortstat` to calculate the number of changed lines.
-///
-/// Counts the number of lines of Dart code by reading the files.
-void main(List<String> arguments) {
-  if (arguments.length != 1) {
-    print('Usage: change_metrics.dart <dir>');
-    exit(1);
-  }
-
-  var directory = arguments[0];
-  var totalLines = 0;
-  var totalFiles = 0;
-
-  print('Counting lines...');
-  for (var entry in Directory(directory).listSync(recursive: true)) {
-    if (entry is File && entry.path.endsWith('.dart')) {
-      try {
-        var lines = entry.readAsLinesSync();
-        totalFiles++;
-        totalLines += lines.length;
-      } catch (error) {
-        print('Could not read ${entry.path}:\n$error');
-      }
-    }
-  }
-
-  print('Getting diff stats...');
-  var result = Process.runSync('git', ['diff', '--shortstat'],
-      workingDirectory: directory);
-  if (result.exitCode != 0) {
-    print('Git failure:\n${result.stdout}\n${result.stderr}');
-    exit(1);
-  }
-
-  var stdout = result.stdout as String;
-  var insertions = _parseGitStdout(stdout, r'(\d+) insertions');
-  var deletions = _parseGitStdout(stdout, r'(\d+) deletions');
-  var changes = insertions + deletions;
-
-  print('$totalLines lines in $totalFiles files');
-  print('$insertions insertions + $deletions deletions = $changes changes');
-  var linesPerChange = totalLines / changes;
-  print('1 changed line for every ${linesPerChange.toStringAsFixed(2)} '
-      'lines of code');
-
-  var changesPerLine = 1000.0 * changes / totalLines;
-  print('${changesPerLine.toStringAsFixed(4)} '
-      'changed lines for every 1,000 lines of code');
-}
-
-int _parseGitStdout(String stdout, String pattern) {
-  var match = RegExp(pattern).firstMatch(stdout);
-  if (match == null) {
-    print('Could not parse Git output:\n$stdout');
-    exit(1);
-  }
-
-  return int.parse(match[1]!);
-}
