aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2020-02-06 17:17:22 +0000
committerGitHub <[email protected]>2020-02-06 17:17:22 +0000
commit46027e10be3d23643bc41ffa8dc8c7cf4013b21a (patch)
treee68818a739d164bcb14580e0b1e6481d0651c361
parent895cdb588314f4e04529d1adf8cd232856497dad (diff)
parent755077e3720bd97e1e506bf8fbe0a2534389f282 (diff)
Merge #3035
3035: Doctest autoimport r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
-rw-r--r--crates/ra_assists/src/assists/auto_import.rs4
-rw-r--r--crates/ra_assists/src/doc_tests.rs10
-rw-r--r--crates/ra_assists/src/doc_tests/generated.rs4
-rw-r--r--docs/user/assists.md2
-rw-r--r--xtask/src/codegen/gen_assists_docs.rs42
5 files changed, 42 insertions, 20 deletions
diff --git a/crates/ra_assists/src/assists/auto_import.rs b/crates/ra_assists/src/assists/auto_import.rs
index 219051063..f16b08c43 100644
--- a/crates/ra_assists/src/assists/auto_import.rs
+++ b/crates/ra_assists/src/assists/auto_import.rs
@@ -18,14 +18,16 @@ use ra_ide_db::imports_locator::ImportsLocatorIde;
18// fn main() { 18// fn main() {
19// let map = HashMap<|>::new(); 19// let map = HashMap<|>::new();
20// } 20// }
21// # pub mod std { pub mod collections { pub struct HashMap { } } }
21// ``` 22// ```
22// -> 23// ->
23// ``` 24// ```
24// use std::collections::HashMap; 25// use std::collections::HashMap;
25// 26//
26// fn main() { 27// fn main() {
27// let map = HashMap<|>::new(); 28// let map = HashMap::new();
28// } 29// }
30// # pub mod std { pub mod collections { pub struct HashMap { } } }
29// ``` 31// ```
30pub(crate) fn auto_import(ctx: AssistCtx) -> Option<Assist> { 32pub(crate) fn auto_import(ctx: AssistCtx) -> Option<Assist> {
31 let path_to_import: ast::Path = ctx.find_node_at_offset()?; 33 let path_to_import: ast::Path = ctx.find_node_at_offset()?;
diff --git a/crates/ra_assists/src/doc_tests.rs b/crates/ra_assists/src/doc_tests.rs
index 370b64225..56020028c 100644
--- a/crates/ra_assists/src/doc_tests.rs
+++ b/crates/ra_assists/src/doc_tests.rs
@@ -5,18 +5,12 @@
5 5
6mod generated; 6mod generated;
7 7
8use ra_db::{fixture::WithFixture, FileRange}; 8use ra_db::FileRange;
9use test_utils::{assert_eq_text, extract_range_or_offset}; 9use test_utils::{assert_eq_text, extract_range_or_offset};
10 10
11use ra_ide_db::RootDatabase;
12
13fn check(assist_id: &str, before: &str, after: &str) { 11fn check(assist_id: &str, before: &str, after: &str) {
14 // FIXME we cannot get the imports search functionality here yet, but still need to generate a test and a doc for an assist
15 if assist_id == "auto_import" {
16 return;
17 }
18 let (selection, before) = extract_range_or_offset(before); 12 let (selection, before) = extract_range_or_offset(before);
19 let (db, file_id) = RootDatabase::with_single_file(&before); 13 let (db, file_id) = crate::helpers::with_single_file(&before);
20 let frange = FileRange { file_id, range: selection.into() }; 14 let frange = FileRange { file_id, range: selection.into() };
21 15
22 let assist = crate::assists(&db, frange) 16 let assist = crate::assists(&db, frange)
diff --git a/crates/ra_assists/src/doc_tests/generated.rs b/crates/ra_assists/src/doc_tests/generated.rs
index ec4587ce7..0d95b957b 100644
--- a/crates/ra_assists/src/doc_tests/generated.rs
+++ b/crates/ra_assists/src/doc_tests/generated.rs
@@ -222,13 +222,15 @@ fn doctest_auto_import() {
222fn main() { 222fn main() {
223 let map = HashMap<|>::new(); 223 let map = HashMap<|>::new();
224} 224}
225pub mod std { pub mod collections { pub struct HashMap { } } }
225"#####, 226"#####,
226 r#####" 227 r#####"
227use std::collections::HashMap; 228use std::collections::HashMap;
228 229
229fn main() { 230fn main() {
230 let map = HashMap<|>::new(); 231 let map = HashMap::new();
231} 232}
233pub mod std { pub mod collections { pub struct HashMap { } } }
232"#####, 234"#####,
233 ) 235 )
234} 236}
diff --git a/docs/user/assists.md b/docs/user/assists.md
index c36c5df6a..1e2dd7485 100644
--- a/docs/user/assists.md
+++ b/docs/user/assists.md
@@ -223,7 +223,7 @@ fn main() {
223use std::collections::HashMap; 223use std::collections::HashMap;
224 224
225fn main() { 225fn main() {
226 let map = HashMap::new(); 226 let map = HashMap::new();
227} 227}
228``` 228```
229 229
diff --git a/xtask/src/codegen/gen_assists_docs.rs b/xtask/src/codegen/gen_assists_docs.rs
index 69f9b4872..697e830df 100644
--- a/xtask/src/codegen/gen_assists_docs.rs
+++ b/xtask/src/codegen/gen_assists_docs.rs
@@ -20,6 +20,28 @@ struct Assist {
20 after: String, 20 after: String,
21} 21}
22 22
23fn hide_hash_comments(text: &str) -> String {
24 text.split('\n') // want final newline
25 .filter(|&it| !(it.starts_with("# ") || it == "#"))
26 .map(|it| format!("{}\n", it))
27 .collect()
28}
29
30fn reveal_hash_comments(text: &str) -> String {
31 text.split('\n') // want final newline
32 .map(|it| {
33 if it.starts_with("# ") {
34 &it[2..]
35 } else if it == "#" {
36 ""
37 } else {
38 it
39 }
40 })
41 .map(|it| format!("{}\n", it))
42 .collect()
43}
44
23fn collect_assists() -> Result<Vec<Assist>> { 45fn collect_assists() -> Result<Vec<Assist>> {
24 let mut res = Vec::new(); 46 let mut res = Vec::new();
25 for entry in fs::read_dir(project_root().join(codegen::ASSISTS_DIR))? { 47 for entry in fs::read_dir(project_root().join(codegen::ASSISTS_DIR))? {
@@ -91,13 +113,14 @@ fn doctest_{}() {{
91 check( 113 check(
92 "{}", 114 "{}",
93r#####" 115r#####"
94{} 116{}"#####, r#####"
95"#####, r#####" 117{}"#####)
96{}
97"#####)
98}} 118}}
99"######, 119"######,
100 assist.id, assist.id, assist.before, assist.after 120 assist.id,
121 assist.id,
122 reveal_hash_comments(&assist.before),
123 reveal_hash_comments(&assist.after)
101 ); 124 );
102 125
103 buf.push_str(&test) 126 buf.push_str(&test)
@@ -123,12 +146,13 @@ fn generate_docs(assists: &[Assist], mode: Mode) -> Result<()> {
123```rust 146```rust
124// BEFORE 147// BEFORE
125{} 148{}
126
127// AFTER 149// AFTER
128{} 150{}```
129```
130", 151",
131 assist.id, assist.doc, before, after 152 assist.id,
153 assist.doc,
154 hide_hash_comments(&before),
155 hide_hash_comments(&after)
132 ); 156 );
133 buf.push_str(&docs); 157 buf.push_str(&docs);
134 } 158 }