citty-test-utils
Version:
Unified testing framework for CLI applications with auto-detecting local/cleanroom execution, vitest config integration, and simplified scenario DSL.
87 lines (81 loc) • 2.35 kB
JavaScript
#!/usr/bin/env node
/**
* @fileoverview AST-based analysis command
* @description Uses AST parsing for accurate CLI coverage analysis
*/
import { defineCommand } from 'citty'
import { EnhancedASTCLIAnalyzer } from '../../core/coverage/enhanced-ast-cli-analyzer.js'
import { writeFileSync } from 'fs'
export const astAnalyzeCommand = defineCommand({
meta: {
name: 'ast-analyze',
description: 'Analyze CLI test coverage using AST parsing for accurate results',
},
args: {
'cli-path': {
type: 'string',
description: 'Path to CLI file to analyze',
default: 'src/cli.mjs',
},
'test-dir': {
type: 'string',
description: 'Directory containing test files',
default: 'test',
},
format: {
type: 'string',
description: 'Output format (text, json)',
default: 'text',
},
output: {
type: 'string',
description: 'Output file path (optional)',
},
verbose: {
type: 'boolean',
description: 'Enable verbose output',
default: false,
},
'include-patterns': {
type: 'string',
description: 'Comma-separated file patterns to include',
default: '.test.mjs,.test.js,.spec.mjs,.spec.js',
},
'exclude-patterns': {
type: 'string',
description: 'Comma-separated patterns to exclude',
default: 'node_modules,.git,coverage',
},
},
run: async (ctx) => {
const {
'cli-path': cliPath,
'test-dir': testDir,
format,
output,
verbose,
'include-patterns': includePatterns,
'exclude-patterns': excludePatterns,
} = ctx.args
try {
const analyzer = new EnhancedASTCLIAnalyzer({
cliPath,
testDir,
includePatterns: includePatterns.split(',').map((p) => p.trim()),
excludePatterns: excludePatterns.split(',').map((p) => p.trim()),
verbose,
})
const report = await analyzer.analyze()
const formattedReport = await analyzer.formatReport(report, { format })
if (output) {
writeFileSync(output, formattedReport)
console.log(`✅ AST-based analysis report saved to: ${output}`)
} else {
console.log(formattedReport)
}
} catch (error) {
console.error(`❌ AST analysis failed: ${error.message}`)
process.exit(1)
}
},
})