crapifyme
Version:
Ultra-fast developer productivity CLI tools - remove comments, logs, and more
125 lines • 6.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.commentsCommand = void 0;
const commander_1 = require("commander");
const shared_1 = require("../../shared");
const advanced_logic_1 = require("./advanced-logic");
exports.commentsCommand = new commander_1.Command('comments')
.description('Remove code comments while preserving important ones')
.argument('[paths...]', 'Files or directories to process', ['.'])
.option('-k, --keep <patterns>', 'Comma-separated patterns to preserve', 'todo,fixme,hack,ts-ignore,eslint-disable')
.option('-e, --extensions <ext>', 'File extensions to process', 'js,ts,jsx,tsx,vue,svelte,astro,html,css,scss,less,sass')
.option('-x, --exclude <patterns>', 'Glob patterns to exclude')
.option('--no-preserve-framework', 'Disable framework-specific comment preservation')
.option('--no-preserve-development', 'Disable development keyword preservation')
.option('--no-preserve-tooling', 'Disable tooling directive preservation')
.option('--no-preserve-documentation', 'Disable documentation comment preservation')
.action(async (paths, options, command) => {
const globalOptions = command.parent?.opts() || {};
const logger = new shared_1.Logger(globalOptions.verbose, globalOptions.quiet, globalOptions.json);
if (!globalOptions.force) {
const vcsResult = (0, shared_1.detectVersionControl)();
if (!vcsResult.detected) {
logger.error('No version control system detected in this project or its parent directories.');
logger.error('This tool removes comments from your code, which is a potentially destructive operation.');
logger.error('Use --force to proceed without version control.');
process.exit(shared_1.ExitCode.Error);
}
if (globalOptions.verbose) {
logger.info(`Version control detected: ${vcsResult.type} at ${vcsResult.path}`);
}
}
try {
const extensions = options.extensions.split(',').map((e) => e.trim());
const patterns = (0, shared_1.createFilePatterns)(paths, extensions);
const excludePatterns = options.exclude
?.split(',')
.map((p) => p.trim())
.filter(Boolean) || [];
logger.info(`Search patterns: ${patterns.join(', ')}`);
if (excludePatterns.length > 0) {
logger.info(`Exclude patterns: ${excludePatterns.join(', ')}`);
}
const files = await (0, shared_1.findFiles)(patterns, excludePatterns);
if (files.length === 0) {
logger.warn('No files found to process');
logger.info(`Searched in: ${paths.join(', ')}`);
logger.info(`Extensions: ${extensions.join(', ')}`);
process.exit(shared_1.ExitCode.Success);
}
logger.info(`Found ${files.length} file${files.length === 1 ? '' : 's'} to process`);
if (globalOptions.dryRun) {
logger.info('DRY RUN - No files will be modified');
}
const processor = new advanced_logic_1.AdvancedCommentRemover(options.keep.split(',').map((p) => p.trim()), {
logger,
preserveFramework: options.preserveFramework,
preserveDevelopment: options.preserveDevelopment,
preserveTooling: options.preserveTooling,
preserveDocumentation: options.preserveDocumentation,
useEnhancedTokenizer: true
});
const stats = {
filesProcessed: 0,
commentsRemoved: 0,
commentsPreserved: 0,
errors: []
};
for (const file of files) {
try {
const content = await (0, shared_1.readFile)(file);
const result = processor.removeComments(content, file);
if (result.modified && !globalOptions.dryRun) {
await (0, shared_1.writeFile)(file, result.content);
}
stats.filesProcessed++;
stats.commentsRemoved += result.removed;
stats.commentsPreserved += result.preserved;
if (result.modified) {
logger.success(`${file}`);
console.log(` ┣ Comments removed: ${result.removed}`);
console.log(` ┣ Comments preserved: ${result.preserved}`);
console.log(` ┗ Status: ${globalOptions.dryRun ? 'DRY RUN - would be modified' : 'Modified'}`);
}
else if (globalOptions.verbose) {
logger.info(`${file} - No comments found`);
}
}
catch (error) {
stats.errors.push({ file, error: error.message });
logger.error(`Failed to process ${file}`, error);
}
}
if (globalOptions.json) {
logger.json(stats);
}
else {
(0, shared_1.showComplete)();
if (stats.errors.length > 0) {
logger.error(`Processing completed with ${stats.errors.length} error${stats.errors.length === 1 ? '' : 's'}`);
}
else {
logger.success('Processing completed successfully');
}
const filesModified = stats.commentsRemoved > 0 ? 'with changes' : 'no changes needed';
logger.info(`Files processed: ${stats.filesProcessed} (${filesModified})`);
logger.info(`Comments removed: ${stats.commentsRemoved}`);
logger.info(`Comments preserved: ${stats.commentsPreserved}`);
if (globalOptions.dryRun && stats.commentsRemoved > 0) {
logger.warn('DRY RUN MODE - No files were actually modified');
logger.info('Remove --dry-run to apply changes');
}
}
const exitCode = stats.errors.length > 0
? shared_1.ExitCode.Error
: stats.commentsRemoved > 0
? shared_1.ExitCode.IssuesFound
: shared_1.ExitCode.Success;
process.exit(exitCode);
}
catch (error) {
logger.error('Fatal error', error);
process.exit(shared_1.ExitCode.Error);
}
});
//# sourceMappingURL=index.js.map