feat: enhance strictness of Rust compiler settings and improve code quality by treating warnings as errors

This commit is contained in:
asepharyana
2026-07-13 06:22:31 +07:00
parent 3f5f27c339
commit 5334c2501b
20 changed files with 95 additions and 108 deletions
-7
View File
@@ -398,13 +398,6 @@ impl Harness {
}
}
fn classify(cmd: &str) -> Verdict {
match cmd {
"bash" | "write" | "edit" | "delete" | "git_operator" => Verdict::Allow,
_ => Verdict::Allow,
}
}
}
impl Default for Harness {
+3 -2
View File
@@ -404,14 +404,15 @@ impl McpManager {
self.servers.iter().flat_map(|server| {
let handle = server.child_handle.clone();
server.tools.iter().map(move |info| {
Box::new(McpToolAdapter {
let adapter: Box<dyn crate::tool::Tool> = Box::new(McpToolAdapter {
tool_name: info.name.clone(),
server_name: server.name.clone(),
transport: server.transport.clone(),
description: info.description.clone(),
parameters: info.input_schema.clone(),
child_handle: handle.clone(),
}) as Box<dyn crate::tool::Tool>
});
adapter
})
}).collect()
}
-1
View File
@@ -6,7 +6,6 @@ pub mod editor;
pub mod effort;
pub mod key_input;
pub mod mcp;
pub mod workflow;
pub mod quit_confirm;
pub mod rewind;
-37
View File
@@ -1,37 +0,0 @@
//! Workflow-mode helper logic for the TUI workflow overlay.
//!
//! Flow: exposes a dismiss handler invoked by a keybinding to close the
//! workflow overlay, and a status query used elsewhere to check whether
//! it is currently showing.
use crate::app::state::rest::AppStateRest;
use crate::app::state::types::Overlay;
/// Close the workflow overlay if it is the currently active overlay.
///
/// Flow: check `state.misc.overlay == Overlay::Workflow`, reset to `Overlay::None`
/// if so, then mark state dirty regardless.
///
/// Why: no-ops safely if another overlay is showing, so it can be called
/// unconditionally from a dismiss keybinding.
///
/// Return: nothing; mutates `state.misc.overlay` and `state.dirty` in place.
pub fn handle_workflow_dismiss(state: &mut AppStateRest) {
if state.misc.overlay == Overlay::Workflow {
state.misc.overlay = Overlay::None;
}
state.dirty = true;
}
/// Report whether the workflow overlay is currently displayed.
///
/// Flow: compare `state.misc.overlay` against `Overlay::Workflow`.
///
/// Return: `"active"` if the workflow overlay is shown, `"idle"` otherwise.
pub fn workflow_status(state: &AppStateRest) -> &str {
if state.misc.overlay == Overlay::Workflow {
"active"
} else {
"idle"
}
}
+2 -10
View File
@@ -405,15 +405,7 @@ pub fn apply_action(state: &mut AppStateRest, action: Action) {
lifetime_ms: 8000,
});
state.dirty = true;
} else if kind == "bg-arch-review" {
state.push_toast(Toast {
kind: ToastKind::Info,
message: message.clone(),
created_at: chrono::Utc::now().timestamp_millis(),
lifetime_ms: 10000,
});
state.dirty = true;
} else if kind == "bg-security-review" {
} else if kind == "bg-arch-review" || kind == "bg-security-review" {
state.push_toast(Toast {
kind: ToastKind::Info,
message: message.clone(),
@@ -1789,7 +1781,7 @@ fn rand_bytes(n: usize) -> Vec<u8> {
.unwrap_or_default()
.as_nanos() as u64;
let base = seed ^ counter;
(0..n).map(|i| ((base >> ((i as u64 % 8) * 8)) ^ (i as u64 * 2654435761)) as u8).collect()
(0..n).map(|i| ((base >> ((i as u64 % 8) * 8)) ^ (i as u64 * 2_654_435_761)) as u8).collect()
}
-7
View File
@@ -52,7 +52,6 @@ pub struct AppStateRest {
pub session_id: String,
pub session_dir: PathBuf,
pub memory_dir: PathBuf,
pub download_dir: PathBuf,
pub worktrees_dir: PathBuf,
pub dir_cache: Arc<RwLock<DirCache>>,
pub edit_log: EditLog,
@@ -88,10 +87,6 @@ impl AppStateRest {
pub fn new(workspace_roots: Vec<PathBuf>, session_dir: PathBuf, memory_dir: PathBuf) -> Self {
let settings = Settings::load();
let app_config = AppConfig::load();
let download_dir = memory_dir.parent().unwrap_or_else(|| {
tracing::warn!("[state] memory_dir '{}' has no parent, using it for downloads", memory_dir.display());
&memory_dir
}).join("downloads");
let worktrees_dir = memory_dir.parent().unwrap_or_else(|| {
tracing::warn!("[state] memory_dir '{}' has no parent, using it for worktrees", memory_dir.display());
&memory_dir
@@ -112,7 +107,6 @@ impl AppStateRest {
session_id,
session_dir: session_dir.clone(),
memory_dir,
download_dir,
worktrees_dir,
turn_events: Arc::new(Mutex::new(VecDeque::new())),
turn_in_flight: Arc::new(Mutex::new(false)),
@@ -290,7 +284,6 @@ impl AppStateRest {
workspaces: self.workspace_roots.clone(),
session_dir: self.session_dir.clone(),
memory_dir: self.memory_dir.clone(),
_download_dir: self.download_dir.clone(),
worktrees_dir: self.worktrees_dir.clone(),
dir_cache: self.dir_cache.clone(),
origin,
+3 -3
View File
@@ -44,7 +44,7 @@ const QUICK_REVIEW_MAX_STEPS: usize = 2;
const BG_SUBAGENT_MAX_STEPS: usize = 8;
/// ─── Helpers ───
///
/// Check whether a file path is worth auto-reviewing (not config/lock/data).
pub fn is_reviewable_path(path: &str) -> bool {
let lower = path.to_lowercase();
@@ -81,7 +81,7 @@ fn is_production_code(path: &str) -> bool {
}
/// ─── Inline Quick Review (synchronous, feeds back to LLM) ───
///
/// Spawn a lightweight inline code review subagent for the given file.
///
/// The subagent reads the file (read-only), checks for common issues,
@@ -143,7 +143,7 @@ pub fn spawn_quick_review(
}
/// ─── Background Subagent Spawners (async, report via SystemNote) ───
///
/// Spawn a background subagent that generates tests for modified files.
///
/// Uses the test-generator prompt and has read-write access so it can
+1 -1
View File
@@ -2,7 +2,7 @@
//! including the default read-only tool set for reviewer agents.
use std::path::PathBuf;
use std::sync::{Arc, Mutex, atomic::{AtomicBool, Ordering}};
use std::sync::{Arc, Mutex, atomic::AtomicBool};
use super::spawn::AgentDefinition;
/// Default read-only tool names granted to `role == "reviewer"` agents.
+4 -3
View File
@@ -32,7 +32,7 @@ pub mod roles {
}
/// ─── Division Agent Definitions ───
///
/// Build the Strategy Division agent — chief architect and planner.
///
/// Tools: read-only (read, grep, glob, search, lsp, plan, seqthink, recall)
@@ -172,16 +172,17 @@ pub fn documentation_division() -> AgentDefinition {
}
/// ─── Division Registry ───
///
/// A named division with its agent definition and display metadata.
#[derive(Debug, Clone)]
#[allow(dead_code)]
pub struct Division {
/// Display name for the division (e.g. "Strategy", "Engineering").
pub name: &'static str,
/// Role tag used for pipeline routing (matches `roles::*` constants).
#[allow(dead_code)]
pub role: &'static str,
/// One-line description of what this division does.
#[allow(dead_code)]
pub description: &'static str,
/// Agent definition with tools, prompt, and step budget.
pub agent_def: AgentDefinition,
-8
View File
@@ -14,14 +14,6 @@ use crate::tool::{all_tools, tool_defs, tool_is_risky};
use super::context::SubagentContext;
use super::event::SubagentEvent;
/// Upper bound on agent loop steps; effectively unbounded (`usize::MAX`).
#[allow(dead_code)]
pub const MAX_AGENT_STEPS: usize = usize::MAX;
/// Maximum time a single tool call may block inside a subagent before
/// being abandoned. Prevents a stuck tool from hanging the subagent loop.
const SUBAGENT_TOOL_TIMEOUT_MS: u64 = 120_000;
/// Maps a subagent's allowed tool names to concrete Tool trait objects and
/// OpenAI-style tool definitions.
///