(
state: &DashboardState,
language: &str,
)
| 114 | } |
| 115 | |
| 116 | async fn refresh_one_reconciled( |
| 117 | state: &DashboardState, |
| 118 | language: &str, |
| 119 | ) -> std::result::Result<(), JsonError> { |
| 120 | let snapshot = state.code_diagnostics.read().await.snapshot(); |
| 121 | if !snapshot.settings.language_enabled(language) { |
| 122 | state |
| 123 | .code_diagnostics |
| 124 | .write() |
| 125 | .await |
| 126 | .set_language_enabled(language, false); |
| 127 | return Ok(()); |
| 128 | } |
| 129 | let Some(adapter) = state.code_diagnostics.read().await.adapter_for(language) else { |
| 130 | return Err(bad_request(&format!( |
| 131 | "no code diagnostics adapter registered for language '{language}'" |
| 132 | ))); |
| 133 | }; |
| 134 | let files = indexed_files(&state.graph_conn) |
| 135 | .await |
| 136 | .map_err(|err| internal_error(&err))?; |
| 137 | let documents = documents_for_adapter(&state.project_root, &adapter, files) |
| 138 | .await |
| 139 | .map_err(|err| internal_error(&err))?; |
| 140 | let document_count = documents.len(); |
| 141 | state |
| 142 | .code_diagnostics |
| 143 | .write() |
| 144 | .await |
| 145 | .record_backfill_progress(language, document_count, document_count, 0, None); |
| 146 | if documents.is_empty() { |
| 147 | state |
| 148 | .code_diagnostics |
| 149 | .write() |
| 150 | .await |
| 151 | .record_backfill_progress( |
| 152 | language, |
| 153 | 0, |
| 154 | 0, |
| 155 | 0, |
| 156 | Some(crate::tracedecay::current_timestamp()), |
| 157 | ); |
| 158 | return Ok(()); |
| 159 | } |
| 160 | let prepared = state |
| 161 | .code_diagnostics |
| 162 | .write() |
| 163 | .await |
| 164 | .prepare_refresh(language, documents); |
| 165 | let mut progress_recorded_in_task = false; |
| 166 | let refresh_ok = match prepared { |
| 167 | Ok(Some(prepared)) => { |
| 168 | progress_recorded_in_task = true; |
| 169 | let state_for_refresh = state.clone(); |
| 170 | let language_for_refresh = language.to_string(); |
| 171 | let (tx, rx) = tokio::sync::oneshot::channel(); |
| 172 | tokio::spawn(async move { |
| 173 | let completed = prepared.collect_diagnostics(Duration::from_secs(5)).await; |
no test coverage detected