aboutsummaryrefslogtreecommitdiff
path: root/crates/ide
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ide')
-rw-r--r--crates/ide/Cargo.toml23
-rw-r--r--crates/ide/src/completion.rs2
-rw-r--r--crates/ide/src/runnables.rs26
3 files changed, 36 insertions, 15 deletions
diff --git a/crates/ide/Cargo.toml b/crates/ide/Cargo.toml
index 9ecf43e5a..e61c276df 100644
--- a/crates/ide/Cargo.toml
+++ b/crates/ide/Cargo.toml
@@ -1,6 +1,7 @@
1[package] 1[package]
2name = "ide" 2name = "ide"
3version = "0.0.0" 3version = "0.0.0"
4description = "TBD"
4license = "MIT OR Apache-2.0" 5license = "MIT OR Apache-2.0"
5authors = ["rust-analyzer developers"] 6authors = ["rust-analyzer developers"]
6edition = "2018" 7edition = "2018"
@@ -18,20 +19,20 @@ oorandom = "11.1.2"
18pulldown-cmark-to-cmark = "5.0.0" 19pulldown-cmark-to-cmark = "5.0.0"
19pulldown-cmark = {version = "0.7.2", default-features = false} 20pulldown-cmark = {version = "0.7.2", default-features = false}
20 21
21stdx = { path = "../stdx" } 22stdx = { path = "../stdx", version = "0.0.0" }
22syntax = { path = "../syntax" } 23syntax = { path = "../syntax", version = "0.0.0" }
23text_edit = { path = "../text_edit" } 24text_edit = { path = "../text_edit", version = "0.0.0" }
24base_db = { path = "../base_db" } 25base_db = { path = "../base_db", version = "0.0.0" }
25ide_db = { path = "../ide_db" } 26ide_db = { path = "../ide_db", version = "0.0.0" }
26cfg = { path = "../cfg" } 27cfg = { path = "../cfg", version = "0.0.0" }
27profile = { path = "../profile" } 28profile = { path = "../profile", version = "0.0.0" }
28test_utils = { path = "../test_utils" } 29test_utils = { path = "../test_utils", version = "0.0.0" }
29assists = { path = "../assists" } 30assists = { path = "../assists", version = "0.0.0" }
30ssr = { path = "../ssr" } 31ssr = { path = "../ssr", version = "0.0.0" }
31 32
32# ide should depend only on the top-level `hir` package. if you need 33# ide should depend only on the top-level `hir` package. if you need
33# something from some `hir_xxx` subpackage, reexport the API via `hir`. 34# something from some `hir_xxx` subpackage, reexport the API via `hir`.
34hir = { path = "../hir" } 35hir = { path = "../hir", version = "0.0.0" }
35 36
36[dev-dependencies] 37[dev-dependencies]
37expect-test = "0.1" 38expect-test = "0.1"
diff --git a/crates/ide/src/completion.rs b/crates/ide/src/completion.rs
index 25e580d80..33bed6991 100644
--- a/crates/ide/src/completion.rs
+++ b/crates/ide/src/completion.rs
@@ -92,7 +92,7 @@ pub use crate::completion::{
92/// already present, it should give all possible variants for the identifier at 92/// already present, it should give all possible variants for the identifier at
93/// the caret. In other words, for 93/// the caret. In other words, for
94/// 94///
95/// ```no-run 95/// ```no_run
96/// fn f() { 96/// fn f() {
97/// let foo = 92; 97/// let foo = 92;
98/// let _ = bar<|> 98/// let _ = bar<|>
diff --git a/crates/ide/src/runnables.rs b/crates/ide/src/runnables.rs
index 4139f329e..dd59d9e70 100644
--- a/crates/ide/src/runnables.rs
+++ b/crates/ide/src/runnables.rs
@@ -160,7 +160,7 @@ fn runnable_fn(
160 RunnableKind::Test { test_id, attr } 160 RunnableKind::Test { test_id, attr }
161 } else if fn_def.has_atom_attr("bench") { 161 } else if fn_def.has_atom_attr("bench") {
162 RunnableKind::Bench { test_id } 162 RunnableKind::Bench { test_id }
163 } else if has_doc_test(&fn_def) { 163 } else if has_runnable_doc_test(&fn_def) {
164 RunnableKind::DocTest { test_id } 164 RunnableKind::DocTest { test_id }
165 } else { 165 } else {
166 return None; 166 return None;
@@ -211,8 +211,13 @@ fn has_test_related_attribute(fn_def: &ast::Fn) -> bool {
211 .any(|attribute_text| attribute_text.contains("test")) 211 .any(|attribute_text| attribute_text.contains("test"))
212} 212}
213 213
214fn has_doc_test(fn_def: &ast::Fn) -> bool { 214fn has_runnable_doc_test(fn_def: &ast::Fn) -> bool {
215 fn_def.doc_comment_text().map_or(false, |comment| comment.contains("```")) 215 fn_def.doc_comment_text().map_or(false, |comments_text| {
216 comments_text.contains("```")
217 && !comments_text.contains("```ignore")
218 && !comments_text.contains("```no_run")
219 && !comments_text.contains("```compile_fail")
220 })
216} 221}
217 222
218fn runnable_mod( 223fn runnable_mod(
@@ -417,6 +422,21 @@ fn main() {}
417/// let x = 5; 422/// let x = 5;
418/// ``` 423/// ```
419fn foo() {} 424fn foo() {}
425
426/// ```no_run
427/// let z = 55;
428/// ```
429fn should_have_no_runnable() {}
430
431/// ```ignore
432/// let z = 55;
433/// ```
434fn should_have_no_runnable_2() {}
435
436/// ```compile_fail
437/// let z = 55;
438/// ```
439fn should_have_no_runnable_3() {}
420"#, 440"#,
421 &[&BIN, &DOCTEST], 441 &[&BIN, &DOCTEST],
422 expect![[r#" 442 expect![[r#"