}
async function bootstrap(config: Config, state: PersistentState): Promise<string> {
- await vscode.workspace.fs.createDirectory(config.globalStorageUri);
+ try {
+ await vscode.workspace.fs.createDirectory(config.globalStorageUri);
+ } catch {}
if (!config.currentExtensionIsNightly) {
await state.updateNightlyReleaseId(undefined);
'';
}
`;
- const origFile = vscode.Uri.file(dest.path + "-orig");
+ const origFile = vscode.Uri.file(dest.fsPath + "-orig");
await vscode.workspace.fs.rename(dest, origFile);
progress.report({ message: "Patching executable", increment: 20 });
await new Promise((resolve, reject) => {
- const handle = exec(`nix-build -E - --argstr srcStr '${origFile.path}' -o '${dest.path}'`,
+ const handle = exec(`nix-build -E - --argstr srcStr '${origFile.fsPath}' -o '${dest.fsPath}'`,
(err, stdout, stderr) => {
if (err != null) {
reject(Error(stderr));
await state.updateServerVersion(undefined);
}
- if (state.serverVersion === config.package.version) return dest.path;
+ if (state.serverVersion === config.package.version) return dest.fsPath;
if (config.askBeforeDownload) {
const userResponse = await vscode.window.showInformationMessage(
`Language server version ${config.package.version} for rust-analyzer is not installed.`,
"Download now"
);
- if (userResponse !== "Download now") return dest.path;
+ if (userResponse !== "Download now") return dest.fsPath;
}
const releaseTag = config.package.releaseTag;
}
await state.updateServerVersion(config.package.version);
- return dest.path;
+ return dest.fsPath;
}
function serverPath(config: Config): string | null {
try {
const contents = (await vscode.workspace.fs.readFile(vscode.Uri.file("/etc/os-release"))).toString();
return contents.indexOf("ID=nixos") !== -1;
- } catch (e) {
+ } catch {
return false;
}
}
// to prevent partially downloaded files when user kills vscode
// This also avoids overwriting running executables
const randomHex = crypto.randomBytes(5).toString("hex");
- const rawDest = path.parse(opts.dest.path);
+ const rawDest = path.parse(opts.dest.fsPath);
const tempFilePath = vscode.Uri.joinPath(vscode.Uri.file(rawDest.dir), `${rawDest.name}${randomHex}`);
await vscode.window.withProgress(
}
);
- await vscode.workspace.fs.rename(tempFilePath, opts.dest);
+ await vscode.workspace.fs.rename(tempFilePath, opts.dest, { overwrite: true });
}
async function downloadFile(
const totalBytes = Number(res.headers.get('content-length'));
assert(!Number.isNaN(totalBytes), "Sanity check of content-length protocol");
- log.debug("Downloading file of", totalBytes, "bytes size from", urlString, "to", destFilePath.path);
+ log.debug("Downloading file of", totalBytes, "bytes size from", urlString, "to", destFilePath.fsPath);
let readBytes = 0;
res.body.on("data", (chunk: Buffer) => {
onProgress(readBytes, totalBytes);
});
- const destFileStream = fs.createWriteStream(destFilePath.path, { mode });
+ const destFileStream = fs.createWriteStream(destFilePath.fsPath, { mode });
const srcStream = gunzip ? res.body.pipe(zlib.createGunzip()) : res.body;
await pipeline(srcStream, destFileStream);
// it is not mentioned in docs and cannot be infered by the type signature...
const standardPath = vscode.Uri.joinPath(vscode.Uri.file(os.homedir()), ".cargo", "bin", executableName);
- if (isFile(standardPath.path)) return standardPath.path;
+ if (isFileAtUri(standardPath)) return standardPath.fsPath;
} catch (err) {
log.error("Failed to read the fs info", err);
}
: [candidate];
});
- return candidates.some(isFile);
+ return candidates.some(isFileAtPath);
}
-async function isFile(path: string): Promise<boolean> {
- return ((await vscode.workspace.fs.stat(vscode.Uri.file(path))).type & vscode.FileType.File) !== 0;
+async function isFileAtPath(path: string): Promise<boolean> {
+ return isFileAtUri(vscode.Uri.file(path));
+}
+
+async function isFileAtUri(uri: vscode.Uri): Promise<boolean> {
+ try {
+ return ((await vscode.workspace.fs.stat(uri)).type & vscode.FileType.File) !== 0;
+ } catch {
+ return false;
+ }
}