From 38842593a9e27dd00c750edfbc4b99aa7e4c1cd8 Mon Sep 17 00:00:00 2001 From: Josh Pinkney Date: Wed, 8 Jan 2025 22:46:12 -0500 Subject: [PATCH] feat(amazonq): Add lsp downloading support for windows/lunx --- packages/core/src/shared/fs/fs.ts | 28 +++++++++++++++++++++ packages/core/src/shared/lsp/lspResolver.ts | 3 +-- packages/core/src/shared/vscode/env.ts | 12 --------- 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/packages/core/src/shared/fs/fs.ts b/packages/core/src/shared/fs/fs.ts index 1c7132648bc..077709be2c9 100644 --- a/packages/core/src/shared/fs/fs.ts +++ b/packages/core/src/shared/fs/fs.ts @@ -543,6 +543,34 @@ export class FileSystem { return this.#homeDir } + /** + * Gets the application cache folder for the current platform + * + * Follows the cache_dir convention outlined in https://crates.io/crates/dirs + */ + getCacheDir(): string { + switch (process.platform) { + case 'darwin': { + return _path.join(this.getUserHomeDir(), 'Library/Caches') + } + case 'win32': { + const localAppData = process.env.LOCALAPPDATA + if (!localAppData) { + throw new ToolkitError('LOCALAPPDATA environment variable not set', { + code: 'LocalAppDataNotFound', + }) + } + return localAppData + } + case 'linux': { + return _path.join(this.getUserHomeDir(), '.cache') + } + default: { + throw new Error(`Unsupported platform: ${process.platform}. Expected 'darwin', 'win32', or 'linux'.`) + } + } + } + /** * Gets the (cached) username for this session, or "webuser" in web-mode, or "unknown-user" if * a username could not be resolved. diff --git a/packages/core/src/shared/lsp/lspResolver.ts b/packages/core/src/shared/lsp/lspResolver.ts index d85ee73b929..17b21a994ca 100644 --- a/packages/core/src/shared/lsp/lspResolver.ts +++ b/packages/core/src/shared/lsp/lspResolver.ts @@ -10,7 +10,6 @@ import * as path from 'path' import { FileType } from 'vscode' import AdmZip from 'adm-zip' import { TargetContent, logger, LspResult, LspVersion, Manifest } from './types' -import { getApplicationSupportFolder } from '../vscode/env' import { createHash } from '../crypto' import { lspSetupStage, StageResolver, tryStageResolvers } from './utils/setupStage' import { HttpResourceFetcher } from '../resourcefetcher/httpResourceFetcher' @@ -394,7 +393,7 @@ export class LanguageServerResolver { // lazy calls to `getApplicationSupportFolder()` to avoid failure on windows. public static get defaultDir() { - return path.join(getApplicationSupportFolder(), `aws/toolkits/language-servers`) + return path.join(fs.getCacheDir(), `aws/toolkits/language-servers`) } defaultDownloadFolder() { diff --git a/packages/core/src/shared/vscode/env.ts b/packages/core/src/shared/vscode/env.ts index 05cd21613e7..004db0efc27 100644 --- a/packages/core/src/shared/vscode/env.ts +++ b/packages/core/src/shared/vscode/env.ts @@ -12,7 +12,6 @@ import { onceChanged } from '../utilities/functionUtils' import { ChildProcess } from '../utilities/processUtils' import globals, { isWeb } from '../extensionGlobals' import * as devConfig from '../../dev/config' -import path from 'path' /** * Returns true if the current build is running on CI (build server). @@ -271,14 +270,3 @@ export async function getMachineId(): Promise { // TODO: check exit code. return (await proc.run()).stdout.trim() ?? 'unknown-host' } - -export function getApplicationSupportFolder() { - switch (process.platform) { - case 'darwin': { - return path.join(os.homedir(), 'Library/Application Support') - } - default: { - throw new Error('Only mac is supported right now') - } - } -}