Remove context server entry from Zed settings.json. Does not delete settings.json even if object is otherwise empty.
(settings_path: &Path)
| 132 | /// Remove context server entry from Zed settings.json. |
| 133 | /// Does not delete settings.json even if object is otherwise empty. |
| 134 | fn uninstall_context_server(settings_path: &Path) { |
| 135 | if !settings_path.exists() { |
| 136 | eprintln!(" {} not found, skipping", settings_path.display()); |
| 137 | return; |
| 138 | } |
| 139 | |
| 140 | let mut settings = load_jsonc_file(settings_path); |
| 141 | |
| 142 | let removed = if let Some(map) = settings |
| 143 | .get_mut("context_servers") |
| 144 | .and_then(|v| v.as_object_mut()) |
| 145 | { |
| 146 | map.remove("tracedecay").is_some() |
| 147 | } else { |
| 148 | false |
| 149 | }; |
| 150 | |
| 151 | if !removed { |
| 152 | eprintln!( |
| 153 | " No tracedecay context server in {}, skipping", |
| 154 | settings_path.display() |
| 155 | ); |
| 156 | return; |
| 157 | } |
| 158 | |
| 159 | // Clean up empty "context_servers" object |
| 160 | let cs_empty = settings |
| 161 | .get("context_servers") |
| 162 | .and_then(|v| v.as_object()) |
| 163 | .is_some_and(serde_json::Map::is_empty); |
| 164 | if cs_empty { |
| 165 | settings |
| 166 | .as_object_mut() |
| 167 | .map(|o| o.remove("context_servers")); |
| 168 | } |
| 169 | |
| 170 | // Always write back (never delete settings.json — it has other Zed settings). |
| 171 | // backup_and_write_json leaves a .bak so any mistake is recoverable (issue #63). |
| 172 | if backup_and_write_json(settings_path, &settings) { |
| 173 | eprintln!( |
| 174 | "\x1b[32m✔\x1b[0m Removed tracedecay context server from {}", |
| 175 | settings_path.display() |
| 176 | ); |
| 177 | } |
| 178 | } |
| 179 | |
| 180 | // --------------------------------------------------------------------------- |
| 181 | // Healthcheck helpers |
no test coverage detected