From c764baf7d9a7604d3e90b2d5335cb3e35823c8b5 Mon Sep 17 00:00:00 2001 From: Ryan Luker Date: Sat, 15 Jul 2017 15:42:00 -0700 Subject: [PATCH] Preview Lcov Report and general fixes (#80) * revamp readme badges * increment version, add contributing file, update readme * add preview lcov feature, add picker for lcov and reports * add options for preview and extension command * update lcov tests * allow for all .html to be previewed in the coverage folder * cleanup test assert * update readme, add preview lcov image * add event for preview * update extension settings --- CONTRIBUTING.md | 4 +++ README.md | 22 +++++++++--- example/package.json | 2 +- images/preview-lcov-1.PNG | Bin 0 -> 80700 bytes package.json | 39 ++++++++++++++++----- src/extension.ts | 13 ++++++- src/gutters.ts | 71 +++++++++++++++++++++++++++++++++----- src/lcov.ts | 21 ++++++++--- test/lcov.test.ts | 23 ++++++------ 9 files changed, 154 insertions(+), 41 deletions(-) create mode 100644 CONTRIBUTING.md create mode 100644 images/preview-lcov-1.PNG diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..ad37dd8 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,4 @@ +- test backed code changes +- new code matches existing style (enforced via tslint) +- bug fixes always welcome :) +- new feature proposals go through a github issue \ No newline at end of file diff --git a/README.md b/README.md index 2ac5210..e7151c8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,14 @@ # coverage-gutters +[![Version](https://vsmarketplacebadge.apphb.com/version/ryanluker.vscode-coverage-gutters.svg)](https://marketplace.visualstudio.com/items?itemName=ryanluker.vscode-coverage-gutters) +[![Installs](https://vsmarketplacebadge.apphb.com/installs/ryanluker.vscode-coverage-gutters.svg)](https://marketplace.visualstudio.com/items?itemName=ryanluker.vscode-coverage-gutters) +[![Ratings](https://vsmarketplacebadge.apphb.com/rating/ryanluker.vscode-coverage-gutters.svg)](https://marketplace.visualstudio.com/items?itemName=ryanluker.vscode-coverage-gutters) + [![Build Status](https://travis-ci.org/ryanluker/vscode-coverage-gutters.svg?branch=master)](https://travis-ci.org/ryanluker/vscode-coverage-gutters) [![Build status](https://ci.appveyor.com/api/projects/status/8vb8t787frcqtrm7?svg=true)](https://ci.appveyor.com/project/ryanluker/vscode-coverage-gutters) + +[![Average time to resolve an issue](https://isitmaintained.com/badge/resolution/ryanluker/vscode-coverage-gutters.svg)](https://isitmaintained.com/project/ryanluker/vscode-coverage-gutters "Average time to resolve an issue") +[![Percentage of issues still open](https://isitmaintained.com/badge/open/ryanluker/vscode-coverage-gutters.svg)](https://isitmaintained.com/project/ryanluker/vscode-coverage-gutters "Percentage of issues still open") + [![Buy me a coffee](https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=XRWWCAZBYB9SG&lc=CA&item_name=vscode%2dcoverage%2dgutters¤cy_code=CAD&bn=PP%2dDonationsBF%3abtn_donate_SM%2egif%3aNonHostedGuest) ## Features @@ -12,12 +20,17 @@ ![Coverage Gutters features options](images/coverage-gutters-features-2.PNG) +- preview overall coverage inside vscode + +![Coverage Gutters preview overall coverage](images/preview-lcov-1.PNG) + +- multi lcov info support via option picker - relative lcov file resolution option for those with complex file paths - workspace settings to customize the features to your liking - colour compatibility with light and dark themes ## Requirements -- vscode 1.11.x and up +- vscode 1.14.x and up - macos, linux or windows ## Extension Settings @@ -42,10 +55,12 @@ |`coverage-gutters.showRulerCoverage`|Show or hide the ruler coverage |`coverage-gutters.showGutterCoverage`|Show or hide the gutter coverage |`coverage-gutters.customizable.status-bar-toggler-watchLcovAndVisibleEditors-enabled`|Setting this to false will remove the status bar item +|`coverage-gutters.customizable.menus-editor-context-previewLcovReport-enabled`|Setting this to false will remove the command from the editor context menu and vice versa |`coverage-gutters.customizable.menus-editor-context-displayCoverage-enabled`|Setting this to false will remove the command from the editor context menu and vice versa |`coverage-gutters.customizable.menus-editor-context-watchLcovFile-enabled`|Setting this to false will remove the command from the editor context menu and vice versa |`coverage-gutters.customizable.menus-editor-context-watchVisibleEditors-enabled`|Setting this to false will remove the command from the editor context menu and vice versa |`coverage-gutters.customizable.menus-editor-context-removeCoverage-enabled`|Setting this to false will remove the command from the editor context menu and vice versa +|`coverage-gutters.customizable.keybindings-previewLcovReport-enabled`|Setting this to false will remove the shortcut and vice versa |`coverage-gutters.customizable.keybindings-displayCoverage-enabled`|Setting this to false will remove the shortcut and vice versa |`coverage-gutters.customizable.keybindings-watchLcovFile-enabled`|Setting this to false will remove the shortcut and vice versa |`coverage-gutters.customizable.keybindings-watchVisibleEditors-enabled`|Setting this to false will remove the shortcut and vice versa @@ -66,10 +81,7 @@ Some examples for the highlight colour are as follows: ### [Changelog](https://github.com/ryanluker/vscode-coverage-gutters/releases) ## Contribution Guidelines -- test backed code changes -- new code matches existing style (enforced via tslint) -- bug fixes always welcome :) -- new feature proposals go through a github issue +### [Guidelines](/CONTRIBUTING.md) ----------------------------------------------------------------------------------------------------------- diff --git a/example/package.json b/example/package.json index c84748b..41cd3e3 100644 --- a/example/package.json +++ b/example/package.json @@ -4,7 +4,7 @@ "description": "", "main": "test-coverage.js", "scripts": { - "test": "istanbul cover -x \"./test-coverage.js\" --report lcovonly ./node_modules/mocha/bin/_mocha -- -R spec test.js" + "test": "istanbul cover -x \"./test-coverage.js\" ./node_modules/mocha/bin/_mocha -- -R spec test.js" }, "author": "", "license": "ISC", diff --git a/images/preview-lcov-1.PNG b/images/preview-lcov-1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..bc4dfe729c77e7d89234cac73393b09dd1d22573 GIT binary patch literal 80700 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 { + gutters.previewLcovReport(); + }); const display = vscode.commands.registerCommand("extension.displayCoverage", () => { gutters.displayCoverageForActiveFile(); @@ -41,6 +51,7 @@ export function activate(context: vscode.ExtensionContext) { gutters.removeCoverageForActiveFile(); }); + context.subscriptions.push(previewLcovReport); context.subscriptions.push(remove); context.subscriptions.push(display); context.subscriptions.push(watch); diff --git a/src/gutters.ts b/src/gutters.ts index a91d908..62ec756 100644 --- a/src/gutters.ts +++ b/src/gutters.ts @@ -1,9 +1,12 @@ import { + commands, Disposable, FileSystemWatcher, StatusBarItem, TextEditor, + Uri, version, + ViewColumn, window, } from "vscode"; @@ -44,13 +47,52 @@ export class Gutters { this.reporter.sendEvent("user", "vscodeVersion", version); } + public async previewLcovReport() { + try { + const lcovReports = await this.lcov.findReports(); + let pickedReport: string; + if (lcovReports.length === 1) { + pickedReport = lcovReports[0]; + } else { + this.reporter.sendEvent("user", "showQuickPickReport", `${lcovReports.length}`); + pickedReport = await window.showQuickPick( + lcovReports, + {placeHolder: "Choose a Lcov Report to preview."}, + ); + } + + if (!pickedReport) { throw new Error("Could not show Lcov Report file!"); } + const reportUri = Uri.parse(`file:///${pickedReport}`); + await commands.executeCommand( + "vscode.previewHtml", + reportUri, + ViewColumn.One, + "Preview Lcov Report", + ); + this.reporter.sendEvent("user", "preview-lcov-report"); + } catch (error) { + this.handleError(error); + } + } + public async displayCoverageForActiveFile() { const textEditor = window.activeTextEditor; try { if (!textEditor) { return; } - const lcovPath = await this.lcov.find(); - await this.loadAndRenderCoverage(textEditor, lcovPath); - + const lcovPaths = await this.lcov.findLcovs(); + let pickedLcov: string; + if (lcovPaths.length === 1) { + pickedLcov = lcovPaths[0]; + } else { + this.reporter.sendEvent("user", "showQuickPickLcov", `${lcovPaths.length}`); + pickedLcov = await window.showQuickPick( + lcovPaths, + {placeHolder: "Choose a Lcov File to use for coverage."}, + ); + } + if (!pickedLcov) { throw new Error("Could not show coverage for file!"); } + + await this.loadAndRenderCoverage(textEditor, pickedLcov); this.reporter.sendEvent("user", "display-coverage"); } catch (error) { this.handleError(error); @@ -62,16 +104,28 @@ export class Gutters { const textEditor = window.activeTextEditor; try { - const lcovPath = await this.lcov.find(); + const lcovPaths = await this.lcov.findLcovs(); + + let pickedLcov: string; + if (lcovPaths.length === 1) { + pickedLcov = lcovPaths[0]; + } else { + this.reporter.sendEvent("user", "showQuickPick", `${lcovPaths.length}`); + pickedLcov = await window.showQuickPick( + lcovPaths, + {placeHolder: "Choose a Lcov to use for coverage."}, + ); + } + if (!pickedLcov) { throw new Error("Could not show coverage for file!"); } // When we try to load the coverage when watch is actived we dont want to error // if the active file has no coverage - this.loadAndRenderCoverage(textEditor, lcovPath).catch(() => {}); + this.loadAndRenderCoverage(textEditor, pickedLcov).catch(() => {}); - this.lcovWatcher = vscodeImpl.watchFile(lcovPath); - this.lcovWatcher.onDidChange((event) => this.renderCoverageOnVisible(lcovPath)); + this.lcovWatcher = vscodeImpl.watchFile(pickedLcov); + this.lcovWatcher.onDidChange((event) => this.renderCoverageOnVisible(pickedLcov)); this.editorWatcher = window.onDidChangeVisibleTextEditors( - (event) => this.renderCoverageOnVisible(lcovPath)); + (event) => this.renderCoverageOnVisible(pickedLcov)); this.statusBar.toggle(); this.reporter.sendEvent("user", "watch-lcov-editors"); @@ -115,7 +169,6 @@ export class Gutters { private handleError(error: Error) { const message = error.message ? error.message : error; window.showWarningMessage(message.toString()); - this.reporter.sendEvent("error", message.toString()); } diff --git a/src/lcov.ts b/src/lcov.ts index 28479d3..2d7ed77 100644 --- a/src/lcov.ts +++ b/src/lcov.ts @@ -21,15 +21,26 @@ export class Lcov { this.fs = fs; } - public find(): Promise { - return new Promise((resolve, reject) => { + public findLcovs(): Promise { + return new Promise((resolve, reject) => { this.glob.find( `**/${this.configStore.lcovFileName}`, { ignore: "**/node_modules/**", cwd: this.vscode.getRootPath(), realpath: true }, (err, files) => { - if (!files || !files.length) { return reject("Could not find a lcov file!"); } - if (files.length > 1) { return reject("More then one lcov file found!"); } - return resolve(files[0]); + if (!files || !files.length) { return reject("Could not find a Lcov File!"); } + return resolve(files); + }); + }); + } + + public findReports(): Promise { + return new Promise((resolve, reject) => { + this.glob.find( + `**/coverage/**/*.html`, + { ignore: "**/node_modules/**", cwd: this.vscode.getRootPath(), realpath: true }, + (err, files) => { + if (!files || !files.length) { return reject("Could not find a Lcov Report file!"); } + return resolve(files); }); }); } diff --git a/test/lcov.test.ts b/test/lcov.test.ts index d62d438..0ace00a 100644 --- a/test/lcov.test.ts +++ b/test/lcov.test.ts @@ -41,7 +41,7 @@ suite("Lcov Tests", function() { } }); - test("#find: Should return error if more then one file found for lcovFileName", function(done) { + test("#find: Should not return error if more then one file found for lcovFileName", function(done) { const globImpl = new Glob(); const vscodeImpl = new Vscode(); const fsImpl = new Fs(); @@ -58,14 +58,13 @@ suite("Lcov Tests", function() { fsImpl, ); - lcov.find() - .then(function() { - return done(new Error("Expected error did not fire!")); + lcov.findLcovs() + .then(function(files) { + assert.equal(files.length, 2); + return done(); }) .catch(function(error) { - if (error.name === "AssertionError") { return done(error); } - if (error === "More then one lcov file found!") { return done(); } - return done(error); + return done(new Error("unexpected error did fire!")); }); }); @@ -86,13 +85,13 @@ suite("Lcov Tests", function() { fsImpl, ); - lcov.find() + lcov.findLcovs() .then(function() { return done(new Error("Expected error did not fire!")); }) .catch(function(error) { if (error.name === "AssertionError") { return done(error); } - if (error === "Could not find a lcov file!") { return done(); } + if (error === "Could not find a Lcov File!") { return done(); } return done(error); }); }); @@ -114,9 +113,9 @@ suite("Lcov Tests", function() { fsImpl, ); - lcov.find() - .then(function(fsPath) { - assert.equal(fsPath, "path/to/greatness/test.ts"); + lcov.findLcovs() + .then(function(fsPaths) { + assert.equal(fsPaths[0], "path/to/greatness/test.ts"); return done(); }) .catch(function(error) {