diff --git a/crates/languages/src/rust.rs b/crates/languages/src/rust.rs index 9f996a55a72e75..0d252baec16658 100644 --- a/crates/languages/src/rust.rs +++ b/crates/languages/src/rust.rs @@ -578,6 +578,26 @@ impl ContextProvider for RustContextProvider { cwd: Some("$ZED_DIRNAME".to_owned()), ..TaskTemplate::default() }, + TaskTemplate { + label: format!( + "DocTest '{}' (package: {})", + VariableName::Symbol.template_value(), + RUST_PACKAGE_TASK_VARIABLE.template_value(), + ), + command: "cargo".into(), + args: vec![ + "test".into(), + "--doc".into(), + "-p".into(), + RUST_PACKAGE_TASK_VARIABLE.template_value(), + VariableName::Symbol.template_value(), + "--".into(), + "--nocapture".into(), + ], + tags: vec!["rust-doc-test".to_owned()], + cwd: Some("$ZED_DIRNAME".to_owned()), + ..TaskTemplate::default() + }, TaskTemplate { label: format!( "Test '{}' (package: {})", diff --git a/crates/languages/src/rust/runnables.scm b/crates/languages/src/rust/runnables.scm index 6d8dee4445364a..c962e771174a3a 100644 --- a/crates/languages/src/rust/runnables.scm +++ b/crates/languages/src/rust/runnables.scm @@ -1,4 +1,4 @@ - +; Rust mod test ( (mod_item name: (_) @run @@ -7,6 +7,7 @@ (#set! tag rust-mod-test) ) +; Rust test ( ( (attribute_item (attribute @@ -28,6 +29,45 @@ (#set! tag rust-test) ) +; Rust doc test +( + ( + (line_comment) * + (line_comment + doc: (_) @_comment_content + ) @start + (#match? @_comment_content "```") + (line_comment) * + (line_comment + doc: (_) @_end_comment_content + ) @_end_code_block + (#match? @_end_comment_content "```") + . + (attribute_item) * + . + [(line_comment) (block_comment)] * + . + [(function_item + name: (_) @run + body: _ + ) (function_signature_item + name: (_) @run + ) (struct_item + name: (_) @run + ) (enum_item + name: (_) @run + body: _ + ) ( + (attribute_item) ? + (macro_definition + name: (_) @run) + ) (mod_item + name: (_) @run + )] @_end + ) + (#set! tag rust-doc-test) +) + ; Rust main function ( (