From 42fa83e2d8cd3bb1e29d51e15e079a9e07521072 Mon Sep 17 00:00:00 2001 From: Bart Veneman Date: Tue, 4 Nov 2025 21:04:38 +0100 Subject: [PATCH 1/2] feat: add Help to CLI --- src/cli/arguments.ts | 1 - src/cli/cli.ts | 5 +++++ src/cli/help.ts | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/cli/help.ts diff --git a/src/cli/arguments.ts b/src/cli/arguments.ts index 0235b0f..77ddc10 100644 --- a/src/cli/arguments.ts +++ b/src/cli/arguments.ts @@ -64,7 +64,6 @@ export function validate_arguments(args: ReturnType): Cl export function parse_arguments(args: string[]) { let { values } = parseArgs({ args, - allowPositionals: true, options: { 'coverage-dir': { type: 'string', diff --git a/src/cli/cli.ts b/src/cli/cli.ts index 0569dfe..8b9bde8 100644 --- a/src/cli/cli.ts +++ b/src/cli/cli.ts @@ -5,8 +5,13 @@ import { program } from './program.js' import { read } from './file-reader.js' import { print as pretty } from './reporters/pretty.js' import { print as tap } from './reporters/tap.js' +import { help } from './help.js' async function cli(cli_args: string[]) { + if (!cli_args || cli_args.length === 0 || cli_args.includes('--help') || cli_args.includes('-h')) { + return console.log(help()) + } + let params = validate_arguments(parse_arguments(cli_args)) let coverage_data = await read(params['coverage-dir']) let report = program( diff --git a/src/cli/help.ts b/src/cli/help.ts new file mode 100644 index 0000000..529f8dd --- /dev/null +++ b/src/cli/help.ts @@ -0,0 +1,43 @@ +import { styleText } from 'node:util' + +export function help() { + return ` +${styleText(['bold'], 'USAGE')} + $ css-coverage --coverage-dir= --min-line-coverage= [options] + +${styleText('bold', 'OPTIONS')} +Required: + --coverage-dir Where your Coverage JSON files are + --min-line-coverage Minimum overall CSS coverage [0-1] + +Optional: + --min-file-line-coverage Minimal coverage per file [0-1] + + --show-uncovered Which files to show when not meeting + the --min-file-line-coverage threshold + • violations [default] ${styleText('dim', 'show under-threshold files')} + • all ${styleText('dim', 'show partially covered files')} + • none ${styleText('dim', 'do not show files')} + + --reporter How to show the results + • pretty [default] + • tap + • json + +${styleText('bold', 'EXAMPLES')} + ${styleText('dim', '# analyze all .json files in ./coverage; require 80% overall coverage')} + $ css-coverage --coverage-dir=./coverage --min-line-coverage=0.8 + + ${styleText('dim', '# Require 50% coverage per file')} + $ css-coverage \\ + --coverage-dir=./coverage \\ + --min-line-coverage=0.8 \\ + --min-file-line-coverage=0.5 + + ${styleText('dim', 'Report JSON')} + $ css-coverage \\ + --coverage-dir=./coverage \\ + --min-line-coverage=0.8 \\ + --reporter=json + `.trim() +} From df7ebd23949391a529c91c6cbae1b0e44cc2f0b8 Mon Sep 17 00:00:00 2001 From: Bart Veneman Date: Tue, 4 Nov 2025 21:25:10 +0100 Subject: [PATCH 2/2] rename args after rebase --- src/cli/help.ts | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/src/cli/help.ts b/src/cli/help.ts index 529f8dd..07f99cd 100644 --- a/src/cli/help.ts +++ b/src/cli/help.ts @@ -3,41 +3,35 @@ import { styleText } from 'node:util' export function help() { return ` ${styleText(['bold'], 'USAGE')} - $ css-coverage --coverage-dir= --min-line-coverage= [options] + $ css-coverage --coverage-dir= --min-coverage= [options] ${styleText('bold', 'OPTIONS')} Required: - --coverage-dir Where your Coverage JSON files are - --min-line-coverage Minimum overall CSS coverage [0-1] + --coverage-dir Where your Coverage JSON files are + --min-coverage Minimum overall CSS coverage [0-1] Optional: - --min-file-line-coverage Minimal coverage per file [0-1] + --min-file-coverage Minimal coverage per file [0-1] - --show-uncovered Which files to show when not meeting - the --min-file-line-coverage threshold - • violations [default] ${styleText('dim', 'show under-threshold files')} - • all ${styleText('dim', 'show partially covered files')} - • none ${styleText('dim', 'do not show files')} + --show-uncovered Which files to show when not meeting + the --min-file-line-coverage threshold + • violations [default] ${styleText('dim', 'show under-threshold files')} + • all ${styleText('dim', 'show partially covered files')} + • none ${styleText('dim', 'do not show files')} - --reporter How to show the results - • pretty [default] - • tap - • json + --reporter How to show the results + • pretty [default] + • tap + • json ${styleText('bold', 'EXAMPLES')} ${styleText('dim', '# analyze all .json files in ./coverage; require 80% overall coverage')} - $ css-coverage --coverage-dir=./coverage --min-line-coverage=0.8 + $ css-coverage --coverage-dir=./coverage --min-coverage=0.8 ${styleText('dim', '# Require 50% coverage per file')} - $ css-coverage \\ - --coverage-dir=./coverage \\ - --min-line-coverage=0.8 \\ - --min-file-line-coverage=0.5 + $ css-coverage --coverage-dir=./coverage --min-coverage=0.8 --min-file-coverage=0.5 ${styleText('dim', 'Report JSON')} - $ css-coverage \\ - --coverage-dir=./coverage \\ - --min-line-coverage=0.8 \\ - --reporter=json + $ css-coverage --coverage-dir=./coverage --min-coverage=0.8 --reporter=json `.trim() }