From 2f21244eac524d9c19e615d4b7ea18a217702715 Mon Sep 17 00:00:00 2001 From: Nikhil Raman Date: Sun, 14 Jan 2018 18:40:42 +0530 Subject: [PATCH] Show build/vet/lint status in Status bar. Fixes #1456. --- src/goBuild.ts | 14 +++++++++----- src/goLint.ts | 15 ++++++++++----- src/goStatus.ts | 2 ++ src/goVet.ts | 14 ++++++++++---- 4 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/goBuild.ts b/src/goBuild.ts index a9a719f96..9dc5c158c 100644 --- a/src/goBuild.ts +++ b/src/goBuild.ts @@ -6,7 +6,7 @@ import os = require('os'); import { getNonVendorPackages } from './goPackages'; import { getTestFlags } from './testUtils'; import { getCurrentGoWorkspaceFromGOPATH } from './goPath'; - +import { diagnosticsStatusBarItem } from './goStatus'; /** * Builds current package or workspace. */ @@ -25,13 +25,17 @@ export function buildCode(buildWorkspace?: boolean) { let documentUri = editor ? editor.document.uri : null; let goConfig = vscode.workspace.getConfiguration('go', documentUri); - outputChannel.clear(); - outputChannel.show(); - outputChannel.appendLine('Building in progress...'); + + diagnosticsStatusBarItem.show(); + diagnosticsStatusBarItem.text = 'Building...'; goBuild(documentUri, goConfig, buildWorkspace) - .then(errors => handleDiagnosticErrors(editor ? editor.document : null, errors, vscode.DiagnosticSeverity.Error)) + .then(errors => { + handleDiagnosticErrors(editor ? editor.document : null, errors, vscode.DiagnosticSeverity.Error); + diagnosticsStatusBarItem.hide(); + }) .catch(err => { vscode.window.showInformationMessage('Error: ' + err); + diagnosticsStatusBarItem.text = 'Build Failed'; }); } diff --git a/src/goLint.ts b/src/goLint.ts index 896069da8..21069bf71 100644 --- a/src/goLint.ts +++ b/src/goLint.ts @@ -2,7 +2,7 @@ import path = require('path'); import vscode = require('vscode'); import { getToolsEnvVars, resolvePath, runTool, ICheckResult, handleDiagnosticErrors, getWorkspaceFolderPath } from './util'; import { outputChannel } from './goStatus'; - +import { diagnosticsStatusBarItem } from './goStatus'; /** * Runs linter in the current package or workspace. */ @@ -19,13 +19,18 @@ export function lintCode(lintWorkspace?: boolean) { let documentUri = editor ? editor.document.uri : null; let goConfig = vscode.workspace.getConfiguration('go', documentUri); - outputChannel.clear(); - outputChannel.show(); - outputChannel.appendLine('Linting in progress...'); + + diagnosticsStatusBarItem.show(); + diagnosticsStatusBarItem.text = 'Linting...'; + goLint(documentUri, goConfig, lintWorkspace) - .then(warnings => handleDiagnosticErrors(editor ? editor.document : null, warnings, vscode.DiagnosticSeverity.Warning)) + .then(warnings => { + handleDiagnosticErrors(editor ? editor.document : null, warnings, vscode.DiagnosticSeverity.Warning); + diagnosticsStatusBarItem.hide(); + }) .catch(err => { vscode.window.showInformationMessage('Error: ' + err); + diagnosticsStatusBarItem.text = 'Linting Failed'; }); } diff --git a/src/goStatus.ts b/src/goStatus.ts index 00c2748e8..76632d0ce 100644 --- a/src/goStatus.ts +++ b/src/goStatus.ts @@ -10,6 +10,8 @@ import vscode = require('vscode'); export let outputChannel = vscode.window.createOutputChannel('Go'); +export let diagnosticsStatusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left); + let statusBarEntry: vscode.StatusBarItem; export function showHideStatus() { diff --git a/src/goVet.ts b/src/goVet.ts index 166c6d708..d317f7ca7 100644 --- a/src/goVet.ts +++ b/src/goVet.ts @@ -2,6 +2,7 @@ import path = require('path'); import vscode = require('vscode'); import { getToolsEnvVars, runTool, ICheckResult, handleDiagnosticErrors, getWorkspaceFolderPath } from './util'; import { outputChannel } from './goStatus'; +import { diagnosticsStatusBarItem } from './goStatus'; /** * Runs go vet in the current package or workspace. @@ -19,13 +20,18 @@ export function vetCode(vetWorkspace?: boolean) { let documentUri = editor ? editor.document.uri : null; let goConfig = vscode.workspace.getConfiguration('go', documentUri); - outputChannel.clear(); - outputChannel.show(); - outputChannel.appendLine('Vetting in progress...'); + + diagnosticsStatusBarItem.show(); + diagnosticsStatusBarItem.text = 'Vetting...'; + goVet(documentUri, goConfig, vetWorkspace) - .then(warnings => handleDiagnosticErrors(editor ? editor.document : null, warnings, vscode.DiagnosticSeverity.Warning)) + .then(warnings => { + handleDiagnosticErrors(editor ? editor.document : null, warnings, vscode.DiagnosticSeverity.Warning); + diagnosticsStatusBarItem.hide(); + }) .catch(err => { vscode.window.showInformationMessage('Error: ' + err); + diagnosticsStatusBarItem.text = 'Vetting Failed'; }); }