From db18eba0f5dbe320127c5a4a7db0d47cbd2f90a3 Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Mon, 20 Oct 2025 17:22:05 +0200 Subject: [PATCH 1/3] chore: make pre-commit run -a pass --- .github/pull_request_template.md | 3 +- README.md | 4 +- src/extension.ts | 42 +++++++++---------- .../gitguardian-quota-webview.ts | 4 +- .../gitguardian-remediation-message-view.ts | 6 +-- .../gitguardian-webview-view.ts | 18 ++++---- .../gitguardian-hover-provider.ts | 8 ++-- src/lib/api-types.ts | 22 +++++----- src/lib/authentication.ts | 6 +-- src/lib/ggshield-api.ts | 10 ++--- src/lib/ggshield-configuration.ts | 3 +- src/lib/ggshield-resolver.ts | 4 +- src/lib/ggshield-results-parser.ts | 4 +- src/lib/run-ggshield.ts | 2 +- src/test/constants.ts | 2 +- .../gitguardian-quota-webview.test.ts | 10 +++-- src/test/suite/lib/authentication.test.ts | 12 +++--- src/test/suite/lib/ggshield-api.test.ts | 8 ++-- .../lib/ggshield-configuration-utils.test.ts | 4 +- src/test/suite/lib/run-ggshield.test.ts | 8 ++-- src/test/suite/results-parser.test.ts | 18 +++++--- src/utils.ts | 4 +- 22 files changed, 106 insertions(+), 96 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index a24ca40..18a0025 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -30,5 +30,4 @@ For example: ## PR check list - [ ] As much as possible, the changes include tests -- [ ] If the changes affect the end user (new feature, behavior change, bug fix) then the PR has a changelog entry. - +- [ ] If the changes affect the end user (new feature, behavior change, bug fix) then the PR has a changelog entry. diff --git a/README.md b/README.md index 99f4911..b2683da 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Whether you’re a solo developer or part of a team, GitGuardian scales with you - **Ignore Secrets**: After a scan, hover over the identified secret and select "GitGuardian: Ignore Secret" to add it to `.gitguardian.yaml`. - **Quota Tracking**: Run "GitGuardian: Show Quota" to monitor API call usage. Personal accounts include up to 10,000 monthly API calls. - - **Check API Quota**: Stay aware of usage by running "GitGuardian: Show Quota." + - **Check API Quota**: Stay aware of usage by running "GitGuardian: Show Quota." ### Support & Contributions @@ -33,4 +33,4 @@ Whether you’re a solo developer or part of a team, GitGuardian scales with you ### Release Notes & License - **Updates**: See the [Changelog](https://github.com/GitGuardian/gitguardian-vscode/blob/main/CHANGELOG.md). -- **License**: GitGuardian CLI (`ggshield`) and this extension are MIT licensed. \ No newline at end of file +- **License**: GitGuardian CLI (`ggshield`) and this extension are MIT licensed. diff --git a/src/extension.ts b/src/extension.ts index c7c6c77..7de98cc 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -39,33 +39,33 @@ import { function registerOpenViewsCommands( context: ExtensionContext, - outputChannel: any + outputChannel: any, ) { const showOutputCommand = commands.registerCommand( "gitguardian.showOutput", () => { outputChannel.show(); - } + }, ); const openSidebarCommand = commands.registerCommand( "gitguardian.openSidebar", () => { commands.executeCommand("workbench.view.extension.gitguardian"); - } + }, ); const openProblemsCommand = commands.registerCommand( "gitguardian.openProblems", () => { commands.executeCommand("workbench.actions.view.problems"); - } + }, ); context.subscriptions.push( showOutputCommand, openSidebarCommand, - openProblemsCommand + openProblemsCommand, ); } @@ -76,38 +76,38 @@ export async function activate(context: ExtensionContext) { const ggshieldResolver = new GGShieldResolver( outputChannel, context, - configuration + configuration, ); const ggshieldViewProvider = new GitGuardianWebviewProvider( configuration, context.extensionUri, - context + context, ); const ggshieldRemediationMessageViewProvider = new GitGuardianRemediationMessageWebviewProvider( configuration, context.extensionUri, - context + context, ); const ggshieldQuotaViewProvider = new GitGuardianQuotaWebviewProvider( configuration, context.extensionUri, - context + context, ); window.registerWebviewViewProvider("gitguardianView", ggshieldViewProvider); window.registerWebviewViewProvider( "gitguardianRemediationMessageView", - ggshieldRemediationMessageViewProvider + ggshieldRemediationMessageViewProvider, ); window.registerWebviewViewProvider( "gitguardianQuotaView", - ggshieldQuotaViewProvider + ggshieldQuotaViewProvider, ); context.subscriptions.push( ggshieldViewProvider, ggshieldRemediationMessageViewProvider, - ggshieldQuotaViewProvider + ggshieldQuotaViewProvider, ); createStatusBarItem(context); @@ -115,11 +115,11 @@ export async function activate(context: ExtensionContext) { //generic commands to open correct view on status bar click registerOpenViewsCommands(context, outputChannel); commands.registerCommand("gitguardian.refreshQuota", () => - ggshieldQuotaViewProvider.refresh() + ggshieldQuotaViewProvider.refresh(), ); context.subscriptions.push( - languages.registerHoverProvider("*", new GitGuardianSecretHoverProvider()) + languages.registerHoverProvider("*", new GitGuardianSecretHoverProvider()), ); if (!checkGitInstalled()) { @@ -149,12 +149,12 @@ export async function activate(context: ExtensionContext) { scanFile( textDocument.fileName, textDocument.uri, - ggshieldResolver.configuration + ggshieldResolver.configuration, ); } }), workspace.onDidCloseTextDocument((textDocument) => - cleanUpFileDiagnostics(textDocument.uri) + cleanUpFileDiagnostics(textDocument.uri), ), commands.registerCommand("gitguardian.quota", () => { showAPIQuota(ggshieldResolver.configuration); @@ -173,12 +173,12 @@ export async function activate(context: ExtensionContext) { ignoreSecret( ggshieldResolver.configuration, diagnosticData.secretSha, - secretName + secretName, ); scanFile( currentFile, Uri.file(currentFile), - ggshieldResolver.configuration + ggshieldResolver.configuration, ); }), commands.registerCommand("gitguardian.authenticate", async () => { @@ -187,7 +187,7 @@ export async function activate(context: ExtensionContext) { ggshieldResolver.configuration, outputChannel, ggshieldViewProvider.getView() as WebviewView, - context + context, ) .then(async () => { await updateAuthenticationStatus(context, configuration); @@ -212,8 +212,8 @@ export async function activate(context: ExtensionContext) { ggshieldViewProvider.refresh(); ggshieldRemediationMessageViewProvider.refresh(); ggshieldQuotaViewProvider.refresh(); - } - ) + }, + ), ); } diff --git a/src/ggshield-webview/gitguardian-quota-webview.ts b/src/ggshield-webview/gitguardian-quota-webview.ts index 3df07d3..de60503 100644 --- a/src/ggshield-webview/gitguardian-quota-webview.ts +++ b/src/ggshield-webview/gitguardian-quota-webview.ts @@ -15,13 +15,13 @@ export class GitGuardianQuotaWebviewProvider constructor( private ggshieldConfiguration: GGShieldConfiguration, private readonly _extensionUri: vscode.Uri, - private context: vscode.ExtensionContext + private context: vscode.ExtensionContext, ) {} public resolveWebviewView( webviewView: vscode.WebviewView, context: vscode.WebviewViewResolveContext, - _token: vscode.CancellationToken + _token: vscode.CancellationToken, ) { this._view = webviewView; this.refresh(); diff --git a/src/ggshield-webview/gitguardian-remediation-message-view.ts b/src/ggshield-webview/gitguardian-remediation-message-view.ts index ac21995..c99fc51 100644 --- a/src/ggshield-webview/gitguardian-remediation-message-view.ts +++ b/src/ggshield-webview/gitguardian-remediation-message-view.ts @@ -14,7 +14,7 @@ export class GitGuardianRemediationMessageWebviewProvider constructor( private ggshieldConfiguration: GGShieldConfiguration, private readonly _extensionUri: vscode.Uri, - private context: vscode.ExtensionContext + private context: vscode.ExtensionContext, ) { this.updateRemediationMessage(); } @@ -22,7 +22,7 @@ export class GitGuardianRemediationMessageWebviewProvider public resolveWebviewView( webviewView: vscode.WebviewView, context: vscode.WebviewViewResolveContext, - _token: vscode.CancellationToken + _token: vscode.CancellationToken, ) { this._view = webviewView; this.refresh(); @@ -38,7 +38,7 @@ export class GitGuardianRemediationMessageWebviewProvider private checkAuthenticationStatus() { this.isAuthenticated = this.context.workspaceState.get( "authenticationStatus", - false + false, ); } diff --git a/src/ggshield-webview/gitguardian-webview-view.ts b/src/ggshield-webview/gitguardian-webview-view.ts index 8b51ac9..0826797 100644 --- a/src/ggshield-webview/gitguardian-webview-view.ts +++ b/src/ggshield-webview/gitguardian-webview-view.ts @@ -3,16 +3,16 @@ import { AuthenticationStatus, ConfigSource } from "../lib/authentication"; import { GGShieldConfiguration } from "../lib/ggshield-configuration"; const projectDiscussionUri = vscode.Uri.parse( - "https://github.com/GitGuardian/gitguardian-vscode/discussions" + "https://github.com/GitGuardian/gitguardian-vscode/discussions", ); const projectIssuesUri = vscode.Uri.parse( - "https://github.com/GitGuardian/gitguardian-vscode/issues" + "https://github.com/GitGuardian/gitguardian-vscode/issues", ); const feedbackFormUri = vscode.Uri.parse( - "https://docs.google.com/forms/d/e/1FAIpQLSc_BemGrdQfxp6lg7KgeDoB32XZg8yMfapk2gbemu0mVfskDQ/viewform" + "https://docs.google.com/forms/d/e/1FAIpQLSc_BemGrdQfxp6lg7KgeDoB32XZg8yMfapk2gbemu0mVfskDQ/viewform", ); const documentationUri = vscode.Uri.parse( - "https://docs.gitguardian.com/ggshield-docs/configuration" + "https://docs.gitguardian.com/ggshield-docs/configuration", ); export class GitGuardianWebviewProvider implements vscode.WebviewViewProvider { @@ -22,13 +22,13 @@ export class GitGuardianWebviewProvider implements vscode.WebviewViewProvider { constructor( private ggshieldConfiguration: GGShieldConfiguration, private readonly _extensionUri: vscode.Uri, - private context: vscode.ExtensionContext + private context: vscode.ExtensionContext, ) {} public resolveWebviewView( webviewView: vscode.WebviewView, context: vscode.WebviewViewResolveContext, - _token: vscode.CancellationToken + _token: vscode.CancellationToken, ) { this._view = webviewView; @@ -61,14 +61,14 @@ export class GitGuardianWebviewProvider implements vscode.WebviewViewProvider { const webview = this._view.webview; const styleUri = webview.asWebviewUri( - vscode.Uri.joinPath(this._extensionUri, "media", "main.css") + vscode.Uri.joinPath(this._extensionUri, "media", "main.css"), ); const logoUri = webview.asWebviewUri( vscode.Uri.joinPath( this._extensionUri, "images", - "gitguardian-icon-primary700-background.svg" - ) + "gitguardian-icon-primary700-background.svg", + ), ); console.log(authenticationStatus); diff --git a/src/gitguardian-interface/gitguardian-hover-provider.ts b/src/gitguardian-interface/gitguardian-hover-provider.ts index d2fa2cc..9f022f8 100644 --- a/src/gitguardian-interface/gitguardian-hover-provider.ts +++ b/src/gitguardian-interface/gitguardian-hover-provider.ts @@ -4,7 +4,7 @@ export class GitGuardianSecretHoverProvider implements vscode.HoverProvider { public provideHover( document: vscode.TextDocument, position: vscode.Position, - token: vscode.CancellationToken + token: vscode.CancellationToken, ): vscode.ProviderResult { const diagnostics = vscode.languages.getDiagnostics(document.uri); @@ -20,7 +20,7 @@ export class GitGuardianSecretHoverProvider implements vscode.HoverProvider { const encodedDiagnosticData = encodeURIComponent(diagnosticData); hoverMessage.appendMarkdown( - `[GitGuardian: Ignore Secret (update .gitguardian.yaml)](command:gitguardian.ignoreSecret?${encodedDiagnosticData} "Click to ignore this incident")` + `[GitGuardian: Ignore Secret (update .gitguardian.yaml)](command:gitguardian.ignoreSecret?${encodedDiagnosticData} "Click to ignore this incident")`, ); return new vscode.Hover(hoverMessage, diagnostic.range); } @@ -65,9 +65,9 @@ function extractInfosFromMessage(message: string): { export function generateSecretName( currentFile: string, - uriDiagnostic: any + uriDiagnostic: any, ): string { return `${uriDiagnostic.detector} - ${vscode.workspace.asRelativePath( - currentFile + currentFile, )}:l.${uriDiagnostic.startLine}`; } diff --git a/src/lib/api-types.ts b/src/lib/api-types.ts index af341d6..65c312c 100644 --- a/src/lib/api-types.ts +++ b/src/lib/api-types.ts @@ -16,15 +16,17 @@ export type Validity = | "invalid" | "valid"; -type IncidentVaultProperties = { - secret_vaulted: false; -} | { - secret_vaulted: true; - vault_type: string; - vault_name: string; - vault_path: string; - vault_path_count: number; -} +type IncidentVaultProperties = + | { + secret_vaulted: false; + } + | { + secret_vaulted: true; + vault_type: string; + vault_name: string; + vault_path: string; + vault_path_count: number; + }; export type Incident = { type: string; @@ -34,7 +36,7 @@ export type Incident = { known_secret: boolean; incident_url: string; total_occurrences: number; -} & IncidentVaultProperties +} & IncidentVaultProperties; export interface EntityWithIncidents { incidents: Incident[]; diff --git a/src/lib/authentication.ts b/src/lib/authentication.ts index 4625b44..ff74526 100644 --- a/src/lib/authentication.ts +++ b/src/lib/authentication.ts @@ -60,7 +60,7 @@ function getSource(sourceString: string, isInstance: boolean): ConfigSource { */ export async function updateAuthenticationStatus( context: ExtensionContext, - configuration: GGShieldConfiguration + configuration: GGShieldConfiguration, ): Promise { const proc = runGGShieldCommand(configuration, ["api-status", "--json"]); @@ -103,7 +103,7 @@ export async function loginGGShield( configuration: GGShieldConfiguration, outputChannel: any, webviewView: WebviewView, - context: ExtensionContext + context: ExtensionContext, ): Promise { const { ggshieldPath } = configuration; @@ -162,7 +162,7 @@ export async function loginGGShield( export async function logoutGGShield( configuration: GGShieldConfiguration, - context: ExtensionContext + context: ExtensionContext, ): Promise { let cmd = ["auth", "logout"]; const authStatus: AuthenticationStatus | undefined = diff --git a/src/lib/ggshield-api.ts b/src/lib/ggshield-api.ts index 598ce06..6a23003 100644 --- a/src/lib/ggshield-api.ts +++ b/src/lib/ggshield-api.ts @@ -57,7 +57,7 @@ export function getAPIquota(configuration: GGShieldConfiguration): number { * Show error message on failure */ export function ignoreLastFound( - configuration: GGShieldConfiguration + configuration: GGShieldConfiguration, ): undefined { if (!configuration) { window.showErrorMessage("ggshield: Missing settings"); @@ -86,7 +86,7 @@ export function ignoreLastFound( export function ignoreSecret( configuration: GGShieldConfiguration, secretSha: string, - secretName: string + secretName: string, ): boolean { const proc = runGGShieldCommand(configuration, [ "secret", @@ -132,7 +132,7 @@ export function cleanUpFileDiagnostics(fileUri: Uri): void { export function scanFile( filePath: string, fileUri: Uri, - configuration: GGShieldConfiguration + configuration: GGShieldConfiguration, ): void { if (isFileGitignored(filePath)) { updateStatusBarItem(StatusBarStatus.ignoredFile); @@ -151,7 +151,7 @@ export function scanFile( .split("\n") .filter( (stderrLine) => - stderrLine.length > 0 && !stderrLine.includes("Scanning Path...") // ggshield outputs this info message on stderr, ignore it + stderrLine.length > 0 && !stderrLine.includes("Scanning Path..."), // ggshield outputs this info message on stderr, ignore it ) .join("\n"); if (errorMessage.length > 0) { @@ -164,7 +164,7 @@ export function scanFile( // or when the file is ignored in the .gitguardian.yaml if ( proc.stderr.includes( - "Error: An ignored file or directory cannot be scanned" + "Error: An ignored file or directory cannot be scanned", ) ) { updateStatusBarItem(StatusBarStatus.ignoredFile); diff --git a/src/lib/ggshield-configuration.ts b/src/lib/ggshield-configuration.ts index 9408f3c..a03600f 100644 --- a/src/lib/ggshield-configuration.ts +++ b/src/lib/ggshield-configuration.ts @@ -6,11 +6,10 @@ export class GGShieldConfiguration { constructor( ggshieldPath: string = "", apiUrl: string = "", - allowSelfSigned: boolean = false + allowSelfSigned: boolean = false, ) { this.ggshieldPath = ggshieldPath; this.apiUrl = apiUrl; this.allowSelfSigned = allowSelfSigned; } } - diff --git a/src/lib/ggshield-resolver.ts b/src/lib/ggshield-resolver.ts index 3192a3b..d033797 100644 --- a/src/lib/ggshield-resolver.ts +++ b/src/lib/ggshield-resolver.ts @@ -11,7 +11,7 @@ export class GGShieldResolver { constructor( channel: vscode.OutputChannel, context: vscode.ExtensionContext, - configuration: GGShieldConfiguration + configuration: GGShieldConfiguration, ) { this.channel = channel; this.context = context; @@ -50,7 +50,7 @@ export class GGShieldResolver { let proc = runGGShieldCommand(configuration, ["--version"]); if (proc.status !== 0) { window.showErrorMessage( - `GitGuardian: Invalid ggshield path. ${proc.stderr}` + `GitGuardian: Invalid ggshield path. ${proc.stderr}`, ); throw new Error(proc.stderr); } diff --git a/src/lib/ggshield-results-parser.ts b/src/lib/ggshield-results-parser.ts index 30aa53c..e01ea80 100644 --- a/src/lib/ggshield-results-parser.ts +++ b/src/lib/ggshield-results-parser.ts @@ -70,7 +70,9 @@ export function parseGGShieldResults( if (incident.secret_vaulted) { if (incident.vault_path_count !== null) { - vaultInfo += `Secret found in vault: YES (${incident.vault_path_count} ${pluralize(incident.vault_path_count, "location")}) + vaultInfo += `Secret found in vault: YES (${ + incident.vault_path_count + } ${pluralize(incident.vault_path_count, "location")}) ├─ Vault Type: ${incident.vault_type} ├─ Vault Name: ${incident.vault_name} └─ Secret Path: ${incident.vault_path}`; diff --git a/src/lib/run-ggshield.ts b/src/lib/run-ggshield.ts index a778c82..f1c4765 100644 --- a/src/lib/run-ggshield.ts +++ b/src/lib/run-ggshield.ts @@ -17,7 +17,7 @@ import * as os from "os"; */ export function runGGShieldCommand( configuration: GGShieldConfiguration, - args: string[] + args: string[], ): SpawnSyncReturns { let env: NodeJS.ProcessEnv = { ...process.env, diff --git a/src/test/constants.ts b/src/test/constants.ts index 6ce27f2..b1dd353 100644 --- a/src/test/constants.ts +++ b/src/test/constants.ts @@ -129,4 +129,4 @@ export const scanResultsVaulted = `{ "total_incidents":1, "total_occurrences":1, "secrets_engine_version":"2.96.0" - }`; \ No newline at end of file + }`; diff --git a/src/test/suite/ggshield-webview/gitguardian-quota-webview.test.ts b/src/test/suite/ggshield-webview/gitguardian-quota-webview.test.ts index 5bd82da..e3f6ddd 100644 --- a/src/test/suite/ggshield-webview/gitguardian-quota-webview.test.ts +++ b/src/test/suite/ggshield-webview/gitguardian-quota-webview.test.ts @@ -36,7 +36,7 @@ suite("GitGuardianQuotaWebviewProvider", () => { provider = new GitGuardianQuotaWebviewProvider( {} as GGShieldConfiguration, Uri.parse("file:///mock"), - mockContext as ExtensionContext + mockContext as ExtensionContext, ); mockWebviewView = { @@ -69,7 +69,9 @@ suite("GitGuardianQuotaWebviewProvider", () => { provider["updateWebViewContent"](); assert.ok( - provider["_view"]?.webview.html.includes("

Your current quota: 100

") + provider["_view"]?.webview.html.includes( + "

Your current quota: 100

", + ), ); }); @@ -81,8 +83,8 @@ suite("GitGuardianQuotaWebviewProvider", () => { assert.ok( provider["_view"]?.webview.html.includes( - "

Please authenticate to see your quota.

" - ) + "

Please authenticate to see your quota.

", + ), ); }); }); diff --git a/src/test/suite/lib/authentication.test.ts b/src/test/suite/lib/authentication.test.ts index c7a871e..91f0c7f 100644 --- a/src/test/suite/lib/authentication.test.ts +++ b/src/test/suite/lib/authentication.test.ts @@ -57,7 +57,7 @@ suite("updateAuthenticationStatus", () => { await updateAuthenticationStatus( mockContext as ExtensionContext, - {} as GGShieldConfiguration + {} as GGShieldConfiguration, ); assert.deepStrictEqual(authenticationStatus, { @@ -69,7 +69,7 @@ suite("updateAuthenticationStatus", () => { assert.strictEqual(updateStatusBarItemMock.callCount, 1); assert.strictEqual( updateStatusBarItemMock.lastCall.args[0], - statusBar.StatusBarStatus.unauthenticated + statusBar.StatusBarStatus.unauthenticated, ); assert.strictEqual(executeCommandMock.callCount, 1); @@ -94,7 +94,7 @@ suite("updateAuthenticationStatus", () => { await updateAuthenticationStatus( mockContext as ExtensionContext, - {} as GGShieldConfiguration + {} as GGShieldConfiguration, ); assert.deepStrictEqual(authenticationStatus, { @@ -107,7 +107,7 @@ suite("updateAuthenticationStatus", () => { assert.strictEqual(updateStatusBarItemMock.callCount, 1); assert.strictEqual( updateStatusBarItemMock.lastCall.args[0], - statusBar.StatusBarStatus.ready + statusBar.StatusBarStatus.ready, ); assert.strictEqual(executeCommandMock.callCount, 1); @@ -132,7 +132,7 @@ suite("updateAuthenticationStatus", () => { await updateAuthenticationStatus( mockContext as ExtensionContext, - {} as GGShieldConfiguration + {} as GGShieldConfiguration, ); assert.deepStrictEqual(authenticationStatus, { @@ -145,7 +145,7 @@ suite("updateAuthenticationStatus", () => { assert.strictEqual(updateStatusBarItemMock.callCount, 1); assert.strictEqual( updateStatusBarItemMock.lastCall.args[0], - statusBar.StatusBarStatus.authFailed + statusBar.StatusBarStatus.authFailed, ); assert.strictEqual(executeCommandMock.callCount, 1); diff --git a/src/test/suite/lib/ggshield-api.test.ts b/src/test/suite/lib/ggshield-api.test.ts index 5ead66f..9bee5aa 100644 --- a/src/test/suite/lib/ggshield-api.test.ts +++ b/src/test/suite/lib/ggshield-api.test.ts @@ -41,7 +41,7 @@ suite("scanFile", () => { assert.strictEqual(updateStatusBarMock.callCount, 1); assert.strictEqual( updateStatusBarMock.lastCall.args[0], - statusBar.StatusBarStatus.noSecretFound + statusBar.StatusBarStatus.noSecretFound, ); }); @@ -59,7 +59,7 @@ suite("scanFile", () => { assert.strictEqual(updateStatusBarMock.callCount, 1); assert.strictEqual( updateStatusBarMock.lastCall.args[0], - statusBar.StatusBarStatus.secretFound + statusBar.StatusBarStatus.secretFound, ); // The diagnostic collection contains the incident @@ -80,7 +80,7 @@ suite("scanFile", () => { assert.strictEqual(updateStatusBarMock.callCount, 1); assert.strictEqual( updateStatusBarMock.lastCall.args[0], - statusBar.StatusBarStatus.ignoredFile + statusBar.StatusBarStatus.ignoredFile, ); }); @@ -118,7 +118,7 @@ suite("scanFile", () => { assert.strictEqual(updateStatusBarMock.callCount, 1); assert.strictEqual( updateStatusBarMock.lastCall.args[0], - statusBar.StatusBarStatus.ignoredFile + statusBar.StatusBarStatus.ignoredFile, ); }); }); diff --git a/src/test/suite/lib/ggshield-configuration-utils.test.ts b/src/test/suite/lib/ggshield-configuration-utils.test.ts index ba708e0..f808f12 100644 --- a/src/test/suite/lib/ggshield-configuration-utils.test.ts +++ b/src/test/suite/lib/ggshield-configuration-utils.test.ts @@ -10,7 +10,7 @@ suite("getConfiguration", () => { ( platform: NodeJS.Platform, arch: string, - context: ExtensionContext + context: ExtensionContext, ) => string >; @@ -47,7 +47,7 @@ suite("getConfiguration", () => { // Assert both workspace.getConfiguration and GGShieldConfiguration constructor were called assert( getConfigurationMock.called, - "getConfiguration should be called once" + "getConfiguration should be called once", ); // Assert that the configuration has the expected values diff --git a/src/test/suite/lib/run-ggshield.test.ts b/src/test/suite/lib/run-ggshield.test.ts index 5ae665d..86a7676 100644 --- a/src/test/suite/lib/run-ggshield.test.ts +++ b/src/test/suite/lib/run-ggshield.test.ts @@ -22,7 +22,7 @@ suite("runGGShieldCommand", () => { ggshieldPath: "path/to/ggshield", apiUrl: "", } as GGShieldConfiguration, - [] + [], ); // Assert that spawnSync was called @@ -59,7 +59,7 @@ suite("runGGShieldCommand", () => { apiUrl: "", allowSelfSigned: allowSelfSigned, } as GGShieldConfiguration, - ["test"] + ["test"], ); assert(spawnSyncMock.called, "spawnSync should be called once"); @@ -77,7 +77,7 @@ suite("runGGShieldCommand", () => { ggshieldPath: "path/to/ggshield", apiUrl: "https://example.com", } as GGShieldConfiguration, - ["test"] + ["test"], ); assert(spawnSyncMock.called, "spawnSync should be called once"); @@ -95,7 +95,7 @@ suite("runGGShieldCommand", () => { ggshieldPath: "path/to/ggshield", apiUrl: "https://example.com", } as GGShieldConfiguration, - ["--version"] + ["--version"], ); assert(spawnSyncMock.called, "spawnSync should be called once"); diff --git a/src/test/suite/results-parser.test.ts b/src/test/suite/results-parser.test.ts index 960656b..a9607a3 100644 --- a/src/test/suite/results-parser.test.ts +++ b/src/test/suite/results-parser.test.ts @@ -27,14 +27,20 @@ suite("parseGGShieldResults", () => { }); test("Should parse vault information", () => { - const diagnostics = parseGGShieldResults( - JSON.parse(scanResultsVaulted), - ); + const diagnostics = parseGGShieldResults(JSON.parse(scanResultsVaulted)); const diagnostic = diagnostics[0]; assert.ok(diagnostic.message.includes("Secret found in vault: YES")); - assert.ok(diagnostic.message.includes("├─ Vault Type: AWS Secrets Manager")); - assert.ok(diagnostic.message.includes("├─ Vault Name: 463175827647/us-west-2")); - assert.ok(diagnostic.message.includes("└─ Secret Path: arn:aws:secretsmanager:us-west-2:463175827647:secret:xav-test-svef2q:pwd")); + assert.ok( + diagnostic.message.includes("├─ Vault Type: AWS Secrets Manager"), + ); + assert.ok( + diagnostic.message.includes("├─ Vault Name: 463175827647/us-west-2"), + ); + assert.ok( + diagnostic.message.includes( + "└─ Secret Path: arn:aws:secretsmanager:us-west-2:463175827647:secret:xav-test-svef2q:pwd", + ), + ); }); test("Should return an empty array if there are no incidents", () => { diff --git a/src/utils.ts b/src/utils.ts index 288fcb8..497b107 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -7,7 +7,7 @@ export function checkGitInstalled(): boolean { const success = proc.status === 0; if (!success) { vscode.window.showErrorMessage( - `GGShield requires git to work correctly. Please install git.` + `GGShield requires git to work correctly. Please install git.`, ); } return success; @@ -31,5 +31,5 @@ export function getCurrentFile(): string { } export function pluralize(num: number, word: string): string { - return `${[1, -1].includes(num) ? word : word + "s"}` + return `${[1, -1].includes(num) ? word : word + "s"}`; } From 6504850555cbc9ed5d19e319e25fdefae7a6f91e Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Mon, 20 Oct 2025 17:22:21 +0200 Subject: [PATCH 2/3] chore: make CI run pre-commit --- .github/workflows/ci.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ed49631..93ddeb7 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -11,6 +11,18 @@ on: - "README.md" jobs: + lint: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Run pre-commit + run: pipx run pre-commit run --all-files --show-diff-on-failure + env: + # SKIP ggshield check: it's done by the "scanning" job + SKIP: ggshield + build-and-test: runs-on: ${{ matrix.os }} strategy: From 77fad1be0ee18bad8b295f9618158aa8d96a1c57 Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Mon, 20 Oct 2025 17:30:40 +0200 Subject: [PATCH 3/3] chore: update hooks --- .pre-commit-config.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8870c9e..950cdd5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ default_stages: [pre-commit] repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.1.0 + rev: v6.0.0 hooks: # not python related - id: check-added-large-files @@ -11,7 +11,7 @@ repos: args: [--allow-multiple-documents] - repo: https://github.com/commitizen-tools/commitizen - rev: v3.12.0 + rev: v4.9.1 hooks: - id: commitizen # don't forget to run pre-commit install --hook-type commit-msg for this hook to run @@ -24,13 +24,13 @@ repos: - id: prettier - repo: https://github.com/codespell-project/codespell - rev: v2.2.6 + rev: v2.4.1 hooks: - id: codespell exclude: ^(ggshield-internal) - repo: https://github.com/gitguardian/ggshield - rev: v1.36.0 + rev: v1.43.0 hooks: - id: ggshield language_version: python3