Cargo.lock 🔗
@@ -18000,6 +18000,7 @@ dependencies = [
"gpui",
"schemars",
"serde",
+ "serde_json",
"settings",
"workspace-hack",
]
Smit Barmase created
Cargo.lock | 1
crates/agent_settings/Cargo.toml | 1
crates/agent_settings/src/agent_settings.rs | 28 ++---
crates/vim_mode_setting/Cargo.toml | 1
crates/vim_mode_setting/src/vim_mode_setting.rs | 81 ++++++++++--------
5 files changed, 58 insertions(+), 54 deletions(-)
@@ -18000,6 +18000,7 @@ dependencies = [
"gpui",
"schemars",
"serde",
+ "serde_json",
"settings",
"workspace-hack",
]
@@ -19,6 +19,7 @@ gpui.workspace = true
language_model.workspace = true
schemars.workspace = true
serde.workspace = true
+serde_json.workspace = true
settings.workspace = true
workspace-hack.workspace = true
vim_mode_setting.workspace = true
@@ -90,23 +90,19 @@ impl JsonSchema for AgentEditorMode {
"AgentEditorMode".into()
}
- fn json_schema(schema_gen: &mut schemars::SchemaGenerator) -> schemars::Schema {
- let editor_mode_schema = EditorMode::json_schema(schema_gen);
-
- // TODO: This schema is incorrect. Need to extend editor_mode_schema with `inherit`
- let result = json_schema!({
- "oneOf": [
- {
- "const": "inherit",
- "description": "Inherit editor mode from global settings"
- },
- editor_mode_schema
- ],
- "description": "Agent editor mode - either inherit from global settings or override with a specific mode"
- });
+ fn json_schema(_gen: &mut schemars::SchemaGenerator) -> schemars::Schema {
+ use vim_mode_setting::EditorMode;
+
+ let mut options = vec![serde_json::json!({
+ "const": "inherit",
+ "description": "Inherit editor mode from global settings"
+ })];
+ options.extend(EditorMode::get_schema_options());
- dbg!(&result);
- result
+ json_schema!({
+ "oneOf": options,
+ "description": "Agent editor mode - either inherit from global settings or override with a specific mode"
+ })
}
}
@@ -18,3 +18,4 @@ schemars.workspace = true
settings.workspace = true
workspace-hack.workspace = true
serde.workspace = true
+serde_json.workspace = true
@@ -38,45 +38,9 @@ impl JsonSchema for EditorMode {
}
fn json_schema(_gen: &mut schemars::SchemaGenerator) -> Schema {
+ let options = Self::get_schema_options();
json_schema!({
- "oneOf": [
- {
- "const": "default",
- "description": "Standard editing mode"
- },
- {
- "const": "vim",
- "description": "Vim normal mode"
- },
- {
- "const": "vim_normal",
- "description": "Vim normal mode"
- },
- {
- "const": "vim_insert",
- "description": "Vim insert mode"
- },
- {
- "const": "vim_replace",
- "description": "Vim replace mode"
- },
- {
- "const": "vim_visual",
- "description": "Vim visual mode"
- },
- {
- "const": "vim_visual_line",
- "description": "Vim visual line mode"
- },
- {
- "const": "vim_visual_block",
- "description": "Vim visual block mode"
- },
- {
- "const": "helix_experimental",
- "description": "Helix mode (experimental)"
- }
- ],
+ "oneOf": options,
"description": "Editor mode"
})
}
@@ -192,4 +156,45 @@ impl EditorMode {
pub fn vim() -> EditorMode {
EditorMode::Vim(ModalMode::default())
}
+
+ pub fn get_schema_options() -> Vec<serde_json::Value> {
+ vec![
+ serde_json::json!({
+ "const": "default",
+ "description": "Standard editing mode"
+ }),
+ serde_json::json!({
+ "const": "vim",
+ "description": "Vim normal mode"
+ }),
+ serde_json::json!({
+ "const": "vim_normal",
+ "description": "Vim normal mode"
+ }),
+ serde_json::json!({
+ "const": "vim_insert",
+ "description": "Vim insert mode"
+ }),
+ serde_json::json!({
+ "const": "vim_replace",
+ "description": "Vim replace mode"
+ }),
+ serde_json::json!({
+ "const": "vim_visual",
+ "description": "Vim visual mode"
+ }),
+ serde_json::json!({
+ "const": "vim_visual_line",
+ "description": "Vim visual line mode"
+ }),
+ serde_json::json!({
+ "const": "vim_visual_block",
+ "description": "Vim visual block mode"
+ }),
+ serde_json::json!({
+ "const": "helix_experimental",
+ "description": "Helix mode (experimental)"
+ }),
+ ]
+ }
}