@darrenjcoxon/codeguard 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -8,11 +8,7 @@ Scan your code for security issues. Get a `FIXES.md` file. Give it to Claude Cod
8
8
  npm install -g @darrenjcoxon/codeguard
9
9
  ```
10
10
 
11
- For deeper scanning, also install:
12
- ```bash
13
- pip install semgrep # Security patterns (SQL injection, XSS, etc.)
14
- brew install gitleaks # Secret detection
15
- ```
11
+ That's it. CodeGuard automatically installs Semgrep and Gitleaks on first run.
16
12
 
17
13
  ## Use
18
14
 
@@ -21,10 +17,11 @@ cd your-project
21
17
  codeguard
22
18
  ```
23
19
 
24
- That's it. This will:
25
- 1. Scan for security vulnerabilities, secrets, bad dependencies, code quality issues
26
- 2. Create `FIXES.md` in your project
27
- 3. Tell your AI agent: *"Fix all the issues in FIXES.md"*
20
+ This will:
21
+ 1. Auto-install any missing scanning tools
22
+ 2. Scan for security vulnerabilities, secrets, bad dependencies, code quality issues
23
+ 3. Create `FIXES.md` in your project
24
+ 4. Tell your AI agent: *"Fix all the issues in FIXES.md"*
28
25
 
29
26
  ## What It Finds
30
27
 
@@ -36,14 +33,15 @@ That's it. This will:
36
33
  | **ESLint** | Code quality issues |
37
34
  | **Complexity** | Complex code, TODOs, debug statements |
38
35
 
39
- ## Options
36
+ ## Commands
40
37
 
41
38
  ```bash
42
39
  codeguard # Scan current directory
43
40
  codeguard /path/to/project # Scan specific path
41
+ codeguard setup # Manually install scanning tools
42
+ codeguard check # Check which tools are installed
44
43
  codeguard --no-fixes # Skip FIXES.md generation
45
44
  codeguard --ci # CI mode: exit 1 on high/critical issues
46
- codeguard -o report.json # Also save full JSON report
47
45
  ```
48
46
 
49
47
  ## CI/CD
@@ -52,7 +50,6 @@ codeguard -o report.json # Also save full JSON report
52
50
  # GitHub Actions
53
51
  - run: |
54
52
  npm install -g @darrenjcoxon/codeguard
55
- pip install semgrep
56
53
  codeguard --ci
57
54
  ```
58
55
 
package/dist/cli.js CHANGED
@@ -9,9 +9,12 @@ import { Command } from 'commander';
9
9
  import chalk from 'chalk';
10
10
  import { resolve } from 'path';
11
11
  import { existsSync, writeFileSync } from 'fs';
12
+ import { exec, execSync } from 'child_process';
13
+ import { promisify } from 'util';
12
14
  import { Orchestrator } from './orchestrator.js';
13
15
  import { AgentReportGenerator } from './agent-report.js';
14
16
  import { SCANNER_COVERAGE } from './scanners/index.js';
17
+ const execAsync = promisify(exec);
15
18
  const program = new Command();
16
19
  program
17
20
  .name('codeguard')
@@ -23,7 +26,116 @@ program
23
26
 
24
27
  Just run: codeguard
25
28
  `)
26
- .version('1.0.0');
29
+ .version('1.1.0');
30
+ // Tool installation helpers
31
+ async function checkTool(command) {
32
+ try {
33
+ await execAsync(`which ${command}`);
34
+ return true;
35
+ }
36
+ catch {
37
+ return false;
38
+ }
39
+ }
40
+ async function installSemgrep() {
41
+ console.log(chalk.blue('📦 Installing Semgrep...'));
42
+ try {
43
+ // Try pip first (most common)
44
+ try {
45
+ execSync('pip3 install semgrep', { stdio: 'inherit' });
46
+ return true;
47
+ }
48
+ catch {
49
+ // Try pip if pip3 fails
50
+ try {
51
+ execSync('pip install semgrep', { stdio: 'inherit' });
52
+ return true;
53
+ }
54
+ catch {
55
+ // Try brew on macOS
56
+ try {
57
+ execSync('brew install semgrep', { stdio: 'inherit' });
58
+ return true;
59
+ }
60
+ catch {
61
+ return false;
62
+ }
63
+ }
64
+ }
65
+ }
66
+ catch {
67
+ return false;
68
+ }
69
+ }
70
+ async function installGitleaks() {
71
+ console.log(chalk.blue('📦 Installing Gitleaks...'));
72
+ try {
73
+ // Try brew first (macOS)
74
+ try {
75
+ execSync('brew install gitleaks', { stdio: 'inherit' });
76
+ return true;
77
+ }
78
+ catch {
79
+ // Try downloading binary for Linux
80
+ try {
81
+ const platform = process.platform;
82
+ const arch = process.arch === 'x64' ? 'x64' : 'arm64';
83
+ if (platform === 'linux') {
84
+ execSync(`
85
+ curl -sSL https://github.com/gitleaks/gitleaks/releases/download/v8.18.4/gitleaks_8.18.4_linux_${arch}.tar.gz | tar xz -C /usr/local/bin gitleaks
86
+ `, { stdio: 'inherit' });
87
+ return true;
88
+ }
89
+ else if (platform === 'darwin') {
90
+ execSync(`
91
+ curl -sSL https://github.com/gitleaks/gitleaks/releases/download/v8.18.4/gitleaks_8.18.4_darwin_${arch}.tar.gz | tar xz -C /usr/local/bin gitleaks
92
+ `, { stdio: 'inherit' });
93
+ return true;
94
+ }
95
+ return false;
96
+ }
97
+ catch {
98
+ return false;
99
+ }
100
+ }
101
+ }
102
+ catch {
103
+ return false;
104
+ }
105
+ }
106
+ async function ensureToolsInstalled(quiet = false) {
107
+ const hasSemgrep = await checkTool('semgrep');
108
+ const hasGitleaks = await checkTool('gitleaks');
109
+ if (hasSemgrep && hasGitleaks) {
110
+ return; // All good
111
+ }
112
+ if (!quiet) {
113
+ console.log(chalk.yellow('\n⚠️ Some scanning tools are missing. Installing...\n'));
114
+ }
115
+ if (!hasSemgrep) {
116
+ const installed = await installSemgrep();
117
+ if (installed) {
118
+ console.log(chalk.green('✓ Semgrep installed'));
119
+ }
120
+ else {
121
+ console.log(chalk.yellow('⚠ Could not install Semgrep automatically.'));
122
+ console.log(chalk.gray(' Install manually: pip install semgrep'));
123
+ }
124
+ }
125
+ if (!hasGitleaks) {
126
+ const installed = await installGitleaks();
127
+ if (installed) {
128
+ console.log(chalk.green('✓ Gitleaks installed'));
129
+ }
130
+ else {
131
+ console.log(chalk.yellow('⚠ Could not install Gitleaks automatically.'));
132
+ console.log(chalk.gray(' Install manually: brew install gitleaks'));
133
+ }
134
+ }
135
+ if (!quiet) {
136
+ console.log('');
137
+ }
138
+ }
27
139
  // Default action - just scan current directory
28
140
  program
29
141
  .argument('[path]', 'Path to scan (default: current directory)', '.')
@@ -33,9 +145,23 @@ program
33
145
  .option('--json', 'Output JSON only (no FIXES.md)')
34
146
  .option('--ci', 'CI mode: fail on high/critical issues')
35
147
  .option('-q, --quiet', 'Minimal output')
148
+ .option('--skip-install', 'Skip auto-installing missing tools')
36
149
  .action(async (path, options) => {
150
+ // Auto-install tools on first run (unless skipped)
151
+ if (!options.skipInstall) {
152
+ await ensureToolsInstalled(options.quiet || options.json);
153
+ }
37
154
  await runScan(path, options);
38
155
  });
156
+ // Setup command - explicitly install tools
157
+ program
158
+ .command('setup')
159
+ .description('Install required scanning tools (Semgrep, Gitleaks)')
160
+ .action(async () => {
161
+ console.log(chalk.bold('\n🔧 CodeGuard Setup\n'));
162
+ await ensureToolsInstalled(false);
163
+ console.log(chalk.green('✓ Setup complete!\n'));
164
+ });
39
165
  // Check command - verify tools are installed
40
166
  program
41
167
  .command('check')
@@ -50,10 +176,13 @@ program
50
176
  : chalk.yellow('○ not found');
51
177
  console.log(` ${name}: ${status}`);
52
178
  }
53
- console.log(chalk.gray('\nInstall missing tools:'));
54
- console.log(chalk.gray(' semgrep: pip install semgrep'));
55
- console.log(chalk.gray(' gitleaks: brew install gitleaks'));
56
- console.log();
179
+ const allInstalled = Object.values(available).every(v => v);
180
+ if (!allInstalled) {
181
+ console.log(chalk.cyan('\nRun `codeguard setup` to install missing tools.\n'));
182
+ }
183
+ else {
184
+ console.log(chalk.green('\n✓ All tools installed!\n'));
185
+ }
57
186
  });
58
187
  // List scanners
59
188
  program
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -2,26 +2,45 @@
2
2
  * Complexity Scanner
3
3
  *
4
4
  * Analyzes code complexity using various metrics
5
- * Covers: complexity, dead-code, duplication categories
5
+ *
6
+ * Improvements based on expert feedback:
7
+ * - Excludes test files by default
8
+ * - Excludes type definition files (.d.ts)
9
+ * - Raised thresholds to industry standards (High: 25+, Medium: 20+)
10
+ * - Better remediation advice with specific function names
11
+ * - Smarter detection that avoids type-only files
6
12
  */
7
13
  import { Scanner, ScanTarget, ScannerConfig, ScannerResult, FindingCategory } from '../types.js';
14
+ interface ComplexityConfig {
15
+ highComplexityThreshold: number;
16
+ mediumComplexityThreshold: number;
17
+ maxFileLines: number;
18
+ maxFunctionLines: number;
19
+ excludeTestFiles: boolean;
20
+ excludeTypeFiles: boolean;
21
+ excludePatterns: string[];
22
+ reportTodos: boolean;
23
+ reportDebugStatements: boolean;
24
+ }
8
25
  export declare class ComplexityScanner implements Scanner {
9
26
  name: string;
10
27
  categories: FindingCategory[];
11
- private maxFileLines;
12
- private maxFunctionLines;
13
- private maxCyclomaticComplexity;
14
- private maxCognitiveComplexity;
28
+ private config;
15
29
  private supportedExtensions;
30
+ private testPatterns;
31
+ constructor(config?: Partial<ComplexityConfig>);
16
32
  isAvailable(): Promise<boolean>;
17
33
  scan(target: ScanTarget, config?: ScannerConfig): Promise<ScannerResult>;
34
+ private shouldExcludeFile;
35
+ private isTypeOnlyFile;
18
36
  private collectFiles;
19
37
  private analyzeFile;
38
+ private generateComplexitySuggestion;
39
+ private analyzeFunctions;
40
+ private extractFunctionBody;
41
+ private calculateFunctionComplexity;
20
42
  private calculateLineMetrics;
21
43
  private getCommentPatterns;
22
- private estimateCyclomaticComplexity;
23
- private findLongFunctions;
24
- private estimateFunctionLength;
25
44
  private detectCodeSmells;
26
45
  private createFinding;
27
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"complexity.d.ts","sourceRoot":"","sources":["../../src/scanners/complexity.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EACL,OAAO,EACP,UAAU,EACV,aAAa,EACb,aAAa,EAEb,eAAe,EAGhB,MAAM,aAAa,CAAC;AAiBrB,qBAAa,iBAAkB,YAAW,OAAO;IAC/C,IAAI,SAAgB;IACpB,UAAU,EAAE,eAAe,EAAE,CAA6B;IAG1D,OAAO,CAAC,YAAY,CAAO;IAC3B,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,uBAAuB,CAAM;IACrC,OAAO,CAAC,sBAAsB,CAAM;IAGpC,OAAO,CAAC,mBAAmB,CAA+E;IAEpG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAgC9E,OAAO,CAAC,YAAY;YA4CN,WAAW;IAuDzB,OAAO,CAAC,oBAAoB;IAmD5B,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,4BAA4B;IA2BpC,OAAO,CAAC,iBAAiB;IAoDzB,OAAO,CAAC,sBAAsB;IA2C9B,OAAO,CAAC,gBAAgB;IAoDxB,OAAO,CAAC,aAAa;CA8BtB;AAED,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"complexity.d.ts","sourceRoot":"","sources":["../../src/scanners/complexity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EACL,OAAO,EACP,UAAU,EACV,aAAa,EACb,aAAa,EAEb,eAAe,EAGhB,MAAM,aAAa,CAAC;AASrB,UAAU,gBAAgB;IAExB,uBAAuB,EAAE,MAAM,CAAC;IAChC,yBAAyB,EAAE,MAAM,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IAGzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAG1B,WAAW,EAAE,OAAO,CAAC;IACrB,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAcD,qBAAa,iBAAkB,YAAW,OAAO;IAC/C,IAAI,SAAgB;IACpB,UAAU,EAAE,eAAe,EAAE,CAA6B;IAE1D,OAAO,CAAC,MAAM,CAAmB;IAGjC,OAAO,CAAC,mBAAmB,CAA+E;IAG1G,OAAO,CAAC,YAAY,CASlB;gBAEU,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM;IAI5C,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAgC9E,OAAO,CAAC,iBAAiB;IA2BzB,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,YAAY;YA+CN,WAAW;IAyFzB,OAAO,CAAC,4BAA4B;IAiBpC,OAAO,CAAC,gBAAgB;IAqDxB,OAAO,CAAC,mBAAmB;IA0C3B,OAAO,CAAC,2BAA2B;IAiCnC,OAAO,CAAC,oBAAoB;IAsC5B,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,gBAAgB;IAkFxB,OAAO,CAAC,aAAa;CA8BtB;AAED,eAAe,iBAAiB,CAAC"}
@@ -2,24 +2,48 @@
2
2
  * Complexity Scanner
3
3
  *
4
4
  * Analyzes code complexity using various metrics
5
- * Covers: complexity, dead-code, duplication categories
5
+ *
6
+ * Improvements based on expert feedback:
7
+ * - Excludes test files by default
8
+ * - Excludes type definition files (.d.ts)
9
+ * - Raised thresholds to industry standards (High: 25+, Medium: 20+)
10
+ * - Better remediation advice with specific function names
11
+ * - Smarter detection that avoids type-only files
6
12
  */
7
- import { exec } from 'child_process';
8
- import { promisify } from 'util';
9
13
  import { readFileSync, readdirSync, statSync } from 'fs';
10
- import { join, extname, relative } from 'path';
14
+ import { join, extname, relative, basename } from 'path';
11
15
  import { generateFingerprint } from '../types.js';
12
- const execAsync = promisify(exec);
16
+ const DEFAULT_CONFIG = {
17
+ highComplexityThreshold: 25,
18
+ mediumComplexityThreshold: 20,
19
+ maxFileLines: 500,
20
+ maxFunctionLines: 50,
21
+ excludeTestFiles: true,
22
+ excludeTypeFiles: true,
23
+ excludePatterns: [],
24
+ reportTodos: true,
25
+ reportDebugStatements: true
26
+ };
13
27
  export class ComplexityScanner {
14
28
  name = 'complexity';
15
29
  categories = ['complexity', 'quality'];
16
- // Thresholds
17
- maxFileLines = 500;
18
- maxFunctionLines = 50;
19
- maxCyclomaticComplexity = 15;
20
- maxCognitiveComplexity = 20;
30
+ config;
21
31
  // Supported extensions
22
32
  supportedExtensions = ['.js', '.jsx', '.ts', '.tsx', '.py', '.rb', '.php', '.java', '.cs', '.go'];
33
+ // Test file patterns
34
+ testPatterns = [
35
+ /\.test\.[jt]sx?$/,
36
+ /\.spec\.[jt]sx?$/,
37
+ /_test\.[jt]sx?$/,
38
+ /_spec\.[jt]sx?$/,
39
+ /\/__tests__\//,
40
+ /\/test\//,
41
+ /\/tests\//,
42
+ /\.stories\.[jt]sx?$/, // Storybook files
43
+ ];
44
+ constructor(config = {}) {
45
+ this.config = { ...DEFAULT_CONFIG, ...config };
46
+ }
23
47
  async isAvailable() {
24
48
  return true; // Built-in analysis, always available
25
49
  }
@@ -52,6 +76,50 @@ export class ComplexityScanner {
52
76
  };
53
77
  }
54
78
  }
79
+ shouldExcludeFile(filePath) {
80
+ const fileName = basename(filePath);
81
+ // Exclude .d.ts type definition files
82
+ if (this.config.excludeTypeFiles && fileName.endsWith('.d.ts')) {
83
+ return true;
84
+ }
85
+ // Exclude test files
86
+ if (this.config.excludeTestFiles) {
87
+ for (const pattern of this.testPatterns) {
88
+ if (pattern.test(filePath)) {
89
+ return true;
90
+ }
91
+ }
92
+ }
93
+ // Check custom exclude patterns
94
+ for (const pattern of this.config.excludePatterns) {
95
+ if (filePath.includes(pattern)) {
96
+ return true;
97
+ }
98
+ }
99
+ return false;
100
+ }
101
+ isTypeOnlyFile(content, ext) {
102
+ if (!['.ts', '.tsx'].includes(ext))
103
+ return false;
104
+ // Check if file only contains type/interface definitions
105
+ const lines = content.split('\n').filter(l => l.trim() && !l.trim().startsWith('//') && !l.trim().startsWith('/*'));
106
+ const typeOnlyPatterns = [
107
+ /^export\s+(type|interface)\s+/,
108
+ /^(type|interface)\s+/,
109
+ /^import\s+.*from/,
110
+ /^export\s*\{/,
111
+ /^export\s+\*/,
112
+ ];
113
+ let typeLines = 0;
114
+ for (const line of lines) {
115
+ const trimmed = line.trim();
116
+ if (typeOnlyPatterns.some(p => p.test(trimmed))) {
117
+ typeLines++;
118
+ }
119
+ }
120
+ // If >80% of meaningful lines are type definitions, it's a type-only file
121
+ return lines.length > 0 && (typeLines / lines.length) > 0.8;
122
+ }
55
123
  collectFiles(dir, target) {
56
124
  const files = [];
57
125
  const excludePatterns = [
@@ -64,7 +132,7 @@ export class ComplexityScanner {
64
132
  const entries = readdirSync(currentDir);
65
133
  for (const entry of entries) {
66
134
  const fullPath = join(currentDir, entry);
67
- // Skip excluded patterns
135
+ // Skip excluded directories
68
136
  if (excludePatterns.some(p => entry === p || fullPath.includes(`/${p}/`))) {
69
137
  continue;
70
138
  }
@@ -76,7 +144,10 @@ export class ComplexityScanner {
76
144
  else if (stat.isFile()) {
77
145
  const ext = extname(entry).toLowerCase();
78
146
  if (this.supportedExtensions.includes(ext)) {
79
- files.push(fullPath);
147
+ // Apply exclusion rules
148
+ if (!this.shouldExcludeFile(fullPath)) {
149
+ files.push(fullPath);
150
+ }
80
151
  }
81
152
  }
82
153
  }
@@ -99,45 +170,205 @@ export class ComplexityScanner {
99
170
  const content = readFileSync(filePath, 'utf-8');
100
171
  const lines = content.split('\n');
101
172
  const ext = extname(filePath).toLowerCase();
173
+ // Skip type-only files (even if not .d.ts)
174
+ if (this.config.excludeTypeFiles && this.isTypeOnlyFile(content, ext)) {
175
+ return findings;
176
+ }
102
177
  // Basic line metrics
103
178
  const metrics = this.calculateLineMetrics(lines, ext);
104
179
  // File too long
105
- if (metrics.codeLines > this.maxFileLines) {
180
+ if (metrics.codeLines > this.config.maxFileLines) {
106
181
  findings.push(this.createFinding({
107
182
  file: relativePath,
108
- title: 'File exceeds maximum length',
109
- description: `This file has ${metrics.codeLines} lines of code (threshold: ${this.maxFileLines}). Consider splitting it into smaller modules.`,
110
- severity: metrics.codeLines > this.maxFileLines * 2 ? 'medium' : 'low',
183
+ title: 'File exceeds recommended length',
184
+ description: `This file has ${metrics.codeLines} lines of code (recommended max: ${this.config.maxFileLines}).`,
185
+ severity: metrics.codeLines > this.config.maxFileLines * 2 ? 'medium' : 'low',
111
186
  category: 'complexity',
112
- suggestion: 'Break down into smaller, focused modules. Each module should have a single responsibility.',
187
+ suggestion: `Consider splitting into smaller modules. Look for logical groupings of functions that could become separate files.`,
113
188
  effort: 'medium'
114
189
  }));
115
190
  }
116
- // Calculate complexity
117
- const complexity = this.estimateCyclomaticComplexity(content, ext);
118
- if (complexity > this.maxCyclomaticComplexity) {
191
+ // Analyze functions for complexity
192
+ const functions = this.analyzeFunctions(content, ext, relativePath);
193
+ // Find high complexity functions
194
+ const complexFunctions = functions.filter(f => f.complexity >= this.config.mediumComplexityThreshold);
195
+ if (complexFunctions.length > 0) {
196
+ // Sort by complexity (highest first)
197
+ complexFunctions.sort((a, b) => b.complexity - a.complexity);
198
+ for (const func of complexFunctions) {
199
+ const isHigh = func.complexity >= this.config.highComplexityThreshold;
200
+ findings.push(this.createFinding({
201
+ file: relativePath,
202
+ line: func.line,
203
+ title: `High complexity: ${func.name}()`,
204
+ description: `Function "${func.name}" has cyclomatic complexity of ${func.complexity}${isHigh ? ' (very high)' : ''}.`,
205
+ severity: isHigh ? 'high' : 'medium',
206
+ category: 'complexity',
207
+ suggestion: this.generateComplexitySuggestion(func),
208
+ effort: isHigh ? 'medium' : 'easy'
209
+ }));
210
+ }
211
+ }
212
+ // Find long functions
213
+ const longFunctions = functions.filter(f => f.length > this.config.maxFunctionLines);
214
+ for (const func of longFunctions) {
215
+ // Don't double-report if already flagged for complexity
216
+ if (complexFunctions.some(cf => cf.name === func.name && cf.line === func.line)) {
217
+ continue;
218
+ }
119
219
  findings.push(this.createFinding({
120
220
  file: relativePath,
121
- title: 'High cyclomatic complexity',
122
- description: `Estimated cyclomatic complexity: ${complexity} (threshold: ${this.maxCyclomaticComplexity}). High complexity makes code harder to test and maintain.`,
123
- severity: complexity > this.maxCyclomaticComplexity * 2 ? 'high' : 'medium',
221
+ line: func.line,
222
+ title: `Long function: ${func.name}()`,
223
+ description: `Function "${func.name}" is ${func.length} lines (recommended max: ${this.config.maxFunctionLines}).`,
224
+ severity: func.length > this.config.maxFunctionLines * 2 ? 'medium' : 'low',
124
225
  category: 'complexity',
125
- suggestion: 'Reduce complexity by extracting methods, using early returns, and simplifying conditionals.',
126
- effort: 'medium'
226
+ suggestion: `Extract logical sections of "${func.name}" into helper functions with clear names.`,
227
+ effort: 'easy'
127
228
  }));
128
229
  }
129
- // Find long functions
130
- const longFunctions = this.findLongFunctions(content, ext, relativePath);
131
- findings.push(...longFunctions);
132
- // Check for potential issues
133
- const codeSmells = this.detectCodeSmells(content, ext, relativePath);
134
- findings.push(...codeSmells);
230
+ // Check for potential issues (TODOs, debug statements)
231
+ if (this.config.reportTodos || this.config.reportDebugStatements) {
232
+ const codeSmells = this.detectCodeSmells(content, ext, relativePath);
233
+ findings.push(...codeSmells);
234
+ }
135
235
  }
136
236
  catch {
137
237
  // Skip files we can't read
138
238
  }
139
239
  return findings;
140
240
  }
241
+ generateComplexitySuggestion(func) {
242
+ const suggestions = [];
243
+ if (func.complexity >= 30) {
244
+ suggestions.push(`"${func.name}" is very complex and should be refactored urgently.`);
245
+ suggestions.push(`Consider breaking it into 3-5 smaller functions.`);
246
+ }
247
+ else if (func.complexity >= 25) {
248
+ suggestions.push(`Extract conditional branches from "${func.name}" into separate functions.`);
249
+ }
250
+ else {
251
+ suggestions.push(`Simplify "${func.name}" using early returns or by extracting helper functions.`);
252
+ }
253
+ suggestions.push(`Look for: nested if/else chains, long switch statements, or repeated patterns.`);
254
+ return suggestions.join(' ');
255
+ }
256
+ analyzeFunctions(content, ext, filePath) {
257
+ const functions = [];
258
+ const lines = content.split('\n');
259
+ // Function detection patterns for different languages
260
+ const functionPatterns = {
261
+ '.js': [
262
+ /function\s+(\w+)\s*\(/g,
263
+ /(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s+)?function/g,
264
+ /(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s+)?\([^)]*\)\s*=>/g,
265
+ /(\w+)\s*:\s*(?:async\s+)?function/g,
266
+ ],
267
+ '.ts': [
268
+ /function\s+(\w+)\s*[<(]/g,
269
+ /(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s+)?function/g,
270
+ /(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s+)?\([^)]*\)(?:\s*:\s*[^=]+)?\s*=>/g,
271
+ /(?:public|private|protected)?\s*(?:async\s+)?(\w+)\s*\([^)]*\)(?:\s*:\s*[^{]+)?\s*\{/g,
272
+ ],
273
+ '.py': [
274
+ /def\s+(\w+)\s*\(/g,
275
+ /async\s+def\s+(\w+)\s*\(/g,
276
+ ]
277
+ };
278
+ const patterns = functionPatterns[ext] || functionPatterns['.js'] || [];
279
+ for (const pattern of patterns) {
280
+ let match;
281
+ while ((match = pattern.exec(content)) !== null) {
282
+ const funcName = match[1];
283
+ if (!funcName || funcName === 'function')
284
+ continue;
285
+ const startIndex = match.index;
286
+ const startLine = content.slice(0, startIndex).split('\n').length;
287
+ // Get function body
288
+ const funcBody = this.extractFunctionBody(content.slice(startIndex), ext);
289
+ const funcLength = funcBody.split('\n').length;
290
+ const funcComplexity = this.calculateFunctionComplexity(funcBody);
291
+ functions.push({
292
+ name: funcName,
293
+ line: startLine,
294
+ length: funcLength,
295
+ complexity: funcComplexity
296
+ });
297
+ }
298
+ pattern.lastIndex = 0;
299
+ }
300
+ return functions;
301
+ }
302
+ extractFunctionBody(content, ext) {
303
+ if (['.py', '.rb'].includes(ext)) {
304
+ // Indentation-based
305
+ const lines = content.split('\n');
306
+ if (lines.length < 2)
307
+ return content;
308
+ const firstLine = lines[1] || lines[0];
309
+ const baseIndent = (firstLine.match(/^\s*/)?.[0].length || 0);
310
+ let endLine = 1;
311
+ for (let i = 2; i < lines.length; i++) {
312
+ const line = lines[i];
313
+ if (!line.trim())
314
+ continue;
315
+ const indent = line.match(/^\s*/)?.[0].length || 0;
316
+ if (indent < baseIndent)
317
+ break;
318
+ endLine = i;
319
+ }
320
+ return lines.slice(0, endLine + 1).join('\n');
321
+ }
322
+ // Brace-based
323
+ let braceCount = 0;
324
+ let started = false;
325
+ let endIndex = content.length;
326
+ for (let i = 0; i < content.length; i++) {
327
+ const char = content[i];
328
+ if (char === '{') {
329
+ braceCount++;
330
+ started = true;
331
+ }
332
+ else if (char === '}') {
333
+ braceCount--;
334
+ if (started && braceCount === 0) {
335
+ endIndex = i + 1;
336
+ break;
337
+ }
338
+ }
339
+ }
340
+ return content.slice(0, endIndex);
341
+ }
342
+ calculateFunctionComplexity(funcBody) {
343
+ let complexity = 1;
344
+ const patterns = [
345
+ /\bif\s*\(/g,
346
+ /\belse\s+if\s*\(/g,
347
+ /\bwhile\s*\(/g,
348
+ /\bfor\s*\(/g,
349
+ /\bfor\s+\w+\s+in\b/g, // Python for-in
350
+ /\bforeach\s*\(/gi,
351
+ /\bcase\s+[^:]+:/g,
352
+ /\bcatch\s*\(/g,
353
+ /\&\&/g,
354
+ /\|\|/g,
355
+ /\?\s*[^:]+\s*:/g, // Ternary
356
+ /\?\./g, // Optional chaining (reduce count)
357
+ ];
358
+ for (const pattern of patterns) {
359
+ const matches = funcBody.match(pattern);
360
+ if (matches) {
361
+ // Optional chaining adds less complexity
362
+ if (pattern.source === '\\?\\.') {
363
+ complexity += Math.floor(matches.length / 3);
364
+ }
365
+ else {
366
+ complexity += matches.length;
367
+ }
368
+ }
369
+ }
370
+ return complexity;
371
+ }
141
372
  calculateLineMetrics(lines, ext) {
142
373
  let codeLines = 0;
143
374
  let commentLines = 0;
@@ -150,7 +381,6 @@ export class ComplexityScanner {
150
381
  blankLines++;
151
382
  continue;
152
383
  }
153
- // Simple block comment detection
154
384
  if (commentPatterns.blockStart && trimmed.includes(commentPatterns.blockStart)) {
155
385
  inBlockComment = true;
156
386
  }
@@ -161,25 +391,13 @@ export class ComplexityScanner {
161
391
  }
162
392
  continue;
163
393
  }
164
- // Line comment
165
394
  if (commentPatterns.line && trimmed.startsWith(commentPatterns.line)) {
166
395
  commentLines++;
167
396
  continue;
168
397
  }
169
398
  codeLines++;
170
399
  }
171
- return {
172
- path: '',
173
- lines: lines.length,
174
- codeLines,
175
- commentLines,
176
- blankLines,
177
- complexity: 0,
178
- functions: 0,
179
- avgFunctionLength: 0,
180
- maxFunctionLength: 0,
181
- longFunctions: []
182
- };
400
+ return { codeLines, commentLines, blankLines };
183
401
  }
184
402
  getCommentPatterns(ext) {
185
403
  const patterns = {
@@ -196,160 +414,76 @@ export class ComplexityScanner {
196
414
  };
197
415
  return patterns[ext] || { line: '//' };
198
416
  }
199
- estimateCyclomaticComplexity(content, ext) {
200
- // Simple estimation based on control flow keywords
201
- let complexity = 1; // Base complexity
202
- const patterns = [
203
- /\bif\b/g,
204
- /\belse\s+if\b/g,
205
- /\bwhile\b/g,
206
- /\bfor\b/g,
207
- /\bforeach\b/gi,
208
- /\bcase\b/g,
209
- /\bcatch\b/g,
210
- /\&\&/g,
211
- /\|\|/g,
212
- /\?\s*[^:]+\s*:/g // Ternary
213
- ];
214
- for (const pattern of patterns) {
215
- const matches = content.match(pattern);
216
- if (matches) {
217
- complexity += matches.length;
218
- }
219
- }
220
- return complexity;
221
- }
222
- findLongFunctions(content, ext, filePath) {
223
- const findings = [];
224
- // Simple regex-based function detection
225
- const functionPatterns = {
226
- '.js': [
227
- /function\s+(\w+)\s*\([^)]*\)\s*\{/g,
228
- /(\w+)\s*[:=]\s*(?:async\s+)?function\s*\([^)]*\)\s*\{/g,
229
- /(\w+)\s*[:=]\s*(?:async\s+)?\([^)]*\)\s*=>\s*\{/g
230
- ],
231
- '.ts': [
232
- /function\s+(\w+)\s*\([^)]*\)[^{]*\{/g,
233
- /(\w+)\s*[:=]\s*(?:async\s+)?function\s*\([^)]*\)[^{]*\{/g,
234
- /(\w+)\s*[:=]\s*(?:async\s+)?\([^)]*\)[^=]*=>\s*\{/g,
235
- /(?:public|private|protected)?\s*(?:async\s+)?(\w+)\s*\([^)]*\)[^{]*\{/g
236
- ],
237
- '.py': [
238
- /def\s+(\w+)\s*\([^)]*\)\s*(?:->.*)?:/g
239
- ]
240
- };
241
- const patterns = functionPatterns[ext] || functionPatterns['.js'];
242
- const lines = content.split('\n');
243
- for (const pattern of patterns) {
244
- let match;
245
- while ((match = pattern.exec(content)) !== null) {
246
- const startIndex = match.index;
247
- const startLine = content.slice(0, startIndex).split('\n').length;
248
- // Estimate function length by finding matching brace/indent
249
- const functionLength = this.estimateFunctionLength(content.slice(startIndex), ext);
250
- if (functionLength > this.maxFunctionLines) {
251
- findings.push(this.createFinding({
252
- file: filePath,
253
- line: startLine,
254
- title: `Function too long: ${match[1] || 'anonymous'}`,
255
- description: `This function is approximately ${functionLength} lines long (threshold: ${this.maxFunctionLines}).`,
256
- severity: functionLength > this.maxFunctionLines * 2 ? 'medium' : 'low',
257
- category: 'complexity',
258
- suggestion: 'Extract smaller helper functions. Each function should do one thing well.',
259
- effort: 'easy'
260
- }));
261
- }
262
- }
263
- pattern.lastIndex = 0; // Reset regex
264
- }
265
- return findings;
266
- }
267
- estimateFunctionLength(content, ext) {
268
- if (['.py', '.rb'].includes(ext)) {
269
- // Indentation-based languages - count until dedent
270
- const lines = content.split('\n');
271
- if (lines.length < 2)
272
- return 1;
273
- const firstLine = lines[0];
274
- const baseIndent = firstLine.match(/^\s*/)?.[0].length || 0;
275
- let count = 1;
276
- for (let i = 1; i < lines.length; i++) {
277
- const line = lines[i];
278
- if (!line.trim()) {
279
- count++;
280
- continue;
281
- }
282
- const indent = line.match(/^\s*/)?.[0].length || 0;
283
- if (indent <= baseIndent && line.trim())
284
- break;
285
- count++;
286
- }
287
- return count;
288
- }
289
- // Brace-based languages
290
- let braceCount = 0;
291
- let started = false;
292
- let lineCount = 0;
293
- for (const char of content) {
294
- if (char === '{') {
295
- braceCount++;
296
- started = true;
297
- }
298
- else if (char === '}') {
299
- braceCount--;
300
- if (started && braceCount === 0)
301
- break;
302
- }
303
- else if (char === '\n') {
304
- lineCount++;
305
- }
306
- }
307
- return lineCount;
308
- }
309
417
  detectCodeSmells(content, ext, filePath) {
310
418
  const findings = [];
311
419
  const lines = content.split('\n');
312
- // TODO comments
313
- const todoPattern = /\b(TODO|FIXME|HACK|XXX|BUG)\b/gi;
314
- lines.forEach((line, index) => {
315
- const match = line.match(todoPattern);
316
- if (match) {
420
+ // TODO/FIXME comments - consolidate into one finding
421
+ if (this.config.reportTodos) {
422
+ const todoPattern = /\b(TODO|FIXME|HACK|XXX|BUG)\b/gi;
423
+ const todoLines = [];
424
+ lines.forEach((line, index) => {
425
+ if (todoPattern.test(line)) {
426
+ todoLines.push(index + 1);
427
+ }
428
+ todoPattern.lastIndex = 0;
429
+ });
430
+ if (todoLines.length > 0) {
317
431
  findings.push(this.createFinding({
318
432
  file: filePath,
319
- line: index + 1,
320
- title: `${match[0].toUpperCase()} comment found`,
321
- description: `Code contains a ${match[0].toUpperCase()} marker: "${line.trim().slice(0, 80)}..."`,
433
+ line: todoLines[0],
434
+ title: todoLines.length === 1
435
+ ? 'TODO comment found'
436
+ : `${todoLines.length} TODO/FIXME comments`,
437
+ description: todoLines.length === 1
438
+ ? `Line ${todoLines[0]}: "${lines[todoLines[0] - 1].trim().slice(0, 80)}"`
439
+ : `Found on lines: ${todoLines.slice(0, 5).join(', ')}${todoLines.length > 5 ? ` (+${todoLines.length - 5} more)` : ''}`,
322
440
  severity: 'info',
323
441
  category: 'quality',
324
- suggestion: 'Address or create a tracking issue for this TODO item.',
325
- effort: 'easy'
442
+ suggestion: 'Track in issue tracker or address before merging.',
443
+ effort: 'trivial'
326
444
  }));
327
445
  }
328
- });
329
- // Console.log / print statements (potential debug code)
330
- const debugPatterns = {
331
- '.js': /console\.(log|debug|info)\(/g,
332
- '.ts': /console\.(log|debug|info)\(/g,
333
- '.py': /print\s*\(/g,
334
- '.php': /var_dump\(|print_r\(/g
335
- };
336
- const debugPattern = debugPatterns[ext];
337
- if (debugPattern) {
338
- lines.forEach((line, index) => {
339
- if (debugPattern.test(line) && !line.trim().startsWith('//') && !line.trim().startsWith('#')) {
446
+ }
447
+ // Debug statements - consolidate into one finding
448
+ if (this.config.reportDebugStatements) {
449
+ const debugPatterns = {
450
+ '.js': /console\.(log|debug)\(/,
451
+ '.jsx': /console\.(log|debug)\(/,
452
+ '.ts': /console\.(log|debug)\(/,
453
+ '.tsx': /console\.(log|debug)\(/,
454
+ '.py': /\bprint\s*\(/,
455
+ '.php': /var_dump\(|print_r\(/
456
+ };
457
+ const debugPattern = debugPatterns[ext];
458
+ if (debugPattern) {
459
+ let debugCount = 0;
460
+ let firstDebugLine = 0;
461
+ lines.forEach((line, index) => {
462
+ const trimmed = line.trim();
463
+ if (trimmed.startsWith('//') || trimmed.startsWith('#') || trimmed.startsWith('*')) {
464
+ return;
465
+ }
466
+ if (debugPattern.test(line)) {
467
+ debugCount++;
468
+ if (firstDebugLine === 0)
469
+ firstDebugLine = index + 1;
470
+ }
471
+ });
472
+ if (debugCount > 0) {
340
473
  findings.push(this.createFinding({
341
474
  file: filePath,
342
- line: index + 1,
343
- title: 'Debug statement detected',
344
- description: 'Debug/logging statement found that may need to be removed before production.',
475
+ line: firstDebugLine,
476
+ title: debugCount === 1
477
+ ? 'Debug statement found'
478
+ : `${debugCount} debug statements`,
479
+ description: `Found ${debugCount} console.log/print statement${debugCount > 1 ? 's' : ''}.`,
345
480
  severity: 'info',
346
481
  category: 'quality',
347
- suggestion: 'Remove or replace with proper logging framework.',
482
+ suggestion: 'Remove or replace with proper logging before production.',
348
483
  effort: 'trivial'
349
484
  }));
350
- debugPattern.lastIndex = 0;
351
485
  }
352
- });
486
+ }
353
487
  }
354
488
  return findings;
355
489
  }
@@ -1 +1 @@
1
- {"version":3,"file":"complexity.js","sourceRoot":"","sources":["../../src/scanners/complexity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"complexity.js","sourceRoot":"","sources":["../../src/scanners/complexity.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@darrenjcoxon/codeguard",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "Scan code for security issues, get FIXES.md for AI agents to fix them",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",