From 7123238690ef1bc7bd608b2831b99cd7ee349235 Mon Sep 17 00:00:00 2001 From: Finn Evers Date: Tue, 31 Mar 2026 18:27:38 +0200 Subject: [PATCH] Remove slash-commands-example extension (#52835) Follow-up to https://github.com/zed-industries/zed/pull/52757 Release Notes: - N/A --- .github/CODEOWNERS.hold | 1 - .github/workflows/extension_auto_bump.yml | 14 ++- .github/workflows/run_tests.yml | 8 ++ Cargo.lock | 7 -- Cargo.toml | 1 - extensions/slash-commands-example/Cargo.toml | 16 ---- .../slash-commands-example/LICENSE-APACHE | 1 - extensions/slash-commands-example/README.md | 84 ----------------- .../slash-commands-example/extension.toml | 15 ---- .../src/slash_commands_example.rs | 90 ------------------- .../tasks/workflows/extension_auto_bump.rs | 10 +-- .../xtask/src/tasks/workflows/run_tests.rs | 8 ++ 12 files changed, 30 insertions(+), 225 deletions(-) delete mode 100644 extensions/slash-commands-example/Cargo.toml delete mode 120000 extensions/slash-commands-example/LICENSE-APACHE delete mode 100644 extensions/slash-commands-example/README.md delete mode 100644 extensions/slash-commands-example/extension.toml delete mode 100644 extensions/slash-commands-example/src/slash_commands_example.rs diff --git a/.github/CODEOWNERS.hold b/.github/CODEOWNERS.hold index 073a543b881052f3c2e0c2a9a1054261af40dba5..c0dec880c718d4edbee4015876fa57c41d951c15 100644 --- a/.github/CODEOWNERS.hold +++ b/.github/CODEOWNERS.hold @@ -161,7 +161,6 @@ /extensions/glsl/ @zed-industries/ecosystem-team /extensions/html/ @zed-industries/ecosystem-team /extensions/proto/ @zed-industries/ecosystem-team -/extensions/slash-commands-example/ @zed-industries/ecosystem-team /extensions/test-extension/ @zed-industries/ecosystem-team /extensions/workflows/ @zed-industries/ecosystem-team diff --git a/.github/workflows/extension_auto_bump.yml b/.github/workflows/extension_auto_bump.yml index d4480194edbcacd24d0dff9bfd807abeb513d8ae..e48ccdb082a3620741ad0e79877c505f9b2aa4de 100644 --- a/.github/workflows/extension_auto_bump.yml +++ b/.github/workflows/extension_auto_bump.yml @@ -7,7 +7,6 @@ on: - main paths: - extensions/** - - '!extensions/slash-commands-example/**' - '!extensions/test-extension/**' - '!extensions/workflows/**' - '!extensions/*.md' @@ -28,16 +27,23 @@ jobs: CHANGED_FILES="$(git diff --name-only "$COMPARE_REV" "$GITHUB_SHA")" # Detect changed extension directories (excluding extensions/workflows) CHANGED_EXTENSIONS=$(echo "$CHANGED_FILES" | grep -oP '^extensions/[^/]+(?=/)' | sort -u | grep -v '^extensions/workflows$' || true) + # Filter out deleted extensions + EXISTING_EXTENSIONS="" + for ext in $CHANGED_EXTENSIONS; do + if [ -f "$ext/extension.toml" ]; then + EXISTING_EXTENSIONS=$(printf '%s\n%s' "$EXISTING_EXTENSIONS" "$ext") + fi + done + CHANGED_EXTENSIONS=$(echo "$EXISTING_EXTENSIONS" | sed '/^$/d') if [ -n "$CHANGED_EXTENSIONS" ]; then EXTENSIONS_JSON=$(echo "$CHANGED_EXTENSIONS" | jq -R -s -c 'split("\n") | map(select(length > 0))') else EXTENSIONS_JSON="[]" fi - # Filter out newly added or entirely removed extensions + # Filter out newly added extensions FILTERED="[]" for ext in $(echo "$EXTENSIONS_JSON" | jq -r '.[]'); do - if git show HEAD~1:"$ext/extension.toml" >/dev/null 2>&1 && \ - [ -f "$ext/extension.toml" ]; then + if git show HEAD~1:"$ext/extension.toml" >/dev/null 2>&1; then FILTERED=$(echo "$FILTERED" | jq -c --arg e "$ext" '. + [$e]') fi done diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index 9f335a76beab036d97fe5555cd049ea46b4f87f0..a1a0569f5df00cfa9e93e311681a98c90d6ce067 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -106,6 +106,14 @@ jobs: check_pattern "run_tests" '^(docs/|script/update_top_ranking_issues/|\.github/(ISSUE_TEMPLATE|workflows/(?!run_tests))|extensions/)' -qvP # Detect changed extension directories (excluding extensions/workflows) CHANGED_EXTENSIONS=$(echo "$CHANGED_FILES" | grep -oP '^extensions/[^/]+(?=/)' | sort -u | grep -v '^extensions/workflows$' || true) + # Filter out deleted extensions + EXISTING_EXTENSIONS="" + for ext in $CHANGED_EXTENSIONS; do + if [ -f "$ext/extension.toml" ]; then + EXISTING_EXTENSIONS=$(printf '%s\n%s' "$EXISTING_EXTENSIONS" "$ext") + fi + done + CHANGED_EXTENSIONS=$(echo "$EXISTING_EXTENSIONS" | sed '/^$/d') if [ -n "$CHANGED_EXTENSIONS" ]; then EXTENSIONS_JSON=$(echo "$CHANGED_EXTENSIONS" | jq -R -s -c 'split("\n") | map(select(length > 0))') else diff --git a/Cargo.lock b/Cargo.lock index b8e4c549314fa30614cdf5afb0f62af1b4922fdb..cccc5bf537fa1f446f402ff5366ca02ef7c24389 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -16019,13 +16019,6 @@ version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" -[[package]] -name = "slash_commands_example" -version = "0.1.0" -dependencies = [ - "zed_extension_api 0.1.0", -] - [[package]] name = "slotmap" version = "1.0.7" diff --git a/Cargo.toml b/Cargo.toml index ebe14d332ad477a58a44305145c51f6b18ea72dd..6c8f2a78a401cc2adebb712cd8ce739c696af878 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -234,7 +234,6 @@ members = [ "extensions/glsl", "extensions/html", "extensions/proto", - "extensions/slash-commands-example", "extensions/test-extension", # diff --git a/extensions/slash-commands-example/Cargo.toml b/extensions/slash-commands-example/Cargo.toml deleted file mode 100644 index 03b22af254ab3190f2dbfca04976c89b9a37e995..0000000000000000000000000000000000000000 --- a/extensions/slash-commands-example/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "slash_commands_example" -version = "0.1.0" -edition.workspace = true -publish.workspace = true -license = "Apache-2.0" - -[lints] -workspace = true - -[lib] -path = "src/slash_commands_example.rs" -crate-type = ["cdylib"] - -[dependencies] -zed_extension_api = "0.1.0" diff --git a/extensions/slash-commands-example/LICENSE-APACHE b/extensions/slash-commands-example/LICENSE-APACHE deleted file mode 120000 index 1cd601d0a3affae83854be02a0afdec3b7a9ec4d..0000000000000000000000000000000000000000 --- a/extensions/slash-commands-example/LICENSE-APACHE +++ /dev/null @@ -1 +0,0 @@ -../../LICENSE-APACHE \ No newline at end of file diff --git a/extensions/slash-commands-example/README.md b/extensions/slash-commands-example/README.md deleted file mode 100644 index 8c16a4e168a3334d3197090837eeaf21c956b3c3..0000000000000000000000000000000000000000 --- a/extensions/slash-commands-example/README.md +++ /dev/null @@ -1,84 +0,0 @@ -# Slash Commands Example Extension - -This is an example extension showcasing how to write slash commands. - -See: [Extensions: Slash Commands](https://zed.dev/docs/extensions/slash-commands) in the Zed Docs. - -## Pre-requisites - -[Install Rust Toolchain](https://www.rust-lang.org/tools/install): - -```sh -curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -``` - -## Setup - -```sh -git clone https://github.com/zed-industries/zed.git -cp -RL zed/extensions/slash-commands-example . - -cd slash-commands-example/ - -# Update Cargo.toml to make it standalone -cat > Cargo.toml << EOF -[package] -name = "slash_commands_example" -version = "0.1.0" -edition = "2021" -license = "Apache-2.0" - -[lib] -path = "src/slash_commands_example.rs" -crate-type = ["cdylib"] - -[dependencies] -zed_extension_api = "0.1.0" -EOF - -curl -O https://raw.githubusercontent.com/rust-lang/rust/master/LICENSE-APACHE -echo "# Zed Slash Commands Example Extension" > README.md -echo "Cargo.lock" > .gitignore -echo "target/" >> .gitignore -echo "*.wasm" >> .gitignore - -git init -git add . -git commit -m "Initial commit" - -cd .. -mv slash-commands-example MY-SUPER-COOL-ZED-EXTENSION -zed $_ -``` - -## Installation - -1. Open the command palette (`cmd-shift-p` or `ctrl-shift-p`). -2. Launch `zed: install dev extension` -3. Select the extension folder created above - -## Test - -Open the assistant and type `/echo` and `/pick-one` at the beginning of a line. - -## Customization - -Open the `extensions.toml` file and set the `id`, `name`, `description`, `authors` and `repository` fields. - -Rename `slash-commands-example.rs` you'll also have to update `Cargo.toml` - -## Rebuild - -Rebuild to see these changes reflected: - -1. Open Zed Extensions (`cmd-shift-x` or `ctrl-shift-x`). -2. Click `Rebuild` next to your Dev Extension (formerly "Slash Command Example") - -## Troubleshooting / Logs - -- [zed.dev docs: Troubleshooting](https://zed.dev/docs/troubleshooting) - -## Documentation - -- [zed.dev docs: Extensions: Developing Extensions](https://zed.dev/docs/extensions/developing-extensions) -- [zed.dev docs: Extensions: Slash Commands](https://zed.dev/docs/extensions/slash-commands) diff --git a/extensions/slash-commands-example/extension.toml b/extensions/slash-commands-example/extension.toml deleted file mode 100644 index 888c776d0111bdc5f99e87967f0cff6e0c91b2b3..0000000000000000000000000000000000000000 --- a/extensions/slash-commands-example/extension.toml +++ /dev/null @@ -1,15 +0,0 @@ -id = "slash-commands-example" -name = "Slash Commands Example" -description = "An example extension showcasing slash commands." -version = "0.1.0" -schema_version = 1 -authors = ["Zed Industries "] -repository = "https://github.com/zed-industries/zed" - -[slash_commands.echo] -description = "echoes the provided input" -requires_argument = true - -[slash_commands.pick-one] -description = "pick one of three options" -requires_argument = true diff --git a/extensions/slash-commands-example/src/slash_commands_example.rs b/extensions/slash-commands-example/src/slash_commands_example.rs deleted file mode 100644 index 5b170d63ee38c4dd173ddc2856c858755150490e..0000000000000000000000000000000000000000 --- a/extensions/slash-commands-example/src/slash_commands_example.rs +++ /dev/null @@ -1,90 +0,0 @@ -use zed_extension_api::{ - self as zed, SlashCommand, SlashCommandArgumentCompletion, SlashCommandOutput, - SlashCommandOutputSection, Worktree, -}; - -struct SlashCommandsExampleExtension; - -impl zed::Extension for SlashCommandsExampleExtension { - fn new() -> Self { - SlashCommandsExampleExtension - } - - fn complete_slash_command_argument( - &self, - command: SlashCommand, - _args: Vec, - ) -> Result, String> { - match command.name.as_str() { - "echo" => Ok(vec![]), - "pick-one" => Ok(vec![ - SlashCommandArgumentCompletion { - label: "Option One".to_string(), - new_text: "option-1".to_string(), - run_command: true, - }, - SlashCommandArgumentCompletion { - label: "Option Two".to_string(), - new_text: "option-2".to_string(), - run_command: true, - }, - SlashCommandArgumentCompletion { - label: "Option Three".to_string(), - new_text: "option-3".to_string(), - run_command: true, - }, - ]), - command => Err(format!("unknown slash command: \"{command}\"")), - } - } - - fn run_slash_command( - &self, - command: SlashCommand, - args: Vec, - _worktree: Option<&Worktree>, - ) -> Result { - match command.name.as_str() { - "echo" => { - if args.is_empty() { - return Err("nothing to echo".to_string()); - } - - let text = args.join(" "); - - Ok(SlashCommandOutput { - sections: vec![SlashCommandOutputSection { - range: (0..text.len()).into(), - label: "Echo".to_string(), - }], - text, - }) - } - "pick-one" => { - let Some(selection) = args.first() else { - return Err("no option selected".to_string()); - }; - - match selection.as_str() { - "option-1" | "option-2" | "option-3" => {} - invalid_option => { - return Err(format!("{invalid_option} is not a valid option")); - } - } - - let text = format!("You chose {selection}."); - - Ok(SlashCommandOutput { - sections: vec![SlashCommandOutputSection { - range: (0..text.len()).into(), - label: format!("Pick One: {selection}"), - }], - text, - }) - } - command => Err(format!("unknown slash command: \"{command}\"")), - } - } -} - -zed::register_extension!(SlashCommandsExampleExtension); diff --git a/tooling/xtask/src/tasks/workflows/extension_auto_bump.rs b/tooling/xtask/src/tasks/workflows/extension_auto_bump.rs index 68ed1f1acd914b9a02e0bb9f3dba954fd2b7c1b7..e69c783299aa18c3d97f78b4fb12355bd0215450 100644 --- a/tooling/xtask/src/tasks/workflows/extension_auto_bump.rs +++ b/tooling/xtask/src/tasks/workflows/extension_auto_bump.rs @@ -25,7 +25,6 @@ pub(crate) fn extension_auto_bump() -> Workflow { Push::default() .add_branch("main") .add_path("extensions/**") - .add_path("!extensions/slash-commands-example/**") .add_path("!extensions/test-extension/**") .add_path("!extensions/workflows/**") .add_path("!extensions/*.md"), @@ -42,12 +41,11 @@ fn detect_changed_extensions() -> NamedJob { CHANGED_FILES="$(git diff --name-only "$COMPARE_REV" "$GITHUB_SHA")" "#}; - let filter_new_and_removed = indoc! {r#" - # Filter out newly added or entirely removed extensions + let filter_newly_added = indoc! {r#" + # Filter out newly added extensions FILTERED="[]" for ext in $(echo "$EXTENSIONS_JSON" | jq -r '.[]'); do - if git show HEAD~1:"$ext/extension.toml" >/dev/null 2>&1 && \ - [ -f "$ext/extension.toml" ]; then + if git show HEAD~1:"$ext/extension.toml" >/dev/null 2>&1; then FILTERED=$(echo "$FILTERED" | jq -c --arg e "$ext" '. + [$e]') fi done @@ -58,7 +56,7 @@ fn detect_changed_extensions() -> NamedJob { "{preamble}{detect}{filter}", preamble = preamble, detect = DETECT_CHANGED_EXTENSIONS_SCRIPT, - filter = filter_new_and_removed, + filter = filter_newly_added, ); let step = named::bash(script).id("detect"); diff --git a/tooling/xtask/src/tasks/workflows/run_tests.rs b/tooling/xtask/src/tasks/workflows/run_tests.rs index a43b36e975957daed86e5eff242eb645599eb185..52338e30ff15f9862c802f8515980642a9ba490d 100644 --- a/tooling/xtask/src/tasks/workflows/run_tests.rs +++ b/tooling/xtask/src/tasks/workflows/run_tests.rs @@ -337,6 +337,14 @@ pub fn tests_pass(jobs: &[NamedJob], extra_job_names: &[&str]) -> NamedJob { pub(crate) const DETECT_CHANGED_EXTENSIONS_SCRIPT: &str = indoc::indoc! {r#" # Detect changed extension directories (excluding extensions/workflows) CHANGED_EXTENSIONS=$(echo "$CHANGED_FILES" | grep -oP '^extensions/[^/]+(?=/)' | sort -u | grep -v '^extensions/workflows$' || true) + # Filter out deleted extensions + EXISTING_EXTENSIONS="" + for ext in $CHANGED_EXTENSIONS; do + if [ -f "$ext/extension.toml" ]; then + EXISTING_EXTENSIONS=$(printf '%s\n%s' "$EXISTING_EXTENSIONS" "$ext") + fi + done + CHANGED_EXTENSIONS=$(echo "$EXISTING_EXTENSIONS" | sed '/^$/d') if [ -n "$CHANGED_EXTENSIONS" ]; then EXTENSIONS_JSON=$(echo "$CHANGED_EXTENSIONS" | jq -R -s -c 'split("\n") | map(select(length > 0))') else