diff --git a/crates/ra_assists/src/add_derive.rs b/crates/ra_assists/src/assists/add_derive.rs similarity index 100% rename from crates/ra_assists/src/add_derive.rs rename to crates/ra_assists/src/assists/add_derive.rs diff --git a/crates/ra_assists/src/add_explicit_type.rs b/crates/ra_assists/src/assists/add_explicit_type.rs similarity index 100% rename from crates/ra_assists/src/add_explicit_type.rs rename to crates/ra_assists/src/assists/add_explicit_type.rs diff --git a/crates/ra_assists/src/add_impl.rs b/crates/ra_assists/src/assists/add_impl.rs similarity index 100% rename from crates/ra_assists/src/add_impl.rs rename to crates/ra_assists/src/assists/add_impl.rs diff --git a/crates/ra_assists/src/add_missing_impl_members.rs b/crates/ra_assists/src/assists/add_missing_impl_members.rs similarity index 98% rename from crates/ra_assists/src/add_missing_impl_members.rs rename to crates/ra_assists/src/assists/add_missing_impl_members.rs index cbeb7054f4..2894bdd8a1 100644 --- a/crates/ra_assists/src/add_missing_impl_members.rs +++ b/crates/ra_assists/src/assists/add_missing_impl_members.rs @@ -4,10 +4,7 @@ use ra_syntax::{ SmolStr, }; -use crate::{ - ast_editor::{AstBuilder, AstEditor}, - Assist, AssistCtx, AssistId, -}; +use crate::{ast_builder::AstBuilder, ast_editor::AstEditor, Assist, AssistCtx, AssistId}; #[derive(PartialEq)] enum AddMissingImplMembersMode { diff --git a/crates/ra_assists/src/auto_import.rs b/crates/ra_assists/src/assists/auto_import.rs similarity index 100% rename from crates/ra_assists/src/auto_import.rs rename to crates/ra_assists/src/assists/auto_import.rs diff --git a/crates/ra_assists/src/change_visibility.rs b/crates/ra_assists/src/assists/change_visibility.rs similarity index 100% rename from crates/ra_assists/src/change_visibility.rs rename to crates/ra_assists/src/assists/change_visibility.rs diff --git a/crates/ra_assists/src/fill_match_arms.rs b/crates/ra_assists/src/assists/fill_match_arms.rs similarity index 98% rename from crates/ra_assists/src/fill_match_arms.rs rename to crates/ra_assists/src/assists/fill_match_arms.rs index f59062bb92..771aa625fc 100644 --- a/crates/ra_assists/src/fill_match_arms.rs +++ b/crates/ra_assists/src/assists/fill_match_arms.rs @@ -3,7 +3,7 @@ use std::iter; use hir::{db::HirDatabase, Adt, HasSource}; use ra_syntax::ast::{self, AstNode, NameOwner}; -use crate::{ast_editor::AstBuilder, Assist, AssistCtx, AssistId}; +use crate::{ast_builder::AstBuilder, Assist, AssistCtx, AssistId}; pub(crate) fn fill_match_arms(mut ctx: AssistCtx) -> Option { let match_expr = ctx.node_at_offset::()?; diff --git a/crates/ra_assists/src/flip_binexpr.rs b/crates/ra_assists/src/assists/flip_binexpr.rs similarity index 100% rename from crates/ra_assists/src/flip_binexpr.rs rename to crates/ra_assists/src/assists/flip_binexpr.rs diff --git a/crates/ra_assists/src/flip_comma.rs b/crates/ra_assists/src/assists/flip_comma.rs similarity index 100% rename from crates/ra_assists/src/flip_comma.rs rename to crates/ra_assists/src/assists/flip_comma.rs diff --git a/crates/ra_assists/src/inline_local_variable.rs b/crates/ra_assists/src/assists/inline_local_variable.rs similarity index 100% rename from crates/ra_assists/src/inline_local_variable.rs rename to crates/ra_assists/src/assists/inline_local_variable.rs diff --git a/crates/ra_assists/src/introduce_variable.rs b/crates/ra_assists/src/assists/introduce_variable.rs similarity index 100% rename from crates/ra_assists/src/introduce_variable.rs rename to crates/ra_assists/src/assists/introduce_variable.rs diff --git a/crates/ra_assists/src/merge_match_arms.rs b/crates/ra_assists/src/assists/merge_match_arms.rs similarity index 100% rename from crates/ra_assists/src/merge_match_arms.rs rename to crates/ra_assists/src/assists/merge_match_arms.rs diff --git a/crates/ra_assists/src/move_bounds.rs b/crates/ra_assists/src/assists/move_bounds.rs similarity index 98% rename from crates/ra_assists/src/move_bounds.rs rename to crates/ra_assists/src/assists/move_bounds.rs index 526de1d983..aa9036feda 100644 --- a/crates/ra_assists/src/move_bounds.rs +++ b/crates/ra_assists/src/assists/move_bounds.rs @@ -6,7 +6,7 @@ use ra_syntax::{ TextRange, }; -use crate::{ast_editor::AstBuilder, Assist, AssistCtx, AssistId}; +use crate::{ast_builder::AstBuilder, Assist, AssistCtx, AssistId}; pub(crate) fn move_bounds_to_where_clause(mut ctx: AssistCtx) -> Option { let type_param_list = ctx.node_at_offset::()?; diff --git a/crates/ra_assists/src/move_guard.rs b/crates/ra_assists/src/assists/move_guard.rs similarity index 100% rename from crates/ra_assists/src/move_guard.rs rename to crates/ra_assists/src/assists/move_guard.rs diff --git a/crates/ra_assists/src/raw_string.rs b/crates/ra_assists/src/assists/raw_string.rs similarity index 100% rename from crates/ra_assists/src/raw_string.rs rename to crates/ra_assists/src/assists/raw_string.rs diff --git a/crates/ra_assists/src/remove_dbg.rs b/crates/ra_assists/src/assists/remove_dbg.rs similarity index 100% rename from crates/ra_assists/src/remove_dbg.rs rename to crates/ra_assists/src/assists/remove_dbg.rs diff --git a/crates/ra_assists/src/replace_if_let_with_match.rs b/crates/ra_assists/src/assists/replace_if_let_with_match.rs similarity index 100% rename from crates/ra_assists/src/replace_if_let_with_match.rs rename to crates/ra_assists/src/assists/replace_if_let_with_match.rs diff --git a/crates/ra_assists/src/split_import.rs b/crates/ra_assists/src/assists/split_import.rs similarity index 100% rename from crates/ra_assists/src/split_import.rs rename to crates/ra_assists/src/assists/split_import.rs diff --git a/crates/ra_assists/src/ast_builder.rs b/crates/ra_assists/src/ast_builder.rs new file mode 100644 index 0000000000..e4ea1fca9d --- /dev/null +++ b/crates/ra_assists/src/ast_builder.rs @@ -0,0 +1,229 @@ +use itertools::Itertools; + +use hir::Name; +use ra_syntax::{ast, AstNode, SourceFile}; + +pub struct AstBuilder { + _phantom: std::marker::PhantomData, +} + +impl AstBuilder { + pub fn from_name(name: &Name) -> ast::RecordField { + ast_node_from_file_text(&format!("fn f() {{ S {{ {}: (), }} }}", name)) + } + + fn from_text(text: &str) -> ast::RecordField { + ast_node_from_file_text(&format!("fn f() {{ S {{ {}, }} }}", text)) + } + + pub fn from_pieces(name: &ast::NameRef, expr: Option<&ast::Expr>) -> ast::RecordField { + match expr { + Some(expr) => Self::from_text(&format!("{}: {}", name.syntax(), expr.syntax())), + None => Self::from_text(&name.syntax().to_string()), + } + } +} + +impl AstBuilder { + fn from_text(text: &str) -> ast::Block { + ast_node_from_file_text(&format!("fn f() {}", text)) + } + + pub fn single_expr(e: &ast::Expr) -> ast::Block { + Self::from_text(&format!("{{ {} }}", e.syntax())) + } +} + +impl AstBuilder { + fn from_text(text: &str) -> ast::Expr { + ast_node_from_file_text(&format!("const C: () = {};", text)) + } + + pub fn unit() -> ast::Expr { + Self::from_text("()") + } + + pub fn unimplemented() -> ast::Expr { + Self::from_text("unimplemented!()") + } +} + +impl AstBuilder { + pub fn new(text: &str) -> ast::NameRef { + ast_node_from_file_text(&format!("fn f() {{ {}; }}", text)) + } +} + +impl AstBuilder { + fn from_text(text: &str) -> ast::Path { + ast_node_from_file_text(text) + } + + pub fn from_name(name: ast::Name) -> ast::Path { + let name = name.syntax().to_string(); + Self::from_text(name.as_str()) + } + + pub fn from_pieces(enum_name: ast::Name, var_name: ast::Name) -> ast::Path { + Self::from_text(&format!("{}::{}", enum_name.syntax(), var_name.syntax())) + } +} + +impl AstBuilder { + fn from_text(text: &str) -> ast::BindPat { + ast_node_from_file_text(&format!("fn f({}: ())", text)) + } + + pub fn from_name(name: &ast::Name) -> ast::BindPat { + Self::from_text(name.text()) + } +} + +impl AstBuilder { + fn from_text(text: &str) -> ast::PlaceholderPat { + ast_node_from_file_text(&format!("fn f({}: ())", text)) + } + + pub fn placeholder() -> ast::PlaceholderPat { + Self::from_text("_") + } +} + +impl AstBuilder { + fn from_text(text: &str) -> ast::TupleStructPat { + ast_node_from_file_text(&format!("fn f({}: ())", text)) + } + + pub fn from_pieces( + path: &ast::Path, + pats: impl Iterator, + ) -> ast::TupleStructPat { + let pats_str = pats.map(|p| p.syntax().to_string()).collect::>().join(", "); + Self::from_text(&format!("{}({})", path.syntax(), pats_str)) + } +} + +impl AstBuilder { + fn from_text(text: &str) -> ast::RecordPat { + ast_node_from_file_text(&format!("fn f({}: ())", text)) + } + + pub fn from_pieces(path: &ast::Path, pats: impl Iterator) -> ast::RecordPat { + let pats_str = pats.map(|p| p.syntax().to_string()).collect::>().join(", "); + Self::from_text(&format!("{}{{ {} }}", path.syntax(), pats_str)) + } +} + +impl AstBuilder { + fn from_text(text: &str) -> ast::PathPat { + ast_node_from_file_text(&format!("fn f({}: ())", text)) + } + + pub fn from_path(path: &ast::Path) -> ast::PathPat { + let path_str = path.syntax().text().to_string(); + Self::from_text(path_str.as_str()) + } +} + +impl AstBuilder { + fn from_text(text: &str) -> ast::MatchArm { + ast_node_from_file_text(&format!("fn f() {{ match () {{{}}} }}", text)) + } + + pub fn from_pieces(pats: impl Iterator, expr: &ast::Expr) -> ast::MatchArm { + let pats_str = pats.map(|p| p.syntax().to_string()).join(" | "); + Self::from_text(&format!("{} => {}", pats_str, expr.syntax())) + } +} + +impl AstBuilder { + fn from_text(text: &str) -> ast::MatchArmList { + ast_node_from_file_text(&format!("fn f() {{ match () {{{}}} }}", text)) + } + + pub fn from_arms(arms: impl Iterator) -> ast::MatchArmList { + let arms_str = arms.map(|arm| format!("\n {}", arm.syntax())).join(","); + Self::from_text(&format!("{},\n", arms_str)) + } +} + +impl AstBuilder { + fn from_text(text: &str) -> ast::WherePred { + ast_node_from_file_text(&format!("fn f() where {} {{ }}", text)) + } + + pub fn from_pieces( + path: ast::Path, + bounds: impl Iterator, + ) -> ast::WherePred { + let bounds = bounds.map(|b| b.syntax().to_string()).collect::>().join(" + "); + Self::from_text(&format!("{}: {}", path.syntax(), bounds)) + } +} + +impl AstBuilder { + fn from_text(text: &str) -> ast::WhereClause { + ast_node_from_file_text(&format!("fn f() where {} {{ }}", text)) + } + + pub fn from_predicates(preds: impl Iterator) -> ast::WhereClause { + let preds = preds.map(|p| p.syntax().to_string()).collect::>().join(", "); + Self::from_text(preds.as_str()) + } +} + +fn ast_node_from_file_text(text: &str) -> N { + let parse = SourceFile::parse(text); + let res = parse.tree().syntax().descendants().find_map(N::cast).unwrap(); + res +} + +pub(crate) mod tokens { + use once_cell::sync::Lazy; + use ra_syntax::{AstNode, Parse, SourceFile, SyntaxKind::*, SyntaxToken, T}; + + static SOURCE_FILE: Lazy> = Lazy::new(|| SourceFile::parse(",\n; ;")); + + pub(crate) fn comma() -> SyntaxToken { + SOURCE_FILE + .tree() + .syntax() + .descendants_with_tokens() + .filter_map(|it| it.into_token()) + .find(|it| it.kind() == T![,]) + .unwrap() + } + + pub(crate) fn single_space() -> SyntaxToken { + SOURCE_FILE + .tree() + .syntax() + .descendants_with_tokens() + .filter_map(|it| it.into_token()) + .find(|it| it.kind() == WHITESPACE && it.text().as_str() == " ") + .unwrap() + } + + #[allow(unused)] + pub(crate) fn single_newline() -> SyntaxToken { + SOURCE_FILE + .tree() + .syntax() + .descendants_with_tokens() + .filter_map(|it| it.into_token()) + .find(|it| it.kind() == WHITESPACE && it.text().as_str() == "\n") + .unwrap() + } + + pub(crate) struct WsBuilder(SourceFile); + + impl WsBuilder { + pub(crate) fn new(text: &str) -> WsBuilder { + WsBuilder(SourceFile::parse(text).ok().unwrap()) + } + pub(crate) fn ws(&self) -> SyntaxToken { + self.0.syntax().first_child_or_token().unwrap().into_token().unwrap() + } + } + +} diff --git a/crates/ra_assists/src/ast_editor.rs b/crates/ra_assists/src/ast_editor.rs index a710edce8e..81621afef8 100644 --- a/crates/ra_assists/src/ast_editor.rs +++ b/crates/ra_assists/src/ast_editor.rs @@ -1,18 +1,18 @@ use std::{iter, ops::RangeInclusive}; use arrayvec::ArrayVec; -use itertools::Itertools; -use hir::Name; use ra_fmt::leading_indent; use ra_syntax::{ algo::{insert_children, replace_children}, - ast, AstNode, Direction, InsertPosition, SourceFile, SyntaxElement, + ast, AstNode, Direction, InsertPosition, SyntaxElement, SyntaxKind::*, T, }; use ra_text_edit::TextEditBuilder; +use crate::ast_builder::tokens; + pub struct AstEditor { original_ast: N, ast: N, @@ -240,228 +240,3 @@ impl AstEditor { self.ast = self.replace_children(replace_range, to_insert.into_iter()) } } - -pub struct AstBuilder { - _phantom: std::marker::PhantomData, -} - -impl AstBuilder { - pub fn from_name(name: &Name) -> ast::RecordField { - ast_node_from_file_text(&format!("fn f() {{ S {{ {}: (), }} }}", name)) - } - - fn from_text(text: &str) -> ast::RecordField { - ast_node_from_file_text(&format!("fn f() {{ S {{ {}, }} }}", text)) - } - - pub fn from_pieces(name: &ast::NameRef, expr: Option<&ast::Expr>) -> ast::RecordField { - match expr { - Some(expr) => Self::from_text(&format!("{}: {}", name.syntax(), expr.syntax())), - None => Self::from_text(&name.syntax().to_string()), - } - } -} - -impl AstBuilder { - fn from_text(text: &str) -> ast::Block { - ast_node_from_file_text(&format!("fn f() {}", text)) - } - - pub fn single_expr(e: &ast::Expr) -> ast::Block { - Self::from_text(&format!("{{ {} }}", e.syntax())) - } -} - -impl AstBuilder { - fn from_text(text: &str) -> ast::Expr { - ast_node_from_file_text(&format!("const C: () = {};", text)) - } - - pub fn unit() -> ast::Expr { - Self::from_text("()") - } - - pub fn unimplemented() -> ast::Expr { - Self::from_text("unimplemented!()") - } -} - -impl AstBuilder { - pub fn new(text: &str) -> ast::NameRef { - ast_node_from_file_text(&format!("fn f() {{ {}; }}", text)) - } -} - -impl AstBuilder { - fn from_text(text: &str) -> ast::Path { - ast_node_from_file_text(text) - } - - pub fn from_name(name: ast::Name) -> ast::Path { - let name = name.syntax().to_string(); - Self::from_text(name.as_str()) - } - - pub fn from_pieces(enum_name: ast::Name, var_name: ast::Name) -> ast::Path { - Self::from_text(&format!("{}::{}", enum_name.syntax(), var_name.syntax())) - } -} - -impl AstBuilder { - fn from_text(text: &str) -> ast::BindPat { - ast_node_from_file_text(&format!("fn f({}: ())", text)) - } - - pub fn from_name(name: &ast::Name) -> ast::BindPat { - Self::from_text(name.text()) - } -} - -impl AstBuilder { - fn from_text(text: &str) -> ast::PlaceholderPat { - ast_node_from_file_text(&format!("fn f({}: ())", text)) - } - - pub fn placeholder() -> ast::PlaceholderPat { - Self::from_text("_") - } -} - -impl AstBuilder { - fn from_text(text: &str) -> ast::TupleStructPat { - ast_node_from_file_text(&format!("fn f({}: ())", text)) - } - - pub fn from_pieces( - path: &ast::Path, - pats: impl Iterator, - ) -> ast::TupleStructPat { - let pats_str = pats.map(|p| p.syntax().to_string()).collect::>().join(", "); - Self::from_text(&format!("{}({})", path.syntax(), pats_str)) - } -} - -impl AstBuilder { - fn from_text(text: &str) -> ast::RecordPat { - ast_node_from_file_text(&format!("fn f({}: ())", text)) - } - - pub fn from_pieces(path: &ast::Path, pats: impl Iterator) -> ast::RecordPat { - let pats_str = pats.map(|p| p.syntax().to_string()).collect::>().join(", "); - Self::from_text(&format!("{}{{ {} }}", path.syntax(), pats_str)) - } -} - -impl AstBuilder { - fn from_text(text: &str) -> ast::PathPat { - ast_node_from_file_text(&format!("fn f({}: ())", text)) - } - - pub fn from_path(path: &ast::Path) -> ast::PathPat { - let path_str = path.syntax().text().to_string(); - Self::from_text(path_str.as_str()) - } -} - -impl AstBuilder { - fn from_text(text: &str) -> ast::MatchArm { - ast_node_from_file_text(&format!("fn f() {{ match () {{{}}} }}", text)) - } - - pub fn from_pieces(pats: impl Iterator, expr: &ast::Expr) -> ast::MatchArm { - let pats_str = pats.map(|p| p.syntax().to_string()).join(" | "); - Self::from_text(&format!("{} => {}", pats_str, expr.syntax())) - } -} - -impl AstBuilder { - fn from_text(text: &str) -> ast::MatchArmList { - ast_node_from_file_text(&format!("fn f() {{ match () {{{}}} }}", text)) - } - - pub fn from_arms(arms: impl Iterator) -> ast::MatchArmList { - let arms_str = arms.map(|arm| format!("\n {}", arm.syntax())).join(","); - Self::from_text(&format!("{},\n", arms_str)) - } -} - -impl AstBuilder { - fn from_text(text: &str) -> ast::WherePred { - ast_node_from_file_text(&format!("fn f() where {} {{ }}", text)) - } - - pub fn from_pieces( - path: ast::Path, - bounds: impl Iterator, - ) -> ast::WherePred { - let bounds = bounds.map(|b| b.syntax().to_string()).collect::>().join(" + "); - Self::from_text(&format!("{}: {}", path.syntax(), bounds)) - } -} - -impl AstBuilder { - fn from_text(text: &str) -> ast::WhereClause { - ast_node_from_file_text(&format!("fn f() where {} {{ }}", text)) - } - - pub fn from_predicates(preds: impl Iterator) -> ast::WhereClause { - let preds = preds.map(|p| p.syntax().to_string()).collect::>().join(", "); - Self::from_text(preds.as_str()) - } -} - -fn ast_node_from_file_text(text: &str) -> N { - let parse = SourceFile::parse(text); - let res = parse.tree().syntax().descendants().find_map(N::cast).unwrap(); - res -} - -mod tokens { - use once_cell::sync::Lazy; - use ra_syntax::{AstNode, Parse, SourceFile, SyntaxKind::*, SyntaxToken, T}; - - static SOURCE_FILE: Lazy> = Lazy::new(|| SourceFile::parse(",\n; ;")); - - pub(crate) fn comma() -> SyntaxToken { - SOURCE_FILE - .tree() - .syntax() - .descendants_with_tokens() - .filter_map(|it| it.into_token()) - .find(|it| it.kind() == T![,]) - .unwrap() - } - - pub(crate) fn single_space() -> SyntaxToken { - SOURCE_FILE - .tree() - .syntax() - .descendants_with_tokens() - .filter_map(|it| it.into_token()) - .find(|it| it.kind() == WHITESPACE && it.text().as_str() == " ") - .unwrap() - } - - #[allow(unused)] - pub(crate) fn single_newline() -> SyntaxToken { - SOURCE_FILE - .tree() - .syntax() - .descendants_with_tokens() - .filter_map(|it| it.into_token()) - .find(|it| it.kind() == WHITESPACE && it.text().as_str() == "\n") - .unwrap() - } - - pub(crate) struct WsBuilder(SourceFile); - - impl WsBuilder { - pub(crate) fn new(text: &str) -> WsBuilder { - WsBuilder(SourceFile::parse(text).ok().unwrap()) - } - pub(crate) fn ws(&self) -> SyntaxToken { - self.0.syntax().first_child_or_token().unwrap().into_token().unwrap() - } - } - -} diff --git a/crates/ra_assists/src/lib.rs b/crates/ra_assists/src/lib.rs index 756acf4153..71b0170769 100644 --- a/crates/ra_assists/src/lib.rs +++ b/crates/ra_assists/src/lib.rs @@ -8,6 +8,7 @@ mod assist_ctx; mod marks; pub mod ast_editor; +pub mod ast_builder; use itertools::Itertools; @@ -17,6 +18,7 @@ use ra_syntax::{TextRange, TextUnit}; use ra_text_edit::TextEdit; pub(crate) use crate::assist_ctx::{Assist, AssistCtx}; +pub use crate::assists::auto_import::auto_import_text_edit; /// Unique identifier of the assist, should not be shown to the user /// directly. @@ -46,7 +48,7 @@ where H: HirDatabase + 'static, { AssistCtx::with_ctx(db, range, false, |ctx| { - all_assists() + assists::all() .iter() .filter_map(|f| f(ctx.clone())) .map(|a| match a { @@ -68,7 +70,7 @@ where use std::cmp::Ordering; AssistCtx::with_ctx(db, range, true, |ctx| { - let mut a = all_assists() + let mut a = assists::all() .iter() .filter_map(|f| f(ctx.clone())) .map(|a| match a { @@ -86,51 +88,56 @@ where }) } -mod add_derive; -mod add_explicit_type; -mod add_impl; -mod flip_comma; -mod flip_binexpr; -mod change_visibility; -mod fill_match_arms; -mod merge_match_arms; -mod introduce_variable; -mod inline_local_variable; -mod raw_string; -mod replace_if_let_with_match; -mod split_import; -mod remove_dbg; -pub mod auto_import; -mod add_missing_impl_members; -mod move_guard; -mod move_bounds; +mod assists { + use crate::{Assist, AssistCtx}; + use hir::db::HirDatabase; -fn all_assists() -> &'static [fn(AssistCtx) -> Option] { - &[ - add_derive::add_derive, - add_explicit_type::add_explicit_type, - add_impl::add_impl, - change_visibility::change_visibility, - fill_match_arms::fill_match_arms, - merge_match_arms::merge_match_arms, - flip_comma::flip_comma, - flip_binexpr::flip_binexpr, - introduce_variable::introduce_variable, - replace_if_let_with_match::replace_if_let_with_match, - split_import::split_import, - remove_dbg::remove_dbg, - auto_import::auto_import, - add_missing_impl_members::add_missing_impl_members, - add_missing_impl_members::add_missing_default_members, - inline_local_variable::inline_local_varialbe, - move_guard::move_guard_to_arm_body, - move_guard::move_arm_cond_to_match_guard, - move_bounds::move_bounds_to_where_clause, - raw_string::add_hash, - raw_string::make_raw_string, - raw_string::make_usual_string, - raw_string::remove_hash, - ] + mod add_derive; + mod add_explicit_type; + mod add_impl; + mod flip_comma; + mod flip_binexpr; + mod change_visibility; + mod fill_match_arms; + mod merge_match_arms; + mod introduce_variable; + mod inline_local_variable; + mod raw_string; + mod replace_if_let_with_match; + mod split_import; + mod remove_dbg; + pub(crate) mod auto_import; + mod add_missing_impl_members; + mod move_guard; + mod move_bounds; + + pub(crate) fn all() -> &'static [fn(AssistCtx) -> Option] { + &[ + add_derive::add_derive, + add_explicit_type::add_explicit_type, + add_impl::add_impl, + change_visibility::change_visibility, + fill_match_arms::fill_match_arms, + merge_match_arms::merge_match_arms, + flip_comma::flip_comma, + flip_binexpr::flip_binexpr, + introduce_variable::introduce_variable, + replace_if_let_with_match::replace_if_let_with_match, + split_import::split_import, + remove_dbg::remove_dbg, + auto_import::auto_import, + add_missing_impl_members::add_missing_impl_members, + add_missing_impl_members::add_missing_default_members, + inline_local_variable::inline_local_varialbe, + move_guard::move_guard_to_arm_body, + move_guard::move_arm_cond_to_match_guard, + move_bounds::move_bounds_to_where_clause, + raw_string::add_hash, + raw_string::make_raw_string, + raw_string::make_usual_string, + raw_string::remove_hash, + ] + } } #[cfg(test)] diff --git a/crates/ra_ide_api/src/completion/complete_scope.rs b/crates/ra_ide_api/src/completion/complete_scope.rs index c1f48b0263..cb70a1f212 100644 --- a/crates/ra_ide_api/src/completion/complete_scope.rs +++ b/crates/ra_ide_api/src/completion/complete_scope.rs @@ -1,4 +1,4 @@ -use ra_assists::auto_import; +use ra_assists::auto_import_text_edit; use ra_syntax::{ast, AstNode, SmolStr}; use ra_text_edit::TextEditBuilder; use rustc_hash::FxHashMap; @@ -23,7 +23,7 @@ pub(super) fn complete_scope(acc: &mut Completions, ctx: &CompletionContext) { let edit = { let mut builder = TextEditBuilder::default(); builder.replace(ctx.source_range(), name.to_string()); - auto_import::auto_import_text_edit( + auto_import_text_edit( &ctx.token.parent(), &ctx.token.parent(), &path, diff --git a/crates/ra_ide_api/src/diagnostics.rs b/crates/ra_ide_api/src/diagnostics.rs index 93e1e7c2d4..30b95a2150 100644 --- a/crates/ra_ide_api/src/diagnostics.rs +++ b/crates/ra_ide_api/src/diagnostics.rs @@ -2,7 +2,7 @@ use std::cell::RefCell; use hir::diagnostics::{AstDiagnostic, Diagnostic as _, DiagnosticSink}; use itertools::Itertools; -use ra_assists::ast_editor::{AstBuilder, AstEditor}; +use ra_assists::{ast_builder::AstBuilder, ast_editor::AstEditor}; use ra_db::SourceDatabase; use ra_prof::profile; use ra_syntax::{