Use local variable for buffer (#3826)

diff --git a/lib/src/command/deps.dart b/lib/src/command/deps.dart
index 1a42671..fff66ab 100644
--- a/lib/src/command/deps.dart
+++ b/lib/src/command/deps.dart
@@ -30,10 +30,6 @@
   @override
   bool get takesArguments => false;
 
-  /// The [StringBuffer] used to accumulate the output.
-  // TODO(sigurdm): use a local variable for this.
-  final _buffer = StringBuffer();
-
   /// Whether to include dev dependencies.
   bool get _includeDev => argResults['dev'];
 
@@ -76,7 +72,7 @@
   Future<void> runProtected() async {
     // Explicitly Run this in the directorycase we don't access `entrypoint.packageGraph`.
     entrypoint.assertUpToDate();
-    _buffer.clear();
+    final buffer = StringBuffer();
 
     if (argResults['json']) {
       if (argResults.wasParsed('dev')) {
@@ -137,7 +133,7 @@
           )
       ];
 
-      _buffer.writeln(
+      buffer.writeln(
         JsonEncoder.withIndent('  ').convert(
           {
             'root': entrypoint.root.name,
@@ -153,30 +149,30 @@
       );
     } else {
       if (argResults['executables']) {
-        _outputExecutables();
+        _outputExecutables(buffer);
       } else {
         for (var sdk in sdks.values) {
           if (!sdk.isAvailable) continue;
-          _buffer.writeln("${log.bold('${sdk.name} SDK')} ${sdk.version}");
+          buffer.writeln("${log.bold('${sdk.name} SDK')} ${sdk.version}");
         }
 
-        _buffer.writeln(_labelPackage(entrypoint.root));
+        buffer.writeln(_labelPackage(entrypoint.root));
 
         switch (argResults['style']) {
           case 'compact':
-            _outputCompact();
+            _outputCompact(buffer);
             break;
           case 'list':
-            _outputList();
+            _outputList(buffer);
             break;
           case 'tree':
-            _outputTree();
+            _outputTree(buffer);
             break;
         }
       }
     }
 
-    log.message(_buffer);
+    log.message(buffer);
   }
 
   /// Outputs a list of all of the package's immediate, dev, override, and
@@ -185,37 +181,48 @@
   /// For each dependency listed, *that* package's immediate dependencies are
   /// shown. Unlike [_outputList], this prints all of these dependencies on one
   /// line.
-  void _outputCompact() {
+  void _outputCompact(
+    StringBuffer buffer,
+  ) {
     var root = entrypoint.root;
-    _outputCompactPackages('dependencies', root.dependencies.keys);
+    _outputCompactPackages('dependencies', root.dependencies.keys, buffer);
     if (_includeDev) {
-      _outputCompactPackages('dev dependencies', root.devDependencies.keys);
+      _outputCompactPackages(
+        'dev dependencies',
+        root.devDependencies.keys,
+        buffer,
+      );
     }
     _outputCompactPackages(
       'dependency overrides',
       root.dependencyOverrides.keys,
+      buffer,
     );
 
     var transitive = _getTransitiveDependencies();
-    _outputCompactPackages('transitive dependencies', transitive);
+    _outputCompactPackages('transitive dependencies', transitive, buffer);
   }
 
   /// Outputs one section of packages in the compact output.
-  void _outputCompactPackages(String section, Iterable<String> names) {
+  void _outputCompactPackages(
+    String section,
+    Iterable<String> names,
+    StringBuffer buffer,
+  ) {
     if (names.isEmpty) return;
 
-    _buffer.writeln();
-    _buffer.writeln('$section:');
+    buffer.writeln();
+    buffer.writeln('$section:');
     for (var name in ordered(names)) {
       var package = _getPackage(name);
 
-      _buffer.write('- ${_labelPackage(package)}');
+      buffer.write('- ${_labelPackage(package)}');
       if (package.dependencies.isEmpty) {
-        _buffer.writeln();
+        buffer.writeln();
       } else {
         var depNames = package.dependencies.keys;
         var depsList = "[${depNames.join(' ')}]";
-        _buffer.writeln(' ${log.gray(depsList)}');
+        buffer.writeln(' ${log.gray(depsList)}');
       }
     }
   }
@@ -225,34 +232,41 @@
   ///
   /// For each dependency listed, *that* package's immediate dependencies are
   /// shown.
-  void _outputList() {
+  void _outputList(StringBuffer buffer) {
     var root = entrypoint.root;
-    _outputListSection('dependencies', root.dependencies.keys);
+    _outputListSection('dependencies', root.dependencies.keys, buffer);
     if (_includeDev) {
-      _outputListSection('dev dependencies', root.devDependencies.keys);
+      _outputListSection('dev dependencies', root.devDependencies.keys, buffer);
     }
-    _outputListSection('dependency overrides', root.dependencyOverrides.keys);
+    _outputListSection(
+      'dependency overrides',
+      root.dependencyOverrides.keys,
+      buffer,
+    );
 
     var transitive = _getTransitiveDependencies();
     if (transitive.isEmpty) return;
 
-    _outputListSection('transitive dependencies', ordered(transitive));
+    _outputListSection('transitive dependencies', ordered(transitive), buffer);
   }
 
   /// Outputs one section of packages in the list output.
-  void _outputListSection(String name, Iterable<String> deps) {
+  void _outputListSection(
+    String name,
+    Iterable<String> deps,
+    StringBuffer buffer,
+  ) {
     if (deps.isEmpty) return;
 
-    _buffer.writeln();
-    _buffer.writeln('$name:');
+    buffer.writeln();
+    buffer.writeln('$name:');
 
     for (var name in deps) {
       var package = _getPackage(name);
-      _buffer.writeln('- ${_labelPackage(package)}');
+      buffer.writeln('- ${_labelPackage(package)}');
 
       for (var dep in package.dependencies.values) {
-        _buffer
-            .writeln('  - ${log.bold(dep.name)} ${log.gray(dep.constraint)}');
+        buffer.writeln('  - ${log.bold(dep.name)} ${log.gray(dep.constraint)}');
       }
     }
   }
@@ -263,7 +277,9 @@
   /// dependency), later ones are not traversed. This is done in breadth-first
   /// fashion so that a package will always be expanded at the shallowest
   /// depth that it appears at.
-  void _outputTree() {
+  void _outputTree(
+    StringBuffer buffer,
+  ) {
     // The work list for the breadth-first traversal. It contains the package
     // being added to the tree, and the parent map that will receive that
     // package.
@@ -303,7 +319,7 @@
       }
     }
 
-    _buffer.write(tree.fromMap(packageTree));
+    buffer.write(tree.fromMap(packageTree));
   }
 
   String _labelPackage(Package package) =>
@@ -347,7 +363,7 @@
   }
 
   /// Outputs all executables reachable from [entrypoint].
-  void _outputExecutables() {
+  void _outputExecutables(StringBuffer buffer) {
     var packages = [
       entrypoint.root,
       ...(_includeDev
@@ -360,7 +376,7 @@
     for (var package in packages) {
       var executables = package.executableNames;
       if (executables.isNotEmpty) {
-        _buffer.writeln(_formatExecutables(package.name, executables.toList()));
+        buffer.writeln(_formatExecutables(package.name, executables.toList()));
       }
     }
   }