Define project settings in project crate

This commit is contained in:
Max Brunsfeld
2023-05-16 17:45:04 -07:00
parent 65e3713d4d
commit cbd4771f10
17 changed files with 59 additions and 27 deletions
+12 -2
View File
@@ -1,6 +1,7 @@
mod ignore;
mod lsp_command;
mod lsp_glob_set;
mod project_settings;
pub mod search;
pub mod terminals;
pub mod worktree;
@@ -42,6 +43,7 @@ use lsp::{
use lsp_command::*;
use lsp_glob_set::LspGlobSet;
use postage::watch;
use project_settings::ProjectSettings;
use rand::prelude::*;
use search::SearchQuery;
use serde::Serialize;
@@ -385,7 +387,13 @@ impl FormatTrigger {
}
impl Project {
pub fn init(client: &Arc<Client>) {
pub fn init_settings(cx: &mut AppContext) {
settings::register_setting::<ProjectSettings>(cx);
}
pub fn init(client: &Arc<Client>, cx: &mut AppContext) {
Self::init_settings(cx);
client.add_model_message_handler(Self::handle_add_collaborator);
client.add_model_message_handler(Self::handle_update_project_collaborator);
client.add_model_message_handler(Self::handle_remove_collaborator);
@@ -2206,7 +2214,9 @@ impl Project {
None => continue,
};
let lsp = &cx.global::<Settings>().lsp.get(&adapter.name.0);
let lsp = settings::get_setting::<ProjectSettings>(None, cx)
.lsp
.get(&adapter.name.0);
let override_options = lsp.map(|s| s.initialization_options.clone()).flatten();
let mut initialization_options = adapter.initialization_options.clone();
+31
View File
@@ -0,0 +1,31 @@
use collections::HashMap;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use settings::Setting;
use std::sync::Arc;
#[derive(Clone, Serialize, Deserialize, JsonSchema)]
pub struct ProjectSettings {
#[serde(default)]
pub lsp: HashMap<Arc<str>, LspSettings>,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct LspSettings {
pub initialization_options: Option<serde_json::Value>,
}
impl Setting for ProjectSettings {
const KEY: Option<&'static str> = None;
type FileContent = Self;
fn load(
default_value: &Self::FileContent,
user_values: &[&Self::FileContent],
_: &gpui::AppContext,
) -> anyhow::Result<Self> {
Self::load_via_json_merge(default_value, user_values)
}
}
+1
View File
@@ -3723,5 +3723,6 @@ fn init_test(cx: &mut gpui::TestAppContext) {
cx.update(|cx| {
cx.set_global(SettingsStore::test(cx));
language::init(cx);
Project::init_settings(cx);
});
}