Skip to content

Commit 06ac688

Browse files
authored
Merge pull request jest-community#198 from seanpoulter/issue-178
Rework Debug CodeLens to display on correct documents
2 parents 1ea9b3a + 5ac5be1 commit 06ac688

17 files changed

+814
-199
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
## Master
55

6+
* Improve where the Debug CodeLens is displayed - seanpoulter
67
*
78

89
### 2.5.4

src/CodeLens.ts

-69
This file was deleted.

src/Coverage/Coverage.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@ import { createSourceMapStore } from 'istanbul-lib-source-maps'
22
import { createCoverageMap, CoverageMap } from 'istanbul-lib-coverage'
33

44
export class Coverage {
5-
private rootPath: string
65
private sourceMapStore
76
private transformedCoverageMap: CoverageMap
87

9-
constructor(rootPath: string) {
10-
this.rootPath = rootPath
8+
constructor() {
119
this.sourceMapStore = createSourceMapStore()
1210
this.transformedCoverageMap = createCoverageMap()
1311
}

src/DebugCodeLens/DebugCodeLens.ts

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import * as vscode from 'vscode'
2+
3+
export class DebugCodeLens extends vscode.CodeLens {
4+
readonly fileName: string
5+
readonly testName: string
6+
7+
constructor(range: vscode.Range, fileName: string, testName: string) {
8+
super(range)
9+
this.fileName = fileName
10+
this.testName = testName
11+
}
12+
}
+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import * as vscode from 'vscode'
2+
import { extensionName } from '../appGlobals'
3+
import { basename } from 'path'
4+
import { DebugCodeLens } from './DebugCodeLens'
5+
import { TestReconciliationState } from '../TestReconciliationState'
6+
import { TestResultProvider } from '../TestResultProvider'
7+
8+
export class DebugCodeLensProvider implements vscode.CodeLensProvider {
9+
private _enabled: boolean
10+
onDidChange: vscode.EventEmitter<void>
11+
testResultProvider: TestResultProvider
12+
13+
constructor(testResultProvider: TestResultProvider, enabled: boolean) {
14+
this.testResultProvider = testResultProvider
15+
this._enabled = enabled
16+
this.onDidChange = new vscode.EventEmitter()
17+
}
18+
19+
get enabled() {
20+
return this._enabled
21+
}
22+
23+
set enabled(value: boolean) {
24+
this._enabled = value
25+
this.onDidChange.fire()
26+
}
27+
28+
get onDidChangeCodeLenses(): vscode.Event<void> {
29+
return this.onDidChange.event
30+
}
31+
32+
provideCodeLenses(document: vscode.TextDocument, _: vscode.CancellationToken): vscode.CodeLens[] {
33+
const result = []
34+
35+
if (!this._enabled || document.isUntitled) {
36+
return result
37+
}
38+
39+
const filePath = document.fileName
40+
const testResults = this.testResultProvider.getResults(filePath)
41+
const fileName = basename(document.fileName)
42+
for (const test of testResults) {
43+
if (test.status === TestReconciliationState.KnownSuccess) {
44+
continue
45+
}
46+
47+
const start = new vscode.Position(test.start.line, test.start.column)
48+
const end = new vscode.Position(test.end.line, test.start.column + 5)
49+
const range = new vscode.Range(start, end)
50+
result.push(new DebugCodeLens(range, fileName, test.name))
51+
}
52+
53+
return result
54+
}
55+
56+
resolveCodeLens(codeLens: vscode.CodeLens, _: vscode.CancellationToken): vscode.ProviderResult<vscode.CodeLens> {
57+
if (codeLens instanceof DebugCodeLens) {
58+
codeLens.command = {
59+
arguments: [codeLens.fileName, codeLens.testName],
60+
command: `${extensionName}.run-test`,
61+
title: 'Debug',
62+
}
63+
}
64+
65+
return codeLens
66+
}
67+
68+
didChange() {
69+
this.onDidChange.fire()
70+
}
71+
}

src/DebugCodeLens/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { DebugCodeLensProvider } from './DebugCodeLensProvider'

0 commit comments

Comments
 (0)