diff --git a/src/commands/installLanguageServer.ts b/src/commands/installLanguageServer.ts index 11a3a0683..7488c5211 100644 --- a/src/commands/installLanguageServer.ts +++ b/src/commands/installLanguageServer.ts @@ -1,25 +1,28 @@ -import * as vscode from "vscode"; -import { Command, CommandType } from "./command"; +import * as Octokit from '@octokit/rest'; import * as fs from 'fs'; import * as Path from 'path'; import * as tar from 'tar'; -import * as Octokit from '@octokit/rest'; -import { HttpClient } from 'typed-rest-client/HttpClient'; -import { QuickPickItem } from "vscode"; -import { getConfiguration } from "../configuration"; -import { ExperimentalLanguageClient } from "../languageclient"; +import {HttpClient} from 'typed-rest-client/HttpClient'; +import * as vscode from 'vscode'; +import {QuickPickItem} from 'vscode'; +import {getConfiguration} from '../configuration'; +import {ExperimentalLanguageClient} from '../languageclient'; +import {Command, CommandType} from './command'; export class InstallLanguageServerCommand extends Command { - public static readonly CommandName = "installLanguageServer"; + public static readonly CommandName = 'installLanguageServer'; constructor(ctx: vscode.ExtensionContext) { super(InstallLanguageServerCommand.CommandName, ctx, CommandType.PALETTE); } - protected async perform(releaseId: string = null, githubRealeaseData: string = null): Promise { + protected async perform( + releaseId: string = null, + githubRealeaseData: string = null): Promise { await ExperimentalLanguageClient.stopIfRunning(); - const serverLocation = getConfiguration().languageServer.pathToBinary || Path.join(this.ctx.extensionPath, "lspbin"); + const serverLocation = getConfiguration().languageServer.pathToBinary || + Path.join(this.ctx.extensionPath, 'lspbin'); // Create dir for lsp binary if it doesn't exist if (!fs.existsSync(serverLocation)) { @@ -31,13 +34,12 @@ export class InstallLanguageServerCommand extends Command { let availableReleses: Octokit.ReposListReleasesResponse; if (githubRealeaseData) { - availableReleses = JSON.parse(githubRealeaseData) as Octokit.ReposListReleasesResponse; + availableReleses = + JSON.parse(githubRealeaseData) as Octokit.ReposListReleasesResponse; } else { // What releases are available? - let apiRespose = await octokit.repos.listReleases({ - owner: 'juliosueiras', - repo: 'terraform-lsp' - }); + let apiRespose = await octokit.repos.listReleases( + {owner: 'juliosueiras', repo: 'terraform-lsp'}); availableReleses = apiRespose.data; } @@ -46,57 +48,64 @@ export class InstallLanguageServerCommand extends Command { availableReleses.forEach(r => { releaseOptions.push({ label: r.name, - description: `Is Prerelease version?: ${r.prerelease} Tag: ${r.tag_name}`, + description: `Tag: ${r.tag_name}${r.prerelease ? ' (prerelease)' : ''}`, detail: r.id.toString() } as QuickPickItem); }); if (!releaseId) { - let choice = await vscode.window.showQuickPick(releaseOptions, { placeHolder: "Terraform language server install - please pick a version" }); + let choice = await vscode.window.showQuickPick(releaseOptions, { + placeHolder: 'Terraform language server install - please pick a version' + }); if (choice === undefined) { - vscode.window.showErrorMessage("You must pick a version to complete installation"); + vscode.window.showErrorMessage( + 'You must pick a version to complete installation'); return; } releaseId = choice.detail; } - const releaseDetails = availableReleses.filter((v) => v.id.toString() === releaseId)[0]; + const releaseDetails = + availableReleses.filter((v) => v.id.toString() === releaseId)[0]; let platform = process.platform.toString(); - platform = platform === "win32" ? "windows" : platform; + platform = platform === 'win32' ? 'windows' : platform; const downloadUrl = this.getDownloadUrl(releaseDetails, platform); - if (downloadUrl === "NotFound") { - vscode.window.showErrorMessage(`Failed to install, releases for the Lanugage server didn't contain a release for your platform: ${platform}`); + if (downloadUrl === 'NotFound') { + vscode.window.showErrorMessage( + `Failed to install, releases for the Lanugage server didn't contain a release for your platform: ${ + platform}`); return; } - const client = new HttpClient("clientTest"); + const client = new HttpClient('clientTest'); const response = await client.get(downloadUrl); const file: NodeJS.WritableStream = fs.createWriteStream(downloadedZipFile); if (response.message.statusCode !== 200) { - const err: Error = new Error(`Unexpected HTTP response: ${response.message.statusCode}`); - err["httpStatusCode"] = response.message.statusCode; - vscode.window.showErrorMessage(`Downloading Terraform language server failed with ${err}`); + const err: Error = + new Error(`Unexpected HTTP response: ${response.message.statusCode}`); + err['httpStatusCode'] = response.message.statusCode; + vscode.window.showErrorMessage( + `Downloading Terraform language server failed with ${err}`); return; } return new Promise((resolve, reject) => { - file.on("error", (err) => reject(err)); + file.on('error', (err) => reject(err)); const stream = response.message.pipe(file); - stream.on("close", () => { + stream.on('close', () => { try { - const unzipStream = fs.createReadStream(downloadedZipFile).pipe( - tar.x({ - cwd: serverLocation, - onwarn: (message, data) => { - console.log(message); - reject(message); - } - }) - ); - unzipStream.on("finish", async () => { + const unzipStream = + fs.createReadStream(downloadedZipFile).pipe(tar.x({ + cwd: serverLocation, + onwarn: (message, data) => { + console.log(message); + reject(message); + } + })); + unzipStream.on('finish', async () => { const langClient = new ExperimentalLanguageClient(this.ctx); try { await langClient.start(); @@ -107,15 +116,17 @@ export class InstallLanguageServerCommand extends Command { resolve(); }); } catch (err) { - vscode.window.showErrorMessage(`Unzipping Terraform language server failed with ${err}`); + vscode.window.showErrorMessage( + `Unzipping Terraform language server failed with ${err}`); reject(err); } }); }); } - private getDownloadUrl(release: Octokit.ReposGetReleaseResponse, platform: string) { - let downloadUrl = "NotFound"; + private getDownloadUrl( + release: Octokit.ReposGetReleaseResponse, platform: string) { + let downloadUrl = 'NotFound'; release.assets.forEach(asset => { if (!asset.name.endsWith('.tar.gz')) { return;