diff --git a/packages/flutter_tools/lib/src/android/gradle.dart b/packages/flutter_tools/lib/src/android/gradle.dart
index 23e41c2..39be388 100644
--- a/packages/flutter_tools/lib/src/android/gradle.dart
+++ b/packages/flutter_tools/lib/src/android/gradle.dart
@@ -208,7 +208,7 @@
 ///
 /// * [project] is typically [FlutterProject.current()].
 /// * [androidBuildInfo] is the build configuration.
-/// * [target] is the target dart entrypoint. Typically, `lib/main.dart`.
+/// * [target] is the target dart entry point. Typically, `lib/main.dart`.
 /// * If [isBuildingBundle] is `true`, then the output artifact is an `*.aab`,
 ///   otherwise the output artifact is an `*.apk`.
 /// * The plugins are built as AARs if [shouldBuildPluginAsAar] is `true`. This isn't set by default
diff --git a/packages/flutter_tools/lib/src/asset.dart b/packages/flutter_tools/lib/src/asset.dart
index 1a2503c..e6216c7 100644
--- a/packages/flutter_tools/lib/src/asset.dart
+++ b/packages/flutter_tools/lib/src/asset.dart
@@ -257,11 +257,11 @@
 
   final String baseDir;
 
-  /// A platform-independent Uri where this asset can be found on disk on the
+  /// A platform-independent URL where this asset can be found on disk on the
   /// host system relative to [baseDir].
   final Uri relativeUri;
 
-  /// A platform-independent Uri representing the entry for the asset manifest.
+  /// A platform-independent URL representing the entry for the asset manifest.
   final Uri entryUri;
 
   File get assetFile {
diff --git a/packages/flutter_tools/lib/src/build_info.dart b/packages/flutter_tools/lib/src/build_info.dart
index 690a9c8..ff66917 100644
--- a/packages/flutter_tools/lib/src/build_info.dart
+++ b/packages/flutter_tools/lib/src/build_info.dart
@@ -173,7 +173,7 @@
   /// other development features.
   bool get isRelease => releaseModes.contains(this);
 
-  /// Whether this mode is using the jit runtime.
+  /// Whether this mode is using the JIT runtime.
   bool get isJit => jitModes.contains(this);
 
   /// Whether this mode is using the precompiled runtime.
diff --git a/packages/flutter_tools/lib/src/build_runner/build_script.dart b/packages/flutter_tools/lib/src/build_runner/build_script.dart
index e4ca378..1b783de 100644
--- a/packages/flutter_tools/lib/src/build_runner/build_script.dart
+++ b/packages/flutter_tools/lib/src/build_runner/build_script.dart
@@ -175,14 +175,14 @@
       defaultGenerateFor: const InputSet()),
 ];
 
-/// The entrypoint to this build script.
+/// The entry point to this build script.
 Future<void> main(List<String> args, [SendPort sendPort]) async {
   core.overrideGeneratedOutputDirectory('flutter_web');
   final int result = await build_runner.run(args, builders);
   sendPort?.send(result);
 }
 
-/// A ddc-only entrypoint builder that respects the Flutter target flag.
+/// A ddc-only entry point builder that respects the Flutter target flag.
 class FlutterWebTestEntrypointBuilder implements Builder {
   const FlutterWebTestEntrypointBuilder();
 
@@ -208,7 +208,7 @@
   }
 }
 
-/// A ddc-only entrypoint builder that respects the Flutter target flag.
+/// A ddc-only entry point builder that respects the Flutter target flag.
 class FlutterWebEntrypointBuilder implements Builder {
   const FlutterWebEntrypointBuilder(this.release, this.profile, this.flutterWebSdk);
 
@@ -237,7 +237,7 @@
   }
 }
 
-/// Bootstraps the test entrypoint.
+/// Bootstraps the test entry point.
 class FlutterWebTestBootstrapBuilder implements Builder {
   const FlutterWebTestBootstrapBuilder();
 
@@ -347,7 +347,7 @@
   }
 }
 
-/// A shell builder which generates the web specific entrypoint.
+/// A shell builder which generates the web specific entry point.
 class FlutterWebShellBuilder implements Builder {
   const FlutterWebShellBuilder({this.hasPlugins = false, this.initializePlatform = true});
 
@@ -403,7 +403,7 @@
   };
 }
 
-/// Returns whether or not [dartId] is an app entrypoint (basically, whether
+/// Returns whether or not [dartId] is an app entry point (basically, whether
 /// or not it has a `main` function).
 Future<bool> _isAppEntryPoint(AssetId dartId, AssetReader reader) async {
   assert(dartId.extension == '.dart');
diff --git a/packages/flutter_tools/lib/src/build_runner/web_compilation_delegate.dart b/packages/flutter_tools/lib/src/build_runner/web_compilation_delegate.dart
index 3a80cc6..5a5a482 100644
--- a/packages/flutter_tools/lib/src/build_runner/web_compilation_delegate.dart
+++ b/packages/flutter_tools/lib/src/build_runner/web_compilation_delegate.dart
@@ -94,7 +94,7 @@
   }
 }
 
-/// Handles mapping a single root file scheme to a multiroot scheme.
+/// Handles mapping a single root file scheme to a multi-root scheme.
 ///
 /// This allows one build_runner build to read the output from a previous
 /// isolated build.
diff --git a/packages/flutter_tools/lib/src/build_runner/web_fs.dart b/packages/flutter_tools/lib/src/build_runner/web_fs.dart
index ec2645a..8fb6260 100644
--- a/packages/flutter_tools/lib/src/build_runner/web_fs.dart
+++ b/packages/flutter_tools/lib/src/build_runner/web_fs.dart
@@ -71,7 +71,7 @@
   bool enableDebugExtension,
 });
 
-/// A function with the same signatuure as [WebFs.start].
+/// A function with the same signature as [WebFs.start].
 typedef WebFsFactory = Future<WebFs> Function({
   @required String target,
   @required FlutterProject flutterProject,
@@ -100,7 +100,7 @@
     this._dartDefines,
   );
 
-  /// The server uri.
+  /// The server URL.
   final String uri;
 
   final HttpServer _server;
diff --git a/packages/flutter_tools/lib/src/build_system/build_system.dart b/packages/flutter_tools/lib/src/build_system/build_system.dart
index 9677170a..5d38251 100644
--- a/packages/flutter_tools/lib/src/build_system/build_system.dart
+++ b/packages/flutter_tools/lib/src/build_system/build_system.dart
@@ -29,7 +29,7 @@
 /// A reasonable amount of files to open at the same time.
 ///
 /// This number is somewhat arbitrary - it is difficult to detect whether
-/// or not we'll run out of file descriptiors when using async dart:io
+/// or not we'll run out of file descriptors when using async dart:io
 /// APIs.
 const int kMaxOpenFiles = 64;
 
@@ -83,7 +83,7 @@
 ///
 /// ## Code review
 ///
-/// ### Targes should only depend on files that are provided as inputs
+/// ### Targets should only depend on files that are provided as inputs
 ///
 /// Example: gen_snapshot must be provided as an input to the aot_elf
 /// build steps, even though it isn't a source file. This ensures that changes
diff --git a/packages/flutter_tools/lib/src/build_system/source.dart b/packages/flutter_tools/lib/src/build_system/source.dart
index 0174461..44e54a2 100644
--- a/packages/flutter_tools/lib/src/build_system/source.dart
+++ b/packages/flutter_tools/lib/src/build_system/source.dart
@@ -81,9 +81,9 @@
         .map((String path) => fs.file(path));
   }
 
-  /// Visit a [Source] which contains a file uri.
+  /// Visit a [Source] which contains a file URL.
   ///
-  /// The uri may include constants defined in an [Environment]. If
+  /// The URL may include constants defined in an [Environment]. If
   /// [optional] is true, the file is not required to exist. In this case, it
   /// is never resolved as an input.
   void visitPattern(String pattern, bool optional) {
@@ -182,7 +182,7 @@
 
 /// A description of an input or output of a [Target].
 abstract class Source {
-  /// This source is a file-uri which contains some references to magic
+  /// This source is a file URL which contains some references to magic
   /// environment variables.
   const factory Source.pattern(String pattern, { bool optional }) = _PatternSource;
   /// The source is provided by an [Artifact].
diff --git a/packages/flutter_tools/lib/src/build_system/targets/dart.dart b/packages/flutter_tools/lib/src/build_system/targets/dart.dart
index e03a377..6c9b196 100644
--- a/packages/flutter_tools/lib/src/build_system/targets/dart.dart
+++ b/packages/flutter_tools/lib/src/build_system/targets/dart.dart
@@ -42,7 +42,7 @@
 
 /// Alternative scheme for file URIs.
 ///
-/// May be used along with [kFileSystemRoots] to support a multiroot
+/// May be used along with [kFileSystemRoots] to support a multi-root
 /// filesystem.
 const String kFileSystemScheme = 'FileSystemScheme';
 
@@ -62,7 +62,7 @@
 /// The other supported value is armv7, the 32-bit iOS architecture.
 const String kIosArchs = 'IosArchs';
 
-/// Copies the prebuilt flutter bundle.
+/// Copies the pre-built flutter bundle.
 // This is a one-off rule for implementing build bundle in terms of assemble.
 class CopyFlutterBundle extends Target {
   const CopyFlutterBundle();
@@ -118,7 +118,7 @@
   ];
 }
 
-/// Copies the prebuilt flutter bundle for release mode.
+/// Copies the pre-built flutter bundle for release mode.
 class ReleaseCopyFlutterBundle extends CopyFlutterBundle {
   const ReleaseCopyFlutterBundle();
 
@@ -331,7 +331,7 @@
   ];
 }
 
-/// Copies the prebuilt flutter aot bundle.
+/// Copies the pre-built flutter aot bundle.
 // This is a one-off rule for implementing build aot in terms of assemble.
 abstract class CopyFlutterAotBundle extends Target {
   const CopyFlutterAotBundle();
diff --git a/packages/flutter_tools/lib/src/build_system/targets/ios.dart b/packages/flutter_tools/lib/src/build_system/targets/ios.dart
index 3f52166..140ec2b 100644
--- a/packages/flutter_tools/lib/src/build_system/targets/ios.dart
+++ b/packages/flutter_tools/lib/src/build_system/targets/ios.dart
@@ -18,7 +18,7 @@
 /// Supports compiling a dart kernel file to an assembly file.
 ///
 /// If more than one iOS arch is provided, then this rule will
-/// produce a univeral binary.
+/// produce a universal binary.
 abstract class AotAssemblyBase extends Target {
   const AotAssemblyBase();
 
diff --git a/packages/flutter_tools/lib/src/build_system/targets/web.dart b/packages/flutter_tools/lib/src/build_system/targets/web.dart
index 531c71e..5ebc34a 100644
--- a/packages/flutter_tools/lib/src/build_system/targets/web.dart
+++ b/packages/flutter_tools/lib/src/build_system/targets/web.dart
@@ -26,7 +26,7 @@
 /// Valid values are O1 (lowest, profile default) to O4 (highest, release default).
 const String kDart2jsOptimization = 'Dart2jsOptimization';
 
-/// Generates an entrypoint for a web target.
+/// Generates an entry point for a web target.
 class WebEntrypointTarget extends Target {
   const WebEntrypointTarget();
 
@@ -94,7 +94,7 @@
   }
 }
 
-/// Compiles a web entrypoint with dart2js.
+/// Compiles a web entry point with dart2js.
 class Dart2JSTarget extends Target {
   const Dart2JSTarget();
 
diff --git a/packages/flutter_tools/lib/src/codegen.dart b/packages/flutter_tools/lib/src/codegen.dart
index a85bd86..ea50d8b 100644
--- a/packages/flutter_tools/lib/src/codegen.dart
+++ b/packages/flutter_tools/lib/src/codegen.dart
@@ -33,7 +33,7 @@
 abstract class CodeGenerator {
   const CodeGenerator();
 
-  /// Starts a persistent code generting daemon.
+  /// Starts a persistent code generating daemon.
   ///
   /// The defines of the daemon command are the arguments required in the
   /// flutter_build kernel builder.
@@ -44,7 +44,7 @@
   Future<void> generateBuildScript(FlutterProject flutterProject);
 
   /// Create generated packages file which adds a multi-root scheme to the user's
-  /// project directory. Currently we only replace the root package with a multiroot
+  /// project directory. Currently we only replace the root package with a multi-root
   /// scheme. To support codegen on arbitrary packages we would need to do
   /// this for each dependency.
   void updatePackages(FlutterProject flutterProject) {
@@ -83,7 +83,7 @@
 /// An implementation of the [KernelCompiler] which delegates to build_runner.
 ///
 /// Only a subset of the arguments provided to the [KernelCompiler] are
-/// supported here. Using the build pipeline implies a fixed multiroot
+/// supported here. Using the build pipeline implies a fixed multi-root
 /// filesystem and requires a pubspec.
 class CodeGeneratingKernelCompiler implements KernelCompiler {
   const CodeGeneratingKernelCompiler();
diff --git a/packages/flutter_tools/lib/src/commands/build_aar.dart b/packages/flutter_tools/lib/src/commands/build_aar.dart
index b59518e..bd6e398 100644
--- a/packages/flutter_tools/lib/src/commands/build_aar.dart
+++ b/packages/flutter_tools/lib/src/commands/build_aar.dart
@@ -111,7 +111,7 @@
     return null;
   }
 
-  /// Returns the [FlutterProject] which is determinated from the remaining command-line
+  /// Returns the [FlutterProject] which is determined from the remaining command-line
   /// argument if any or the current working directory.
   FlutterProject _getProject() {
     if (argResults.rest.isEmpty) {
diff --git a/packages/flutter_tools/lib/src/commands/train.dart b/packages/flutter_tools/lib/src/commands/train.dart
index 9bd0be5..4eb9a88 100644
--- a/packages/flutter_tools/lib/src/commands/train.dart
+++ b/packages/flutter_tools/lib/src/commands/train.dart
@@ -4,7 +4,7 @@
 
 import '../runner/flutter_command.dart';
 
-/// This command is run when generating the app-jit snapshot for the tool, so it cannot access the Cache
+/// This command is run when generating the app-JIT snapshot for the tool, so it cannot access the Cache
 /// or any artifacts that haven't been downloaded yet.
 class TrainingCommand extends FlutterCommand {
   @override
diff --git a/packages/flutter_tools/lib/src/commands/update_packages.dart b/packages/flutter_tools/lib/src/commands/update_packages.dart
index ed28878..3e8aee9 100644
--- a/packages/flutter_tools/lib/src/commands/update_packages.dart
+++ b/packages/flutter_tools/lib/src/commands/update_packages.dart
@@ -1207,7 +1207,7 @@
   /// dependencies section). We ignore if something is a dependency or
   /// dev_dependency (pub won't use different versions for those two).
   ///
-  /// We then parse out the package name, version number, and subdependencies for
+  /// We then parse out the package name, version number, and sub-dependencies for
   /// each entry, and store than in our _versions and _dependencyTree fields
   /// above.
   String fill(String message) {
diff --git a/packages/flutter_tools/lib/src/dart/package_map.dart b/packages/flutter_tools/lib/src/dart/package_map.dart
index 862d256..cee8cab 100644
--- a/packages/flutter_tools/lib/src/dart/package_map.dart
+++ b/packages/flutter_tools/lib/src/dart/package_map.dart
@@ -46,7 +46,7 @@
   /// Returns the path to [packageUri].
   String pathForPackage(Uri packageUri) => uriForPackage(packageUri).path;
 
-  /// Returns the path to [packageUri] as Uri.
+  /// Returns the path to [packageUri] as URL.
   Uri uriForPackage(Uri packageUri) {
     assert(packageUri.scheme == 'package');
     final List<String> pathSegments = packageUri.pathSegments.toList();
diff --git a/packages/flutter_tools/lib/src/devfs.dart b/packages/flutter_tools/lib/src/devfs.dart
index 9bba2d7..129c09b 100644
--- a/packages/flutter_tools/lib/src/devfs.dart
+++ b/packages/flutter_tools/lib/src/devfs.dart
@@ -534,5 +534,5 @@
   }
 }
 
-/// Converts a platform-specific file path to a platform-independent Uri path.
+/// Converts a platform-specific file path to a platform-independent URL path.
 String _asUriPath(String filePath) => fs.path.toUri(filePath).path + '/';
diff --git a/packages/flutter_tools/lib/src/device.dart b/packages/flutter_tools/lib/src/device.dart
index 7e8e4e5..46b65a5 100644
--- a/packages/flutter_tools/lib/src/device.dart
+++ b/packages/flutter_tools/lib/src/device.dart
@@ -158,7 +158,7 @@
 
   /// Find and return a list of devices based on the current project and environment.
   ///
-  /// Returns a list of deviecs specified by the user.
+  /// Returns a list of devices specified by the user.
   ///
   /// * If the user specified '-d all', then return all connected devices which
   /// support the current project, except for fuchsia and web.
@@ -221,7 +221,7 @@
 
   /// Returns whether the device is supported for the project.
   ///
-  /// This exists to allow the check to be overriden for google3 clients.
+  /// This exists to allow the check to be overridden for google3 clients.
   bool isDeviceSupportedForProject(Device device, FlutterProject flutterProject) {
     return device.isSupportedForProject(flutterProject);
   }
@@ -545,7 +545,7 @@
   final int deviceVmServicePort;
   final String port;
   final String hostname;
-  /// A file where the vmservice uri should be written after the application is started.
+  /// A file where the vmservice URL should be written after the application is started.
   final String vmserviceOutFile;
 
   bool get hasObservatoryPort => hostVmServicePort != null;
diff --git a/packages/flutter_tools/lib/src/doctor.dart b/packages/flutter_tools/lib/src/doctor.dart
index 3150b23..82f61d5 100644
--- a/packages/flutter_tools/lib/src/doctor.dart
+++ b/packages/flutter_tools/lib/src/doctor.dart
@@ -385,11 +385,11 @@
 
   List<ValidationResult> _subResults;
 
-  /// Subvalidator results.
+  /// Sub-validator results.
   ///
-  /// To avoid losing information when results are merged, the subresults are
+  /// To avoid losing information when results are merged, the sub-results are
   /// cached on this field when they are available. The results are in the same
-  /// order as the subvalidator list.
+  /// order as the sub-validator list.
   List<ValidationResult> get subResults => _subResults;
 
   @override
diff --git a/packages/flutter_tools/lib/src/features.dart b/packages/flutter_tools/lib/src/features.dart
index b5b45e7..de23ec3 100644
--- a/packages/flutter_tools/lib/src/features.dart
+++ b/packages/flutter_tools/lib/src/features.dart
@@ -261,7 +261,7 @@
 
   /// Whether the feature is available on this channel.
   ///
-  /// If not provded, defaults to `false`. This implies that the feature
+  /// If not provided, defaults to `false`. This implies that the feature
   /// cannot be enabled even by the settings below.
   final bool available;
 
diff --git a/packages/flutter_tools/lib/src/flutter_manifest.dart b/packages/flutter_tools/lib/src/flutter_manifest.dart
index 90029ae..ca33963 100644
--- a/packages/flutter_tools/lib/src/flutter_manifest.dart
+++ b/packages/flutter_tools/lib/src/flutter_manifest.dart
@@ -319,7 +319,7 @@
 
 /// This method should be kept in sync with the schema in
 /// `$FLUTTER_ROOT/packages/flutter_tools/schema/pubspec_yaml.json`,
-/// but avoid introducing depdendencies on packages for simple validation.
+/// but avoid introducing dependencies on packages for simple validation.
 bool _validate(YamlMap manifest) {
   final List<String> errors = <String>[];
   for (final MapEntry<dynamic, dynamic> kvp in manifest.entries) {
diff --git a/packages/flutter_tools/lib/src/fuchsia/fuchsia_kernel_compiler.dart b/packages/flutter_tools/lib/src/fuchsia/fuchsia_kernel_compiler.dart
index b0572e6..fe8673f 100644
--- a/packages/flutter_tools/lib/src/fuchsia/fuchsia_kernel_compiler.dart
+++ b/packages/flutter_tools/lib/src/fuchsia/fuchsia_kernel_compiler.dart
@@ -16,7 +16,7 @@
 /// This is a simple wrapper around the custom kernel compiler from the Fuchsia
 /// SDK.
 class FuchsiaKernelCompiler {
-  /// Compiles the [fuchsiaProject] with entrypoint [target] to a collection of
+  /// Compiles the [fuchsiaProject] with entry point [target] to a collection of
   /// .dilp files (consisting of the app split along package: boundaries, but
   /// the Flutter tool should make no use of that fact), and a manifest that
   /// refers to them.
diff --git a/packages/flutter_tools/lib/src/fuchsia/fuchsia_pm.dart b/packages/flutter_tools/lib/src/fuchsia/fuchsia_pm.dart
index 80ad58e..9cfaf06 100644
--- a/packages/flutter_tools/lib/src/fuchsia/fuchsia_pm.dart
+++ b/packages/flutter_tools/lib/src/fuchsia/fuchsia_pm.dart
@@ -99,9 +99,9 @@
     ]);
   }
 
-  /// Spawns an http server in a new process for serving Fuchisa packages.
+  /// Spawns an http server in a new process for serving Fuchsia packages.
   ///
-  /// The arguemnt [repoPath] should have previously been an arguemnt to
+  /// The argument [repoPath] should have previously been an argument to
   /// [newrepo]. The [host] should be the host reported by
   /// [FuchsiaDevFinder.resolve], and [port] should be an unused port for the
   /// http server to bind.
@@ -187,13 +187,13 @@
 
   Process _process;
 
-  /// The url that can be used by the device to access this package server.
+  /// The URL that can be used by the device to access this package server.
   String get url => 'http://$_host:$_port';
 
   // The name used to reference the server by fuchsia-pkg:// urls.
   final String name;
 
-  /// Usees [FuchiaPM.newrepo] and [FuchsiaPM.serve] to spin up a new Fuchsia
+  /// Uses [FuchiaPM.newrepo] and [FuchsiaPM.serve] to spin up a new Fuchsia
   /// package server.
   ///
   /// Returns false if the repo could not be created or the server could not
diff --git a/packages/flutter_tools/lib/src/fuchsia/tiles_ctl.dart b/packages/flutter_tools/lib/src/fuchsia/tiles_ctl.dart
index 59ed24a..3a677f7 100644
--- a/packages/flutter_tools/lib/src/fuchsia/tiles_ctl.dart
+++ b/packages/flutter_tools/lib/src/fuchsia/tiles_ctl.dart
@@ -52,7 +52,7 @@
     return result.exitCode == 0;
   }
 
-  /// Returns a mapping of tile keys to app urls.
+  /// Returns a mapping of tile keys to app URLs.
   ///
   /// Returns an empty mapping if tiles_ctl is running but no apps are running.
   /// Returns null if tiles_ctl is not running.
@@ -86,7 +86,7 @@
   ///
   /// The app is passed the arguments in [args]. Flutter apps receive these
   /// arguments as arguments to `main()`. [url] should be formatted as a
-  /// Fuchsia-style package url, e.g.:
+  /// Fuchsia-style package URL, e.g.:
   ///     fuchsia-pkg://fuchsia.com/flutter_gallery#meta/flutter_gallery.cmx
   /// Returns true on success and false on failure.
   Future<bool> add(FuchsiaDevice device, String url, List<String> args) async {
diff --git a/packages/flutter_tools/lib/src/ios/devices.dart b/packages/flutter_tools/lib/src/ios/devices.dart
index 97b0380..b11a627 100644
--- a/packages/flutter_tools/lib/src/ios/devices.dart
+++ b/packages/flutter_tools/lib/src/ios/devices.dart
@@ -629,9 +629,9 @@
   set idevicesyslogProcess(Process process) => _idevicesyslogProcess = process;
   Process _idevicesyslogProcess;
 
-  // Returns a stateful line handler to properly capture multi-line output.
+  // Returns a stateful line handler to properly capture multiline output.
   //
-  // For multi-line log messages, any line after the first is logged without
+  // For multiline log messages, any line after the first is logged without
   // any specific prefix. To properly capture those, we enter "printing" mode
   // after matching a log line from the runner. When in printing mode, we print
   // all lines until we find the start of another log message (from any app).
diff --git a/packages/flutter_tools/lib/src/project.dart b/packages/flutter_tools/lib/src/project.dart
index 80575bf..6751ab6 100644
--- a/packages/flutter_tools/lib/src/project.dart
+++ b/packages/flutter_tools/lib/src/project.dart
@@ -893,7 +893,7 @@
   Future<void> ensureReadyForPlatformSpecificTooling() async {}
 }
 
-/// The Fuchisa sub project
+/// The Fuchsia sub project
 class FuchsiaProject {
   FuchsiaProject._(this.project);
 
diff --git a/packages/flutter_tools/lib/src/protocol_discovery.dart b/packages/flutter_tools/lib/src/protocol_discovery.dart
index 796203d..6a04230 100644
--- a/packages/flutter_tools/lib/src/protocol_discovery.dart
+++ b/packages/flutter_tools/lib/src/protocol_discovery.dart
@@ -63,20 +63,20 @@
   StreamSubscription<String> _deviceLogSubscription;
   _BufferedStreamController<Uri> _uriStreamController;
 
-  /// The discovered service URI.
+  /// The discovered service URL.
   /// Use [uris] instead.
   // TODO(egarciad): replace `uri` for `uris`.
   Future<Uri> get uri {
     return uris.first;
   }
 
-  /// The discovered service URIs.
+  /// The discovered service URLs.
   ///
-  /// When a new observatory URI is available in [logReader],
-  /// the URIs are forwarded at most once every [throttleDuration].
+  /// When a new observatory URL: is available in [logReader],
+  /// the URLs are forwarded at most once every [throttleDuration].
   ///
   /// Port forwarding is only attempted when this is invoked,
-  /// for each observatory URI in the stream.
+  /// for each observatory URL in the stream.
   Stream<Uri> get uris {
     return _uriStreamController.stream
       .transform(_throttle<Uri>(
diff --git a/packages/flutter_tools/lib/src/reporting/usage.dart b/packages/flutter_tools/lib/src/reporting/usage.dart
index d352632..b08cada 100644
--- a/packages/flutter_tools/lib/src/reporting/usage.dart
+++ b/packages/flutter_tools/lib/src/reporting/usage.dart
@@ -8,7 +8,7 @@
 
 /// The collection of custom dimensions understood by the analytics backend.
 /// When adding to this list, first ensure that the custom dimension is
-/// defined in the backend, or will be defined shortly after the relevent PR
+/// defined in the backend, or will be defined shortly after the relevant PR
 /// lands.
 enum CustomDimensions {
   sessionHostOsDetails,  // cd1
@@ -92,7 +92,7 @@
   /// Whether this is the first run of the tool.
   bool get isFirstRun;
 
-  /// Whether analytics reporting should be supressed.
+  /// Whether analytics reporting should be suppressed.
   bool get suppressAnalytics;
 
   /// Suppress analytics for this session.
diff --git a/packages/flutter_tools/lib/src/test/flutter_platform.dart b/packages/flutter_tools/lib/src/test/flutter_platform.dart
index 0fed5a3..14f7d43 100644
--- a/packages/flutter_tools/lib/src/test/flutter_platform.dart
+++ b/packages/flutter_tools/lib/src/test/flutter_platform.dart
@@ -293,7 +293,7 @@
 
   /// The test compiler produces dill files for each test main.
   ///
-  /// To speed up compilation, each compile is intialized from an existing
+  /// To speed up compilation, each compile is initialized from an existing
   /// dill file from previous runs, if possible.
   TestCompiler compiler;
 
diff --git a/packages/flutter_tools/lib/src/web/bootstrap.dart b/packages/flutter_tools/lib/src/web/bootstrap.dart
index 877444d..cbbfc53 100644
--- a/packages/flutter_tools/lib/src/web/bootstrap.dart
+++ b/packages/flutter_tools/lib/src/web/bootstrap.dart
@@ -11,7 +11,7 @@
 /// actual main.dart file.
 ///
 /// This file is served when the browser requests "main.dart.js" in debug mode,
-/// and is responsible for bootstraping the RequireJS modules and attaching
+/// and is responsible for bootstrapping the RequireJS modules and attaching
 /// the hot reload hooks.
 String generateBootstrapScript({
   @required String requireUrl,
diff --git a/packages/flutter_tools/lib/src/web/compile.dart b/packages/flutter_tools/lib/src/web/compile.dart
index 4f40ccc..3995fa8 100644
--- a/packages/flutter_tools/lib/src/web/compile.dart
+++ b/packages/flutter_tools/lib/src/web/compile.dart
@@ -81,7 +81,7 @@
   /// Returns whether or not the build was successful.
   ///
   /// `release` controls whether we build the bundle for dartdevc or only
-  /// the entrypoints for dart2js to later take over.
+  /// the entry points for dart2js to later take over.
   Future<bool> initialize({
     @required Directory projectDirectory,
     @required String projectName,
diff --git a/packages/flutter_tools/lib/src/windows/msbuild_utils.dart b/packages/flutter_tools/lib/src/windows/msbuild_utils.dart
index db841ae..ce12f3a 100644
--- a/packages/flutter_tools/lib/src/windows/msbuild_utils.dart
+++ b/packages/flutter_tools/lib/src/windows/msbuild_utils.dart
@@ -7,7 +7,7 @@
 import '../base/file_system.dart';
 
 /// Writes a property sheet (.props) file to expose all of the key/value
-/// pairs in [variables] as enivornment variables.
+/// pairs in [variables] as environment variables.
 void writePropertySheet(File propertySheetFile, Map<String, String> variables) {
   final xml.XmlBuilder builder = xml.XmlBuilder();
   builder.processing('xml', 'version="1.0" encoding="utf-8"');
diff --git a/packages/flutter_tools/lib/src/windows/visual_studio.dart b/packages/flutter_tools/lib/src/windows/visual_studio.dart
index 0c00751..99db91e 100644
--- a/packages/flutter_tools/lib/src/windows/visual_studio.dart
+++ b/packages/flutter_tools/lib/src/windows/visual_studio.dart
@@ -83,7 +83,7 @@
   /// The names of the components within the workload that must be installed.
   ///
   /// If there is an existing Visual Studio installation, the major version
-  /// should be provided here, as the descriptions of some componets differ
+  /// should be provided here, as the descriptions of some components differ
   /// from version to version.
   List<String> necessaryComponentDescriptions([int visualStudioMajorVersion]) {
     return _requiredComponents(visualStudioMajorVersion).values.toList();
@@ -118,7 +118,7 @@
     'vswhere.exe',
   );
 
-  /// Components for use with vswhere requriements.
+  /// Components for use with vswhere requirements.
   ///
   /// Maps from component IDs to description in the installer UI.
   /// See https://docs.microsoft.com/en-us/visualstudio/install/workload-and-component-ids
@@ -283,7 +283,7 @@
   /// Studio.
   ///
   /// If there's a version that has all the required components, that
-  /// will be returned, otherwise returs the lastest installed version (if any).
+  /// will be returned, otherwise returns the latest installed version (if any).
   Map<String, dynamic> get _bestVisualStudioDetails {
     if (_usableVisualStudioDetails.isNotEmpty) {
       return _usableVisualStudioDetails;
