Add static Runnables (#8009)
Part of #7108 This PR includes just the static runnables part. We went with **not** having a dedicated panel for runnables. This is just a 1st PR out of N, as we want to start exploring the dynamic runnables front. Still, all that work is going to happen once this gets merged. Release Notes: - Added initial, static Runnables support to Zed. Such runnables are defined in `runnables.json` file (accessible via `zed: open runnables` action) and they can be spawned with `runnables: spawn` action. --------- Co-authored-by: Kirill Bulatov <kirill@zed.dev> Co-authored-by: Pitor <pitor@zed.dev> Co-authored-by: Beniamin <beniamin@zagan.be>
This commit is contained in:
parent
ca251babcd
commit
f17d0b5729
30 changed files with 1394 additions and 275 deletions
|
@ -88,6 +88,8 @@ release_channel.workspace = true
|
|||
rope.workspace = true
|
||||
rpc.workspace = true
|
||||
rsa = "0.4"
|
||||
runnable.workspace = true
|
||||
runnables_ui.workspace = true
|
||||
rust-embed.workspace = true
|
||||
schemars.workspace = true
|
||||
search.workspace = true
|
||||
|
|
|
@ -53,7 +53,7 @@ impl JsonLspAdapter {
|
|||
},
|
||||
cx,
|
||||
);
|
||||
|
||||
let runnables_schema = runnable::static_source::DefinitionProvider::generate_json_schema();
|
||||
serde_json::json!({
|
||||
"json": {
|
||||
"format": {
|
||||
|
@ -70,6 +70,10 @@ impl JsonLspAdapter {
|
|||
{
|
||||
"fileMatch": [schema_file_match(&paths::KEYMAP)],
|
||||
"schema": KeymapFile::generate_json_schema(&action_names),
|
||||
},
|
||||
{
|
||||
"fileMatch": [schema_file_match(&paths::RUNNABLES)],
|
||||
"schema": runnables_schema,
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -244,6 +244,7 @@ fn main() {
|
|||
outline::init(cx);
|
||||
project_symbols::init(cx);
|
||||
project_panel::init(Assets, cx);
|
||||
runnables_ui::init(cx);
|
||||
channel::init(&client, user_store.clone(), cx);
|
||||
search::init(cx);
|
||||
semantic_index::init(fs.clone(), http.clone(), languages.clone(), cx);
|
||||
|
|
|
@ -22,8 +22,11 @@ use project_panel::ProjectPanel;
|
|||
use quick_action_bar::QuickActionBar;
|
||||
use release_channel::{AppCommitSha, ReleaseChannel};
|
||||
use rope::Rope;
|
||||
use runnable::static_source::StaticSource;
|
||||
use search::project_search::ProjectSearchBar;
|
||||
use settings::{initial_local_settings_content, KeymapFile, Settings, SettingsStore};
|
||||
use settings::{
|
||||
initial_local_settings_content, watch_config_file, KeymapFile, Settings, SettingsStore,
|
||||
};
|
||||
use std::{borrow::Cow, ops::Deref, path::Path, sync::Arc};
|
||||
use terminal_view::terminal_panel::{self, TerminalPanel};
|
||||
use util::{
|
||||
|
@ -54,6 +57,7 @@ actions!(
|
|||
OpenDefaultKeymap,
|
||||
OpenDefaultSettings,
|
||||
OpenKeymap,
|
||||
OpenRunnables,
|
||||
OpenLicenses,
|
||||
OpenLocalSettings,
|
||||
OpenLog,
|
||||
|
@ -151,6 +155,20 @@ pub fn initialize_workspace(app_state: Arc<AppState>, cx: &mut AppContext) {
|
|||
.unwrap_or(true)
|
||||
});
|
||||
|
||||
let project = workspace.project().clone();
|
||||
if project.read(cx).is_local() {
|
||||
let runnables_file_rx = watch_config_file(
|
||||
&cx.background_executor(),
|
||||
app_state.fs.clone(),
|
||||
paths::RUNNABLES.clone(),
|
||||
);
|
||||
let source = StaticSource::new(runnables_file_rx, cx);
|
||||
project.update(cx, |project, cx| {
|
||||
project
|
||||
.runnable_inventory()
|
||||
.update(cx, |inventory, cx| inventory.add_source(source, cx))
|
||||
});
|
||||
}
|
||||
cx.spawn(|workspace_handle, mut cx| async move {
|
||||
let project_panel = ProjectPanel::load(workspace_handle.clone(), cx.clone());
|
||||
let terminal_panel = TerminalPanel::load(workspace_handle.clone(), cx.clone());
|
||||
|
@ -254,6 +272,15 @@ pub fn initialize_workspace(app_state: Arc<AppState>, cx: &mut AppContext) {
|
|||
);
|
||||
},
|
||||
)
|
||||
.register_action(
|
||||
move |_: &mut Workspace, _: &OpenRunnables, cx: &mut ViewContext<Workspace>| {
|
||||
open_settings_file(
|
||||
&paths::RUNNABLES,
|
||||
|| settings::initial_runnables_content().as_ref().into(),
|
||||
cx,
|
||||
);
|
||||
},
|
||||
)
|
||||
.register_action(open_local_settings_file)
|
||||
.register_action(
|
||||
move |workspace: &mut Workspace,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue