Repository: rust-analyzer/rust-analyzer
Pull request #5726 (2020-08-12 15:04:37)

Rename ra_text_edit -> text_edit

bors r+
🤖


Patch:
diff --git a/Cargo.lock b/Cargo.lock
index 598b739c7e..4a6a659341 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -358,8 +358,8 @@ dependencies = [
  "crossbeam-channel",
  "jod-thread",
  "log",
- "ra_toolchain",
  "serde_json",
+ "toolchain",
 ]
 
 [[package]]
@@ -927,10 +927,10 @@ dependencies = [
  "ra_hir",
  "ra_ide_db",
  "ra_syntax",
- "ra_text_edit",
  "rustc-hash",
  "stdx",
  "test_utils",
+ "text_edit",
 ]
 
 [[package]]
@@ -1075,10 +1075,10 @@ dependencies = [
  "ra_ide_db",
  "ra_ssr",
  "ra_syntax",
- "ra_text_edit",
  "rustc-hash",
  "stdx",
  "test_utils",
+ "text_edit",
 ]
 
 [[package]]
@@ -1093,11 +1093,11 @@ dependencies = [
  "ra_db",
  "ra_hir",
  "ra_syntax",
- "ra_text_edit",
  "rayon",
  "rustc-hash",
  "stdx",
  "test_utils",
+ "text_edit",
 ]
 
 [[package]]
@@ -1143,9 +1143,9 @@ dependencies = [
  "memmap",
  "ra_mbe",
  "ra_proc_macro",
- "ra_toolchain",
  "serde_derive",
  "test_utils",
+ "toolchain",
  "tt",
 ]
 
@@ -1161,11 +1161,11 @@ dependencies = [
  "ra_cfg",
  "ra_db",
  "ra_proc_macro",
- "ra_toolchain",
  "rustc-hash",
  "serde",
  "serde_json",
  "stdx",
+ "toolchain",
 ]
 
 [[package]]
@@ -1177,9 +1177,9 @@ dependencies = [
  "ra_hir",
  "ra_ide_db",
  "ra_syntax",
- "ra_text_edit",
  "rustc-hash",
  "test_utils",
+ "text_edit",
 ]
 
 [[package]]
@@ -1191,7 +1191,6 @@ dependencies = [
  "itertools",
  "once_cell",
  "ra_parser",
- "ra_text_edit",
  "rayon",
  "rowan",
  "rustc-ap-rustc_lexer",
@@ -1200,23 +1199,10 @@ dependencies = [
  "smol_str",
  "stdx",
  "test_utils",
+ "text_edit",
  "walkdir",
 ]
 
-[[package]]
-name = "ra_text_edit"
-version = "0.1.0"
-dependencies = [
- "text-size",
-]
-
-[[package]]
-name = "ra_toolchain"
-version = "0.1.0"
-dependencies = [
- "home",
-]
-
 [[package]]
 name = "rayon"
 version = "1.3.1"
@@ -1319,15 +1305,15 @@ dependencies = [
  "ra_project_model",
  "ra_ssr",
  "ra_syntax",
- "ra_text_edit",
- "ra_toolchain",
  "rayon",
  "rustc-hash",
  "serde",
  "serde_json",
  "stdx",
  "test_utils",
+ "text_edit",
  "threadpool",
+ "toolchain",
  "tt",
  "vfs",
  "vfs-notify",
@@ -1572,6 +1558,13 @@ version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f03e7efdedc3bc78cb2337f1e2785c39e45f5ef762d9e4ebb137fff7380a6d8a"
 
+[[package]]
+name = "text_edit"
+version = "0.0.0"
+dependencies = [
+ "text-size",
+]
+
 [[package]]
 name = "thin-dst"
 version = "1.1.0"
@@ -1612,6 +1605,13 @@ version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "53953d2d3a5ad81d9f844a32f14ebb121f50b650cd59d0ee2a07cf13c617efed"
 
+[[package]]
+name = "toolchain"
+version = "0.0.0"
+dependencies = [
+ "home",
+]
+
 [[package]]
 name = "tracing"
 version = "0.1.18"
diff --git a/crates/flycheck/Cargo.toml b/crates/flycheck/Cargo.toml
index ff8a1e5689..acc72bc59c 100644
--- a/crates/flycheck/Cargo.toml
+++ b/crates/flycheck/Cargo.toml
@@ -14,4 +14,4 @@ log = "0.4.8"
 cargo_metadata = "0.11.1"
 serde_json = "1.0.48"
 jod-thread = "0.1.1"
-ra_toolchain = { path = "../ra_toolchain" }
+toolchain = { path = "../toolchain" }
diff --git a/crates/flycheck/src/lib.rs b/crates/flycheck/src/lib.rs
index 31e14246de..16078d1043 100644
--- a/crates/flycheck/src/lib.rs
+++ b/crates/flycheck/src/lib.rs
@@ -193,7 +193,7 @@ impl FlycheckActor {
                 extra_args,
                 features,
             } => {
-                let mut cmd = Command::new(ra_toolchain::cargo());
+                let mut cmd = Command::new(toolchain::cargo());
                 cmd.arg(command);
                 cmd.args(&["--workspace", "--message-format=json", "--manifest-path"])
                     .arg(self.workspace_root.join("Cargo.toml"));
diff --git a/crates/ra_assists/Cargo.toml b/crates/ra_assists/Cargo.toml
index 6f5ace941f..e4a5ee6c1c 100644
--- a/crates/ra_assists/Cargo.toml
+++ b/crates/ra_assists/Cargo.toml
@@ -16,7 +16,7 @@ either = "1.5.3"
 stdx = { path = "../stdx" }
 
 ra_syntax = { path = "../ra_syntax" }
-ra_text_edit = { path = "../ra_text_edit" }
+text_edit = { path = "../text_edit" }
 ra_fmt = { path = "../ra_fmt" }
 profile = { path = "../profile" }
 ra_db = { path = "../ra_db" }
diff --git a/crates/ra_assists/src/assist_context.rs b/crates/ra_assists/src/assist_context.rs
index afd3fd4b9e..fcaa1aedcf 100644
--- a/crates/ra_assists/src/assist_context.rs
+++ b/crates/ra_assists/src/assist_context.rs
@@ -15,7 +15,7 @@ use ra_syntax::{
     AstNode, SourceFile, SyntaxElement, SyntaxKind, SyntaxNode, SyntaxToken, TextRange, TextSize,
     TokenAtOffset,
 };
-use ra_text_edit::TextEditBuilder;
+use text_edit::{TextEdit, TextEditBuilder};
 
 use crate::{
     assist_config::{AssistConfig, SnippetCap},
@@ -214,7 +214,7 @@ pub(crate) struct AssistBuilder {
 impl AssistBuilder {
     pub(crate) fn new(file_id: FileId) -> AssistBuilder {
         AssistBuilder {
-            edit: TextEditBuilder::default(),
+            edit: TextEdit::builder(),
             file_id,
             is_snippet: false,
             change: SourceChange::default(),
diff --git a/crates/ra_assists/src/utils/insert_use.rs b/crates/ra_assists/src/utils/insert_use.rs
index 32780fceb5..13dbe1919c 100644
--- a/crates/ra_assists/src/utils/insert_use.rs
+++ b/crates/ra_assists/src/utils/insert_use.rs
@@ -2,6 +2,7 @@
 // FIXME: rewrite according to the plan, outlined in
 // https://github.com/rust-analyzer/rust-analyzer/issues/3301#issuecomment-592931553
 
+use either::Either;
 use hir::{self, ModPath};
 use ra_syntax::{
     ast::{self, NameOwner, VisibilityOwner},
@@ -9,10 +10,9 @@ use ra_syntax::{
     SyntaxKind::{PATH, PATH_SEGMENT},
     SyntaxNode, T,
 };
-use ra_text_edit::TextEditBuilder;
+use text_edit::TextEditBuilder;
 
 use crate::assist_context::AssistContext;
-use either::Either;
 
 /// Determines the containing syntax node in which to insert a `use` statement affecting `position`.
 pub(crate) fn find_insert_use_container(
diff --git a/crates/ra_ide/Cargo.toml b/crates/ra_ide/Cargo.toml
index bbc9ba4e77..84c25f0b8a 100644
--- a/crates/ra_ide/Cargo.toml
+++ b/crates/ra_ide/Cargo.toml
@@ -22,7 +22,7 @@ oorandom = "11.1.2"
 stdx = { path = "../stdx" }
 
 ra_syntax = { path = "../ra_syntax" }
-ra_text_edit = { path = "../ra_text_edit" }
+text_edit = { path = "../text_edit" }
 ra_db = { path = "../ra_db" }
 ra_ide_db = { path = "../ra_ide_db" }
 ra_cfg = { path = "../ra_cfg" }
diff --git a/crates/ra_ide/src/completion/complete_postfix.rs b/crates/ra_ide/src/completion/complete_postfix.rs
index 8735b90103..42087da8dc 100644
--- a/crates/ra_ide/src/completion/complete_postfix.rs
+++ b/crates/ra_ide/src/completion/complete_postfix.rs
@@ -4,7 +4,7 @@ use ra_syntax::{
     ast::{self, AstNode},
     TextRange, TextSize,
 };
-use ra_text_edit::TextEdit;
+use text_edit::TextEdit;
 
 use crate::{
     completion::{
diff --git a/crates/ra_ide/src/completion/complete_trait_impl.rs b/crates/ra_ide/src/completion/complete_trait_impl.rs
index d9a0ef167d..b397baf107 100644
--- a/crates/ra_ide/src/completion/complete_trait_impl.rs
+++ b/crates/ra_ide/src/completion/complete_trait_impl.rs
@@ -37,7 +37,7 @@ use ra_syntax::{
     ast::{self, edit, Impl},
     AstNode, SyntaxKind, SyntaxNode, TextRange, T,
 };
-use ra_text_edit::TextEdit;
+use text_edit::TextEdit;
 
 use crate::{
     completion::{
diff --git a/crates/ra_ide/src/completion/completion_context.rs b/crates/ra_ide/src/completion/completion_context.rs
index 4aa761148d..0cb57fb1b4 100644
--- a/crates/ra_ide/src/completion/completion_context.rs
+++ b/crates/ra_ide/src/completion/completion_context.rs
@@ -9,7 +9,7 @@ use ra_syntax::{
     SyntaxKind::*,
     SyntaxNode, SyntaxToken, TextRange, TextSize,
 };
-use ra_text_edit::Indel;
+use text_edit::Indel;
 
 use super::patterns::{
     has_bind_pat_parent, has_block_expr_parent, has_impl_as_prev_sibling, has_impl_parent,
diff --git a/crates/ra_ide/src/completion/completion_item.rs b/crates/ra_ide/src/completion/completion_item.rs
index 7bdda316c4..1c0684f4ed 100644
--- a/crates/ra_ide/src/completion/completion_item.rs
+++ b/crates/ra_ide/src/completion/completion_item.rs
@@ -4,7 +4,7 @@ use std::fmt;
 
 use hir::Documentation;
 use ra_syntax::TextRange;
-use ra_text_edit::TextEdit;
+use text_edit::TextEdit;
 
 use crate::completion::completion_config::SnippetCap;
 
diff --git a/crates/ra_ide/src/diagnostics.rs b/crates/ra_ide/src/diagnostics.rs
index 07bf133bd6..54810d5bbf 100644
--- a/crates/ra_ide/src/diagnostics.rs
+++ b/crates/ra_ide/src/diagnostics.rs
@@ -14,7 +14,7 @@ use ra_syntax::{
     ast::{self, AstNode},
     SyntaxNode, TextRange, T,
 };
-use ra_text_edit::{TextEdit, TextEditBuilder};
+use text_edit::TextEdit;
 
 use crate::{Diagnostic, FileId, Fix, SourceFileEdit};
 
@@ -103,7 +103,7 @@ fn check_unnecessary_braces_in_use_statement(
             text_edit_for_remove_unnecessary_braces_with_self_in_use_statement(&single_use_tree)
                 .unwrap_or_else(|| {
                     let to_replace = single_use_tree.syntax().text().to_string();
-                    let mut edit_builder = TextEditBuilder::default();
+                    let mut edit_builder = TextEdit::builder();
                     edit_builder.delete(use_range);
                     edit_builder.insert(use_range.start(), to_replace);
                     edit_builder.finish()
@@ -149,7 +149,7 @@ fn check_struct_shorthand_initialization(
             let field_expr = expr.syntax().text().to_string();
             let field_name_is_tup_index = name_ref.as_tuple_field().is_some();
             if field_name == field_expr && !field_name_is_tup_index {
-                let mut edit_builder = TextEditBuilder::default();
+                let mut edit_builder = TextEdit::builder();
                 edit_builder.delete(record_field.syntax().text_range());
                 edit_builder.insert(record_field.syntax().text_range().start(), field_name);
                 let edit = edit_builder.finish();
diff --git a/crates/ra_ide/src/diagnostics/diagnostics_with_fix.rs b/crates/ra_ide/src/diagnostics/diagnostics_with_fix.rs
index f7c73773f3..8fb25de6c1 100644
--- a/crates/ra_ide/src/diagnostics/diagnostics_with_fix.rs
+++ b/crates/ra_ide/src/diagnostics/diagnostics_with_fix.rs
@@ -13,7 +13,7 @@ use ra_ide_db::{
     RootDatabase,
 };
 use ra_syntax::{algo, ast, AstNode};
-use ra_text_edit::{TextEdit, TextEditBuilder};
+use text_edit::TextEdit;
 
 /// A [Diagnostic] that potentially has a fix available.
 ///
@@ -70,7 +70,7 @@ impl DiagnosticWithFix for MissingFields {
         }
 
         let edit = {
-            let mut builder = TextEditBuilder::default();
+            let mut builder = TextEdit::builder();
             algo::diff(&old_field_list.syntax(), &new_field_list.syntax())
                 .into_text_edit(&mut builder);
             builder.finish()
diff --git a/crates/ra_ide/src/join_lines.rs b/crates/ra_ide/src/join_lines.rs
index 6907c09e80..caf63933a9 100644
--- a/crates/ra_ide/src/join_lines.rs
+++ b/crates/ra_ide/src/join_lines.rs
@@ -7,7 +7,7 @@ use ra_syntax::{
     SyntaxKind::{self, WHITESPACE},
     SyntaxNode, SyntaxToken, TextRange, TextSize, T,
 };
-use ra_text_edit::{TextEdit, TextEditBuilder};
+use text_edit::{TextEdit, TextEditBuilder};
 
 // Feature: Join Lines
 //
@@ -23,7 +23,7 @@ pub fn join_lines(file: &SourceFile, range: TextRange) -> TextEdit {
         let syntax = file.syntax();
         let text = syntax.text().slice(range.start()..);
         let pos = match text.find_char('\n') {
-            None => return TextEditBuilder::default().finish(),
+            None => return TextEdit::builder().finish(),
             Some(pos) => pos,
         };
         TextRange::at(range.start() + pos, TextSize::of('\n'))
@@ -35,7 +35,7 @@ pub fn join_lines(file: &SourceFile, range: TextRange) -> TextEdit {
         NodeOrToken::Node(node) => node,
         NodeOrToken::Token(token) => token.parent(),
     };
-    let mut edit = TextEditBuilder::default();
+    let mut edit = TextEdit::builder();
     for token in node.descendants_with_tokens().filter_map(|it| it.into_token()) {
         let range = match range.intersect(token.text_range()) {
             Some(range) => range,
diff --git a/crates/ra_ide/src/lib.rs b/crates/ra_ide/src/lib.rs
index bfcf5d750a..09cb5faf68 100644
--- a/crates/ra_ide/src/lib.rs
+++ b/crates/ra_ide/src/lib.rs
@@ -96,7 +96,7 @@ pub use ra_ide_db::{
     RootDatabase,
 };
 pub use ra_ssr::SsrError;
-pub use ra_text_edit::{Indel, TextEdit};
+pub use text_edit::{Indel, TextEdit};
 
 pub type Cancelable<T> = Result<T, Canceled>;
 
diff --git a/crates/ra_ide/src/references/rename.rs b/crates/ra_ide/src/references/rename.rs
index c8d80fcf7c..9c688fb063 100644
--- a/crates/ra_ide/src/references/rename.rs
+++ b/crates/ra_ide/src/references/rename.rs
@@ -11,9 +11,9 @@ use ra_syntax::{
     ast::{self, NameOwner},
     lex_single_valid_syntax_kind, match_ast, AstNode, SyntaxKind, SyntaxNode, SyntaxToken,
 };
-use ra_text_edit::TextEdit;
 use std::convert::TryInto;
 use test_utils::mark;
+use text_edit::TextEdit;
 
 use crate::{
     references::find_all_refs, FilePosition, FileSystemEdit, RangeInfo, Reference, ReferenceKind,
@@ -271,9 +271,9 @@ fn rename_reference(
 #[cfg(test)]
 mod tests {
     use expect::{expect, Expect};
-    use ra_text_edit::TextEditBuilder;
     use stdx::trim_indent;
     use test_utils::{assert_eq_text, mark};
+    use text_edit::TextEdit;
 
     use crate::{mock_analysis::analysis_and_position, FileId};
 
@@ -281,7 +281,7 @@ mod tests {
         let ra_fixture_after = &trim_indent(ra_fixture_after);
         let (analysis, position) = analysis_and_position(ra_fixture_before);
         let source_change = analysis.rename(position, new_name).unwrap();
-        let mut text_edit_builder = TextEditBuilder::default();
+        let mut text_edit_builder = TextEdit::builder();
         let mut file_id: Option<FileId> = None;
         if let Some(change) = source_change {
             for edit in change.info.source_file_edits {
diff --git a/crates/ra_ide/src/typing.rs b/crates/ra_ide/src/typing.rs
index d3ce744b44..952429cde6 100644
--- a/crates/ra_ide/src/typing.rs
+++ b/crates/ra_ide/src/typing.rs
@@ -26,7 +26,7 @@ use ra_syntax::{
     TextRange, TextSize,
 };
 
-use ra_text_edit::TextEdit;
+use text_edit::TextEdit;
 
 use crate::SourceChange;
 
diff --git a/crates/ra_ide/src/typing/on_enter.rs b/crates/ra_ide/src/typing/on_enter.rs
index 143b1ae413..c0c5ce3bcd 100644
--- a/crates/ra_ide/src/typing/on_enter.rs
+++ b/crates/ra_ide/src/typing/on_enter.rs
@@ -9,8 +9,8 @@ use ra_syntax::{
     SyntaxKind::*,
     SyntaxToken, TextRange, TextSize, TokenAtOffset,
 };
-use ra_text_edit::TextEdit;
 use test_utils::mark;
+use text_edit::TextEdit;
 
 // Feature: On Enter
 //
diff --git a/crates/ra_ide_db/Cargo.toml b/crates/ra_ide_db/Cargo.toml
index 92b8ef82a7..5446a59614 100644
--- a/crates/ra_ide_db/Cargo.toml
+++ b/crates/ra_ide_db/Cargo.toml
@@ -22,7 +22,7 @@ either = "1.5.3"
 stdx = { path = "../stdx" }
 
 ra_syntax = { path = "../ra_syntax" }
-ra_text_edit = { path = "../ra_text_edit" }
+text_edit = { path = "../text_edit" }
 ra_db = { path = "../ra_db" }
 profile = { path = "../profile" }
 test_utils = { path = "../test_utils" }
diff --git a/crates/ra_ide_db/src/source_change.rs b/crates/ra_ide_db/src/source_change.rs
index abb83f4213..ae21132dd7 100644
--- a/crates/ra_ide_db/src/source_change.rs
+++ b/crates/ra_ide_db/src/source_change.rs
@@ -4,7 +4,7 @@
 //! It can be viewed as a dual for `AnalysisChange`.
 
 use ra_db::FileId;
-use ra_text_edit::TextEdit;
+use text_edit::TextEdit;
 
 #[derive(Default, Debug, Clone)]
 pub struct SourceChange {
diff --git a/crates/ra_proc_macro_srv/Cargo.toml b/crates/ra_proc_macro_srv/Cargo.toml
index a690cc0443..1c25e72296 100644
--- a/crates/ra_proc_macro_srv/Cargo.toml
+++ b/crates/ra_proc_macro_srv/Cargo.toml
@@ -23,4 +23,4 @@ cargo_metadata = "0.11.1"
 difference = "2.0.0"
 # used as proc macro test target
 serde_derive = "1.0.106"
-ra_toolchain = { path = "../ra_toolchain" }
+toolchain = { path = "../toolchain" }
diff --git a/crates/ra_project_model/Cargo.toml b/crates/ra_project_model/Cargo.toml
index 27b1f5d33f..171fe86264 100644
--- a/crates/ra_project_model/Cargo.toml
+++ b/crates/ra_project_model/Cargo.toml
@@ -17,7 +17,7 @@ cargo_metadata = "0.11.1"
 arena = { path = "../arena" }
 ra_cfg = { path = "../ra_cfg" }
 ra_db = { path = "../ra_db" }
-ra_toolchain = { path = "../ra_toolchain" }
+toolchain = { path = "../toolchain" }
 ra_proc_macro =  { path = "../ra_proc_macro" }
 paths =  { path = "../paths" }
 stdx =  { path = "../stdx" }
diff --git a/crates/ra_project_model/src/cargo_workspace.rs b/crates/ra_project_model/src/cargo_workspace.rs
index a526d743d4..abf8dca964 100644
--- a/crates/ra_project_model/src/cargo_workspace.rs
+++ b/crates/ra_project_model/src/cargo_workspace.rs
@@ -140,7 +140,7 @@ impl CargoWorkspace {
         cargo_features: &CargoConfig,
     ) -> Result<CargoWorkspace> {
         let mut meta = MetadataCommand::new();
-        meta.cargo_path(ra_toolchain::cargo());
+        meta.cargo_path(toolchain::cargo());
         meta.manifest_path(cargo_toml.to_path_buf());
         if cargo_features.all_features {
             meta.features(CargoOpt::AllFeatures);
@@ -288,7 +288,7 @@ pub fn load_extern_resources(
     cargo_toml: &Path,
     cargo_features: &CargoConfig,
 ) -> Result<ExternResources> {
-    let mut cmd = Command::new(ra_toolchain::cargo());
+    let mut cmd = Command::new(toolchain::cargo());
     cmd.args(&["check", "--message-format=json", "--manifest-path"]).arg(cargo_toml);
     if cargo_features.all_features {
         cmd.arg("--all-features");
diff --git a/crates/ra_project_model/src/lib.rs b/crates/ra_project_model/src/lib.rs
index 300e751355..46f44910c0 100644
--- a/crates/ra_project_model/src/lib.rs
+++ b/crates/ra_project_model/src/lib.rs
@@ -513,7 +513,7 @@ fn get_rustc_cfg_options(target: Option<&str>) -> Vec<CfgFlag> {
     }
 
     let rustc_cfgs = {
-        let mut cmd = Command::new(ra_toolchain::rustc());
+        let mut cmd = Command::new(toolchain::rustc());
         cmd.args(&["--print", "cfg", "-O"]);
         if let Some(target) = target {
             cmd.args(&["--target", target]);
diff --git a/crates/ra_project_model/src/sysroot.rs b/crates/ra_project_model/src/sysroot.rs
index 6ef001769c..8239797b6b 100644
--- a/crates/ra_project_model/src/sysroot.rs
+++ b/crates/ra_project_model/src/sysroot.rs
@@ -101,13 +101,13 @@ fn get_or_install_rust_src(cargo_toml: &AbsPath) -> Result<AbsPathBuf> {
         return Ok(path);
     }
     let current_dir = cargo_toml.parent().unwrap();
-    let mut rustc = Command::new(ra_toolchain::rustc());
+    let mut rustc = Command::new(toolchain::rustc());
     rustc.current_dir(current_dir).args(&["--print", "sysroot"]);
     let stdout = utf8_stdout(rustc)?;
     let sysroot_path = AbsPath::assert(Path::new(stdout.trim()));
     let mut src = get_rust_src(sysroot_path);
     if src.is_none() {
-        let mut rustup = Command::new(ra_toolchain::rustup());
+        let mut rustup = Command::new(toolchain::rustup());
         rustup.current_dir(current_dir).args(&["component", "add", "rust-src"]);
         utf8_stdout(rustup)?;
         src = get_rust_src(sysroot_path);
diff --git a/crates/ra_ssr/Cargo.toml b/crates/ra_ssr/Cargo.toml
index 84e4b171e1..d0f2ae7339 100644
--- a/crates/ra_ssr/Cargo.toml
+++ b/crates/ra_ssr/Cargo.toml
@@ -11,7 +11,7 @@ repository = "https://github.com/rust-analyzer/rust-analyzer"
 doctest = false
 
 [dependencies]
-ra_text_edit = { path = "../ra_text_edit" }
+text_edit = { path = "../text_edit" }
 ra_syntax = { path = "../ra_syntax" }
 ra_db = { path = "../ra_db" }
 ra_ide_db = { path = "../ra_ide_db" }
diff --git a/crates/ra_ssr/src/replacing.rs b/crates/ra_ssr/src/replacing.rs
index 0943244ff9..74f9e7db61 100644
--- a/crates/ra_ssr/src/replacing.rs
+++ b/crates/ra_ssr/src/replacing.rs
@@ -4,8 +4,8 @@ use crate::matching::Var;
 use crate::{resolving::ResolvedRule, Match, SsrMatches};
 use ra_syntax::ast::{self, AstToken};
 use ra_syntax::{SyntaxElement, SyntaxKind, SyntaxNode, SyntaxToken, TextRange, TextSize};
-use ra_text_edit::TextEdit;
 use rustc_hash::{FxHashMap, FxHashSet};
+use text_edit::TextEdit;
 
 /// Returns a text edit that will replace each match in `matches` with its corresponding replacement
 /// template. Placeholders in the template will have been substituted with whatever they matched to
@@ -24,7 +24,7 @@ fn matches_to_edit_at_offset(
     relative_start: TextSize,
     rules: &[ResolvedRule],
 ) -> TextEdit {
-    let mut edit_builder = ra_text_edit::TextEditBuilder::default();
+    let mut edit_builder = TextEdit::builder();
     for m in &matches.matches {
         edit_builder.replace(
             m.range.range.checked_sub(relative_start).unwrap(),
diff --git a/crates/ra_syntax/Cargo.toml b/crates/ra_syntax/Cargo.toml
index fc4d7aa048..f2789e6a35 100644
--- a/crates/ra_syntax/Cargo.toml
+++ b/crates/ra_syntax/Cargo.toml
@@ -20,7 +20,7 @@ once_cell = "1.3.1"
 
 stdx = { path = "../stdx" }
 
-ra_text_edit = { path = "../ra_text_edit" }
+text_edit = { path = "../text_edit" }
 ra_parser = { path = "../ra_parser" }
 
 # This crate transitively depends on `smol_str` via `rowan`.
diff --git a/crates/ra_syntax/fuzz/Cargo.toml b/crates/ra_syntax/fuzz/Cargo.toml
index 613ad2857d..4cec3c4cd8 100644
--- a/crates/ra_syntax/fuzz/Cargo.toml
+++ b/crates/ra_syntax/fuzz/Cargo.toml
@@ -11,7 +11,7 @@ cargo-fuzz = true
 
 [dependencies]
 ra_syntax = { path = ".." }
-ra_text_edit = { path = "../../ra_text_edit" }
+text_edit = { path = "../../text_edit" }
 libfuzzer-sys = { git = "https://github.com/rust-fuzz/libfuzzer-sys.git" }
 
 # Prevent this from interfering with workspaces
diff --git a/crates/ra_syntax/src/algo.rs b/crates/ra_syntax/src/algo.rs
index 26b3c813a1..6254b38ba1 100644
--- a/crates/ra_syntax/src/algo.rs
+++ b/crates/ra_syntax/src/algo.rs
@@ -6,8 +6,8 @@ use std::{
 };
 
 use itertools::Itertools;
-use ra_text_edit::TextEditBuilder;
 use rustc_hash::FxHashMap;
+use text_edit::TextEditBuilder;
 
 use crate::{
     AstNode, Direction, NodeOrToken, SyntaxElement, SyntaxKind, SyntaxNode, SyntaxNodePtr,
diff --git a/crates/ra_syntax/src/fuzz.rs b/crates/ra_syntax/src/fuzz.rs
index 39f9b12ab2..fbb97aa273 100644
--- a/crates/ra_syntax/src/fuzz.rs
+++ b/crates/ra_syntax/src/fuzz.rs
@@ -5,7 +5,7 @@ use std::{
     str::{self, FromStr},
 };
 
-use ra_text_edit::Indel;
+use text_edit::Indel;
 
 use crate::{validation, AstNode, SourceFile, TextRange};
 
diff --git a/crates/ra_syntax/src/lib.rs b/crates/ra_syntax/src/lib.rs
index 8a4d453862..465607f550 100644
--- a/crates/ra_syntax/src/lib.rs
+++ b/crates/ra_syntax/src/lib.rs
@@ -39,8 +39,8 @@ pub mod fuzz;
 
 use std::{marker::PhantomData, sync::Arc};
 
-use ra_text_edit::Indel;
 use stdx::format_to;
+use text_edit::Indel;
 
 pub use crate::{
     algo::InsertPosition,
diff --git a/crates/ra_syntax/src/parsing/reparsing.rs b/crates/ra_syntax/src/parsing/reparsing.rs
index ed5a42ea38..6644ffca4f 100644
--- a/crates/ra_syntax/src/parsing/reparsing.rs
+++ b/crates/ra_syntax/src/parsing/reparsing.rs
@@ -7,7 +7,7 @@
 //!     and try to parse only this block.
 
 use ra_parser::Reparser;
-use ra_text_edit::Indel;
+use text_edit::Indel;
 
 use crate::{
     algo,
diff --git a/crates/rust-analyzer/Cargo.toml b/crates/rust-analyzer/Cargo.toml
index 9bc5cc6314..ef244da597 100644
--- a/crates/rust-analyzer/Cargo.toml
+++ b/crates/rust-analyzer/Cargo.toml
@@ -39,11 +39,11 @@ ra_ide = { path = "../ra_ide" }
 profile = { path = "../profile" }
 ra_project_model = { path = "../ra_project_model" }
 ra_syntax = { path = "../ra_syntax" }
-ra_text_edit = { path = "../ra_text_edit" }
+text_edit = { path = "../text_edit" }
 vfs = { path = "../vfs" }
 vfs-notify = { path = "../vfs-notify" }
 ra_cfg = { path = "../ra_cfg" }
-ra_toolchain = { path = "../ra_toolchain" }
+toolchain = { path = "../toolchain" }
 
 # This should only be used in CLI
 ra_db = { path = "../ra_db" }
diff --git a/crates/rust-analyzer/src/handlers.rs b/crates/rust-analyzer/src/handlers.rs
index d9b75eed45..07f4af3d3b 100644
--- a/crates/rust-analyzer/src/handlers.rs
+++ b/crates/rust-analyzer/src/handlers.rs
@@ -692,7 +692,7 @@ pub(crate) fn handle_formatting(
 
     let mut rustfmt = match &snap.config.rustfmt {
         RustfmtConfig::Rustfmt { extra_args } => {
-            let mut cmd = process::Command::new(ra_toolchain::rustfmt());
+            let mut cmd = process::Command::new(toolchain::rustfmt());
             cmd.args(extra_args);
             if let Some(&crate_id) = crate_ids.first() {
                 // Assume all crates are in the same edition
diff --git a/crates/ra_text_edit/Cargo.toml b/crates/text_edit/Cargo.toml
similarity index 73%
rename from crates/ra_text_edit/Cargo.toml
rename to crates/text_edit/Cargo.toml
index dbb2233504..a69b1ef2b5 100644
--- a/crates/ra_text_edit/Cargo.toml
+++ b/crates/text_edit/Cargo.toml
@@ -1,10 +1,9 @@
 [package]
-edition = "2018"
-name = "ra_text_edit"
-version = "0.1.0"
-authors = ["rust-analyzer developers"]
-publish = false
+name = "text_edit"
+version = "0.0.0"
 license = "MIT OR Apache-2.0"
+authors = ["rust-analyzer developers"]
+edition = "2018"
 
 [lib]
 doctest = false
diff --git a/crates/ra_text_edit/src/lib.rs b/crates/text_edit/src/lib.rs
similarity index 90%
rename from crates/ra_text_edit/src/lib.rs
rename to crates/text_edit/src/lib.rs
index d68791cf1f..ab8cd7fd11 100644
--- a/crates/ra_text_edit/src/lib.rs
+++ b/crates/text_edit/src/lib.rs
@@ -3,8 +3,6 @@
 //! `rust-analyzer` never mutates text itself and only sends diffs to clients,
 //! so `TextEdit` is the ultimate representation of the work done by
 //! rust-analyzer.
-use std::{slice, vec};
-
 pub use text_size::{TextRange, TextSize};
 
 /// `InsertDelete` -- a single "atomic" change to text
@@ -46,20 +44,24 @@ impl Indel {
 }
 
 impl TextEdit {
+    pub fn builder() -> TextEditBuilder {
+        TextEditBuilder::default()
+    }
+
     pub fn insert(offset: TextSize, text: String) -> TextEdit {
-        let mut builder = TextEditBuilder::default();
+        let mut builder = TextEdit::builder();
         builder.insert(offset, text);
         builder.finish()
     }
 
     pub fn delete(range: TextRange) -> TextEdit {
-        let mut builder = TextEditBuilder::default();
+        let mut builder = TextEdit::builder();
         builder.delete(range);
         builder.finish()
     }
 
     pub fn replace(range: TextRange, replace_with: String) -> TextEdit {
-        let mut builder = TextEditBuilder::default();
+        let mut builder = TextEdit::builder();
         builder.replace(range, replace_with);
         builder.finish()
     }
@@ -72,8 +74,8 @@ impl TextEdit {
         self.indels.is_empty()
     }
 
-    pub fn iter(&self) -> slice::Iter<'_, Indel> {
-        self.indels.iter()
+    pub fn iter(&self) -> std::slice::Iter<'_, Indel> {
+        self.into_iter()
     }
 
     pub fn apply(&self, text: &mut String) {
@@ -139,13 +141,22 @@ impl TextEdit {
 
 impl IntoIterator for TextEdit {
     type Item = Indel;
-    type IntoIter = vec::IntoIter<Self::Item>;
+    type IntoIter = std::vec::IntoIter<Indel>;
 
     fn into_iter(self) -> Self::IntoIter {
         self.indels.into_iter()
     }
 }
 
+impl<'a> IntoIterator for &'a TextEdit {
+    type Item = &'a Indel;
+    type IntoIter = std::slice::Iter<'a, Indel>;
+
+    fn into_iter(self) -> Self::IntoIter {
+        self.indels.iter()
+    }
+}
+
 impl TextEditBuilder {
     pub fn replace(&mut self, range: TextRange, replace_with: String) {
         self.indels.push(Indel::replace(range, replace_with))
diff --git a/crates/ra_toolchain/Cargo.toml b/crates/toolchain/Cargo.toml
similarity index 78%
rename from crates/ra_toolchain/Cargo.toml
rename to crates/toolchain/Cargo.toml
index 84b748c0a4..4856668f84 100644
--- a/crates/ra_toolchain/Cargo.toml
+++ b/crates/toolchain/Cargo.toml
@@ -1,9 +1,9 @@
 [package]
-edition = "2018"
-name = "ra_toolchain"
-version = "0.1.0"
-authors = ["rust-analyzer developers"]
+name = "toolchain"
+version = "0.0.0"
 license = "MIT OR Apache-2.0"
+authors = ["rust-analyzer developers"]
+edition = "2018"
 
 [lib]
 doctest = false
diff --git a/crates/ra_toolchain/src/lib.rs b/crates/toolchain/src/lib.rs
similarity index 93%
rename from crates/ra_toolchain/src/lib.rs
rename to crates/toolchain/src/lib.rs
index 9916e52c48..3b6886f5b5 100644
--- a/crates/ra_toolchain/src/lib.rs
+++ b/crates/toolchain/src/lib.rs
@@ -1,6 +1,4 @@
-//! This crate contains a single public function
-//! [`get_path_for_executable`](fn.get_path_for_executable.html).
-//! See docs there for more information.
+//! Discovery of `cargo` & `rustc` executables.
 use std::{env, iter, path::PathBuf};
 
 pub fn cargo() -> PathBuf {
diff --git a/editors/code/src/toolchain.ts b/editors/code/src/toolchain.ts
index 80a7915e90..a5dc3cf0cc 100644
--- a/editors/code/src/toolchain.ts
+++ b/editors/code/src/toolchain.ts
@@ -121,12 +121,12 @@ export class Cargo {
     }
 }
 
-/** Mirrors `ra_toolchain::cargo()` implementation */
+/** Mirrors `toolchain::cargo()` implementation */
 export function cargoPath(): string {
     return getPathForExecutable("cargo");
 }
 
-/** Mirrors `ra_toolchain::get_path_for_executable()` implementation */
+/** Mirrors `toolchain::get_path_for_executable()` implementation */
 export const getPathForExecutable = memoize(
     // We apply caching to decrease file-system interactions
     (executableName: "cargo" | "rustc" | "rustup"): string => {


Test patch:
diff --git a/crates/ra_proc_macro_srv/src/tests/utils.rs b/crates/ra_proc_macro_srv/src/tests/utils.rs
index dcb00671ff..1b6a0b6fb7 100644
--- a/crates/ra_proc_macro_srv/src/tests/utils.rs
+++ b/crates/ra_proc_macro_srv/src/tests/utils.rs
@@ -12,7 +12,7 @@ mod fixtures {
 
     // Use current project metadata to get the proc-macro dylib path
     pub fn dylib_path(crate_name: &str, version: &str) -> std::path::PathBuf {
-        let command = Command::new(ra_toolchain::cargo())
+        let command = Command::new(toolchain::cargo())
             .args(&["check", "--message-format", "json"])
             .output()
             .unwrap()