diff --git a/extension/src/flow-cli/cli-provider.ts b/extension/src/flow-cli/cli-provider.ts index 38286657..a5b2181a 100644 --- a/extension/src/flow-cli/cli-provider.ts +++ b/extension/src/flow-cli/cli-provider.ts @@ -12,6 +12,7 @@ const CHECK_FLOW_CLI_CMD_NO_JSON = (flowCommand: string): string => `${flowComma const KNOWN_BINS = ['flow', 'flow-c1'] const CADENCE_V1_CLI_REGEX = /-cadence-v1.0.0/g +const LEGACY_VERSION_REGEXP = /Version:\s*(v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)(\s|$)/m export interface CliBinary { name: string @@ -118,14 +119,17 @@ export class CliProvider { async #fetchBinaryInformationOld (bin: string): Promise { try { // Get user's version informaton - const buffer: string = (await execDefault(CHECK_FLOW_CLI_CMD_NO_JSON( + const output = (await execDefault(CHECK_FLOW_CLI_CMD_NO_JSON( bin - ))).stdout + ))) - // Format version string from output - let versionStr: string | null = parseFlowCliVersion(buffer) + let versionStr: string | null = parseFlowCliVersion(output.stdout) + if (versionStr === null) { + // Try to fallback to stderr as patch for bugged version + versionStr = parseFlowCliVersion(output.stderr) + } - versionStr = semver.clean(versionStr) + versionStr = versionStr != null ? semver.clean(versionStr) : null if (versionStr === null) return null // Ensure user has a compatible version number installed @@ -181,6 +185,6 @@ export function isCadenceV1Cli (version: semver.SemVer): boolean { return CADENCE_V1_CLI_REGEX.test(version.raw) } -export function parseFlowCliVersion (buffer: Buffer | string): string { - return (buffer.toString().split('\n')[0]).split(' ')[1] +export function parseFlowCliVersion (buffer: Buffer | string): string | null { + return buffer.toString().match(LEGACY_VERSION_REGEXP)?.[1] ?? null } diff --git a/package-lock.json b/package-lock.json index 699d1774..f75e1c84 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "cadence", - "version": "2.3.0", + "version": "2.3.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cadence", - "version": "2.3.0", + "version": "2.3.1", "dependencies": { "@onflow/cadence-parser": "^0.42.1", "@onflow/decode": "0.0.11", diff --git a/package.json b/package.json index bc176932..ea22849d 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "displayName": "Cadence", "publisher": "onflow", "description": "This extension integrates Cadence, the resource-oriented smart contract programming language of Flow, into Visual Studio Code.", - "version": "2.3.0", + "version": "2.3.1", "repository": { "type": "git", "url": "https://github.com/onflow/vscode-cadence.git"