@@ -635,6 +635,22 @@ impl ContextProvider for GoContextProvider {
cwd: package_cwd.clone(),
..TaskTemplate::default()
},
+ TaskTemplate {
+ label: format!(
+ "go test {} -run {}",
+ GO_PACKAGE_TASK_VARIABLE.template_value(),
+ VariableName::Symbol.template_value(),
+ ),
+ command: "go".into(),
+ args: vec![
+ "test".into(),
+ "-run".into(),
+ format!("\\^{}\\$", VariableName::Symbol.template_value(),),
+ ],
+ tags: vec!["go-example".to_owned()],
+ cwd: package_cwd.clone(),
+ ..TaskTemplate::default()
+ },
TaskTemplate {
label: format!("go test {}", GO_PACKAGE_TASK_VARIABLE.template_value()),
command: "go".into(),
@@ -992,6 +1008,43 @@ mod tests {
);
}
+ #[gpui::test]
+ fn test_go_example_test_detection(cx: &mut TestAppContext) {
+ let language = language("go", tree_sitter_go::LANGUAGE.into());
+
+ let example_test = r#"
+ package main
+
+ import "fmt"
+
+ func Example() {
+ fmt.Println("Hello, world!")
+ // Output: Hello, world!
+ }
+ "#;
+
+ let buffer =
+ cx.new(|cx| crate::Buffer::local(example_test, cx).with_language(language.clone(), cx));
+ cx.executor().run_until_parked();
+
+ let runnables: Vec<_> = buffer.update(cx, |buffer, _| {
+ let snapshot = buffer.snapshot();
+ snapshot.runnable_ranges(0..example_test.len()).collect()
+ });
+
+ let tag_strings: Vec<String> = runnables
+ .iter()
+ .flat_map(|r| &r.runnable.tags)
+ .map(|tag| tag.0.to_string())
+ .collect();
+
+ assert!(
+ tag_strings.contains(&"go-example".to_string()),
+ "Should find go-example tag, found: {:?}",
+ tag_strings
+ );
+ }
+
#[gpui::test]
fn test_go_table_test_slice_detection(cx: &mut TestAppContext) {
let language = language("go", tree_sitter_go::LANGUAGE.into());
@@ -71,6 +71,15 @@
(#set! tag go-subtest)
)
+; Functions names start with `Example`
+(
+ (
+ (function_declaration name: (_) @run @_name
+ (#match? @_name "^Example.*"))
+ ) @_
+ (#set! tag go-example)
+)
+
; Functions names start with `Benchmark`
(
(