Populate created local settings file with an empty JSON object and comments

This commit is contained in:
Max Brunsfeld 2023-06-05 18:09:42 -07:00
parent cb975f1252
commit 296a0bf510
5 changed files with 55 additions and 20 deletions

View file

@ -0,0 +1,11 @@
// Folder-specific Zed settings
//
// A subset of Zed's settings can be configured on a per-folder basis.
//
// For information on how to configure Zed, see the Zed
// documentation: https://zed.dev/docs/configuring-zed
//
// To see all of Zed's default settings without changing your
// custom settings, run the `open default settings` command
// from the command palette or from `Zed` application menu.
{}

View file

@ -1424,7 +1424,7 @@ async fn join_project(
)?; )?;
} }
for settings_file in dbg!(worktree.settings_files) { for settings_file in worktree.settings_files {
session.peer.send( session.peer.send(
session.connection_id, session.connection_id,
proto::UpdateWorktreeSettings { proto::UpdateWorktreeSettings {
@ -1554,8 +1554,6 @@ async fn update_worktree_settings(
message: proto::UpdateWorktreeSettings, message: proto::UpdateWorktreeSettings,
session: Session, session: Session,
) -> Result<()> { ) -> Result<()> {
dbg!(&message);
let guest_connection_ids = session let guest_connection_ids = session
.db() .db()
.await .await

View file

@ -9,10 +9,23 @@ pub use settings_store::{Setting, SettingsJsonSchemaParams, SettingsStore};
use std::{borrow::Cow, str}; use std::{borrow::Cow, str};
pub const DEFAULT_SETTINGS_ASSET_PATH: &str = "settings/default.json"; pub const DEFAULT_SETTINGS_ASSET_PATH: &str = "settings/default.json";
pub const INITIAL_USER_SETTINGS_ASSET_PATH: &str = "settings/initial_user_settings.json"; const INITIAL_USER_SETTINGS_ASSET_PATH: &str = "settings/initial_user_settings.json";
const INITIAL_LOCAL_SETTINGS_ASSET_PATH: &str = "settings/initial_local_settings.json";
pub fn initial_user_settings_content(assets: &'static impl AssetSource) -> Cow<'static, str> { pub fn default_settings() -> Cow<'static, str> {
match assets.load(INITIAL_USER_SETTINGS_ASSET_PATH).unwrap() { asset_str(&assets::Assets, DEFAULT_SETTINGS_ASSET_PATH)
}
pub fn initial_user_settings_content(assets: &dyn AssetSource) -> Cow<'_, str> {
asset_str(assets, INITIAL_USER_SETTINGS_ASSET_PATH)
}
pub fn initial_local_settings_content(assets: &dyn AssetSource) -> Cow<'_, str> {
asset_str(assets, INITIAL_LOCAL_SETTINGS_ASSET_PATH)
}
fn asset_str<'a>(assets: &'a dyn AssetSource, path: &str) -> Cow<'a, str> {
match assets.load(path).unwrap() {
Cow::Borrowed(s) => Cow::Borrowed(str::from_utf8(s).unwrap()), Cow::Borrowed(s) => Cow::Borrowed(str::from_utf8(s).unwrap()),
Cow::Owned(s) => Cow::Owned(String::from_utf8(s).unwrap()), Cow::Owned(s) => Cow::Owned(String::from_utf8(s).unwrap()),
} }

View file

@ -1,11 +1,10 @@
use crate::{settings_store::SettingsStore, Setting, DEFAULT_SETTINGS_ASSET_PATH}; use crate::{settings_store::SettingsStore, Setting};
use anyhow::Result; use anyhow::Result;
use assets::Assets; use assets::Assets;
use fs::Fs; use fs::Fs;
use futures::{channel::mpsc, StreamExt}; use futures::{channel::mpsc, StreamExt};
use gpui::{executor::Background, AppContext, AssetSource}; use gpui::{executor::Background, AppContext};
use std::{ use std::{
borrow::Cow,
io::ErrorKind, io::ErrorKind,
path::{Path, PathBuf}, path::{Path, PathBuf},
str, str,
@ -28,19 +27,12 @@ pub fn get_local<'a, T: Setting>(location: Option<(usize, &Path)>, cx: &'a AppCo
cx.global::<SettingsStore>().get(location) cx.global::<SettingsStore>().get(location)
} }
pub fn default_settings() -> Cow<'static, str> {
match Assets.load(DEFAULT_SETTINGS_ASSET_PATH).unwrap() {
Cow::Borrowed(s) => Cow::Borrowed(str::from_utf8(s).unwrap()),
Cow::Owned(s) => Cow::Owned(String::from_utf8(s).unwrap()),
}
}
pub const EMPTY_THEME_NAME: &'static str = "empty-theme"; pub const EMPTY_THEME_NAME: &'static str = "empty-theme";
#[cfg(any(test, feature = "test-support"))] #[cfg(any(test, feature = "test-support"))]
pub fn test_settings() -> String { pub fn test_settings() -> String {
let mut value = crate::settings_store::parse_json_with_comments::<serde_json::Value>( let mut value = crate::settings_store::parse_json_with_comments::<serde_json::Value>(
default_settings().as_ref(), crate::default_settings().as_ref(),
) )
.unwrap(); .unwrap();
util::merge_non_null_json_value_into( util::merge_non_null_json_value_into(

View file

@ -30,7 +30,9 @@ use project_panel::ProjectPanel;
use search::{BufferSearchBar, ProjectSearchBar}; use search::{BufferSearchBar, ProjectSearchBar};
use serde::Deserialize; use serde::Deserialize;
use serde_json::to_string_pretty; use serde_json::to_string_pretty;
use settings::{KeymapFileContent, SettingsStore, DEFAULT_SETTINGS_ASSET_PATH}; use settings::{
initial_local_settings_content, KeymapFileContent, SettingsStore, DEFAULT_SETTINGS_ASSET_PATH,
};
use std::{borrow::Cow, str, sync::Arc}; use std::{borrow::Cow, str, sync::Arc};
use terminal_view::terminal_panel::{self, TerminalPanel}; use terminal_view::terminal_panel::{self, TerminalPanel};
use util::{ use util::{
@ -596,11 +598,30 @@ fn open_local_settings_file(
.await?; .await?;
} }
workspace let editor = workspace
.update(&mut cx, |workspace, cx| { .update(&mut cx, |workspace, cx| {
workspace.open_path((tree_id, file_path), None, true, cx) workspace.open_path((tree_id, file_path), None, true, cx)
})? })?
.await?; .await?
.downcast::<Editor>()
.ok_or_else(|| anyhow!("unexpected item type"))?;
editor
.downgrade()
.update(&mut cx, |editor, cx| {
if let Some(buffer) = editor.buffer().read(cx).as_singleton() {
if buffer.read(cx).is_empty() {
buffer.update(cx, |buffer, cx| {
buffer.edit(
[(0..0, initial_local_settings_content(&Assets))],
None,
cx,
)
});
}
}
})
.ok();
anyhow::Ok(()) anyhow::Ok(())
}) })