From 8abf5363433e977c5393bb569e2a5d559cb0a602 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 29 Aug 2018 18:03:14 +0300 Subject: Grand refactoring --- crates/libeditor/src/code_actions.rs | 15 +++++------ crates/libeditor/src/completion.rs | 3 +-- crates/libeditor/src/lib.rs | 4 +-- crates/libeditor/src/test_utils.rs | 4 +-- crates/libeditor/src/typing.rs | 48 ++++++++++++++++++++++++++++++------ 5 files changed, 54 insertions(+), 20 deletions(-) (limited to 'crates/libeditor/src') diff --git a/crates/libeditor/src/code_actions.rs b/crates/libeditor/src/code_actions.rs index 08a85f6e2..dadbd63ab 100644 --- a/crates/libeditor/src/code_actions.rs +++ b/crates/libeditor/src/code_actions.rs @@ -13,13 +13,14 @@ use libsyntax2::{ use {EditBuilder, Edit, find_node_at_offset}; +// TODO: rename to FileEdit #[derive(Debug)] -pub struct ActionResult { +pub struct LocalEdit { pub edit: Edit, pub cursor_position: Option, } -pub fn flip_comma<'a>(file: &'a File, offset: TextUnit) -> Option ActionResult + 'a> { +pub fn flip_comma<'a>(file: &'a File, offset: TextUnit) -> Option LocalEdit + 'a> { let syntax = file.syntax(); let comma = find_leaf_at_offset(syntax, offset).find(|leaf| leaf.kind() == COMMA)?; @@ -29,14 +30,14 @@ pub fn flip_comma<'a>(file: &'a File, offset: TextUnit) -> Option(file: &'a File, offset: TextUnit) -> Option ActionResult + 'a> { +pub fn add_derive<'a>(file: &'a File, offset: TextUnit) -> Option LocalEdit + 'a> { let nominal = find_node_at_offset::(file.syntax(), offset)?; Some(move || { let derive_attr = nominal @@ -56,14 +57,14 @@ pub fn add_derive<'a>(file: &'a File, offset: TextUnit) -> Option(file: &'a File, offset: TextUnit) -> Option ActionResult + 'a> { +pub fn add_impl<'a>(file: &'a File, offset: TextUnit) -> Option LocalEdit + 'a> { let nominal = find_node_at_offset::(file.syntax(), offset)?; let name = nominal.name()?; @@ -90,7 +91,7 @@ pub fn add_impl<'a>(file: &'a File, offset: TextUnit) -> Option let offset = start_offset + TextUnit::of_str(&buf); buf.push_str("\n}"); edit.insert(start_offset, buf); - ActionResult { + LocalEdit { edit: edit.finish(), cursor_position: Some(offset), } diff --git a/crates/libeditor/src/completion.rs b/crates/libeditor/src/completion.rs index fe4c9b217..d95c40773 100644 --- a/crates/libeditor/src/completion.rs +++ b/crates/libeditor/src/completion.rs @@ -12,8 +12,7 @@ use { }; #[derive(Debug)] -pub struct - CompletionItem { +pub struct CompletionItem { pub name: String, pub snippet: Option } diff --git a/crates/libeditor/src/lib.rs b/crates/libeditor/src/lib.rs index 4895f6fa9..4700ef328 100644 --- a/crates/libeditor/src/lib.rs +++ b/crates/libeditor/src/lib.rs @@ -30,11 +30,11 @@ pub use self::{ symbols::{StructureNode, file_structure, FileSymbol, file_symbols}, edit::{EditBuilder, Edit}, code_actions::{ - ActionResult, + LocalEdit, flip_comma, add_derive, add_impl, }, typing::{join_lines, on_eq_typed}, - completion::scope_completion, + completion::{scope_completion, CompletionItem}, }; #[derive(Debug)] diff --git a/crates/libeditor/src/test_utils.rs b/crates/libeditor/src/test_utils.rs index 475f560fa..037319cd0 100644 --- a/crates/libeditor/src/test_utils.rs +++ b/crates/libeditor/src/test_utils.rs @@ -1,8 +1,8 @@ use libsyntax2::{File, TextUnit}; pub use _test_utils::*; -use ActionResult; +use LocalEdit; -pub fn check_action Option> ( +pub fn check_action Option> ( before: &str, after: &str, f: F, diff --git a/crates/libeditor/src/typing.rs b/crates/libeditor/src/typing.rs index 5008b8d49..f888f3240 100644 --- a/crates/libeditor/src/typing.rs +++ b/crates/libeditor/src/typing.rs @@ -11,14 +11,14 @@ use libsyntax2::{ SyntaxKind::*, }; -use {ActionResult, EditBuilder, find_node_at_offset}; +use {LocalEdit, EditBuilder, find_node_at_offset}; -pub fn join_lines(file: &File, range: TextRange) -> ActionResult { +pub fn join_lines(file: &File, range: TextRange) -> LocalEdit { let range = if range.is_empty() { let syntax = file.syntax(); let text = syntax.text().slice(range.start()..); let pos = match text.find('\n') { - None => return ActionResult { + None => return LocalEdit { edit: EditBuilder::new().finish(), cursor_position: None }, @@ -50,13 +50,13 @@ pub fn join_lines(file: &File, range: TextRange) -> ActionResult { } eprintln!("{:?}", edit); - ActionResult { + LocalEdit { edit: edit.finish(), cursor_position: None, } } -pub fn on_eq_typed(file: &File, offset: TextUnit) -> Option { +pub fn on_eq_typed(file: &File, offset: TextUnit) -> Option { let let_stmt: ast::LetStmt = find_node_at_offset(file.syntax(), offset)?; if let_stmt.has_semi() { return None; @@ -75,7 +75,7 @@ pub fn on_eq_typed(file: &File, offset: TextUnit) -> Option { let offset = let_stmt.syntax().range().end(); let mut edit = EditBuilder::new(); edit.insert(offset, ";".to_string()); - Some(ActionResult { + Some(LocalEdit { edit: edit.finish(), cursor_position: None, }) @@ -277,7 +277,41 @@ fn foo() { }", r" fn foo() { join(type_params.type_params().filter_map(|it| it.name()).map(|it| it.text())) -}") +}"); + + do_check(r" +pub fn handle_find_matching_brace( + world: ServerWorld, + params: req::FindMatchingBraceParams, +) -> Result> { + let file_id = params.text_document.try_conv_with(&world)?; + let file = world.analysis().file_syntax(file_id); + let line_index = world.analysis().file_line_index(file_id); + let res = params.offsets + .into_iter() + .map_conv_with(&line_index) + .map(|offset| <|>{ + world.analysis().matching_brace(&file, offset).unwrap_or(offset) + }<|>) + .map_conv_with(&line_index) + .collect(); + Ok(res) +}", r" +pub fn handle_find_matching_brace( + world: ServerWorld, + params: req::FindMatchingBraceParams, +) -> Result> { + let file_id = params.text_document.try_conv_with(&world)?; + let file = world.analysis().file_syntax(file_id); + let line_index = world.analysis().file_line_index(file_id); + let res = params.offsets + .into_iter() + .map_conv_with(&line_index) + .map(|offset| world.analysis().matching_brace(&file, offset).unwrap_or(offset)) + .map_conv_with(&line_index) + .collect(); + Ok(res) +}"); } #[test] -- cgit v1.2.3