diff --git a/lib/src/ascii_tree.dart b/lib/src/ascii_tree.dart
index d197df1b574866e43b8c88344fc28750aec4213b..015a6e2c8d25d54170445e7a3419eeab1e0d1dd2 100644
--- a/lib/src/ascii_tree.dart
+++ b/lib/src/ascii_tree.dart
@@ -65,7 +65,6 @@ String fromFiles(List<String> files, {String baseDir, bool showAllChildren}) {
   var root = {};
   for (var file in files) {
     if (baseDir != null) file = path.relative(file, from: baseDir);
-    var parts = path.split(file);
     var directory = root;
     for (var part in path.split(file)) {
       directory = directory.putIfAbsent(part, () => {});
diff --git a/lib/src/barback/asset_environment.dart b/lib/src/barback/asset_environment.dart
index e3c8d26d9b590f8338d912d17e7567da1b4a803d..bfd97b35aff834ff353ff2fe77ff0d46f067d7b0 100644
--- a/lib/src/barback/asset_environment.dart
+++ b/lib/src/barback/asset_environment.dart
@@ -18,7 +18,6 @@ import '../io.dart';
 import '../log.dart' as log;
 import '../package.dart';
 import '../package_graph.dart';
-import '../sdk.dart' as sdk;
 import '../source/cached.dart';
 import '../utils.dart';
 import 'admin_server.dart';
@@ -276,7 +275,6 @@ class AssetEnvironment {
     log.fine("Executables for $packageName: $executableIds");
     if (executableIds.isEmpty) return {};
 
-    var package = graph.packages[packageName];
     var server = await servePackageBinDirectory(packageName);
     try {
       var precompiled = {};
@@ -477,7 +475,7 @@ class AssetEnvironment {
       if (!containsDart2JS && useDart2JS) {
         _builtInTransformers.addAll([
           new Dart2JSTransformer(this, mode),
-          new DartForwardingTransformer(mode)
+          new DartForwardingTransformer()
         ]);
       }
 
diff --git a/lib/src/barback/dart2js_transformer.dart b/lib/src/barback/dart2js_transformer.dart
index 9097e0747d2d38c37826e1478e9091d0f47fe76a..8bb15277e22c44e87dd5441e644059a2f39ce15a 100644
--- a/lib/src/barback/dart2js_transformer.dart
+++ b/lib/src/barback/dart2js_transformer.dart
@@ -106,7 +106,7 @@ class Dart2JSTransformer extends Transformer implements LazyTransformer {
 
         var parsed = parseCompilationUnit(code, name: name);
         return dart.isEntrypoint(parsed);
-      } on AnalyzerErrorGroup catch (e) {
+      } on AnalyzerErrorGroup {
         // If we get a parse error, consider the asset primary so we report
         // dart2js's more detailed error message instead.
         return true;
diff --git a/lib/src/barback/dart_forwarding_transformer.dart b/lib/src/barback/dart_forwarding_transformer.dart
index d1129248f483490ba159cec7f9a9e429d43ae830..210f882de2dfd3d492d22fc74d0cb5e87fabd126 100644
--- a/lib/src/barback/dart_forwarding_transformer.dart
+++ b/lib/src/barback/dart_forwarding_transformer.dart
@@ -17,10 +17,7 @@ import '../utils.dart';
 /// parallel to make sure the original Dart file is still available for use by
 /// Dartium.
 class DartForwardingTransformer extends Transformer {
-  /// The mode that the transformer is running in.
-  final BarbackMode _mode;
-
-  DartForwardingTransformer(this._mode);
+  DartForwardingTransformer();
 
   String get allowedExtensions => ".dart";
 
diff --git a/lib/src/command/global_deactivate.dart b/lib/src/command/global_deactivate.dart
index 595f6ffd798bed2bab598dbb93d6622ff822e359..e64f72270cb1d725abb53402eab3a873817a8f00 100644
--- a/lib/src/command/global_deactivate.dart
+++ b/lib/src/command/global_deactivate.dart
@@ -4,8 +4,6 @@
 
 library pub.command.global_deactivate;
 
-import 'dart:async';
-
 import '../command.dart';
 import '../log.dart' as log;
 import '../utils.dart';
diff --git a/lib/src/command/global_list.dart b/lib/src/command/global_list.dart
index 1de107305dbfa8e454fba65f9193723d033953d7..7a05bb04f5eae6dcc6e319f0e14fe20df46319fe 100644
--- a/lib/src/command/global_list.dart
+++ b/lib/src/command/global_list.dart
@@ -4,8 +4,6 @@
 
 library pub.command.global_list;
 
-import 'dart:async';
-
 import '../command.dart';
 
 /// Handles the `global list` pub command.
diff --git a/lib/src/command/serve.dart b/lib/src/command/serve.dart
index c5b47469379f7a510c2f5288c34d6e165c6ae0c5..d7e9de5f56f7724bc9cbedec5b36de47d0fa7bbb 100644
--- a/lib/src/command/serve.dart
+++ b/lib/src/command/serve.dart
@@ -10,7 +10,6 @@ import 'dart:math' as math;
 import 'package:barback/barback.dart';
 
 import '../barback/asset_environment.dart';
-import '../barback/pub_package_provider.dart';
 import '../log.dart' as log;
 import '../utils.dart';
 import 'barback.dart';
@@ -27,8 +26,6 @@ class ServeCommand extends BarbackCommand {
   String get invocation => "pub serve [directories...]";
   String get docUrl => "http://dartlang.org/tools/pub/cmd/pub-serve.html";
 
-  PubPackageProvider _provider;
-
   String get hostname => argResults['hostname'];
 
   /// The base port for the servers.
diff --git a/lib/src/command_runner.dart b/lib/src/command_runner.dart
index 287a469d3c7afab37ae8cae062586b9023f1c47a..96382da2b218b865dd7a81c9a573ee2c40314a31 100644
--- a/lib/src/command_runner.dart
+++ b/lib/src/command_runner.dart
@@ -10,7 +10,6 @@ import 'dart:io';
 import 'package:args/args.dart';
 import 'package:args/command_runner.dart';
 import 'package:http/http.dart' as http;
-import 'package:stack_trace/stack_trace.dart';
 
 import 'command/build.dart';
 import 'command/cache.dart';
diff --git a/lib/src/global_packages.dart b/lib/src/global_packages.dart
index d8c725033155af18cf9d74a56b42839717449c1b..335cf8e241a79d5771711d6a0d04f54651093b30 100644
--- a/lib/src/global_packages.dart
+++ b/lib/src/global_packages.dart
@@ -151,8 +151,6 @@ class GlobalPackages {
   /// Installs the package [dep] and its dependencies into the system cache.
   Future _installInCache(PackageDep dep, List<String> executables,
       {bool overwriteBinStubs}) async {
-    var source = cache.sources[dep.source];
-
     // Create a dummy package with just [dep] so we can do resolution on it.
     var root = new Package.inMemory(new Pubspec("pub global activate",
         dependencies: [dep], sources: cache.sources));
@@ -255,7 +253,7 @@ class GlobalPackages {
         log.message('Package ${log.bold(name)} is currently active at version '
             '${log.bold(id.version)}.');
       }
-    } on IOException catch (error) {
+    } on IOException {
       // If we couldn't read the lock file, it's not activated.
       return null;
     }
@@ -287,14 +285,14 @@ class GlobalPackages {
     var lockFile;
     try {
       lockFile = new LockFile.load(lockFilePath, cache.sources);
-    } on IOException catch (error) {
+    } on IOException {
       var oldLockFilePath = p.join(_directory, '$name.lock');
       try {
         // TODO(nweiz): This looks for Dart 1.6's old lockfile location.
         // Remove it when Dart 1.6 is old enough that we don't think anyone
         // will have these lockfiles anymore (issue 20703).
         lockFile = new LockFile.load(oldLockFilePath, cache.sources);
-      } on IOException catch (error) {
+      } on IOException {
         // If we couldn't read the lock file, it's not activated.
         dataError("No active package ${log.bold(name)}.");
       }
@@ -478,7 +476,6 @@ class GlobalPackages {
     }
 
     if (executables.isNotEmpty) {
-      var packages = pluralize("package", executables.length);
       var message = new StringBuffer("Binstubs exist for non-activated "
           "packages:\n");
       executables.forEach((package, executableNames) {
diff --git a/lib/src/http.dart b/lib/src/http.dart
index 3d0453a00ddbd42f60b4c2089b8290e2be1424fa..27e90a074e985a9940c54e3f01640df5c6e9278c 100644
--- a/lib/src/http.dart
+++ b/lib/src/http.dart
@@ -53,14 +53,6 @@ class _PubHttpClient extends http.BaseClient {
     request.headers[HttpHeaders.USER_AGENT] = "Dart pub ${sdk.version}";
     _logRequest(request);
 
-    // TODO(nweiz): remove this when issue 4061 is fixed.
-    var stackTrace;
-    try {
-      throw null;
-    } catch (_, localStackTrace) {
-      stackTrace = localStackTrace;
-    }
-
     var timeoutLength = HTTP_TIMEOUT;
     var timeoutString = request.headers.remove('Pub-Request-Timeout');
     if (timeoutString == 'None') {
@@ -244,7 +236,7 @@ Map parseJsonResponse(http.Response response) {
   var value;
   try {
     value = JSON.decode(response.body);
-  } on FormatException catch (e) {
+  } on FormatException {
     invalidServerResponse(response);
   }
   if (value is! Map) invalidServerResponse(response);
diff --git a/lib/src/io.dart b/lib/src/io.dart
index d3c779b33f5814017475ed00b5980e8186b61566..687157a81dfdb16dbda0c2e1cd7336cae4d4c02f 100644
--- a/lib/src/io.dart
+++ b/lib/src/io.dart
@@ -418,7 +418,7 @@ void renameDir(String from, String to) {
     log.io("Renaming directory $from to $to.");
     try {
       new Directory(from).renameSync(to);
-    } on IOException catch (error) {
+    } on IOException {
       // Ensure that [to] isn't left in an inconsistent state. See issue 12436.
       if (entryExists(to)) deleteEntry(to);
       rethrow;
@@ -1017,9 +1017,3 @@ class PubProcessResult {
 
   bool get success => exitCode == exit_codes.SUCCESS;
 }
-
-/// Gets a [Uri] for [uri], which can either already be one, or be a [String].
-Uri _getUri(uri) {
-  if (uri is Uri) return uri;
-  return Uri.parse(uri);
-}
diff --git a/lib/src/oauth2.dart b/lib/src/oauth2.dart
index 8de110c00b55f60e55446e2ee1c54cc1e0289d67..d9f068f608f4d6bdf398764c0404ebbca287bda8 100644
--- a/lib/src/oauth2.dart
+++ b/lib/src/oauth2.dart
@@ -83,7 +83,6 @@ void clearCredentials(SystemCache cache) {
 /// re-run [fn] if a recoverable authorization error is detected.
 Future withClient(SystemCache cache, Future fn(Client client)) {
   return _getClient(cache).then((client) {
-    var completer = new Completer();
     return fn(client).whenComplete(() {
       client.close();
       // Be sure to save the credentials even when an error happens.
diff --git a/lib/src/pubspec.dart b/lib/src/pubspec.dart
index c772402d8641f114c0fa2736ddb86cf8ae064fb2..13cce16e8583318ce3f61ca8121b01cc9d44a891 100644
--- a/lib/src/pubspec.dart
+++ b/lib/src/pubspec.dart
@@ -137,7 +137,6 @@ class Pubspec {
           fields.nodes['transformers'].span);
     }
 
-    var i = 0;
     _transformers = transformers.nodes.map((phase) {
       var phaseNodes = phase is YamlList ? phase.nodes : [phase];
       return phaseNodes.map((transformerNode) {
@@ -265,10 +264,6 @@ class Pubspec {
     }
 
     yaml.nodes.forEach((key, value) {
-      // Don't allow path separators or other stuff meaningful to the shell.
-      validateName(name, description) {
-      }
-
       if (key.value is! String) {
         _error('"executables" keys must be strings.', key.span);
       }
@@ -556,13 +551,6 @@ class Pubspec {
 
   /// Throws a [PubspecException] with the given message.
   void _error(String message, SourceSpan span) {
-    var name;
-    try {
-      name = this.name;
-    } on PubspecException catch (_) {
-      // [name] is null.
-    }
-
     throw new PubspecException(message, span);
   }
 }
diff --git a/lib/src/solver/backtracking_solver.dart b/lib/src/solver/backtracking_solver.dart
index a9b84e37184be33f42ba2b6ab18c6a423324693d..f746a56f3746158fa73999f28fa786cda81d3b78 100644
--- a/lib/src/solver/backtracking_solver.dart
+++ b/lib/src/solver/backtracking_solver.dart
@@ -395,7 +395,6 @@ class BacktrackingSolver {
       // Don't get stuck in cycles.
       if (visited.contains(package)) return;
       visited.add(package);
-      var depender = dependers[package].forEach(walk);
     }
 
     walk(dependency);
diff --git a/lib/src/solver/version_solver.dart b/lib/src/solver/version_solver.dart
index bc2dfb12e35258c6cd3b6d5f89ea91ac543606f5..0a71f0093080fde15ab144837d58406074806c3a 100644
--- a/lib/src/solver/version_solver.dart
+++ b/lib/src/solver/version_solver.dart
@@ -259,35 +259,6 @@ class PubspecCache {
 
     return results;
   }
-
-  /// This dumps the set of packages that were looked at by the solver to a
-  /// JSON map whose format matches the map passed to [testResolve] in the
-  /// version solver unit tests.
-  ///
-  /// If a real-world version solve is failing, this can be used to mirror that
-  /// data to build a regression test using mock packages.
-  String _debugDescribePackageGraph() {
-    var packages = {};
-    _pubspecs.forEach((id, pubspec) {
-      var deps = {};
-      packages["${id.name} ${id.version}"] = deps;
-
-      for (var dep in pubspec.dependencies) {
-        deps[dep.name] = dep.constraint.toString();
-      }
-    });
-
-    // Add in the packages that we know of but didn't need their pubspecs.
-    _versions.forEach((ref, versions) {
-      for (var id in versions) {
-        packages.putIfAbsent("${id.name} ${id.version}", () => {});
-      }
-    });
-
-    // TODO(rnystrom): Include dev dependencies and dependency overrides.
-
-    return JSON.encode(packages);
-  }
 }
 
 /// A reference from a depending package to a package that it depends on.
diff --git a/lib/src/validator/dependency.dart b/lib/src/validator/dependency.dart
index 88282fb0c68f210c160f102ab0633e1998cfb623..fe30ac5948aeb2b2606853ab83fc0788fc1888b4 100644
--- a/lib/src/validator/dependency.dart
+++ b/lib/src/validator/dependency.dart
@@ -11,7 +11,6 @@ import 'package:pub_semver/pub_semver.dart';
 import '../entrypoint.dart';
 import '../log.dart' as log;
 import '../package.dart';
-import '../utils.dart';
 import '../validator.dart';
 
 /// The range of all pub versions that don't support `^` version constraints.
diff --git a/lib/src/validator/license.dart b/lib/src/validator/license.dart
index 46ca112cb76ed1a628f9b753245cf2c632bbbf15..067765bb8d26de65eafc2f5ad4ddbaa4178d513b 100644
--- a/lib/src/validator/license.dart
+++ b/lib/src/validator/license.dart
@@ -9,7 +9,6 @@ import 'dart:async';
 import 'package:path/path.dart' as path;
 
 import '../entrypoint.dart';
-import '../utils.dart';
 import '../validator.dart';
 
 /// A validator that checks that a LICENSE-like file exists.
diff --git a/lib/src/validator/name.dart b/lib/src/validator/name.dart
index cdee078b2ede942718d57a2a4c8a66b108eb6327..94e2024f74d3a3df4da3b9ff627b4572fb551501 100644
--- a/lib/src/validator/name.dart
+++ b/lib/src/validator/name.dart
@@ -9,7 +9,6 @@ import 'dart:async';
 import 'package:path/path.dart' as path;
 
 import '../entrypoint.dart';
-import '../utils.dart';
 import '../validator.dart';
 
 /// Dart reserved words, from the Dart spec.
diff --git a/lib/src/validator/sdk_constraint.dart b/lib/src/validator/sdk_constraint.dart
index e409f52f5e6dedd18afa5faadcc800cdcdb54490..b192b0599f93daf418628e53cceb0aade3e79e71 100644
--- a/lib/src/validator/sdk_constraint.dart
+++ b/lib/src/validator/sdk_constraint.dart
@@ -6,11 +6,7 @@ library pub.validator.sdk_constraint;
 
 import 'dart:async';
 
-import 'package:pub_semver/pub_semver.dart';
-
 import '../entrypoint.dart';
-import '../log.dart' as log;
-import '../package.dart';
 import '../validator.dart';
 
 /// A validator that validates that a package's SDK constraint doesn't use the