From 061aeeb89d1999330737f8ca64f01c29d4a99b3c Mon Sep 17 00:00:00 2001 From: Chrilleweb Date: Sat, 21 Feb 2026 10:24:28 +0100 Subject: [PATCH 1/9] chore: moved json from stats scan --- src/services/printScanResult.ts | 2 +- src/ui/scan/printStats.ts | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/services/printScanResult.ts b/src/services/printScanResult.ts index 3058e0e..d2d5c30 100644 --- a/src/services/printScanResult.ts +++ b/src/services/printScanResult.ts @@ -47,7 +47,7 @@ export function printScanResult( printHeader(comparedAgainst); // Show stats if requested - printStats(scanResult.stats, isJson, opts.showStats ?? true); + printStats(scanResult.stats, opts.showStats ?? true); // Missing variables (used in code but not in env file) if ( diff --git a/src/ui/scan/printStats.ts b/src/ui/scan/printStats.ts index be276bd..1ab1588 100644 --- a/src/ui/scan/printStats.ts +++ b/src/ui/scan/printStats.ts @@ -9,10 +9,9 @@ import type { ScanStats } from '../../config/types.js'; */ export function printStats( stats: ScanStats, - json: boolean, showStats: boolean, ): void { - if (json || !showStats) return; + if (!showStats) return; console.log(); console.log(chalk.magenta('📊 Scan Statistics:')); console.log(chalk.magenta.dim(` Files scanned: ${stats.filesScanned}`)); From 54d88dde380418b832c84b995450b93944d404b8 Mon Sep 17 00:00:00 2001 From: Chrilleweb Date: Sat, 21 Feb 2026 10:35:58 +0100 Subject: [PATCH 2/9] chore: refactor printmissing --- src/services/printScanResult.ts | 16 ++-------------- src/ui/scan/printMissing.ts | 18 +++++++----------- 2 files changed, 9 insertions(+), 25 deletions(-) diff --git a/src/services/printScanResult.ts b/src/services/printScanResult.ts index d2d5c30..c41836a 100644 --- a/src/services/printScanResult.ts +++ b/src/services/printScanResult.ts @@ -50,15 +50,7 @@ export function printScanResult( printStats(scanResult.stats, opts.showStats ?? true); // Missing variables (used in code but not in env file) - if ( - printMissing( - scanResult.missing, - scanResult.used, - comparedAgainst, - opts.isCiMode ?? false, - isJson, - ) - ) { + if (printMissing(scanResult.missing, scanResult.used, comparedAgainst)) { exitWithError = true; } @@ -184,11 +176,7 @@ export function printScanResult( } if (opts.fix && fixContext) { - printAutoFix( - fixContext, - comparedAgainst || DEFAULT_ENV_FILE, - isJson, - ); + printAutoFix(fixContext, comparedAgainst || DEFAULT_ENV_FILE, isJson); } // Health score diff --git a/src/ui/scan/printMissing.ts b/src/ui/scan/printMissing.ts index 7d14028..eaadeff 100644 --- a/src/ui/scan/printMissing.ts +++ b/src/ui/scan/printMissing.ts @@ -8,18 +8,13 @@ import { normalizePath } from '../../core/helpers/normalizePath.js'; * @param missing - List of missing variables * @param used - All usages found in the codebase * @param comparedAgainst - Name of the env file or example file - * @param isCiMode - Whether we are in CI mode (extra error message) - * @param json - Whether to output in JSON format * @returns true if any missing variables were printed */ export function printMissing( missing: string[], used: EnvUsage[], comparedAgainst: string, - isCiMode: boolean, - json: boolean, ): boolean { - if (json) return false; if (missing.length === 0) return false; const fileType = comparedAgainst || 'environment file'; @@ -33,8 +28,11 @@ export function printMissing( }, {}); // Group by file first - const byFile = new Map>(); - + const byFile = new Map< + string, + Array<{ variable: string; usage: EnvUsage }> + >(); + for (const [variable, usages] of Object.entries(grouped)) { for (const usage of usages) { const file = normalizePath(usage.file); @@ -46,11 +44,9 @@ export function printMissing( // Print grouped by file for (const [file, items] of byFile) { console.log(chalk.bold(` ${file}`)); - + for (const { variable, usage } of items) { - console.log( - chalk.red(` ${variable}: Line ${usage.line}`), - ); + console.log(chalk.red(` ${variable}: Line ${usage.line}`)); console.log(chalk.red.dim(` ${usage.context.trim()}`)); } } From d78068a665b7d89ba2709f018800491194572d8e Mon Sep 17 00:00:00 2001 From: Chrilleweb Date: Sat, 21 Feb 2026 10:45:02 +0100 Subject: [PATCH 3/9] chore: refactor frameworkw --- src/services/printScanResult.ts | 2 +- src/ui/scan/printFrameworkWarnings.ts | 10 +--------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/services/printScanResult.ts b/src/services/printScanResult.ts index c41836a..0fc4d6f 100644 --- a/src/services/printScanResult.ts +++ b/src/services/printScanResult.ts @@ -55,7 +55,7 @@ export function printScanResult( } if (scanResult.frameworkWarnings && scanResult.frameworkWarnings.length > 0) { - printFrameworkWarnings(scanResult.frameworkWarnings, isJson); + printFrameworkWarnings(scanResult.frameworkWarnings); } if (scanResult.uppercaseWarnings && scanResult.uppercaseWarnings.length > 0) { diff --git a/src/ui/scan/printFrameworkWarnings.ts b/src/ui/scan/printFrameworkWarnings.ts index 9a75d93..137f8ff 100644 --- a/src/ui/scan/printFrameworkWarnings.ts +++ b/src/ui/scan/printFrameworkWarnings.ts @@ -18,17 +18,9 @@ const FRAMEWORK_LABELS: Record = { * @param warnings - List of environment variable warnings * @param json - Whether to output in JSON format */ -export function printFrameworkWarnings( - warnings: FrameworkWarning[], - json: boolean, -): void { +export function printFrameworkWarnings(warnings: FrameworkWarning[]): void { if (!warnings || warnings.length === 0) return; - if (json) { - console.log(JSON.stringify({ frameworkWarnings: warnings }, null, 2)); - return; - } - // Deduplicate warnings by variable + file + line + reason const uniqueWarnings = Array.from( new Map( From 22a6826fdb264beb52ba0bc3a080b3c08a72b575 Mon Sep 17 00:00:00 2001 From: Chrilleweb Date: Sat, 21 Feb 2026 10:50:26 +0100 Subject: [PATCH 4/9] chore: refactor uppercase --- src/services/printScanResult.ts | 1 - src/ui/scan/printFrameworkWarnings.ts | 1 - src/ui/scan/printUppercaseWarning.ts | 4 +--- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/services/printScanResult.ts b/src/services/printScanResult.ts index 0fc4d6f..654ec19 100644 --- a/src/services/printScanResult.ts +++ b/src/services/printScanResult.ts @@ -62,7 +62,6 @@ export function printScanResult( printUppercaseWarning( scanResult.uppercaseWarnings, comparedAgainst, - isJson, ); } diff --git a/src/ui/scan/printFrameworkWarnings.ts b/src/ui/scan/printFrameworkWarnings.ts index 137f8ff..7ebdcdd 100644 --- a/src/ui/scan/printFrameworkWarnings.ts +++ b/src/ui/scan/printFrameworkWarnings.ts @@ -16,7 +16,6 @@ const FRAMEWORK_LABELS: Record = { /** * Prints environment variable usage warnings to the console. * @param warnings - List of environment variable warnings - * @param json - Whether to output in JSON format */ export function printFrameworkWarnings(warnings: FrameworkWarning[]): void { if (!warnings || warnings.length === 0) return; diff --git a/src/ui/scan/printUppercaseWarning.ts b/src/ui/scan/printUppercaseWarning.ts index 0517ca5..ca5ac62 100644 --- a/src/ui/scan/printUppercaseWarning.ts +++ b/src/ui/scan/printUppercaseWarning.ts @@ -6,14 +6,12 @@ import type { UppercaseWarning } from '../../config/types.js'; * * @param warnings - List of non-uppercase env keys * @param comparedAgainst - The .env file name being checked - * @param json - Whether JSON output is enabled */ export function printUppercaseWarning( warnings: UppercaseWarning[], comparedAgainst: string, - json: boolean, ): void { - if (json || warnings.length === 0) return; + if (warnings.length === 0) return; console.log( chalk.yellow( From abd8aad1539ae45df7716d2d47078b308d20cc6a Mon Sep 17 00:00:00 2001 From: Chrilleweb Date: Sat, 21 Feb 2026 11:08:03 +0100 Subject: [PATCH 5/9] chore: incnaming --- src/services/printScanResult.ts | 19 +++++-------------- src/ui/scan/printInconsistentNamingWarning.ts | 14 +++----------- 2 files changed, 8 insertions(+), 25 deletions(-) diff --git a/src/services/printScanResult.ts b/src/services/printScanResult.ts index 654ec19..16c41d2 100644 --- a/src/services/printScanResult.ts +++ b/src/services/printScanResult.ts @@ -54,25 +54,16 @@ export function printScanResult( exitWithError = true; } - if (scanResult.frameworkWarnings && scanResult.frameworkWarnings.length > 0) { + if (scanResult.frameworkWarnings) { printFrameworkWarnings(scanResult.frameworkWarnings); } - if (scanResult.uppercaseWarnings && scanResult.uppercaseWarnings.length > 0) { - printUppercaseWarning( - scanResult.uppercaseWarnings, - comparedAgainst, - ); + if (scanResult.uppercaseWarnings) { + printUppercaseWarning(scanResult.uppercaseWarnings, comparedAgainst); } - if ( - scanResult.inconsistentNamingWarnings && - scanResult.inconsistentNamingWarnings.length > 0 - ) { - printInconsistentNamingWarning( - scanResult.inconsistentNamingWarnings, - isJson, - ); + if (scanResult.inconsistentNamingWarnings) { + printInconsistentNamingWarning(scanResult.inconsistentNamingWarnings); } printExampleWarnings(scanResult.exampleWarnings ?? [], isJson); diff --git a/src/ui/scan/printInconsistentNamingWarning.ts b/src/ui/scan/printInconsistentNamingWarning.ts index fcd77e2..f9aee60 100644 --- a/src/ui/scan/printInconsistentNamingWarning.ts +++ b/src/ui/scan/printInconsistentNamingWarning.ts @@ -4,28 +4,20 @@ import type { InconsistentNamingWarning } from '../../config/types.js'; /** * Prints warnings about inconsistent naming patterns in environment variables. * @param warnings Array of inconsistent naming warnings - * @param isJson Whether to output in JSON format * @returns void */ export function printInconsistentNamingWarning( warnings: InconsistentNamingWarning[], - isJson: boolean, ) { - if (isJson || warnings.length === 0) { + if (warnings.length === 0) { return; } console.log(chalk.yellow('⚠️ Inconsistent naming found:')); for (const { key1, key2, suggestion } of warnings) { - console.log( - chalk.yellow( - ` - ${chalk.cyan(key1)} ↔ ${chalk.cyan(key2)}`, - ), - ); - console.log( - chalk.gray(` Suggested name: ${suggestion}`), - ); + console.log(chalk.yellow(` - ${chalk.cyan(key1)} ↔ ${chalk.cyan(key2)}`)); + console.log(chalk.gray(` Suggested name: ${suggestion}`)); } console.log(); From edede9be1011a2ea0475dbb3c1f6380f844b040b Mon Sep 17 00:00:00 2001 From: Chrilleweb Date: Sat, 21 Feb 2026 12:40:28 +0100 Subject: [PATCH 6/9] chore: print --- src/services/printScanResult.ts | 4 +++- src/ui/scan/printExampleWarnings.ts | 7 ------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/services/printScanResult.ts b/src/services/printScanResult.ts index 16c41d2..b88d805 100644 --- a/src/services/printScanResult.ts +++ b/src/services/printScanResult.ts @@ -66,7 +66,9 @@ export function printScanResult( printInconsistentNamingWarning(scanResult.inconsistentNamingWarnings); } - printExampleWarnings(scanResult.exampleWarnings ?? [], isJson); + if (scanResult.exampleWarnings) { + printExampleWarnings(scanResult.exampleWarnings); + } // Unused printUnused( diff --git a/src/ui/scan/printExampleWarnings.ts b/src/ui/scan/printExampleWarnings.ts index 50ca3b1..c512394 100644 --- a/src/ui/scan/printExampleWarnings.ts +++ b/src/ui/scan/printExampleWarnings.ts @@ -4,19 +4,12 @@ import type { ExampleSecretWarning } from '../../config/types.js'; /** * Prints example file secret warnings to the console. * @param warnings - List of example file secret warnings - * @param json - Whether to output in JSON format */ export function printExampleWarnings( warnings: ExampleSecretWarning[], - json: boolean, ): void { if (!warnings || warnings.length === 0) return; - if (json) { - console.log(JSON.stringify({ exampleWarnings: warnings }, null, 2)); - return; - } - console.log(chalk.yellow('🚨 Potential real secrets found in .env.example:')); for (const w of warnings) { console.log( From 082d0d4f3d8dfc9adfa8b7e5c1f91e3350d03910 Mon Sep 17 00:00:00 2001 From: Chrilleweb Date: Sat, 21 Feb 2026 15:10:38 +0100 Subject: [PATCH 7/9] chore: refactor --- src/services/printScanResult.ts | 13 ++++++------- src/ui/scan/printUnused.ts | 9 +-------- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/services/printScanResult.ts b/src/services/printScanResult.ts index b88d805..4a1de34 100644 --- a/src/services/printScanResult.ts +++ b/src/services/printScanResult.ts @@ -47,7 +47,9 @@ export function printScanResult( printHeader(comparedAgainst); // Show stats if requested - printStats(scanResult.stats, opts.showStats ?? true); + if (opts.showStats ?? true) { + printStats(scanResult.stats, true); + } // Missing variables (used in code but not in env file) if (printMissing(scanResult.missing, scanResult.used, comparedAgainst)) { @@ -71,12 +73,9 @@ export function printScanResult( } // Unused - printUnused( - scanResult.unused, - comparedAgainst, - opts.showUnused ?? false, - isJson, - ); + if (opts.showUnused ?? true) { + printUnused(scanResult.unused, comparedAgainst); + } // Duplicates printDuplicates( diff --git a/src/ui/scan/printUnused.ts b/src/ui/scan/printUnused.ts index c078b32..be0cbde 100644 --- a/src/ui/scan/printUnused.ts +++ b/src/ui/scan/printUnused.ts @@ -6,15 +6,8 @@ import chalk from 'chalk'; * @param unused - Array of unused variable names * @param comparedAgainst - File name (.env eller andet) * @param showUnused - Whether unused should be shown at all - * @param json - Whether to output in JSON format */ -export function printUnused( - unused: string[], - comparedAgainst: string, - showUnused: boolean, - json: boolean, -): void { - if (json || !showUnused) return; +export function printUnused(unused: string[], comparedAgainst: string): void { if (unused.length === 0) return; const fileType = comparedAgainst || 'environment file'; From 776b46c186998704001974630b331464500019b1 Mon Sep 17 00:00:00 2001 From: Chrilleweb Date: Sat, 21 Feb 2026 15:43:57 +0100 Subject: [PATCH 8/9] chore: refactor --- src/services/printScanResult.ts | 5 +++-- src/ui/scan/printSecrets.ts | 4 +--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/services/printScanResult.ts b/src/services/printScanResult.ts index 4a1de34..1aa059e 100644 --- a/src/services/printScanResult.ts +++ b/src/services/printScanResult.ts @@ -87,8 +87,9 @@ export function printScanResult( ); // Print potential secrets found - printSecrets(scanResult.secrets ?? [], isJson); - + if (opts.secrets) { + printSecrets(scanResult.secrets); + } // Console log usage warning printConsolelogWarning(scanResult.logged ?? [], isJson); diff --git a/src/ui/scan/printSecrets.ts b/src/ui/scan/printSecrets.ts index c429c49..b833b78 100644 --- a/src/ui/scan/printSecrets.ts +++ b/src/ui/scan/printSecrets.ts @@ -32,11 +32,9 @@ function getSeverityLabel(severity: SecretFinding['severity']): string { /** * Print potential secrets detected in the codebase. * @param secrets - List of secret findings - * @param json - Whether to output in JSON format * @returns void */ -export function printSecrets(secrets: SecretFinding[], json: boolean): void { - if (json) return; +export function printSecrets(secrets: SecretFinding[]): void { if (!secrets || secrets.length === 0) return; // Sort by severity (high -> medium -> low) From 54ccc1a787ee08251a6986f9b0e56eceb20652af Mon Sep 17 00:00:00 2001 From: Chrilleweb Date: Sat, 21 Feb 2026 16:14:51 +0100 Subject: [PATCH 9/9] chore: refactor --- src/services/printScanResult.ts | 4 +++- src/ui/scan/printConsolelogWarning.ts | 7 +------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/services/printScanResult.ts b/src/services/printScanResult.ts index 1aa059e..6e5d43c 100644 --- a/src/services/printScanResult.ts +++ b/src/services/printScanResult.ts @@ -91,7 +91,9 @@ export function printScanResult( printSecrets(scanResult.secrets); } // Console log usage warning - printConsolelogWarning(scanResult.logged ?? [], isJson); + if (scanResult.logged) { + printConsolelogWarning(scanResult.logged); + } // Expiration warnings printExpireWarnings(scanResult.expireWarnings ?? [], isJson); diff --git a/src/ui/scan/printConsolelogWarning.ts b/src/ui/scan/printConsolelogWarning.ts index 3502b60..a51c7df 100644 --- a/src/ui/scan/printConsolelogWarning.ts +++ b/src/ui/scan/printConsolelogWarning.ts @@ -6,14 +6,9 @@ import { normalizePath } from '../../core/helpers/normalizePath.js'; * Print environment variables that were logged using console.log / warn / error. * * @param logged - List of EnvUsage entries where isLogged=true - * @param json - Whether JSON output is enabled * @returns true if anything was printed */ -export function printConsolelogWarning( - logged: EnvUsage[], - json: boolean, -): boolean { - if (json) return false; +export function printConsolelogWarning(logged: EnvUsage[]): boolean { if (!logged || logged.length === 0) return false; console.log(chalk.yellow(`⚠️ Environment variables logged to console:`));