chore(gates): finish the Windows sweep — zero clippy findings workspace-wide
Second layer of platform gaps the mac/linux-only gate history left: unix-only test imports/helpers now cfg-gated (mermaid, fast-worktree, hunk-tracker, pager-render link test, three pty_e2e module decls), clippy-suggested cleanups in Windows-cfg code (file-utils classifier, tui console-mode restore, shared clipboard arboard-error flow, tools terminal closure, workspace capability tail), and `cargo update` of h2 (RUSTSEC-2026-0258) and webbrowser (RUSTSEC-2026-0257) so `cargo deny check advisories` passes again. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KSy9S31pZNWXtRZNVJ1sDf
This commit is contained in:
1 parent
427e8b6fea
commit
fd5cff2de6
15 files changed
+55
-44
No files matched your search
@@ -76,6 +76,7 @@ mod tests {
|
||||
assert_eq!(std::fs::read(&dest).unwrap(), data);
|
||||
}
|
||||
|
||||
#[cfg(unix)]
|
||||
#[test]
|
||||
fn test_clone_preserves_permissions() {
|
||||
use std::os::unix::fs::PermissionsExt;
|
||||
|
||||
@@ -37,6 +37,7 @@ pub(crate) fn execute_plan(plan: WorktreePlan) -> Result<CreateWorktreeResult> {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
#[cfg(unix)]
|
||||
use super::*;
|
||||
use crate::{IgnoredFilesMode, WorkingTreeMode, WorktreeBuilder};
|
||||
use kigi_test_utils::git::{git_commit_all, init_git_repo};
|
||||
|
||||
@@ -89,10 +89,10 @@ fn is_platform_system_dir(cwd: &Path) -> bool {
|
||||
|
||||
#[cfg(target_os = "windows")]
|
||||
fn is_platform_system_dir(cwd: &Path) -> bool {
|
||||
if let Ok(temp) = std::env::var("TEMP").or_else(|_| std::env::var("TMP")) {
|
||||
if cwd.starts_with(&temp) {
|
||||
return true;
|
||||
}
|
||||
if let Ok(temp) = std::env::var("TEMP").or_else(|_| std::env::var("TMP"))
|
||||
&& cwd.starts_with(&temp)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
let path_lower = cwd.to_string_lossy().to_lowercase();
|
||||
@@ -103,7 +103,7 @@ fn is_platform_system_dir(cwd: &Path) -> bool {
|
||||
return true;
|
||||
}
|
||||
|
||||
if cwd.parent().map_or(false, |p| p.parent().is_none()) && cwd.to_string_lossy().len() <= 3 {
|
||||
if cwd.parent().is_some_and(|p| p.parent().is_none()) && cwd.to_string_lossy().len() <= 3 {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -318,6 +318,7 @@ mod tests {
|
||||
assert!(matches!(state, FileContentState::TooLarge { .. }));
|
||||
}
|
||||
|
||||
#[cfg(unix)]
|
||||
#[tokio::test]
|
||||
async fn test_read_file_bounded_symlink() {
|
||||
let dir = tempfile::tempdir().unwrap();
|
||||
|
||||
@@ -150,6 +150,7 @@ fn write_private(path: &Path, contents: &str) -> std::io::Result<()> {
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
#[cfg(unix)]
|
||||
use std::time::Instant;
|
||||
|
||||
/// Write an executable `#!/bin/sh` fake `mmdc` and return (dir-guard, path).
|
||||
|
||||
@@ -179,9 +179,12 @@ fn reap_process_group(_child: &Child) {
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
#[cfg(unix)]
|
||||
use std::process::Stdio;
|
||||
#[cfg(unix)]
|
||||
use std::time::Instant;
|
||||
|
||||
#[cfg(unix)]
|
||||
fn detached(mut cmd: Command) -> Command {
|
||||
cmd.stdin(Stdio::null())
|
||||
.stdout(Stdio::null())
|
||||
|
||||
@@ -214,6 +214,7 @@ pub fn open_url_if_safe(url: &str, filter: SchemeFilter) -> bool {
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
#[test]
|
||||
fn open_path_command_passes_path_as_a_single_arg() {
|
||||
// Path with spaces must be one argument, never shell-interpolated.
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
//! portable re-injection exists (TIOCSTI is blocked); accepted loss.
|
||||
|
||||
use std::io::Write;
|
||||
#[cfg(unix)]
|
||||
use std::time::Duration;
|
||||
|
||||
/// Bounds the reply buffer against terminals that stream without a terminator.
|
||||
|
||||
@@ -1164,6 +1164,7 @@ mod platform {
|
||||
#[cfg(not(target_os = "macos"))]
|
||||
mod platform {
|
||||
use super::ImageData;
|
||||
#[cfg(target_os = "linux")]
|
||||
use std::process::{Command, Stdio};
|
||||
|
||||
/// No subprocess-free pasteboard probe exists off-macOS.
|
||||
@@ -1926,19 +1927,18 @@ mod platform {
|
||||
// Public API
|
||||
|
||||
pub fn get_text() -> anyhow::Result<Option<String>> {
|
||||
let mut arboard_error = None;
|
||||
match arboard_get_text() {
|
||||
let arboard_error = match arboard_get_text() {
|
||||
Ok(Some(text)) => return Ok(Some(text)),
|
||||
// Wayland-only: arboard's empty answer is not authoritative,
|
||||
// fall through to wl-paste (see `wayland_tool_selected`).
|
||||
#[cfg(target_os = "linux")]
|
||||
Ok(None) if wayland_tool_selected(linux_tool_spec()) => {}
|
||||
Ok(None) if wayland_tool_selected(linux_tool_spec()) => None,
|
||||
Ok(None) => return Ok(None),
|
||||
Err(e) => {
|
||||
tracing::debug!("arboard get_text failed: {e}");
|
||||
arboard_error = Some(e);
|
||||
Some(e)
|
||||
}
|
||||
}
|
||||
};
|
||||
#[cfg(target_os = "linux")]
|
||||
if let Some(spec) = linux_tool_spec() {
|
||||
let bytes = run_capture_out_checked(spec.read_text, CLI_READ_WAIT)?;
|
||||
@@ -2039,19 +2039,18 @@ mod platform {
|
||||
}
|
||||
|
||||
pub fn get_image() -> anyhow::Result<Option<ImageData>> {
|
||||
let mut arboard_error = None;
|
||||
match arboard_get_image() {
|
||||
let arboard_error = match arboard_get_image() {
|
||||
Ok(Some(image)) => return Ok(Some(image)),
|
||||
// Wayland-only: arboard's empty answer is not authoritative,
|
||||
// fall through to wl-paste (see `wayland_tool_selected`).
|
||||
#[cfg(target_os = "linux")]
|
||||
Ok(None) if wayland_tool_selected(linux_tool_spec()) => {}
|
||||
Ok(None) if wayland_tool_selected(linux_tool_spec()) => None,
|
||||
Ok(None) => return Ok(None),
|
||||
Err(e) => {
|
||||
tracing::debug!("arboard get_image failed: {e}");
|
||||
arboard_error = Some(e);
|
||||
Some(e)
|
||||
}
|
||||
}
|
||||
};
|
||||
#[cfg(target_os = "linux")]
|
||||
if let Some(spec) = linux_tool_spec()
|
||||
&& let Some(argv) = spec.read_png
|
||||
|
||||
@@ -2653,7 +2653,7 @@ fn spawn_shell_command(
|
||||
};
|
||||
|
||||
#[cfg(not(unix))]
|
||||
let mut build_cmd = |with_breakaway: bool| {
|
||||
let build_cmd = |with_breakaway: bool| {
|
||||
use windows::Win32::System::Threading::{
|
||||
CREATE_BREAKAWAY_FROM_JOB, CREATE_NEW_PROCESS_GROUP, CREATE_NO_WINDOW,
|
||||
};
|
||||
|
||||
@@ -813,11 +813,11 @@ pub(crate) mod win_native_selection {
|
||||
let Ok(saved) = u32::try_from(saved) else {
|
||||
return;
|
||||
};
|
||||
if let Some((handle, current)) = stdin_console_mode() {
|
||||
if current != saved {
|
||||
unsafe {
|
||||
let _ = SetConsoleMode(handle, saved);
|
||||
}
|
||||
if let Some((handle, current)) = stdin_console_mode()
|
||||
&& current != saved
|
||||
{
|
||||
unsafe {
|
||||
let _ = SetConsoleMode(handle, saved);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,5 +66,6 @@ mod wheel_flood_paints_no_ghost_frames;
|
||||
mod wheel_overscroll_at_bottom_reengages_follow_mid_stream;
|
||||
#[path = "pty_e2e/wheel_scrolls_viewport_during_streaming_turn.rs"]
|
||||
mod wheel_scrolls_viewport_during_streaming_turn;
|
||||
#[cfg(unix)]
|
||||
#[path = "pty_e2e/word_select_tip_on_double_click_pty.rs"]
|
||||
mod word_select_tip_on_double_click_pty;
|
||||
@@ -11,10 +11,12 @@ mod common;
|
||||
#[path = "pty_e2e/scroll.rs"]
|
||||
mod scroll;
|
||||
|
||||
#[cfg(unix)]
|
||||
#[path = "pty_e2e/bash_mode_file_completion_shell_like.rs"]
|
||||
mod bash_mode_file_completion_shell_like;
|
||||
#[path = "pty_e2e/bash_mode_strips_redundant_session_cd_from_chrome.rs"]
|
||||
mod bash_mode_strips_redundant_session_cd_from_chrome;
|
||||
#[cfg(unix)]
|
||||
#[path = "pty_e2e/bash_mode_tab_completion_dropdown.rs"]
|
||||
mod bash_mode_tab_completion_dropdown;
|
||||
#[path = "pty_e2e/edit_collapsed_oneliner_pty.rs"]
|
||||
|
||||
@@ -224,11 +224,11 @@ impl ApprovedRoot {
|
||||
{
|
||||
return None;
|
||||
}
|
||||
return Some(OpenedRegularFile {
|
||||
Some(OpenedRegularFile {
|
||||
file,
|
||||
path: canonical_path,
|
||||
metadata,
|
||||
});
|
||||
})
|
||||
}
|
||||
#[cfg(not(any(unix, windows)))]
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user