Sweep every first-party crate source (1956 .rs files) to the project comment guidelines: delete redundant restatements, decorative banners, change narration, and end-of-line comments; keep and tighten the crucial ones (invariants, bug rationale, SAFETY blocks, ported-source attribution). No functional code changed. Every edit is proven comment-only against the prior tree by a comment-stripping lexer (string/char/raw-string aware) plus a separate doctest-fence check. Where removing a comment made rustfmt or clippy want to re-lay-out adjacent code, the minimal triggering comment is restored so code tokens stay byte-identical. Gates green: cargo fmt --all --check (0 diffs), cargo check and cargo clippy --workspace --all-targets (0 warnings). Adds scripts/check_codegen_comment_guidelines.py — the enforcement gate for these guidelines (flags banners, end-of-line comments, change narration, and commented-out code).
49 lines
1.5 KiB
Rust
49 lines
1.5 KiB
Rust
//! Cross-cutting reminder: notifies LSP of file changes and drains diagnostics.
|
|
|
|
use std::sync::Arc;
|
|
|
|
use crate::implementations::lsp::LspBackend;
|
|
use crate::types::output::{SearchReplaceOutput, ToolOutput};
|
|
use crate::types::resources::SharedResources;
|
|
use crate::types::tool::Reminder;
|
|
|
|
pub struct LspDiagnosticsReminder;
|
|
|
|
#[async_trait::async_trait]
|
|
impl Reminder for LspDiagnosticsReminder {
|
|
async fn collect_reminders(
|
|
&self,
|
|
resources: SharedResources,
|
|
tool_output: &ToolOutput,
|
|
) -> Vec<String> {
|
|
let lsp = {
|
|
let res = resources.lock().await;
|
|
match res.get::<Arc<dyn LspBackend>>() {
|
|
Some(h) => h.clone(),
|
|
None => return vec![],
|
|
}
|
|
};
|
|
|
|
lsp.ensure_started_background();
|
|
|
|
// Notify LSP of the edit so diagnostics refresh; when the adapter is not
|
|
// yet ready the notification is buffered rather than dropped.
|
|
if let ToolOutput::SearchReplace(SearchReplaceOutput::EditsApplied(edits)) = tool_output
|
|
&& let Ok(content) = std::fs::read_to_string(&edits.absolute_path)
|
|
{
|
|
lsp.notify_file_changed(&edits.absolute_path, &content)
|
|
.await;
|
|
}
|
|
|
|
// Drain diagnostics queued by this or earlier edits.
|
|
if let Some(summary) = lsp
|
|
.drain_diagnostics(std::time::Duration::from_millis(500))
|
|
.await
|
|
{
|
|
return vec![summary.text];
|
|
}
|
|
|
|
vec![]
|
|
}
|
|
}
|