UNPKG

pi-lens

Version:

Real-time code feedback for pi — LSP, linters, formatters, type-checking, structural analysis & booboo

80 lines (77 loc) • 2.22 kB
import { createRequire as __pilensCreateRequire } from "node:module"; const require = __pilensCreateRequire(import.meta.url); import { createToolchainAvailability } from "./chunk-F3P7VQ7H.js"; import { createSubsystemLogger } from "./chunk-O6TQT6RI.js"; // dist/clients/rust-client.js import * as path from "node:path"; var CARGO_WINDOWS_PATHS = [ path.join(process.env.USERPROFILE || "", ".cargo", "bin", "cargo.exe"), path.join(process.env.SYSTEMDRIVE || "C:", "\\cargo", "bin", "cargo.exe"), "cargo.exe" // PATH ]; var PROBE_TIMEOUT_MS = 3e3; var CARGO_UNIX_PATHS = [ path.join(process.env.HOME || "", ".cargo", "bin", "cargo"), "/usr/local/cargo/bin/cargo", "/usr/bin/cargo", "cargo" // PATH ]; var RustClient = class { /** * Availability lifecycle, behind the shared transient-aware latch (#1476). * The PATH candidate is resolved by spawning `cargo --version` with a 3 s * budget, so a host stall could latch "no cargo" for the session and silently * disable every Rust diagnostic until restart. */ availability; log; constructor(verbose = false) { this.log = verbose ? createSubsystemLogger("rust") : () => { }; this.availability = createToolchainAvailability({ tool: "cargo", label: "Cargo", windowsPaths: CARGO_WINDOWS_PATHS, unixPaths: CARGO_UNIX_PATHS, probeArgs: ["--version"], budgetMs: PROBE_TIMEOUT_MS, log: (msg) => this.log(msg) }); } /** * Find cargo executable path (async — probes PATH candidates off the event loop). */ async findCargoPathAsync() { return this.availability.findPath(); } /** * Check if cargo is installed (cached) */ async isAvailableAsync() { return this.availability.isAvailable(); } /** * Check if a file is a Rust file */ isRustFile(filePath) { return path.extname(filePath).toLowerCase() === ".rs"; } /** Forget the memoized cargo path and latched availability verdict — #2455. */ resetAvailability() { this.availability.reset(); } }; var rustClient = new RustClient(); function resetRustAvailability() { rustClient.resetAvailability(); } export { RustClient, rustClient, resetRustAvailability };