Skip to main content

Mountain/IPC/WindServiceHandlers/FileSystem/Native/
FileStatNative.rs

1#![allow(unused_variables, dead_code, unused_imports)]
2
3//! Wire method `file:stat`. Returns VS Code's `IStat` shape via
4//! `metadata_to_istat`. Uses `symlink_metadata` to avoid following
5//! symlinks (matches Electron behaviour). Noise from benign ENOENTs on
6//! known VS Code probe paths is squelched via `IsBenignEnoent` +
7//! `DebugOnce`.
8
9use serde_json::Value;
10
11use crate::{
12	IPC::{
13		DevLog,
14		WindServiceHandlers::Utilities::{
15			MetadataEncoding::Fn as metadata_to_istat,
16			PathExtraction::Fn as extract_path_from_arg,
17		},
18	},
19	dev_log,
20};
21
22pub async fn Fn(Arguments:Vec<Value>) -> Result<Value, String> {
23	let Path = extract_path_from_arg(Arguments.get(0).ok_or("Missing file path")?)?;
24
25	// Per-path stat emits at very high volume during workbench boot
26	// (package.json / launch.json / settings.json probes from every
27	// extension). Gate to `vfs-verbose`; the ENOENT path retains the
28	// `vfs` tag so real misses still surface at the default level.
29	if !DevLog::IsBenignEnoent::Fn(&Path) {
30		dev_log!("vfs-verbose", "stat: {}", Path);
31	}
32
33	let Metadata = tokio::fs::symlink_metadata(&Path).await.map_err(|E| {
34		if DevLog::IsBenignEnoent::Fn(&Path) {
35			DevLog::DebugOnce::Fn(
36				"vfs",
37				&format!("stat-enoent:{}", Path),
38				&format!("stat ENOENT (benign): {}", Path),
39			);
40		} else {
41			dev_log!("vfs", "stat ENOENT: {}", Path);
42		}
43		format!("Failed to stat file: {} (path: {})", E, Path)
44	})?;
45
46	if !DevLog::IsBenignEnoent::Fn(&Path) {
47		dev_log!("vfs-verbose", "stat OK: {} (dir={})", Path, Metadata.is_dir());
48	}
49
50	Ok(metadata_to_istat(&Metadata))
51}