From 58e77660deae23f0a2f5a7c42f52ec7cab707e57 Mon Sep 17 00:00:00 2001 From: Wilco Kusee Date: Thu, 21 Mar 2019 19:51:42 +0100 Subject: [PATCH 1/3] Move join_lines to ra_ide_api --- Cargo.lock | 1 + crates/ra_ide_api/Cargo.toml | 1 + crates/{ra_ide_api_light => ra_ide_api}/src/join_lines.rs | 5 ++--- crates/ra_ide_api/src/lib.rs | 8 ++++---- crates/{ra_ide_api_light => ra_ide_api}/src/test_utils.rs | 0 crates/ra_ide_api_light/src/lib.rs | 6 +----- crates/ra_ide_api_light/src/typing.rs | 2 +- 7 files changed, 10 insertions(+), 13 deletions(-) rename crates/{ra_ide_api_light => ra_ide_api}/src/join_lines.rs (99%) rename crates/{ra_ide_api_light => ra_ide_api}/src/test_utils.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index 9c7afe74b0..eafe8d64b5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1008,6 +1008,7 @@ dependencies = [ "proptest 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "ra_assists 0.1.0", "ra_db 0.1.0", + "ra_fmt 0.1.0", "ra_hir 0.1.0", "ra_ide_api_light 0.1.0", "ra_syntax 0.1.0", diff --git a/crates/ra_ide_api/Cargo.toml b/crates/ra_ide_api/Cargo.toml index ac8c8057bc..8bd5eec2b3 100644 --- a/crates/ra_ide_api/Cargo.toml +++ b/crates/ra_ide_api/Cargo.toml @@ -23,6 +23,7 @@ ra_syntax = { path = "../ra_syntax" } ra_ide_api_light = { path = "../ra_ide_api_light" } ra_text_edit = { path = "../ra_text_edit" } ra_db = { path = "../ra_db" } +ra_fmt = { path = "../ra_fmt" } hir = { path = "../ra_hir", package = "ra_hir" } test_utils = { path = "../test_utils" } ra_assists = { path = "../ra_assists" } diff --git a/crates/ra_ide_api_light/src/join_lines.rs b/crates/ra_ide_api/src/join_lines.rs similarity index 99% rename from crates/ra_ide_api_light/src/join_lines.rs rename to crates/ra_ide_api/src/join_lines.rs index b5bcd62fb2..d6274dc97f 100644 --- a/crates/ra_ide_api_light/src/join_lines.rs +++ b/crates/ra_ide_api/src/join_lines.rs @@ -9,9 +9,8 @@ use ra_syntax::{ use ra_fmt::{ compute_ws, extract_trivial_expression }; -use crate::{ - LocalEdit, TextEditBuilder, -}; +use ra_text_edit::TextEditBuilder; +use ra_ide_api_light::LocalEdit; pub fn join_lines(file: &SourceFile, range: TextRange) -> LocalEdit { let range = if range.is_empty() { diff --git a/crates/ra_ide_api/src/lib.rs b/crates/ra_ide_api/src/lib.rs index d6f63490dc..9e76dabff7 100644 --- a/crates/ra_ide_api/src/lib.rs +++ b/crates/ra_ide_api/src/lib.rs @@ -36,9 +36,12 @@ mod syntax_tree; mod line_index; mod folding_ranges; mod line_index_utils; +mod join_lines; #[cfg(test)] mod marks; +#[cfg(test)] +mod test_utils; use std::sync::Arc; @@ -276,10 +279,7 @@ impl Analysis { /// stuff like trailing commas. pub fn join_lines(&self, frange: FileRange) -> SourceChange { let file = self.db.parse(frange.file_id); - SourceChange::from_local_edit( - frange.file_id, - ra_ide_api_light::join_lines(&file, frange.range), - ) + SourceChange::from_local_edit(frange.file_id, join_lines::join_lines(&file, frange.range)) } /// Returns an edit which should be applied when opening a new line, fixing diff --git a/crates/ra_ide_api_light/src/test_utils.rs b/crates/ra_ide_api/src/test_utils.rs similarity index 100% rename from crates/ra_ide_api_light/src/test_utils.rs rename to crates/ra_ide_api/src/test_utils.rs diff --git a/crates/ra_ide_api_light/src/lib.rs b/crates/ra_ide_api_light/src/lib.rs index 4036a598e5..f21a91e185 100644 --- a/crates/ra_ide_api_light/src/lib.rs +++ b/crates/ra_ide_api_light/src/lib.rs @@ -4,9 +4,6 @@ //! an edit or some auxiliary info. mod structure; -#[cfg(test)] -mod test_utils; -mod join_lines; mod typing; use rustc_hash::FxHashSet; @@ -20,7 +17,6 @@ use ra_syntax::{ pub use crate::{ structure::{file_structure, StructureNode}, - join_lines::join_lines, typing::{on_enter, on_dot_typed, on_eq_typed}, }; @@ -118,7 +114,7 @@ mod tests { use ra_syntax::AstNode; use insta::assert_debug_snapshot_matches; - use crate::test_utils::{add_cursor, assert_eq_text, extract_offset}; + use test_utils::{add_cursor, assert_eq_text, extract_offset}; use super::*; diff --git a/crates/ra_ide_api_light/src/typing.rs b/crates/ra_ide_api_light/src/typing.rs index 9dd9f1c1d9..c69270333c 100644 --- a/crates/ra_ide_api_light/src/typing.rs +++ b/crates/ra_ide_api_light/src/typing.rs @@ -118,7 +118,7 @@ pub fn on_dot_typed(file: &SourceFile, dot_offset: TextUnit) -> Option Date: Thu, 21 Mar 2019 21:42:22 +0100 Subject: [PATCH 2/3] Remove LocalEdit usage --- crates/ra_ide_api/src/join_lines.rs | 24 +++++++++--------------- crates/ra_ide_api/src/lib.rs | 9 ++++++++- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/crates/ra_ide_api/src/join_lines.rs b/crates/ra_ide_api/src/join_lines.rs index d6274dc97f..6e84e4b105 100644 --- a/crates/ra_ide_api/src/join_lines.rs +++ b/crates/ra_ide_api/src/join_lines.rs @@ -1,4 +1,5 @@ use itertools::Itertools; +use ra_db::FileRange; use ra_syntax::{ SourceFile, TextRange, TextUnit, AstNode, SyntaxNode, SyntaxKind::{self, WHITESPACE, COMMA, R_CURLY, R_PAREN, R_BRACK}, @@ -9,26 +10,19 @@ use ra_syntax::{ use ra_fmt::{ compute_ws, extract_trivial_expression }; -use ra_text_edit::TextEditBuilder; -use ra_ide_api_light::LocalEdit; +use ra_text_edit::{TextEdit, TextEditBuilder}; -pub fn join_lines(file: &SourceFile, range: TextRange) -> LocalEdit { - let range = if range.is_empty() { +pub fn join_lines(file: &SourceFile, frange: FileRange) -> TextEdit { + let range = if frange.range.is_empty() { let syntax = file.syntax(); - let text = syntax.text().slice(range.start()..); + let text = syntax.text().slice(frange.range.start()..); let pos = match text.find('\n') { - None => { - return LocalEdit { - label: "join lines".to_string(), - edit: TextEditBuilder::default().finish(), - cursor_position: None, - }; - } + None => return TextEditBuilder::default().finish(), Some(pos) => pos, }; - TextRange::offset_len(range.start() + pos, TextUnit::of_char('\n')) + TextRange::offset_len(frange.range.start() + pos, TextUnit::of_char('\n')) } else { - range + frange.range }; let node = find_covering_node(file.syntax(), range); @@ -51,7 +45,7 @@ pub fn join_lines(file: &SourceFile, range: TextRange) -> LocalEdit { } } - LocalEdit { label: "join lines".to_string(), edit: edit.finish(), cursor_position: None } + edit.finish() } fn remove_newline( diff --git a/crates/ra_ide_api/src/lib.rs b/crates/ra_ide_api/src/lib.rs index 9e76dabff7..d4dba1eeb4 100644 --- a/crates/ra_ide_api/src/lib.rs +++ b/crates/ra_ide_api/src/lib.rs @@ -279,7 +279,14 @@ impl Analysis { /// stuff like trailing commas. pub fn join_lines(&self, frange: FileRange) -> SourceChange { let file = self.db.parse(frange.file_id); - SourceChange::from_local_edit(frange.file_id, join_lines::join_lines(&file, frange.range)) + let file_edit = + SourceFileEdit { file_id: frange.file_id, edit: join_lines::join_lines(&file, frange) }; + SourceChange { + label: "join lines".to_string(), + source_file_edits: vec![file_edit], + file_system_edits: vec![], + cursor_position: None, + } } /// Returns an edit which should be applied when opening a new line, fixing From 01bca7114c0567961c875a1df5a60748cd872073 Mon Sep 17 00:00:00 2001 From: Wilco Kusee Date: Fri, 22 Mar 2019 17:10:20 +0100 Subject: [PATCH 3/3] Simplify changes and fix tests --- crates/ra_ide_api/src/join_lines.rs | 13 ++++++------- crates/ra_ide_api/src/lib.rs | 6 ++++-- crates/ra_ide_api/src/test_utils.rs | 15 +++++---------- 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/crates/ra_ide_api/src/join_lines.rs b/crates/ra_ide_api/src/join_lines.rs index 6e84e4b105..8fb3eaa064 100644 --- a/crates/ra_ide_api/src/join_lines.rs +++ b/crates/ra_ide_api/src/join_lines.rs @@ -1,5 +1,4 @@ use itertools::Itertools; -use ra_db::FileRange; use ra_syntax::{ SourceFile, TextRange, TextUnit, AstNode, SyntaxNode, SyntaxKind::{self, WHITESPACE, COMMA, R_CURLY, R_PAREN, R_BRACK}, @@ -12,17 +11,17 @@ use ra_fmt::{ }; use ra_text_edit::{TextEdit, TextEditBuilder}; -pub fn join_lines(file: &SourceFile, frange: FileRange) -> TextEdit { - let range = if frange.range.is_empty() { +pub fn join_lines(file: &SourceFile, range: TextRange) -> TextEdit { + let range = if range.is_empty() { let syntax = file.syntax(); - let text = syntax.text().slice(frange.range.start()..); + let text = syntax.text().slice(range.start()..); let pos = match text.find('\n') { None => return TextEditBuilder::default().finish(), Some(pos) => pos, }; - TextRange::offset_len(frange.range.start() + pos, TextUnit::of_char('\n')) + TextRange::offset_len(range.start() + pos, TextUnit::of_char('\n')) } else { - frange.range + range }; let node = find_covering_node(file.syntax(), range); @@ -507,7 +506,7 @@ fn foo() { let (sel, before) = extract_range(before); let file = SourceFile::parse(&before); let result = join_lines(&file, sel); - let actual = result.edit.apply(&before); + let actual = result.apply(&before); assert_eq_text!(after, &actual); } diff --git a/crates/ra_ide_api/src/lib.rs b/crates/ra_ide_api/src/lib.rs index d4dba1eeb4..a838c30da7 100644 --- a/crates/ra_ide_api/src/lib.rs +++ b/crates/ra_ide_api/src/lib.rs @@ -279,8 +279,10 @@ impl Analysis { /// stuff like trailing commas. pub fn join_lines(&self, frange: FileRange) -> SourceChange { let file = self.db.parse(frange.file_id); - let file_edit = - SourceFileEdit { file_id: frange.file_id, edit: join_lines::join_lines(&file, frange) }; + let file_edit = SourceFileEdit { + file_id: frange.file_id, + edit: join_lines::join_lines(&file, frange.range), + }; SourceChange { label: "join lines".to_string(), source_file_edits: vec![file_edit], diff --git a/crates/ra_ide_api/src/test_utils.rs b/crates/ra_ide_api/src/test_utils.rs index bfac0fce36..d0bd3a1e46 100644 --- a/crates/ra_ide_api/src/test_utils.rs +++ b/crates/ra_ide_api/src/test_utils.rs @@ -1,9 +1,9 @@ use ra_syntax::{SourceFile, TextUnit}; +use ra_text_edit::TextEdit; -use crate::LocalEdit; pub use test_utils::*; -pub fn check_action Option>( +pub fn check_action Option>( before: &str, after: &str, f: F, @@ -11,14 +11,9 @@ pub fn check_action Option>( let (before_cursor_pos, before) = extract_offset(before); let file = SourceFile::parse(&before); let result = f(&file, before_cursor_pos).expect("code action is not applicable"); - let actual = result.edit.apply(&before); - let actual_cursor_pos = match result.cursor_position { - None => result - .edit - .apply_to_offset(before_cursor_pos) - .expect("cursor position is affected by the edit"), - Some(off) => off, - }; + let actual = result.apply(&before); + let actual_cursor_pos = + result.apply_to_offset(before_cursor_pos).expect("cursor position is affected by the edit"); let actual = add_cursor(&actual, actual_cursor_pos); assert_eq_text!(after, &actual); }