Skip to content

Commit b676d83

Browse files
authored
Fix terraform status bar (#857)
* add missing command prefix for callers * add test for status bar * call updateTerraformStatusBar to avoid sleep
1 parent 6d89e9b commit b676d83

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

src/extension.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { config, getActiveTextEditor } from './vscodeUtils';
1414

1515
const brand = `HashiCorp Terraform`;
1616
const outputChannel = vscode.window.createOutputChannel(brand);
17-
const terraformStatus = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 0);
17+
export let terraformStatus: vscode.StatusBarItem;
1818

1919
let reporter: TelemetryReporter;
2020
let clientHandler: ClientHandler;
@@ -27,6 +27,7 @@ export interface TerraformExtension {
2727

2828
export async function activate(context: vscode.ExtensionContext): Promise<TerraformExtension> {
2929
const manifest = context.extension.packageJSON;
30+
terraformStatus = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 0);
3031
reporter = new TelemetryReporter(context.extension.id, manifest.version, manifest.appInsightsKey);
3132
context.subscriptions.push(reporter);
3233

@@ -157,8 +158,9 @@ export async function deactivate(): Promise<void> {
157158
return clientHandler.stopClient();
158159
}
159160

160-
async function updateTerraformStatusBar(documentUri: vscode.Uri): Promise<void> {
161-
const initSupported = clientHandler.clientSupportsCommand('terraform-ls.terraform.init');
161+
export async function updateTerraformStatusBar(documentUri: vscode.Uri): Promise<void> {
162+
const client = clientHandler.getClient();
163+
const initSupported = clientHandler.clientSupportsCommand(`${client.commandPrefix}.terraform-ls.terraform.init`);
162164
if (initSupported) {
163165
const client = clientHandler.getClient();
164166
const moduleUri = Utils.dirname(documentUri);
@@ -175,6 +177,7 @@ async function updateTerraformStatusBar(documentUri: vscode.Uri): Promise<void>
175177
terraformStatus.show();
176178
} else {
177179
terraformStatus.hide();
180+
terraformStatus.text = '';
178181
}
179182
} catch (err) {
180183
vscode.window.showErrorMessage(err);
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import * as assert from 'assert';
2+
import * as vscode from 'vscode';
3+
import { expect } from 'chai';
4+
import { terraformStatus, updateTerraformStatusBar } from '../../extension';
5+
import { getDocUri } from '../helper';
6+
7+
suite('statusBar', () => {
8+
teardown(async () => {
9+
await vscode.commands.executeCommand('workbench.action.closeAllEditors');
10+
});
11+
12+
test('should create a status bar item on activate', () => {
13+
assert.notStrictEqual(terraformStatus, undefined);
14+
});
15+
16+
test('should create a status bar with the root module label', async () => {
17+
const documentUri = getDocUri('sample.tf');
18+
await updateTerraformStatusBar(documentUri);
19+
20+
expect(terraformStatus.text).to.equal('$(refresh) testFixture');
21+
});
22+
23+
test('should create an empty status bar inside a child module', async () => {
24+
const documentUri = getDocUri('modules/sample.tf');
25+
await updateTerraformStatusBar(documentUri);
26+
27+
expect(terraformStatus.text).to.equal('');
28+
});
29+
});

0 commit comments

Comments
 (0)