Skip to content

Commit d7a4dca

Browse files
chore(scan): separate scan function into separate file
1 parent ad0942b commit d7a4dca

File tree

2 files changed

+51
-60
lines changed

2 files changed

+51
-60
lines changed

src/extension.ts

Lines changed: 5 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,20 @@
11
import {
2+
cleanUpFileDiagnostics,
3+
createDiagnosticCollection,
24
ggshieldApiKey,
35
ggshieldAuthStatus,
4-
ggshieldScanFile,
56
ignoreLastFound,
67
ignoreSecret,
78
loginGGShield,
89
logoutGGShield,
10+
scanFile,
911
showAPIQuota,
1012
} from "./lib/ggshield-api";
1113
import {
1214
getConfiguration,
13-
GGShieldConfiguration,
1415
setApiKey,
1516
} from "./lib/ggshield-configuration";
16-
import { parseGGShieldResults } from "./lib/ggshield-results-parser";
1717
import {
18-
Diagnostic,
19-
DiagnosticCollection,
2018
ExtensionContext,
2119
Uri,
2220
commands,
@@ -36,49 +34,6 @@ import {
3634
import { GitGuardianQuotaWebviewProvider } from "./ggshield-webview/gitguardian-quota-webview";
3735
import { GitGuardianRemediationMessageWebviewProvider } from "./ggshield-webview/gitguardian-remediation-message-view";
3836

39-
/**
40-
* Extension diagnostic collection
41-
*/
42-
let diagnosticCollection: DiagnosticCollection;
43-
/**
44-
* Scan a file using ggshield
45-
*
46-
* - retrieve configuration
47-
* - scan file using ggshield CLI application
48-
* - parse ggshield results
49-
* - set diagnostics collection so the incdients are visible to the user
50-
*
51-
* @param filePath path to file
52-
* @param fileUri file uri
53-
*/
54-
export async function scanFile(
55-
this: any,
56-
filePath: string,
57-
fileUri: Uri,
58-
configuration: GGShieldConfiguration
59-
): Promise<void> {
60-
const results = ggshieldScanFile(filePath, configuration);
61-
if (!results) {
62-
updateStatusBarItem(StatusBarStatus.ready);
63-
return;
64-
}
65-
let incidentsDiagnostics: Diagnostic[] = parseGGShieldResults(results);
66-
if (incidentsDiagnostics.length !== 0) {
67-
updateStatusBarItem(StatusBarStatus.secretFound);
68-
} else {
69-
updateStatusBarItem(StatusBarStatus.noSecretFound);
70-
}
71-
diagnosticCollection.set(fileUri, incidentsDiagnostics);
72-
}
73-
74-
/**
75-
* Clean up file diagnostics
76-
*
77-
* @param fileUri file uri
78-
*/
79-
function cleanUpFileDiagnostics(fileUri: Uri): void {
80-
diagnosticCollection.delete(fileUri);
81-
}
8237

8338
function registerOpenViewsCommands(
8439
context: ExtensionContext,
@@ -197,9 +152,7 @@ export function activate(context: ExtensionContext) {
197152
.then(() => {
198153
// Start scanning documents on activation events
199154
// (i.e. when a new document is opened or when the document is saved)
200-
diagnosticCollection = languages.createDiagnosticCollection("ggshield");
201-
202-
context.subscriptions.push(diagnosticCollection);
155+
createDiagnosticCollection(context);
203156
context.subscriptions.push(
204157
workspace.onDidSaveTextDocument((textDocument) => {
205158
// Check if the document is inside the workspace
@@ -243,7 +196,7 @@ export function activate(context: ExtensionContext) {
243196
scanFile(
244197
currentFile,
245198
Uri.file(currentFile),
246-
ggshieldResolver.configuration
199+
ggshieldResolver.configuration,
247200
);
248201
}
249202
),

src/lib/ggshield-api.ts

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,20 @@ import {
33
SpawnOptionsWithoutStdio,
44
spawn,
55
} from "child_process";
6-
import { window, WebviewView, ExtensionContext, commands } from "vscode";
6+
import { window, WebviewView, DiagnosticCollection, commands, ExtensionContext, languages, Uri, Diagnostic } from "vscode";
77
import axios from 'axios';
88
import { GGShieldConfiguration } from "./ggshield-configuration";
99
import { GGShieldScanResults } from "./api-types";
1010
import * as os from "os";
1111
import { apiToDashboard, dasboardToApi } from "../utils";
1212
import { runGGShieldCommand } from "./run-ggshield";
13+
import { StatusBarStatus, updateStatusBarItem } from "../gitguardian-interface/gitguardian-status-bar";
14+
import { parseGGShieldResults } from "./ggshield-results-parser";
1315

16+
/**
17+
* Extension diagnostic collection
18+
*/
19+
let diagnosticCollection: DiagnosticCollection;
1420

1521
/**
1622
* Display API quota
@@ -115,19 +121,38 @@ export function ignoreSecret(
115121
}
116122
}
117123

124+
export function createDiagnosticCollection(context: ExtensionContext): void {
125+
diagnosticCollection = languages.createDiagnosticCollection("ggshield");
126+
context.subscriptions.push(diagnosticCollection);
127+
}
128+
129+
/**
130+
* Clean up file diagnostics
131+
*
132+
* @param fileUri file uri
133+
*/
134+
export function cleanUpFileDiagnostics(fileUri: Uri): void {
135+
diagnosticCollection.delete(fileUri);
136+
}
137+
138+
118139
/**
119-
* Scan a file using ggshield CLI application
140+
* Scan a file using ggshield
120141
*
121-
* Show error messages on failure
142+
* - retrieve configuration
143+
* - scan file using ggshield CLI application
144+
* - parse ggshield results
145+
* - set diagnostics collection so the incdients are visible to the user
122146
*
123147
* @param filePath path to file
124-
* @param configuration ggshield configuration
125-
* @returns results or undefined if there was an error
148+
* @param fileUri file uri
126149
*/
127-
export function ggshieldScanFile(
150+
export async function scanFile(
151+
this: any,
128152
filePath: string,
153+
fileUri: Uri,
129154
configuration: GGShieldConfiguration
130-
): GGShieldScanResults | undefined {
155+
): Promise<void> {
131156
const proc = runGGShieldCommand(configuration, [
132157
"secret",
133158
"scan",
@@ -155,9 +180,22 @@ export function ggshieldScanFile(
155180
return undefined;
156181
}
157182

158-
return JSON.parse(proc.stdout);
183+
const results = JSON.parse(proc.stdout);
184+
if (!results) {
185+
updateStatusBarItem(StatusBarStatus.ready);
186+
return;
187+
}
188+
let incidentsDiagnostics: Diagnostic[] = parseGGShieldResults(results);
189+
if (incidentsDiagnostics.length !== 0) {
190+
updateStatusBarItem(StatusBarStatus.secretFound);
191+
} else {
192+
updateStatusBarItem(StatusBarStatus.noSecretFound);
193+
}
194+
195+
diagnosticCollection.set(fileUri, incidentsDiagnostics);
159196
}
160197

198+
161199
export async function loginGGShield(
162200
configuration: GGShieldConfiguration,
163201
outputChannel: any,

0 commit comments

Comments
 (0)