(
State(state): State<DashboardState>,
Json(patch): Json<Value>,
)
| 50 | } |
| 51 | |
| 52 | pub(crate) async fn patch_settings( |
| 53 | State(state): State<DashboardState>, |
| 54 | Json(patch): Json<Value>, |
| 55 | ) -> ApiResult { |
| 56 | let patch = serde_json::from_value::<SettingsPatch>(patch) |
| 57 | .map_err(|err| bad_request(&format!("invalid code diagnostics settings patch: {err}")))?; |
| 58 | let mut settings = state.code_diagnostics.read().await.snapshot().settings; |
| 59 | if let Some(mode) = patch.idle_backfill { |
| 60 | settings.idle_backfill = mode; |
| 61 | } |
| 62 | for (language, language_patch) in patch.languages { |
| 63 | let language_settings = settings.languages.entry(language).or_default(); |
| 64 | if let Some(enabled) = language_patch.enabled { |
| 65 | language_settings.enabled = enabled; |
| 66 | } |
| 67 | match language_patch.command_override { |
| 68 | CommandOverridePatch::Missing => {} |
| 69 | CommandOverridePatch::Null => { |
| 70 | language_settings.command_override = None; |
| 71 | } |
| 72 | CommandOverridePatch::Value(command_override) => { |
| 73 | language_settings.command_override = Some(command_override); |
| 74 | } |
| 75 | } |
| 76 | } |
| 77 | if let Some(custom_adapters) = patch.custom_adapters { |
| 78 | settings.custom_adapters = custom_adapters; |
| 79 | } |
| 80 | save_settings(&state.dashboard_root, &settings) |
| 81 | .await |
| 82 | .map_err(|err| internal_error(&err))?; |
| 83 | let mut adapters = crate::diagnostics::lsp::adapters::builtin_adapters(); |
| 84 | adapters.extend(settings.custom_adapters.clone()); |
| 85 | let mut broker = state.code_diagnostics.write().await; |
| 86 | broker.update_adapters(adapters); |
| 87 | broker.update_settings(settings); |
| 88 | drop(broker); |
| 89 | let snapshot = diagnostics_snapshot(&state).await?; |
| 90 | Ok(Json(json!(snapshot))) |
| 91 | } |
| 92 | |
| 93 | pub(crate) async fn refresh_all(State(state): State<DashboardState>) -> ApiResult { |
| 94 | let languages = refreshable_languages(&state).await?; |
nothing calls this directly
no test coverage detected