mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-04-08 02:03:34 +08:00
fix: improve error handling, fix bugs, and optimize core libraries
utils.js: - Fix countInFile: enforce global flag on regex to prevent silent under-counting (match() without /g returns only first match) - Add 5s timeout to readStdinJson to prevent hooks hanging forever - Handle EEXIST race condition in ensureDir - Pre-compile regex patterns in getGitModifiedFiles to avoid N*M compilations and catch invalid patterns before filtering - Add JSDoc documentation to all improved functions session-manager.js: - Fix getSessionById triple file read: pass pre-read content to getSessionStats instead of re-reading from disk - Allow getSessionStats to accept content string directly session-aliases.js: - Wrap temp file cleanup in try/catch to prevent cascading errors check-console-log.js: - Refactor to use shared utils (isGitRepo, getGitModifiedFiles, log) instead of raw execSync calls - Add exclusion patterns for test files, config files, and scripts/ where console.log is intentional session-end.js: - Log count of skipped unparseable transcript lines for diagnostics suggest-compact.js: - Guard against NaN from corrupted counter files package-manager.js: - Remove dead fallbackOrder parameter (unused after #162 fix)
This commit is contained in:
@@ -2,57 +2,61 @@
|
||||
|
||||
/**
|
||||
* Stop Hook: Check for console.log statements in modified files
|
||||
*
|
||||
* This hook runs after each response and checks if any modified
|
||||
* JavaScript/TypeScript files contain console.log statements.
|
||||
* It provides warnings to help developers remember to remove
|
||||
* debug statements before committing.
|
||||
*
|
||||
* Cross-platform (Windows, macOS, Linux)
|
||||
*
|
||||
* Runs after each response and checks if any modified JavaScript/TypeScript
|
||||
* files contain console.log statements. Provides warnings to help developers
|
||||
* remember to remove debug statements before committing.
|
||||
*
|
||||
* Exclusions: test files, config files, and scripts/ directory (where
|
||||
* console.log is often intentional).
|
||||
*/
|
||||
|
||||
const { execSync } = require('child_process');
|
||||
const fs = require('fs');
|
||||
const { isGitRepo, getGitModifiedFiles, log } = require('../lib/utils');
|
||||
|
||||
// Files where console.log is expected and should not trigger warnings
|
||||
const EXCLUDED_PATTERNS = [
|
||||
/\.test\.[jt]sx?$/,
|
||||
/\.spec\.[jt]sx?$/,
|
||||
/\.config\.[jt]s$/,
|
||||
/scripts\//,
|
||||
/__tests__\//,
|
||||
/__mocks__\//,
|
||||
];
|
||||
|
||||
let data = '';
|
||||
|
||||
// Read stdin
|
||||
process.stdin.on('data', chunk => {
|
||||
data += chunk;
|
||||
});
|
||||
|
||||
process.stdin.on('end', () => {
|
||||
try {
|
||||
// Check if we're in a git repository
|
||||
try {
|
||||
execSync('git rev-parse --git-dir', { stdio: 'pipe' });
|
||||
} catch {
|
||||
// Not in a git repo, just pass through the data
|
||||
if (!isGitRepo()) {
|
||||
console.log(data);
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
// Get list of modified files
|
||||
const files = execSync('git diff --name-only HEAD', {
|
||||
encoding: 'utf8',
|
||||
stdio: ['pipe', 'pipe', 'pipe']
|
||||
})
|
||||
.split('\n')
|
||||
.filter(f => /\.(ts|tsx|js|jsx)$/.test(f) && fs.existsSync(f));
|
||||
const files = getGitModifiedFiles(['\\.tsx?$', '\\.jsx?$'])
|
||||
.filter(f => fs.existsSync(f))
|
||||
.filter(f => !EXCLUDED_PATTERNS.some(pattern => pattern.test(f)));
|
||||
|
||||
let hasConsole = false;
|
||||
|
||||
// Check each file for console.log
|
||||
for (const file of files) {
|
||||
const content = fs.readFileSync(file, 'utf8');
|
||||
if (content.includes('console.log')) {
|
||||
console.error(`[Hook] WARNING: console.log found in ${file}`);
|
||||
log(`[Hook] WARNING: console.log found in ${file}`);
|
||||
hasConsole = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (hasConsole) {
|
||||
console.error('[Hook] Remove console.log statements before committing');
|
||||
log('[Hook] Remove console.log statements before committing');
|
||||
}
|
||||
} catch (_error) {
|
||||
} catch {
|
||||
// Silently ignore errors (git might not be available, etc.)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user