diff --git a/docs/reference.md b/docs/reference.md
index 1601d01..c9dba3d 100644
--- a/docs/reference.md
+++ b/docs/reference.md
@@ -112,7 +112,6 @@
     *   [defines: [string list] C preprocessor defines.](#var_defines)
     *   [depfile: [string] File name for input dependencies for actions.](#var_depfile)
     *   [deps: [label list] Private linked dependencies.](#var_deps)
-    *   [edition: [string] The rustc edition to use in compiliation.](#var_edition)
     *   [friend: [label pattern list] Allow targets to include private headers.](#var_friend)
     *   [include_dirs: [directory list] Additional include directories.](#var_include_dirs)
     *   [inputs: [file list] Additional compile-time dependencies.](#var_inputs)
@@ -1561,7 +1560,7 @@
   General: check_includes, configs, data, friend, inputs, metadata,
            output_name, output_extension, public, sources, testonly,
            visibility
-  Rust variables: aliased_deps, crate_root, crate_name, edition
+  Rust variables: aliased_deps, crate_root, crate_name
 ```
 ### <a name="func_generated_file"></a>**generated_file**: Declare a generated_file target.
 
@@ -1755,7 +1754,7 @@
   General: check_includes, configs, data, friend, inputs, metadata,
            output_name, output_extension, public, sources, testonly,
            visibility
-  Rust variables: aliased_deps, crate_root, crate_name, crate_type, edition
+  Rust variables: aliased_deps, crate_root, crate_name, crate_type
 ```
 ### <a name="func_rust_library"></a>**rust_library**: Declare a Rust library target.
 
@@ -1787,7 +1786,7 @@
   General: check_includes, configs, data, friend, inputs, metadata,
            output_name, output_extension, public, sources, testonly,
            visibility
-  Rust variables: aliased_deps, crate_root, crate_name, edition
+  Rust variables: aliased_deps, crate_root, crate_name
 ```
 ### <a name="func_shared_library"></a>**shared_library**: Declare a shared library target.
 
@@ -1821,7 +1820,7 @@
   General: check_includes, configs, data, friend, inputs, metadata,
            output_name, output_extension, public, sources, testonly,
            visibility
-  Rust variables: aliased_deps, crate_root, crate_name, crate_type, edition
+  Rust variables: aliased_deps, crate_root, crate_name, crate_type
 ```
 ### <a name="func_source_set"></a>**source_set**: Declare a source set target.
 
@@ -1900,7 +1899,7 @@
   General: check_includes, configs, data, friend, inputs, metadata,
            output_name, output_extension, public, sources, testonly,
            visibility
-  Rust variables: aliased_deps, crate_root, crate_name, edition
+  Rust variables: aliased_deps, crate_root, crate_name
 
   The tools and commands used to create this target type will be
   determined by the source files in its sources. Targets containing
@@ -2471,12 +2470,6 @@
   process_file_template will return for those inputs (see "gn help
   process_file_template").
 
-  binary targets (executables, libraries): this will return a list of the
-  resulting binary file(s). The "main output" (the actual binary or library)
-  will always be the 0th element in the result. Depending on the platform and
-  output type, there may be other output files as well (like import libraries)
-  which will follow.
-
   source sets and groups: this will return a list containing the path of the
   "stamp" file that Ninja will produce once all outputs are generated. This
   probably isn't very useful.
@@ -2612,7 +2605,7 @@
   toolchain("toolchain") {
     tool("link") {
       command = "..."
-      pool = ":link_pool($default_toolchain)")
+      pool = ":link_pool($default_toolchain)"
     }
   }
 ```
@@ -5101,16 +5094,6 @@
 
   See also "public_deps".
 ```
-### <a name="var_edition"></a>**edition**: [string] The rustc edition to use in compiliation.
-
-```
-  Valid for `rust_library` targets and `executable`, `static_library`,
-  `shared_library`, and `source_set` targets that contain Rust sources.
-
-  This indicates the compiler edition to use in compilition. Should be a value
-  like "2015" or "2018", indiicating the appropriate value to pass to the
-  `--edition=<>` flag in rustc.
-```
 ### <a name="var_friend"></a>**friend**: Allow targets to include private headers.
 
 ```
diff --git a/examples/rust_example/build/BUILD.gn b/examples/rust_example/build/BUILD.gn
index e4aecfd..9684bf1 100644
--- a/examples/rust_example/build/BUILD.gn
+++ b/examples/rust_example/build/BUILD.gn
@@ -2,7 +2,7 @@
   outfile = "{{target_out_dir}}/{{rustc_output_prefix}}{{crate_name}}{{rustc_output_extension}}"
   tool("rustc") {
     depfile = "{{target_out_dir}}/{{crate_name}}.d"
-    command = "rustc --edition={{edition}} --crate-name {{crate_name}} {{source}} --crate-type {{crate_type}} --emit=dep-info=$depfile,link {{rustflags}} -o $outfile {{rustdeps}} {{externs}}"
+    command = "rustc --crate-name {{crate_name}} {{source}} --crate-type {{crate_type}} --emit=dep-info=$depfile,link {{rustflags}} -o $outfile {{rustdeps}} {{externs}}"
     description = "RUST $outfile"
     cdylib_output_extension = ".so"
     proc_macro_output_extension = ".so"
diff --git a/examples/rust_example/hello_world/bar/src/BUILD.gn b/examples/rust_example/hello_world/bar/src/BUILD.gn
index 49c6eee..b4eec33 100644
--- a/examples/rust_example/hello_world/bar/src/BUILD.gn
+++ b/examples/rust_example/hello_world/bar/src/BUILD.gn
@@ -1,4 +1,3 @@
 rust_library("bar") {
   crate_root = "lib.rs"
-  edition = "2018"
 }
diff --git a/examples/rust_example/hello_world/foo/src/BUILD.gn b/examples/rust_example/hello_world/foo/src/BUILD.gn
index 61ee1f3..b7b94e2 100644
--- a/examples/rust_example/hello_world/foo/src/BUILD.gn
+++ b/examples/rust_example/hello_world/foo/src/BUILD.gn
@@ -2,7 +2,6 @@
   sources = [
     "lib.rs",
   ]
-  edition = "2018"
   deps = [
     "//hello_world/bar/src:bar",
   ]
diff --git a/examples/rust_example/hello_world/src/BUILD.gn b/examples/rust_example/hello_world/src/BUILD.gn
index d6a0a66..e55f289 100644
--- a/examples/rust_example/hello_world/src/BUILD.gn
+++ b/examples/rust_example/hello_world/src/BUILD.gn
@@ -5,7 +5,6 @@
   deps = [
     "//hello_world/foo/src:foo",
   ]
-  edition = "2018"
   aliased_deps = {
     baz = "//hello_world/foo/src:foo"
   }
diff --git a/tools/gn/functions_target.cc b/tools/gn/functions_target.cc
index c20c1e6..4112f2e 100644
--- a/tools/gn/functions_target.cc
+++ b/tools/gn/functions_target.cc
@@ -21,10 +21,9 @@
   "           output_name, output_extension, public, sources, testonly,\n" \
   "           visibility\n"
 #define RUST_VARS \
-  "  Rust variables: aliased_deps, crate_root, crate_name, edition\n"
+  "  Rust variables: aliased_deps, crate_root, crate_name\n"
 #define RUST_SHARED_VARS                                                 \
-  "  Rust variables: aliased_deps, crate_root, crate_name, crate_type, " \
-  "edition\n"
+  "  Rust variables: aliased_deps, crate_root, crate_name, crate_type\n"
 
 namespace functions {
 
diff --git a/tools/gn/functions_target_rust_unittest.cc b/tools/gn/functions_target_rust_unittest.cc
index 37bd8b1..2d3578f 100644
--- a/tools/gn/functions_target_rust_unittest.cc
+++ b/tools/gn/functions_target_rust_unittest.cc
@@ -24,7 +24,6 @@
       "executable(\"foo\") {\n"
       "  crate_name = \"foo_crate\"\n"
       "  sources = [ \"foo.rs\", \"lib.rs\", \"main.rs\" ]\n"
-      "  edition = \"2018\""
       "}\n");
   ASSERT_FALSE(exe_input.has_error());
   Err err;
@@ -36,7 +35,6 @@
   TestParseInput lib_input(
       "executable(\"foo\") {\n"
       "  sources = [ \"lib.rs\" ]\n"
-      "  edition = \"2018\""
       "}\n");
   ASSERT_FALSE(lib_input.has_error());
   err = Err();
@@ -60,7 +58,6 @@
       "executable(\"foo\") {\n"
       "  crate_root = \"foo.rs\""
       "  sources = [ \"main.rs\" ]\n"
-      "  edition = \"2018\""
       "}\n");
   ASSERT_FALSE(normal_input.has_error());
   Err err;
@@ -75,7 +72,6 @@
       "  crate_root = \"foo.rs\""
       "  crate_type = \"dylib\"\n"
       "  sources = [ \"main.rs\" ]\n"
-      "  edition = \"2018\""
       "}\n");
   ASSERT_FALSE(normal_shlib_input.has_error());
   err = Err();
@@ -88,7 +84,6 @@
   TestParseInput exe_input(
       "executable(\"foo\") {\n"
       "  sources = [ \"foo.rs\", \"lib.rs\", \"main.rs\" ]\n"
-      "  edition = \"2018\""
       "}\n");
   ASSERT_FALSE(exe_input.has_error());
   err = Err();
@@ -101,7 +96,6 @@
   TestParseInput lib_input(
       "rust_library(\"libfoo\") {\n"
       "  sources = [ \"foo.rs\", \"lib.rs\", \"main.rs\" ]\n"
-      "  edition = \"2018\""
       "}\n");
   ASSERT_FALSE(lib_input.has_error());
   err = Err();
@@ -114,7 +108,6 @@
   TestParseInput singlesource_input(
       "executable(\"bar\") {\n"
       "  sources = [ \"bar.rs\" ]\n"
-      "  edition = \"2018\""
       "}\n");
   ASSERT_FALSE(singlesource_input.has_error());
   err = Err();
@@ -127,7 +120,6 @@
   TestParseInput error_input(
       "rust_library(\"foo\") {\n"
       "  sources = [ \"foo.rs\", \"main.rs\" ]\n"
-      "  edition = \"2018\""
       "}\n");
   ASSERT_FALSE(error_input.has_error());
   err = Err();
@@ -139,7 +131,6 @@
   TestParseInput nosources_input(
       "executable(\"bar\") {\n"
       "  crate_root = \"bar.rs\"\n"
-      "  edition = \"2018\""
       "}\n");
   ASSERT_FALSE(nosources_input.has_error());
   err = Err();
@@ -163,7 +154,6 @@
       "shared_library(\"libfoo\") {\n"
       "  crate_type = \"dylib\"\n"
       "  sources = [ \"lib.rs\" ]\n"
-      "  edition = \"2018\""
       "}\n");
   ASSERT_FALSE(lib_input.has_error());
   Err err;
@@ -176,7 +166,6 @@
       "executable(\"foo\") {\n"
       "  crate_type = \"rlib\"\n"
       "  sources = [ \"main.rs\" ]\n"
-      "  edition = \"2018\""
       "}\n");
   ASSERT_FALSE(exe_non_default_input.has_error());
   err = Err();
@@ -189,7 +178,6 @@
       "shared_library(\"foo\") {\n"
       "  crate_type = \"bad\"\n"
       "  sources = [ \"lib.rs\" ]\n"
-      "  edition = \"2018\""
       "}\n");
   ASSERT_FALSE(lib_error_input.has_error());
   err = Err();
@@ -200,7 +188,6 @@
   TestParseInput lib_missing_error_input(
       "shared_library(\"foo\") {\n"
       "  sources = [ \"lib.rs\" ]\n"
-      "  edition = \"2018\""
       "}\n");
   ASSERT_FALSE(lib_missing_error_input.has_error());
   err = Err();
@@ -286,40 +273,6 @@
             ":foo");
 }
 
-// Checks that the dition gets propagated correctly.
-TEST_F(RustFunctionsTarget, Edition) {
-  TestWithScope setup;
-
-  // The target generator needs a place to put the targets or it will fail.
-  Scope::ItemVector item_collector;
-  setup.scope()->set_item_collector(&item_collector);
-  setup.scope()->set_source_dir(SourceDir("/"));
-
-  TestParseInput lib_input(
-      "shared_library(\"libfoo\") {\n"
-      "  crate_type = \"dylib\"\n"
-      "  sources = [ \"lib.rs\" ]\n"
-      "  edition = \"2018\""
-      "}\n");
-  ASSERT_FALSE(lib_input.has_error());
-  Err err;
-  lib_input.parsed()->Execute(setup.scope(), &err);
-  ASSERT_FALSE(err.has_error()) << err.message();
-  ASSERT_EQ(item_collector.back()->AsTarget()->rust_values().edition(), "2018");
-
-  TestParseInput error_input(
-      "shared_library(\"foo\") {\n"
-      "  crate_type = \"dylib\"\n"
-      "  sources = [ \"lib.rs\" ]\n"
-      "}\n");
-  ASSERT_FALSE(error_input.has_error());
-  err = Err();
-  error_input.parsed()->Execute(setup.scope(), &err);
-  ASSERT_TRUE(err.has_error());
-  EXPECT_EQ("Missing \"edition\" in Rust target.", err.message())
-      << err.message();
-}
-
 // Checks aliased_deps parsing.
 TEST_F(RustFunctionsTarget, AliasedDeps) {
   TestWithScope setup;
@@ -333,7 +286,6 @@
       "executable(\"foo\") {\n"
       "  sources = [ \"main.rs\" ]\n"
       "  deps = [ \"//bar\", \"//baz\" ]\n"
-      "  edition = \"2018\""
       "  aliased_deps = {\n"
       "    bar_renamed = \"//bar\"\n"
       "    baz_renamed = \"//baz:baz\"\n"
@@ -363,7 +315,6 @@
       "executable(\"foo\") {\n"
       "  crate_name = \"foo_crate\"\n"
       "  sources = [ \"foo.rs\", \"lib.rs\", \"main.rs\" ]\n"
-      "  edition = \"2018\""
       "  public_configs = [ \":bar\" ]"
       "}\n");
   ASSERT_FALSE(exe_input.has_error());
diff --git a/tools/gn/ninja_rust_binary_target_writer.cc b/tools/gn/ninja_rust_binary_target_writer.cc
index 5372fec..47b3fb2 100644
--- a/tools/gn/ninja_rust_binary_target_writer.cc
+++ b/tools/gn/ninja_rust_binary_target_writer.cc
@@ -169,7 +169,6 @@
     WriteExterns(extern_deps);
 
     WriteRustdeps(rustdeps, nonrustdeps);
-    WriteEdition();
   }
 }
 
@@ -240,8 +239,3 @@
   }
   out_ << std::endl;
 }
-
-void NinjaRustBinaryTargetWriter::WriteEdition() {
-  DCHECK(!target_->rust_values().edition().empty());
-  out_ << "  edition = " << target_->rust_values().edition() << std::endl;
-}
diff --git a/tools/gn/ninja_rust_binary_target_writer_unittest.cc b/tools/gn/ninja_rust_binary_target_writer_unittest.cc
index 90d592b..f9027f5 100644
--- a/tools/gn/ninja_rust_binary_target_writer_unittest.cc
+++ b/tools/gn/ninja_rust_binary_target_writer_unittest.cc
@@ -68,7 +68,6 @@
   target.source_types_used().Set(SourceFile::SOURCE_RS);
   target.rust_values().set_crate_root(main);
   target.rust_values().crate_name() = "foo_bar";
-  target.rust_values().edition() = "2018";
   target.private_deps().push_back(LabelTargetPair(&source_set));
   target.SetToolchain(setup.toolchain());
   ASSERT_TRUE(target.OnResolved(&err));
@@ -91,8 +90,7 @@
         "\n"
         "build obj/foo/foo_bar: rustc ../../foo/main.rs | ../../foo/input3.rs "
         "../../foo/main.rs ../../foo/input1.rs ../../foo/input2.rs || "
-        "obj/foo/sources.stamp\n"
-        "  edition = 2018\n";
+        "obj/foo/sources.stamp\n";
     std::string out_str = out.str();
     EXPECT_EQ(expected, out_str) << out_str;
   }
@@ -111,7 +109,6 @@
   rlib.source_types_used().Set(SourceFile::SOURCE_RS);
   rlib.rust_values().set_crate_root(barlib);
   rlib.rust_values().crate_name() = "mylib";
-  rlib.rust_values().edition() = "2018";
   rlib.SetToolchain(setup.toolchain());
   ASSERT_TRUE(rlib.OnResolved(&err));
 
@@ -133,8 +130,7 @@
         "target_output_name = mylib\n"
         "\n"
         "build obj/bar/libmylib.rlib: rustc ../../bar/lib.rs | "
-        "../../bar/mylib.rs ../../bar/lib.rs\n"
-        "  edition = 2018\n";
+        "../../bar/mylib.rs ../../bar/lib.rs\n";
     std::string out_str = out.str();
     EXPECT_EQ(expected, out_str) << out_str;
   }
@@ -148,7 +144,6 @@
   another_rlib.source_types_used().Set(SourceFile::SOURCE_RS);
   another_rlib.rust_values().set_crate_root(lib);
   another_rlib.rust_values().crate_name() = "direct";
-  another_rlib.rust_values().edition() = "2018";
   another_rlib.SetToolchain(setup.toolchain());
   another_rlib.public_deps().push_back(LabelTargetPair(&rlib));
   ASSERT_TRUE(another_rlib.OnResolved(&err));
@@ -162,7 +157,6 @@
   target.source_types_used().Set(SourceFile::SOURCE_RS);
   target.rust_values().set_crate_root(main);
   target.rust_values().crate_name() = "foo_bar";
-  target.rust_values().edition() = "2018";
   target.private_deps().push_back(LabelTargetPair(&another_rlib));
   target.SetToolchain(setup.toolchain());
   ASSERT_TRUE(target.OnResolved(&err));
@@ -187,8 +181,7 @@
         "../../foo/main.rs obj/foo/libdirect.rlib obj/bar/libmylib.rlib\n"
         "  externs = --extern direct=obj/foo/libdirect.rlib --extern "
         "mylib=obj/bar/libmylib.rlib\n"
-        "  rustdeps = -Ldependency=obj/foo -Ldependency=obj/bar\n"
-        "  edition = 2018\n";
+        "  rustdeps = -Ldependency=obj/foo -Ldependency=obj/bar\n";
     std::string out_str = out.str();
     EXPECT_EQ(expected, out_str) << expected << "\n" << out_str;
   }
@@ -207,7 +200,6 @@
   another_rlib.source_types_used().Set(SourceFile::SOURCE_RS);
   another_rlib.rust_values().set_crate_root(lib);
   another_rlib.rust_values().crate_name() = "direct";
-  another_rlib.rust_values().edition() = "2018";
   another_rlib.SetToolchain(setup.toolchain());
   ASSERT_TRUE(another_rlib.OnResolved(&err));
 
@@ -221,7 +213,6 @@
   target.rust_values().set_crate_root(main);
   target.rust_values().crate_name() = "foo_bar";
   target.rust_values().aliased_deps()[another_rlib.label()] = "direct_renamed";
-  target.rust_values().edition() = "2018";
   target.private_deps().push_back(LabelTargetPair(&another_rlib));
   target.SetToolchain(setup.toolchain());
   ASSERT_TRUE(target.OnResolved(&err));
@@ -245,8 +236,7 @@
         "build obj/foo/foo_bar: rustc ../../foo/main.rs | ../../foo/source.rs "
         "../../foo/main.rs obj/foo/libdirect.rlib\n"
         "  externs = --extern direct_renamed=obj/foo/libdirect.rlib\n"
-        "  rustdeps = -Ldependency=obj/foo\n"
-        "  edition = 2018\n";
+        "  rustdeps = -Ldependency=obj/foo\n";
     std::string out_str = out.str();
     EXPECT_EQ(expected, out_str) << expected << "\n" << out_str;
   }
@@ -265,7 +255,6 @@
   rlib.source_types_used().Set(SourceFile::SOURCE_RS);
   rlib.rust_values().set_crate_root(barlib);
   rlib.rust_values().crate_name() = "mylib";
-  rlib.rust_values().edition() = "2018";
   rlib.SetToolchain(setup.toolchain());
   ASSERT_TRUE(rlib.OnResolved(&err));
 
@@ -286,7 +275,6 @@
   nonrust.source_types_used().Set(SourceFile::SOURCE_RS);
   nonrust.rust_values().set_crate_root(main);
   nonrust.rust_values().crate_name() = "foo_bar";
-  nonrust.rust_values().edition() = "2018";
   nonrust.private_deps().push_back(LabelTargetPair(&rlib));
   nonrust.private_deps().push_back(LabelTargetPair(&staticlib));
   nonrust.SetToolchain(setup.toolchain());
@@ -311,8 +299,7 @@
         "build obj/foo/foo_bar: rustc ../../foo/main.rs | ../../foo/source.rs "
         "../../foo/main.rs obj/bar/libmylib.rlib obj/foo/libstatic.a\n"
         "  externs = --extern mylib=obj/bar/libmylib.rlib\n"
-        "  rustdeps = -Ldependency=obj/bar -Lnative=obj/foo\n"
-        "  edition = 2018\n";
+        "  rustdeps = -Ldependency=obj/bar -Lnative=obj/foo\n";
     std::string out_str = out.str();
     EXPECT_EQ(expected, out_str) << expected << "\n" << out_str;
   }
@@ -325,7 +312,6 @@
   nonrust_only.source_types_used().Set(SourceFile::SOURCE_RS);
   nonrust_only.rust_values().set_crate_root(main);
   nonrust_only.rust_values().crate_name() = "foo_bar";
-  nonrust_only.rust_values().edition() = "2018";
   nonrust_only.private_deps().push_back(LabelTargetPair(&staticlib));
   nonrust_only.SetToolchain(setup.toolchain());
   ASSERT_TRUE(nonrust_only.OnResolved(&err));
@@ -348,8 +334,7 @@
         "\n"
         "build obj/foo/foo_bar: rustc ../../foo/main.rs | ../../foo/source.rs "
         "../../foo/main.rs obj/foo/libstatic.a\n"
-        "  rustdeps = -Lnative=obj/foo\n"
-        "  edition = 2018\n";
+        "  rustdeps = -Lnative=obj/foo\n";
     std::string out_str = out.str();
     EXPECT_EQ(expected, out_str) << expected << "\n" << out_str;
   }
@@ -379,7 +364,6 @@
   target.set_output_dir(SourceDir("//out/Debug/foo/"));
   target.rust_values().set_crate_root(main);
   target.rust_values().crate_name() = "foo_bar";
-  target.rust_values().edition() = "2018";
   target.private_deps().push_back(LabelTargetPair(&source_set));
   target.SetToolchain(setup.toolchain());
   ASSERT_TRUE(target.OnResolved(&err));
@@ -402,8 +386,7 @@
         "\n"
         "build obj/foo/foo_bar.exe: rustc ../../foo/main.rs | ../../foo/input3.rs "
         "../../foo/main.rs ../../foo/input1.rs ../../foo/input2.rs || "
-        "obj/foo/sources.stamp\n"
-        "  edition = 2018\n";
+        "obj/foo/sources.stamp\n";
     std::string out_str = out.str();
     EXPECT_EQ(expected, out_str) << out_str;
   }
@@ -422,7 +405,6 @@
   procmacro.source_types_used().Set(SourceFile::SOURCE_RS);
   procmacro.rust_values().set_crate_root(barlib);
   procmacro.rust_values().crate_name() = "mymacro";
-  procmacro.rust_values().edition() = "2018";
   procmacro.rust_values().set_crate_type(RustValues::CRATE_PROC_MACRO);
   procmacro.SetToolchain(setup.toolchain());
   ASSERT_TRUE(procmacro.OnResolved(&err));
@@ -444,8 +426,7 @@
         "target_output_name = mymacro\n"
         "\n"
         "build obj/bar/libmymacro.so: rustc ../../bar/lib.rs | "
-        "../../bar/mylib.rs ../../bar/lib.rs\n"
-        "  edition = 2018\n";
+        "../../bar/mylib.rs ../../bar/lib.rs\n";
     std::string out_str = out.str();
     EXPECT_EQ(expected, out_str) << out_str;
   }
@@ -459,7 +440,6 @@
   target.source_types_used().Set(SourceFile::SOURCE_RS);
   target.rust_values().set_crate_root(main);
   target.rust_values().crate_name() = "foo_bar";
-  target.rust_values().edition() = "2018";
   target.private_deps().push_back(LabelTargetPair(&procmacro));
   target.SetToolchain(setup.toolchain());
   ASSERT_TRUE(target.OnResolved(&err));
@@ -482,8 +462,7 @@
         "\n"
         "build obj/foo/foo_bar: rustc ../../foo/main.rs | ../../foo/source.rs "
         "../../foo/main.rs || obj/bar/libmymacro.so\n"
-        "  externs = --extern mymacro=obj/bar/libmymacro.so\n"
-        "  edition = 2018\n";
+        "  externs = --extern mymacro=obj/bar/libmymacro.so\n";
     std::string out_str = out.str();
     EXPECT_EQ(expected, out_str) << expected << "\n" << out_str;
   }
@@ -502,7 +481,6 @@
   rlib.source_types_used().Set(SourceFile::SOURCE_RS);
   rlib.rust_values().set_crate_root(barlib);
   rlib.rust_values().crate_name() = "mylib";
-  rlib.rust_values().edition() = "2018";
   rlib.SetToolchain(setup.toolchain());
   ASSERT_TRUE(rlib.OnResolved(&err));
 
@@ -524,8 +502,7 @@
         "target_output_name = mylib\n"
         "\n"
         "build obj/bar/libmylib.rlib: rustc ../../bar/lib.rs | "
-        "../../bar/mylib.rs ../../bar/lib.rs\n"
-        "  edition = 2018\n";
+        "../../bar/mylib.rs ../../bar/lib.rs\n";
     std::string out_str = out.str();
     EXPECT_EQ(expected, out_str) << out_str;
   }
@@ -546,7 +523,6 @@
   target.source_types_used().Set(SourceFile::SOURCE_RS);
   target.rust_values().set_crate_root(main);
   target.rust_values().crate_name() = "foo_bar";
-  target.rust_values().edition() = "2018";
   target.private_deps().push_back(LabelTargetPair(&group));
   target.SetToolchain(setup.toolchain());
   ASSERT_TRUE(target.OnResolved(&err));
@@ -570,8 +546,7 @@
         "build obj/foo/foo_bar: rustc ../../foo/main.rs | ../../foo/source.rs "
         "../../foo/main.rs obj/bar/libmylib.rlib || obj/baz/group.stamp\n"
         "  externs = --extern mylib=obj/bar/libmylib.rlib\n"
-        "  rustdeps = -Ldependency=obj/bar\n"
-        "  edition = 2018\n";
+        "  rustdeps = -Ldependency=obj/bar\n";
     std::string out_str = out.str();
     EXPECT_EQ(expected, out_str) << expected << "\n" << out_str;
   }
diff --git a/tools/gn/rust_substitution_type.cc b/tools/gn/rust_substitution_type.cc
index c6b8e9e..8881772 100644
--- a/tools/gn/rust_substitution_type.cc
+++ b/tools/gn/rust_substitution_type.cc
@@ -12,10 +12,9 @@
 
 const SubstitutionTypes RustSubstitutions = {
     &kRustSubstitutionCrateName,       &kRustSubstitutionCrateType,
-    &kRustSubstitutionEdition,         &kRustSubstitutionExterns,
     &kRustSubstitutionOutputExtension, &kRustSubstitutionOutputPrefix,
     &kRustSubstitutionRustDeps,        &kRustSubstitutionRustFlags,
-    &kRustSubstitutionRustEnv,
+    &kRustSubstitutionRustEnv,         &kRustSubstitutionExterns,
 };
 
 // Valid for Rust tools.
@@ -23,7 +22,6 @@
                                                  "crate_name"};
 const Substitution kRustSubstitutionCrateType = {"{{crate_type}}",
                                                  "crate_type"};
-const Substitution kRustSubstitutionEdition = {"{{edition}}", "edition"};
 const Substitution kRustSubstitutionExterns = {"{{externs}}", "externs"};
 const Substitution kRustSubstitutionOutputExtension = {
     "{{rustc_output_extension}}", "rustc_output_extension"};
@@ -38,7 +36,6 @@
          type == &SubstitutionOutputDir ||
          type == &kRustSubstitutionCrateName ||
          type == &kRustSubstitutionCrateType ||
-         type == &kRustSubstitutionEdition ||
          type == &kRustSubstitutionExterns ||
          type == &kRustSubstitutionOutputExtension ||
          type == &kRustSubstitutionOutputPrefix ||
diff --git a/tools/gn/rust_substitution_type.h b/tools/gn/rust_substitution_type.h
index 827f5d6..e9a78c4 100644
--- a/tools/gn/rust_substitution_type.h
+++ b/tools/gn/rust_substitution_type.h
@@ -16,7 +16,6 @@
 // Valid for Rust tools.
 extern const Substitution kRustSubstitutionCrateName;
 extern const Substitution kRustSubstitutionCrateType;
-extern const Substitution kRustSubstitutionEdition;
 extern const Substitution kRustSubstitutionExterns;
 extern const Substitution kRustSubstitutionOutputExtension;
 extern const Substitution kRustSubstitutionOutputPrefix;
diff --git a/tools/gn/rust_values.h b/tools/gn/rust_values.h
index ad9c5c6..4df5c5c 100644
--- a/tools/gn/rust_values.h
+++ b/tools/gn/rust_values.h
@@ -45,9 +45,6 @@
   const CrateType crate_type() const { return crate_type_; }
   void set_crate_type(CrateType s) { crate_type_ = s; }
 
-  std::string& edition() { return edition_; }
-  const std::string& edition() const { return edition_; }
-
   // Any renamed dependencies for the `extern` flags.
   const std::map<Label, std::string>& aliased_deps() const {
     return aliased_deps_;
@@ -58,7 +55,6 @@
   std::string crate_name_;
   SourceFile crate_root_;
   CrateType crate_type_ = CRATE_AUTO;
-  std::string edition_;
   std::map<Label, std::string> aliased_deps_;
 
   DISALLOW_COPY_AND_ASSIGN(RustValues);
diff --git a/tools/gn/rust_values_generator.cc b/tools/gn/rust_values_generator.cc
index c29282e..d7ebd4a 100644
--- a/tools/gn/rust_values_generator.cc
+++ b/tools/gn/rust_values_generator.cc
@@ -60,9 +60,6 @@
   if (!FillCrateRoot())
     return;
 
-  if (!FillEdition())
-    return;
-
   if (!FillAliasedDeps())
     return;
 }
@@ -165,20 +162,6 @@
   return true;
 }
 
-bool RustTargetGenerator::FillEdition() {
-  const Value* value = scope_->GetValue(variables::kRustEdition, true);
-  if (!value) {
-    *err_ = Err(function_call_, "Missing \"edition\" in Rust target.");
-    return false;
-  }
-
-  if (!value->VerifyTypeIs(Value::STRING, err_))
-    return false;
-
-  target_->rust_values().edition() = std::move(value->string_value());
-  return true;
-}
-
 bool RustTargetGenerator::FillAliasedDeps() {
   const Value* value = scope_->GetValue(variables::kRustAliasedDeps, true);
   if (!value)
diff --git a/tools/gn/rust_variables.cc b/tools/gn/rust_variables.cc
index 67018c7..f1867cb 100644
--- a/tools/gn/rust_variables.cc
+++ b/tools/gn/rust_variables.cc
@@ -95,20 +95,6 @@
   only one file.
 )";
 
-const char kRustEdition[] = "edition";
-const char kRustEdition_HelpShort[] =
-    "edition: [string] The rustc edition to use in compiliation.";
-const char kRustEdition_Help[] =
-    R"(edition: [string] The rustc edition to use in compiliation.
-
-  Valid for `rust_library` targets and `executable`, `static_library`,
-  `shared_library`, and `source_set` targets that contain Rust sources.
-
-  This indicates the compiler edition to use in compilition. Should be a value
-  like "2015" or "2018", indiicating the appropriate value to pass to the
-  `--edition=<>` flag in rustc.
-)";
-
 void InsertRustVariables(VariableInfoMap* info_map) {
   info_map->insert(std::make_pair(
       kRustAliasedDeps,
@@ -122,8 +108,6 @@
   info_map->insert(std::make_pair(
       kRustCrateRoot,
       VariableInfo(kRustCrateRoot_HelpShort, kRustCrateRoot_Help)));
-  info_map->insert(std::make_pair(
-      kRustEdition, VariableInfo(kRustEdition_HelpShort, kRustEdition_Help)));
 }
 
 }  // namespace variables
diff --git a/tools/gn/test_with_scope.cc b/tools/gn/test_with_scope.cc
index 5025420..1b9f9f4 100644
--- a/tools/gn/test_with_scope.cc
+++ b/tools/gn/test_with_scope.cc
@@ -197,7 +197,7 @@
   // RUST
   std::unique_ptr<Tool> rustc_tool = Tool::CreateTool(RustTool::kRsToolRustc);
   SetCommandForTool(
-      "{{rustenv}} rustc --edition=2018 --crate-name {{crate_name}} {{source}} "
+      "{{rustenv}} rustc --crate-name {{crate_name}} {{source}} "
       "--crate-type {{crate_type}} {{rustflags}} -o "
       "{{target_out_dir}}/"
       "{{rustc_output_prefix}}{{crate_name}}{{rustc_output_extension}} "
