Skip to content

Commit

Permalink
Fix description when picking languageserver version
Browse files Browse the repository at this point in the history
  • Loading branch information
mauve committed Aug 25, 2019
1 parent 527fc9f commit 8535d5f
Showing 1 changed file with 52 additions and 41 deletions.
93 changes: 52 additions & 41 deletions src/commands/installLanguageServer.ts
Original file line number Diff line number Diff line change
@@ -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<void> {
protected async perform(
releaseId: string = null,
githubRealeaseData: string = null): Promise<void> {
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)) {
Expand All @@ -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;
}

Expand All @@ -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<void>((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();
Expand All @@ -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;
Expand Down

0 comments on commit 8535d5f

Please sign in to comment.