settings_ui: Last minute cleanup (#40217)
Closes #ISSUE Release Notes: - N/A *or* Added/Fixed/Improved ... --------- Co-authored-by: Mikayla <mikayla@zed.dev>
This commit is contained in:
@@ -269,7 +269,7 @@ async fn test_first_line_pattern(cx: &mut TestAppContext) {
|
||||
async fn test_language_for_file_with_custom_file_types(cx: &mut TestAppContext) {
|
||||
cx.update(|cx| {
|
||||
init_settings(cx, |settings| {
|
||||
settings.file_types.extend([
|
||||
settings.file_types.get_or_insert_default().extend([
|
||||
("TypeScript".into(), vec!["js".into()].into()),
|
||||
(
|
||||
"JavaScript".into(),
|
||||
|
||||
@@ -639,7 +639,7 @@ impl settings::Settings for AllLanguageSettings {
|
||||
|
||||
let mut file_types: FxHashMap<Arc<str>, GlobSet> = FxHashMap::default();
|
||||
|
||||
for (language, patterns) in &all_languages.file_types {
|
||||
for (language, patterns) in all_languages.file_types.iter().flatten() {
|
||||
let mut builder = GlobSetBuilder::new();
|
||||
|
||||
for pattern in &patterns.0 {
|
||||
@@ -778,6 +778,7 @@ impl settings::Settings for AllLanguageSettings {
|
||||
.project
|
||||
.all_languages
|
||||
.file_types
|
||||
.get_or_insert_default()
|
||||
.extend(associations);
|
||||
|
||||
// cursor global ignore list applies to cursor-tab, so transfer it to edit_predictions.disabled_globs
|
||||
|
||||
@@ -234,7 +234,6 @@ impl UserSettingsContent {
|
||||
Eq,
|
||||
Default,
|
||||
strum::VariantArray,
|
||||
strum::VariantNames,
|
||||
)]
|
||||
pub enum BaseKeymapContent {
|
||||
#[default]
|
||||
@@ -248,6 +247,19 @@ pub enum BaseKeymapContent {
|
||||
None,
|
||||
}
|
||||
|
||||
impl strum::VariantNames for BaseKeymapContent {
|
||||
const VARIANTS: &'static [&'static str] = &[
|
||||
"VSCode",
|
||||
"JetBrains",
|
||||
"Sublime Text",
|
||||
"Atom",
|
||||
"TextMate",
|
||||
"Emacs",
|
||||
"Cursor",
|
||||
"None",
|
||||
];
|
||||
}
|
||||
|
||||
#[skip_serializing_none]
|
||||
#[derive(Clone, PartialEq, Default, Serialize, Deserialize, JsonSchema, MergeFrom, Debug)]
|
||||
pub struct TitleBarSettingsContent {
|
||||
@@ -502,7 +514,18 @@ pub struct GitPanelSettingsContent {
|
||||
}
|
||||
|
||||
#[derive(
|
||||
Default, Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, MergeFrom, PartialEq, Eq,
|
||||
Default,
|
||||
Copy,
|
||||
Clone,
|
||||
Debug,
|
||||
Serialize,
|
||||
Deserialize,
|
||||
JsonSchema,
|
||||
MergeFrom,
|
||||
PartialEq,
|
||||
Eq,
|
||||
strum::VariantArray,
|
||||
strum::VariantNames,
|
||||
)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum StatusStyle {
|
||||
@@ -512,7 +535,9 @@ pub enum StatusStyle {
|
||||
}
|
||||
|
||||
#[skip_serializing_none]
|
||||
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, MergeFrom, PartialEq, Eq)]
|
||||
#[derive(
|
||||
Copy, Clone, Default, Debug, Serialize, Deserialize, JsonSchema, MergeFrom, PartialEq, Eq,
|
||||
)]
|
||||
pub struct ScrollbarSettings {
|
||||
pub show: Option<ShowScrollbar>,
|
||||
}
|
||||
@@ -814,7 +839,19 @@ pub struct ImageViewerSettingsContent {
|
||||
}
|
||||
|
||||
#[skip_serializing_none]
|
||||
#[derive(Clone, Copy, Debug, Serialize, Deserialize, JsonSchema, MergeFrom, Default, PartialEq)]
|
||||
#[derive(
|
||||
Clone,
|
||||
Copy,
|
||||
Debug,
|
||||
Serialize,
|
||||
Deserialize,
|
||||
JsonSchema,
|
||||
MergeFrom,
|
||||
Default,
|
||||
PartialEq,
|
||||
strum::VariantArray,
|
||||
strum::VariantNames,
|
||||
)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum ImageFileSizeUnit {
|
||||
/// Displays file size in binary units (e.g., KiB, MiB).
|
||||
|
||||
@@ -334,7 +334,18 @@ pub struct GutterContent {
|
||||
|
||||
/// How to render LSP `textDocument/documentColor` colors in the editor.
|
||||
#[derive(
|
||||
Copy, Clone, Debug, Default, Serialize, Deserialize, PartialEq, Eq, JsonSchema, MergeFrom,
|
||||
Copy,
|
||||
Clone,
|
||||
Debug,
|
||||
Default,
|
||||
Serialize,
|
||||
Deserialize,
|
||||
PartialEq,
|
||||
Eq,
|
||||
JsonSchema,
|
||||
MergeFrom,
|
||||
strum::VariantArray,
|
||||
strum::VariantNames,
|
||||
)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum DocumentColorsRenderMode {
|
||||
|
||||
@@ -27,8 +27,7 @@ pub struct AllLanguageSettingsContent {
|
||||
pub languages: LanguageToSettingsMap,
|
||||
/// Settings for associating file extensions and filenames
|
||||
/// with languages.
|
||||
#[serde(default)]
|
||||
pub file_types: HashMap<Arc<str>, ExtendingVec<String>>,
|
||||
pub file_types: Option<HashMap<Arc<str>, ExtendingVec<String>>>,
|
||||
}
|
||||
|
||||
impl merge_from::MergeFrom for AllLanguageSettingsContent {
|
||||
|
||||
@@ -12,7 +12,7 @@ use crate::{DockPosition, DockSide, ScrollbarSettingsContent, ShowIndentGuides};
|
||||
#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
||||
pub struct WorkspaceSettingsContent {
|
||||
/// Active pane styling settings.
|
||||
pub active_pane_modifiers: Option<ActivePanelModifiers>,
|
||||
pub active_pane_modifiers: Option<ActivePaneModifiers>,
|
||||
/// Layout mode for the bottom dock
|
||||
///
|
||||
/// Default: contained
|
||||
@@ -243,7 +243,7 @@ pub enum ActivateOnClose {
|
||||
#[skip_serializing_none]
|
||||
#[derive(Copy, Clone, PartialEq, Debug, Default, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub struct ActivePanelModifiers {
|
||||
pub struct ActivePaneModifiers {
|
||||
/// Size of the border surrounding the active pane.
|
||||
/// When set to 0, the active pane doesn't have any border.
|
||||
/// The border is drawn inset.
|
||||
@@ -403,14 +403,38 @@ impl AutosaveSetting {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema, MergeFrom)]
|
||||
#[derive(
|
||||
Copy,
|
||||
Clone,
|
||||
Debug,
|
||||
Serialize,
|
||||
Deserialize,
|
||||
PartialEq,
|
||||
Eq,
|
||||
JsonSchema,
|
||||
MergeFrom,
|
||||
strum::VariantArray,
|
||||
strum::VariantNames,
|
||||
)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum PaneSplitDirectionHorizontal {
|
||||
Up,
|
||||
Down,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema, MergeFrom)]
|
||||
#[derive(
|
||||
Copy,
|
||||
Clone,
|
||||
Debug,
|
||||
Serialize,
|
||||
Deserialize,
|
||||
PartialEq,
|
||||
Eq,
|
||||
JsonSchema,
|
||||
MergeFrom,
|
||||
strum::VariantArray,
|
||||
strum::VariantNames,
|
||||
)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum PaneSplitDirectionVertical {
|
||||
Left,
|
||||
|
||||
+881
-436
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,3 @@
|
||||
//! # settings_ui
|
||||
mod components;
|
||||
mod page_data;
|
||||
|
||||
@@ -16,10 +15,7 @@ use heck::ToTitleCase as _;
|
||||
use project::WorktreeId;
|
||||
use schemars::JsonSchema;
|
||||
use serde::Deserialize;
|
||||
use settings::{
|
||||
BottomDockLayout, CloseWindowWhenNoItems, CodeFade, CursorShape, OnLastWindowClosed,
|
||||
RestoreOnStartupBehavior, SaturatingBool, SettingsContent, SettingsStore,
|
||||
};
|
||||
use settings::{SettingsContent, SettingsStore};
|
||||
use std::{
|
||||
any::{Any, TypeId, type_name},
|
||||
cell::RefCell,
|
||||
@@ -330,8 +326,10 @@ impl Focusable for NonFocusableHandle {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
struct SettingsFieldMetadata {
|
||||
placeholder: Option<&'static str>,
|
||||
should_do_titlecase: Option<bool>,
|
||||
}
|
||||
|
||||
pub struct SettingsUiFeatureFlag;
|
||||
@@ -369,12 +367,12 @@ fn init_renderers(cx: &mut App) {
|
||||
})
|
||||
.add_basic_renderer::<bool>(render_toggle_button)
|
||||
.add_basic_renderer::<String>(render_text_field)
|
||||
.add_basic_renderer::<SaturatingBool>(render_toggle_button)
|
||||
.add_basic_renderer::<CursorShape>(render_dropdown)
|
||||
.add_basic_renderer::<RestoreOnStartupBehavior>(render_dropdown)
|
||||
.add_basic_renderer::<BottomDockLayout>(render_dropdown)
|
||||
.add_basic_renderer::<OnLastWindowClosed>(render_dropdown)
|
||||
.add_basic_renderer::<CloseWindowWhenNoItems>(render_dropdown)
|
||||
.add_basic_renderer::<settings::SaturatingBool>(render_toggle_button)
|
||||
.add_basic_renderer::<settings::CursorShape>(render_dropdown)
|
||||
.add_basic_renderer::<settings::RestoreOnStartupBehavior>(render_dropdown)
|
||||
.add_basic_renderer::<settings::BottomDockLayout>(render_dropdown)
|
||||
.add_basic_renderer::<settings::OnLastWindowClosed>(render_dropdown)
|
||||
.add_basic_renderer::<settings::CloseWindowWhenNoItems>(render_dropdown)
|
||||
.add_basic_renderer::<settings::FontFamilyName>(render_font_picker)
|
||||
// todo(settings_ui): This needs custom ui
|
||||
// .add_renderer::<settings::BufferLineHeight>(|settings_field, file, _, window, cx| {
|
||||
@@ -421,7 +419,7 @@ fn init_renderers(cx: &mut App) {
|
||||
.add_basic_renderer::<usize>(render_number_field)
|
||||
.add_basic_renderer::<NonZero<usize>>(render_number_field)
|
||||
.add_basic_renderer::<NonZeroU32>(render_number_field)
|
||||
.add_basic_renderer::<CodeFade>(render_number_field)
|
||||
.add_basic_renderer::<settings::CodeFade>(render_number_field)
|
||||
.add_basic_renderer::<FontWeight>(render_number_field)
|
||||
.add_basic_renderer::<settings::MinimumContrast>(render_number_field)
|
||||
.add_basic_renderer::<settings::ShowScrollbar>(render_dropdown)
|
||||
@@ -431,7 +429,15 @@ fn init_renderers(cx: &mut App) {
|
||||
.add_basic_renderer::<settings::MinimapThumb>(render_dropdown)
|
||||
.add_basic_renderer::<settings::MinimapThumbBorder>(render_dropdown)
|
||||
.add_basic_renderer::<settings::SteppingGranularity>(render_dropdown)
|
||||
.add_basic_renderer::<settings::NotifyWhenAgentWaiting>(render_dropdown);
|
||||
.add_basic_renderer::<settings::NotifyWhenAgentWaiting>(render_dropdown)
|
||||
.add_basic_renderer::<settings::ImageFileSizeUnit>(render_dropdown)
|
||||
.add_basic_renderer::<settings::StatusStyle>(render_dropdown)
|
||||
.add_basic_renderer::<settings::PaneSplitDirectionHorizontal>(render_dropdown)
|
||||
.add_basic_renderer::<settings::PaneSplitDirectionVertical>(render_dropdown)
|
||||
.add_basic_renderer::<settings::PaneSplitDirectionVertical>(render_dropdown)
|
||||
.add_basic_renderer::<settings::DocumentColorsRenderMode>(render_dropdown)
|
||||
// please semicolon stay on next line
|
||||
;
|
||||
// .add_renderer::<ThemeSelection>(|settings_field, file, _, window, cx| {
|
||||
// render_dropdown(*settings_field, file, window, cx)
|
||||
// });
|
||||
@@ -1913,7 +1919,7 @@ impl SettingsWindow {
|
||||
return;
|
||||
};
|
||||
self.page_scroll_handle
|
||||
.scroll_to_top_of_item(selected_item_index);
|
||||
.scroll_to_top_of_item(selected_item_index + 1);
|
||||
|
||||
if focus_content {
|
||||
self.focus_content_element(entry_item_index, window, cx);
|
||||
@@ -2606,7 +2612,7 @@ fn render_number_field<T: NumberFieldType + Send + Sync>(
|
||||
fn render_dropdown<T>(
|
||||
field: SettingField<T>,
|
||||
file: SettingsUiFile,
|
||||
_metadata: Option<&SettingsFieldMetadata>,
|
||||
metadata: Option<&SettingsFieldMetadata>,
|
||||
window: &mut Window,
|
||||
cx: &mut App,
|
||||
) -> AnyElement
|
||||
@@ -2615,6 +2621,9 @@ where
|
||||
{
|
||||
let variants = || -> &'static [T] { <T as strum::VariantArray>::VARIANTS };
|
||||
let labels = || -> &'static [&'static str] { <T as strum::VariantNames>::VARIANTS };
|
||||
let should_do_titlecase = metadata
|
||||
.and_then(|metadata| metadata.should_do_titlecase)
|
||||
.unwrap_or(true);
|
||||
|
||||
let (_, current_value) =
|
||||
SettingsStore::global(cx).get_value_from_file(file.to_settings(), field.pick);
|
||||
@@ -2625,12 +2634,20 @@ where
|
||||
|
||||
DropdownMenu::new(
|
||||
"dropdown",
|
||||
current_value_label.to_title_case(),
|
||||
if should_do_titlecase {
|
||||
current_value_label.to_title_case()
|
||||
} else {
|
||||
current_value_label.to_string()
|
||||
},
|
||||
ContextMenu::build(window, cx, move |mut menu, _, _| {
|
||||
for (&value, &label) in std::iter::zip(variants(), labels()) {
|
||||
let file = file.clone();
|
||||
menu = menu.toggleable_entry(
|
||||
label.to_title_case(),
|
||||
if should_do_titlecase {
|
||||
label.to_title_case()
|
||||
} else {
|
||||
label.to_string()
|
||||
},
|
||||
value == current_value,
|
||||
IconPosition::End,
|
||||
None,
|
||||
|
||||
Reference in New Issue
Block a user