diff --git a/lib/src/command/global_run.dart b/lib/src/command/global_run.dart
index 75f37f6..0b9dd14 100644
--- a/lib/src/command/global_run.dart
+++ b/lib/src/command/global_run.dart
@@ -13,28 +13,28 @@
 
 /// Handles the `global run` pub command.
 class GlobalRunCommand extends PubCommand {
-  String get name => "run";
+  String get name => 'run';
   String get description =>
-      "Run an executable from a globally activated package.\n"
+      'Run an executable from a globally activated package.\n'
       "NOTE: We are currently optimizing this command's startup time.";
-  String get invocation => "pub global run <package>:<executable> [args...]";
+  String get invocation => 'pub global run <package>:<executable> [args...]';
   bool get allowTrailingOptions => false;
 
   GlobalRunCommand() {
-    argParser.addFlag("checked",
-        abbr: "c", help: "Enable runtime type checks and assertions.");
-    argParser.addOption("mode", help: "Deprecated option", hide: true);
+    argParser.addFlag('enable-asserts', help: 'Enable assert statements.');
+    argParser.addFlag('checked', abbr: 'c', hide: true);
+    argParser.addOption('mode', help: 'Deprecated option', hide: true);
   }
 
   Future run() async {
     if (argResults.rest.isEmpty) {
-      usageException("Must specify an executable to run.");
+      usageException('Must specify an executable to run.');
     }
 
     var package;
     var executable = argResults.rest[0];
-    if (executable.contains(":")) {
-      var parts = split1(executable, ":");
+    if (executable.contains(':')) {
+      var parts = split1(executable, ':');
       package = parts[0];
       executable = parts[1];
     } else {
@@ -48,12 +48,12 @@
           'package.');
     }
 
-    if (argResults.wasParsed("mode")) {
-      log.warning("The --mode flag is deprecated and has no effect.");
+    if (argResults.wasParsed('mode')) {
+      log.warning('The --mode flag is deprecated and has no effect.');
     }
 
     var exitCode = await globals.runExecutable(package, executable, args,
-        checked: argResults["checked"]);
+        checked: argResults['enable-asserts'] || argResults['checked']);
     await flushThenExit(exitCode);
   }
 }
diff --git a/lib/src/command/run.dart b/lib/src/command/run.dart
index 9afe392..c017a96 100644
--- a/lib/src/command/run.dart
+++ b/lib/src/command/run.dart
@@ -14,20 +14,20 @@
 
 /// Handles the `run` pub command.
 class RunCommand extends PubCommand {
-  String get name => "run";
-  String get description => "Run an executable from a package.";
-  String get invocation => "pub run <executable> [args...]";
+  String get name => 'run';
+  String get description => 'Run an executable from a package.';
+  String get invocation => 'pub run <executable> [args...]';
   bool get allowTrailingOptions => false;
 
   RunCommand() {
-    argParser.addFlag("checked",
-        abbr: "c", help: "Enable runtime type checks and assertions.");
-    argParser.addOption("mode", help: "Deprecated option", hide: true);
+    argParser.addFlag('enable-asserts', help: 'Enable assert statements.');
+    argParser.addFlag('checked', abbr: 'c', hide: true);
+    argParser.addOption('mode', help: 'Deprecated option', hide: true);
   }
 
   Future run() async {
     if (argResults.rest.isEmpty) {
-      usageException("Must specify an executable to run.");
+      usageException('Must specify an executable to run.');
     }
 
     var package = entrypoint.root.name;
@@ -36,14 +36,14 @@
 
     // A command like "foo:bar" runs the "bar" script from the "foo" package.
     // If there is no colon prefix, default to the root package.
-    if (executable.contains(":")) {
-      var components = split1(executable, ":");
+    if (executable.contains(':')) {
+      var components = split1(executable, ':');
       package = components[0];
       executable = components[1];
 
       if (p.split(executable).length > 1) {
         usageException(
-            "Cannot run an executable in a subdirectory of a dependency.");
+            'Cannot run an executable in a subdirectory of a dependency.');
       }
     } else if (onlyIdentifierRegExp.hasMatch(executable)) {
       // "pub run foo" means the same thing as "pub run foo:foo" as long as
@@ -51,16 +51,16 @@
       package = executable;
     }
 
-    if (argResults.wasParsed("mode")) {
-      log.warning("The --mode flag is deprecated and has no effect.");
+    if (argResults.wasParsed('mode')) {
+      log.warning('The --mode flag is deprecated and has no effect.');
     }
 
     // The user may pass in an executable without an extension, but the file
     // to actually execute will always have one.
-    if (p.extension(executable) != ".dart") executable += ".dart";
+    if (p.extension(executable) != '.dart') executable += '.dart';
 
     var snapshotPath = p.join(
-        entrypoint.cachePath, "bin", package, "$executable.snapshot.dart2");
+        entrypoint.cachePath, 'bin', package, '$executable.snapshot.dart2');
 
     // Don't ever compile snapshots for mutable packages, since their code may
     // change later on.
@@ -69,7 +69,7 @@
             !entrypoint.packageGraph.isPackageMutable(package));
 
     var exitCode = await runExecutable(entrypoint, package, executable, args,
-        checked: argResults['checked'],
+        checked: argResults['enable-asserts'] || argResults['checked'],
         snapshotPath: useSnapshot ? snapshotPath : null,
         recompile: entrypoint.precompileExecutables);
     await flushThenExit(exitCode);
diff --git a/lib/src/executable.dart b/lib/src/executable.dart
index ced7de3..e381888 100644
--- a/lib/src/executable.dart
+++ b/lib/src/executable.dart
@@ -22,7 +22,7 @@
 ///
 /// Arguments from [args] will be passed to the spawned Dart application.
 ///
-/// If [checked] is true, the program is run in checked mode.
+/// If [checked] is true, the program is run with assertions enabled.
 ///
 /// If [packagesFile] is passed, it's used as the package config file path for
 /// the executable. Otherwise, `entrypoint.packagesFile` is used.
@@ -117,7 +117,7 @@
   return p.absolute(fullPath);
 }
 
-/// Like [runSnapshot], but runs [recompile] if [path] doesn't exist yet.
+/// Like [_runSnapshot], but runs [recompile] if [path] doesn't exist yet.
 ///
 /// Returns `null` if [path] doesn't exist and isn't generated by [recompile].
 Future<int> _runOrCompileSnapshot(String path, Iterable<String> args,
@@ -130,7 +130,7 @@
     if (!fileExists(path)) return null;
   }
 
-  return await runSnapshot(path, args,
+  return await _runSnapshot(path, args,
       recompile: recompile, packagesFile: packagesFile, checked: checked);
 }
 
@@ -141,12 +141,12 @@
 /// expected to regenerate a snapshot at [path], after which the snapshot will
 /// be re-run.
 ///
-/// If [checked] is set, runs the snapshot in checked mode.
+/// If [checked] is set, runs the snapshot with assertions enabled.
 ///
 /// Returns the snapshot's exit code.
 ///
 /// This doesn't do any validation of the snapshot's SDK version.
-Future<int> runSnapshot(String path, Iterable<String> args,
+Future<int> _runSnapshot(String path, Iterable<String> args,
     {Future<void> recompile(),
     String packagesFile,
     bool checked = false}) async {
diff --git a/lib/src/global_packages.dart b/lib/src/global_packages.dart
index e6fa3e0..58df59a 100644
--- a/lib/src/global_packages.dart
+++ b/lib/src/global_packages.dart
@@ -373,7 +373,7 @@
   /// recompiled if the SDK has been upgraded since it was first compiled and
   /// then run. Otherwise, it will be run from source.
   ///
-  /// If [checked] is true, the program is run in checked mode.
+  /// If [checked] is true, the program is run with assertions enabled.
   ///
   /// Returns the exit code from the executable.
   Future<int> runExecutable(
diff --git a/test/global/run/errors_if_outside_bin_test.dart b/test/global/run/errors_if_outside_bin_test.dart
index 9104ba7..43d3732 100644
--- a/test/global/run/errors_if_outside_bin_test.dart
+++ b/test/global/run/errors_if_outside_bin_test.dart
@@ -22,8 +22,8 @@
 Cannot run an executable in a subdirectory of a global package.
 
 Usage: pub global run <package>:<executable> [args...]
--h, --help            Print this usage information.
--c, --[no-]checked    Enable runtime type checks and assertions.
+-h, --help                   Print this usage information.
+    --[no-]enable-asserts    Enable assert statements.
 
 Run "pub help" to see global options.
 """, exitCode: exit_codes.USAGE);
diff --git a/test/global/run/missing_executable_arg_test.dart b/test/global/run/missing_executable_arg_test.dart
index e1f2b9c..614cf3f 100644
--- a/test/global/run/missing_executable_arg_test.dart
+++ b/test/global/run/missing_executable_arg_test.dart
@@ -10,14 +10,14 @@
 
 main() {
   test('fails if no executable was given', () {
-    return runPub(args: ["global", "run"], error: """
+    return runPub(args: ['global', 'run'], error: '''
             Must specify an executable to run.
 
             Usage: pub global run <package>:<executable> [args...]
-            -h, --help            Print this usage information.
-            -c, --[no-]checked    Enable runtime type checks and assertions.
+            -h, --help                   Print this usage information.
+                --[no-]enable-asserts    Enable assert statements.
 
             Run "pub help" to see global options.
-            """, exitCode: exit_codes.USAGE);
+            ''', exitCode: exit_codes.USAGE);
   });
 }
diff --git a/test/global/run/runs_script_in_checked_mode_test.dart b/test/global/run/runs_script_in_checked_mode_test.dart
index 86af689..b01b228 100644
--- a/test/global/run/runs_script_in_checked_mode_test.dart
+++ b/test/global/run/runs_script_in_checked_mode_test.dart
@@ -8,17 +8,18 @@
 import '../../test_pub.dart';
 
 main() {
-  test('runs a script in checked mode', () async {
+  test('runs a script with assertions enabled', () async {
     await servePackages((builder) {
-      builder.serve("foo", "1.0.0", contents: [
-        d.dir("bin", [d.file("script.dart", "main() { assert(false); }")])
+      builder.serve('foo', '1.0.0', contents: [
+        d.dir('bin', [d.file('script.dart', 'main() { assert(false); }')])
       ]);
     });
 
-    await runPub(args: ["global", "activate", "foo"]);
+    await runPub(args: ['global', 'activate', 'foo']);
 
-    var pub = await pubRun(global: true, args: ["--checked", "foo:script"]);
-    expect(pub.stderr, emitsThrough(contains("Failed assertion")));
+    var pub =
+        await pubRun(global: true, args: ['--enable-asserts', 'foo:script']);
+    expect(pub.stderr, emitsThrough(contains('Failed assertion')));
     await pub.shouldExit(255);
   });
 }
diff --git a/test/run/errors_if_no_executable_is_given_test.dart b/test/run/errors_if_no_executable_is_given_test.dart
index c7991eb..a33610b 100644
--- a/test/run/errors_if_no_executable_is_given_test.dart
+++ b/test/run/errors_if_no_executable_is_given_test.dart
@@ -13,14 +13,14 @@
   test('Errors if the executable does not exist.', () async {
     await d.dir(appPath, [d.appPubspec()]).create();
 
-    await runPub(args: ["run"], error: """
+    await runPub(args: ['run'], error: '''
 Must specify an executable to run.
 
 Usage: pub run <executable> [args...]
--h, --help            Print this usage information.
--c, --[no-]checked    Enable runtime type checks and assertions.
+-h, --help                   Print this usage information.
+    --[no-]enable-asserts    Enable assert statements.
 
 Run "pub help" to see global options.
-""", exitCode: exit_codes.USAGE);
+''', exitCode: exit_codes.USAGE);
   });
 }
diff --git a/test/run/errors_if_path_in_dependency_test.dart b/test/run/errors_if_path_in_dependency_test.dart
index 2037b2c..1c2b129 100644
--- a/test/run/errors_if_path_in_dependency_test.dart
+++ b/test/run/errors_if_path_in_dependency_test.dart
@@ -13,22 +13,22 @@
   test(
       'Errors if the executable is in a subdirectory in a '
       'dependency.', () async {
-    await d.dir("foo", [d.libPubspec("foo", "1.0.0")]).create();
+    await d.dir('foo', [d.libPubspec('foo', '1.0.0')]).create();
 
     await d.dir(appPath, [
       d.appPubspec({
-        "foo": {"path": "../foo"}
+        'foo': {'path': '../foo'}
       })
     ]).create();
 
-    await runPub(args: ["run", "foo:sub/dir"], error: """
+    await runPub(args: ['run', 'foo:sub/dir'], error: '''
 Cannot run an executable in a subdirectory of a dependency.
 
 Usage: pub run <executable> [args...]
--h, --help            Print this usage information.
--c, --[no-]checked    Enable runtime type checks and assertions.
+-h, --help                   Print this usage information.
+    --[no-]enable-asserts    Enable assert statements.
 
 Run "pub help" to see global options.
-""", exitCode: exit_codes.USAGE);
+''', exitCode: exit_codes.USAGE);
   });
 }
diff --git a/test/run/runs_the_script_in_checked_mode_test.dart b/test/run/runs_the_script_in_checked_mode_test.dart
index 228ce33..68ec58f 100644
--- a/test/run/runs_the_script_in_checked_mode_test.dart
+++ b/test/run/runs_the_script_in_checked_mode_test.dart
@@ -8,16 +8,16 @@
 import '../test_pub.dart';
 
 main() {
-  test('runs the script in checked mode with "--checked"', () async {
+  test('runs the script with assertions enabled', () async {
     await d.dir(appPath, [
       d.appPubspec(),
-      d.dir("bin", [d.file("script.dart", "main() { assert(false); }")])
+      d.dir('bin', [d.file('script.dart', 'main() { assert(false); }')])
     ]).create();
 
     await pubGet();
     await runPub(
-        args: ["run", "--checked", "bin/script"],
-        error: contains("Failed assertion"),
+        args: ['run', '--enable-asserts', 'bin/script'],
+        error: contains('Failed assertion'),
         exitCode: 255);
   });
 }
diff --git a/test/run/runs_the_script_in_unchecked_mode_test.dart b/test/run/runs_the_script_in_unchecked_mode_test.dart
index 9f69be2..588a8db 100644
--- a/test/run/runs_the_script_in_unchecked_mode_test.dart
+++ b/test/run/runs_the_script_in_unchecked_mode_test.dart
@@ -7,21 +7,21 @@
 import '../descriptor.dart' as d;
 import '../test_pub.dart';
 
-const SCRIPT = """
+const SCRIPT = '''
 main() {
   assert(false);
   print("no checks");
 }
-""";
+''';
 
 main() {
-  test('runs the script in unchecked mode by default', () async {
+  test('runs the script without assertions by default', () async {
     await d.dir(appPath, [
       d.appPubspec(),
-      d.dir("bin", [d.file("script.dart", SCRIPT)])
+      d.dir('bin', [d.file('script.dart', SCRIPT)])
     ]).create();
 
     await pubGet();
-    await runPub(args: ["run", "bin/script"], output: contains("no checks"));
+    await runPub(args: ['run', 'bin/script'], output: contains('no checks'));
   });
 }
