|
6 | 6 | import * as _ from 'lodash' |
7 | 7 | import * as os from 'os' |
8 | 8 | import * as vscode from 'vscode' |
| 9 | +import * as semver from 'semver' |
9 | 10 | import * as nls from 'vscode-nls' |
10 | 11 | import { getLogger } from './logger' |
11 | 12 | import { VSCODE_EXTENSION_ID, extensionAlphaVersion } from './extensions' |
12 | 13 | import { Ec2MetadataClient } from './clients/ec2MetadataClient' |
13 | 14 | import { DefaultEc2MetadataClient } from './clients/ec2MetadataClient' |
14 | 15 | import { extensionVersion, getCodeCatalystDevEnvId } from './vscode/env' |
15 | | -import { DevSettings } from './settings' |
| 16 | +import { AmazonQPromptSettings, DevSettings, ToolkitPromptSettings } from './settings' |
16 | 17 | import globals from './extensionGlobals' |
17 | 18 | import { once } from './utilities/functionUtils' |
| 19 | +import * as localizedText from './localizedText' |
18 | 20 | import { |
19 | 21 | apprunnerCreateServiceDocUrl, |
20 | 22 | debugNewSamAppDocUrl, |
@@ -262,6 +264,33 @@ export function showWelcomeMessage(context: vscode.ExtensionContext): void { |
262 | 264 | } |
263 | 265 | } |
264 | 266 |
|
| 267 | +/** |
| 268 | + * Shows a (suppressible) warning if the current vscode version is older than `minVscode`. |
| 269 | + */ |
| 270 | +export async function maybeShowMinVscodeWarning(minVscode: string) { |
| 271 | + const settings = isAmazonQ() ? AmazonQPromptSettings.instance : ToolkitPromptSettings.instance |
| 272 | + if (!(await settings.isPromptEnabled('minIdeVersion'))) { |
| 273 | + return |
| 274 | + } |
| 275 | + const isVscode = !!vscode.env.appName?.startsWith(vscodeAppname) |
| 276 | + const updateButton = `Update ${vscode.env.appName}` |
| 277 | + if (isVscode && semver.lt(vscode.version, minVscode)) { |
| 278 | + vscode.window |
| 279 | + .showWarningMessage( |
| 280 | + `The next release of the ${productName()} extension will require VS Code ${minVscode} or newer. Your are currently running ${vscode.version}`, |
| 281 | + updateButton, |
| 282 | + localizedText.dontShow |
| 283 | + ) |
| 284 | + .then(async (resp) => { |
| 285 | + if (resp === updateButton) { |
| 286 | + await vscode.commands.executeCommand('update.checkForUpdate') |
| 287 | + } else if (resp === localizedText.dontShow) { |
| 288 | + settings.disablePrompt('minIdeVersion') |
| 289 | + } |
| 290 | + }) |
| 291 | + } |
| 292 | +} |
| 293 | + |
265 | 294 | function _getDocumentationUrl(urls: { cloud9: vscode.Uri; toolkit: vscode.Uri }): vscode.Uri { |
266 | 295 | return isCloud9() ? urls.cloud9 : urls.toolkit |
267 | 296 | } |
|
0 commit comments