Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions packages/amazonq/src/lsp/lspInstaller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
*/

import * as vscode from 'vscode'
import { Range } from 'semver'
import {
ManifestResolver,
LanguageServerResolver,
Expand All @@ -15,9 +14,12 @@ import {
cleanLspDownloads,
} from 'aws-core-vscode/shared'
import path from 'path'
import { Range } from 'semver'

const manifestURL = 'https://aws-toolkit-language-servers.amazonaws.com/codewhisperer/0/manifest.json'
export const supportedLspServerVersions = '^3.1.1'
export const manifestURL = 'https://aws-toolkit-language-servers.amazonaws.com/codewhisperer/0/manifest.json'
export const supportedLspServerVersions = new Range('^3.1.1', {
includePrerelease: true,
})

export class AmazonQLSPResolver implements LspResolver {
async resolve(): Promise<LspResolution> {
Expand All @@ -41,7 +43,7 @@ export class AmazonQLSPResolver implements LspResolver {
const installationResult = await new LanguageServerResolver(
manifest,
name,
new Range(supportedLspServerVersions)
supportedLspServerVersions
).resolve()

const nodePath = path.join(installationResult.assetDirectory, `servers/${getNodeExecutableName()}`)
Expand Down
35 changes: 34 additions & 1 deletion packages/amazonq/test/e2e/lsp/lspInstaller.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import assert from 'assert'
import sinon from 'sinon'
import { AmazonQLSPResolver, supportedLspServerVersions } from '../../../src/lsp/lspInstaller'
import { AmazonQLSPResolver, manifestURL, supportedLspServerVersions } from '../../../src/lsp/lspInstaller'
import {
fs,
globals,
Expand Down Expand Up @@ -225,5 +225,38 @@ describe('AmazonQLSPInstaller', () => {

assertTelemetry('languageServer_setup', expectedTelemetry)
})

it('resolves release candidiates', async () => {
const original = new ManifestResolver(manifestURL, 'AmazonQ').resolve()
sandbox.stub(ManifestResolver.prototype, 'resolve').callsFake(async () => {
const originalManifest = await original

const latestVersion = originalManifest.versions.reduce((latest, current) => {
return semver.gt(current.serverVersion, latest.serverVersion) ? current : latest
}, originalManifest.versions[0])

// These convert something like 3.1.1 to 3.2.1-rc.0
const incrementedVersion = semver.inc(latestVersion.serverVersion, 'minor')
if (!incrementedVersion) {
assert.fail('Failed to increment minor version')
}

const prereleaseVersion = semver.inc(incrementedVersion, 'prerelease', 'rc')
if (!prereleaseVersion) {
assert.fail('Failed to create pre-release version')
}

const newVersion = {
...latestVersion,
serverVersion: prereleaseVersion,
}

originalManifest.versions = [newVersion, ...originalManifest.versions]
return originalManifest
})

const download = await resolver.resolve()
assert.ok(download.assetDirectory.endsWith('-rc.0'))
})
})
})
6 changes: 5 additions & 1 deletion packages/core/src/shared/lsp/lspResolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -345,7 +345,11 @@ export class LanguageServerResolver {
return false
}

return semver.satisfies(version.serverVersion, this.versionRange) && !version.isDelisted
return (
semver.satisfies(version.serverVersion, this.versionRange, {
includePrerelease: true,
}) && !version.isDelisted
)
}

/**
Expand Down