Cargo.lock 🔗
@@ -9861,6 +9861,7 @@ dependencies = [
"rpc",
"rsa",
"rust-embed",
+ "schemars",
"search",
"semantic_index",
"serde",
Mikayla created
Cargo.lock | 1
assets/settings/default.json | 21 ++++++++++++++++
crates/semantic_index/examples/eval.rs | 2
crates/zed/Cargo.toml | 1
crates/zed/src/languages.rs | 36 +++++++++++++++++++++++----
crates/zed/src/main.rs | 2
crates/zed/src/zed.rs | 2
7 files changed, 56 insertions(+), 9 deletions(-)
@@ -9861,6 +9861,7 @@ dependencies = [
"rpc",
"rsa",
"rust-embed",
+ "schemars",
"search",
"semantic_index",
"serde",
@@ -373,6 +373,27 @@
"enabled": false,
"reindexing_delay_seconds": 600
},
+ // Settings specific to our elixir integration
+ "elixir": {
+ // Set Zed to use the experimental Next LS LSP server.
+ // Note that changing this setting requires a restart of Zed
+ // to take effect.
+ //
+ // May take 3 values:
+ // 1. Use the standard elixir-ls LSP server
+ // "next": "off"
+ // 2. Use a bundled version of the next Next LS LSP server
+ // "next": "on",
+ // 3. Use a locally running version of the next Next LS LSP server,
+ // on a specific port:
+ // "next": {
+ // "local": {
+ // "port": 4000
+ // }
+ // },
+ //
+ "next": "off"
+ },
// Different settings for specific languages.
"languages": {
"Plain Text": {
@@ -456,7 +456,7 @@ fn main() {
let languages = Arc::new(languages);
let node_runtime = RealNodeRuntime::new(http.clone());
- languages::init(languages.clone(), node_runtime.clone());
+ languages::init(languages.clone(), node_runtime.clone(), cx);
language::init(cx);
project::Project::init(&client, cx);
@@ -99,6 +99,7 @@ rust-embed.workspace = true
serde.workspace = true
serde_derive.workspace = true
serde_json.workspace = true
+schemars.workspace = true
simplelog = "0.9"
smallvec.workspace = true
smol.workspace = true
@@ -1,13 +1,17 @@
use anyhow::Context;
+use gpui::AppContext;
pub use language::*;
use node_runtime::NodeRuntime;
use rust_embed::RustEmbed;
use std::{borrow::Cow, str, sync::Arc};
use util::asset_str;
+use self::elixir_next::ElixirSettings;
+
mod c;
mod css;
mod elixir;
+mod elixir_next;
mod go;
mod html;
mod json;
@@ -37,7 +41,13 @@ mod yaml;
#[exclude = "*.rs"]
struct LanguageDir;
-pub fn init(languages: Arc<LanguageRegistry>, node_runtime: Arc<dyn NodeRuntime>) {
+pub fn init(
+ languages: Arc<LanguageRegistry>,
+ node_runtime: Arc<dyn NodeRuntime>,
+ cx: &mut AppContext,
+) {
+ settings::register::<elixir_next::ElixirSettings>(cx);
+
let language = |name, grammar, adapters| {
languages.register(name, load_config(name), grammar, adapters, load_queries)
};
@@ -61,11 +71,25 @@ pub fn init(languages: Arc<LanguageRegistry>, node_runtime: Arc<dyn NodeRuntime>
Arc::new(tailwind::TailwindLspAdapter::new(node_runtime.clone())),
],
);
- language(
- "elixir",
- tree_sitter_elixir::language(),
- vec![Arc::new(elixir::ElixirLspAdapter)],
- );
+
+ match settings::get::<ElixirSettings>(cx).next {
+ elixir_next::ElixirNextSetting::Off => language(
+ "elixir",
+ tree_sitter_elixir::language(),
+ vec![Arc::new(elixir::ElixirLspAdapter)],
+ ),
+ elixir_next::ElixirNextSetting::On => language(
+ "elixir",
+ tree_sitter_elixir::language(),
+ vec![Arc::new(elixir_next::BundledNextLspAdapter)],
+ ),
+ elixir_next::ElixirNextSetting::Local { port } => unimplemented!(), /*language(
+ "elixir",
+ tree_sitter_elixir::language(),
+ vec![Arc::new(elixir_next::LocalNextLspAdapter { port })],
+ )*/
+ }
+
language(
"go",
tree_sitter_go::language(),
@@ -134,7 +134,7 @@ fn main() {
let languages = Arc::new(languages);
let node_runtime = RealNodeRuntime::new(http.clone());
- languages::init(languages.clone(), node_runtime.clone());
+ languages::init(languages.clone(), node_runtime.clone(), cx);
let user_store = cx.add_model(|cx| UserStore::new(client.clone(), http.clone(), cx));
let channel_store =
cx.add_model(|cx| ChannelStore::new(client.clone(), user_store.clone(), cx));
@@ -2392,7 +2392,7 @@ mod tests {
languages.set_executor(cx.background().clone());
let languages = Arc::new(languages);
let node_runtime = node_runtime::FakeNodeRuntime::new();
- languages::init(languages.clone(), node_runtime);
+ languages::init(languages.clone(), node_runtime, cx);
for name in languages.language_names() {
languages.language_for_name(&name);
}