@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 +9 -12
- package/dist/cli.js +134 -5
- package/dist/cli.js.map +1 -1
- package/dist/scanners/complexity.d.ts +27 -8
- package/dist/scanners/complexity.d.ts.map +1 -1
- package/dist/scanners/complexity.js +317 -183
- package/dist/scanners/complexity.js.map +1 -1
- package/package.json +1 -1
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
|
-
|
|
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
|
-
|
|
25
|
-
1.
|
|
26
|
-
2.
|
|
27
|
-
3.
|
|
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
|
-
##
|
|
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.
|
|
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
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
*
|
|
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
|
|
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
|
|
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
|
-
*
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
109
|
-
description: `This file has ${metrics.codeLines} lines of code (
|
|
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:
|
|
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
|
-
//
|
|
117
|
-
const
|
|
118
|
-
|
|
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
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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:
|
|
126
|
-
effort: '
|
|
226
|
+
suggestion: `Extract logical sections of "${func.name}" into helper functions with clear names.`,
|
|
227
|
+
effort: 'easy'
|
|
127
228
|
}));
|
|
128
229
|
}
|
|
129
|
-
//
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
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
|
-
|
|
314
|
-
|
|
315
|
-
const
|
|
316
|
-
|
|
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:
|
|
320
|
-
title:
|
|
321
|
-
|
|
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: '
|
|
325
|
-
effort: '
|
|
442
|
+
suggestion: 'Track in issue tracker or address before merging.',
|
|
443
|
+
effort: 'trivial'
|
|
326
444
|
}));
|
|
327
445
|
}
|
|
328
|
-
}
|
|
329
|
-
//
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
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:
|
|
343
|
-
title:
|
|
344
|
-
|
|
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
|
|
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":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAc,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAC/C,OAAO,EAQL,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAErB,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAelC,MAAM,OAAO,iBAAiB;IAC5B,IAAI,GAAG,YAAY,CAAC;IACpB,UAAU,GAAsB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAE1D,aAAa;IACL,YAAY,GAAG,GAAG,CAAC;IACnB,gBAAgB,GAAG,EAAE,CAAC;IACtB,uBAAuB,GAAG,EAAE,CAAC;IAC7B,sBAAsB,GAAG,EAAE,CAAC;IAEpC,uBAAuB;IACf,mBAAmB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAE1G,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC,CAAC,sCAAsC;IACrD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAkB,EAAE,MAAsB;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAc,EAAE,CAAC;YAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC/D,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;YACjC,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI,CAAC,IAAI;gBAClB,OAAO,EAAE,IAAI;gBACb,QAAQ;gBACR,OAAO,EAAE;oBACP,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBAChC,YAAY,EAAE,KAAK,CAAC,MAAM;iBAC3B;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,IAAI,CAAC,IAAI;gBAClB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7D,QAAQ,EAAE,EAAE;gBACZ,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE;aAC9C,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,GAAW,EAAE,MAAkB;QAClD,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,eAAe,GAAG;YACtB,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;YACjD,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO;YACnD,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;SAC1B,CAAC;QAEF,MAAM,IAAI,GAAG,CAAC,UAAkB,EAAE,EAAE;YAClC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;gBAExC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;oBAEzC,yBAAyB;oBACzB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;wBAC1E,SAAS;oBACX,CAAC;oBAED,IAAI,CAAC;wBACH,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;wBAEhC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;4BACvB,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACjB,CAAC;6BAAM,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;4BACzB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;4BACzC,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gCAC3C,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;4BACvB,CAAC;wBACH,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,2BAA2B;oBAC7B,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,iCAAiC;YACnC,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,QAAgB;QAC1D,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAElD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;YAE5C,qBAAqB;YACrB,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAEtD,gBAAgB;YAChB,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC1C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;oBAC/B,IAAI,EAAE,YAAY;oBAClB,KAAK,EAAE,6BAA6B;oBACpC,WAAW,EAAE,iBAAiB,OAAO,CAAC,SAAS,8BAA8B,IAAI,CAAC,YAAY,gDAAgD;oBAC9I,QAAQ,EAAE,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;oBACtE,QAAQ,EAAE,YAAY;oBACtB,UAAU,EAAE,4FAA4F;oBACxG,MAAM,EAAE,QAAQ;iBACjB,CAAC,CAAC,CAAC;YACN,CAAC;YAED,uBAAuB;YACvB,MAAM,UAAU,GAAG,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAEnE,IAAI,UAAU,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAC9C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;oBAC/B,IAAI,EAAE,YAAY;oBAClB,KAAK,EAAE,4BAA4B;oBACnC,WAAW,EAAE,oCAAoC,UAAU,gBAAgB,IAAI,CAAC,uBAAuB,4DAA4D;oBACnK,QAAQ,EAAE,UAAU,GAAG,IAAI,CAAC,uBAAuB,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;oBAC3E,QAAQ,EAAE,YAAY;oBACtB,UAAU,EAAE,6FAA6F;oBACzG,MAAM,EAAE,QAAQ;iBACjB,CAAC,CAAC,CAAC;YACN,CAAC;YAED,sBAAsB;YACtB,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;YACzE,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;YAEhC,6BAA6B;YAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;YACrE,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QAE/B,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,oBAAoB,CAAC,KAAe,EAAE,GAAW;QACvD,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,cAAc,GAAG,KAAK,CAAC;QAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAE5B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,UAAU,EAAE,CAAC;gBACb,SAAS;YACX,CAAC;YAED,iCAAiC;YACjC,IAAI,eAAe,CAAC,UAAU,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/E,cAAc,GAAG,IAAI,CAAC;YACxB,CAAC;YACD,IAAI,cAAc,EAAE,CAAC;gBACnB,YAAY,EAAE,CAAC;gBACf,IAAI,eAAe,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC3E,cAAc,GAAG,KAAK,CAAC;gBACzB,CAAC;gBACD,SAAS;YACX,CAAC;YAED,eAAe;YACf,IAAI,eAAe,CAAC,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrE,YAAY,EAAE,CAAC;gBACf,SAAS;YACX,CAAC;YAED,SAAS,EAAE,CAAC;QACd,CAAC;QAED,OAAO;YACL,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,KAAK,CAAC,MAAM;YACnB,SAAS;YACT,YAAY;YACZ,UAAU;YACV,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,CAAC;YACZ,iBAAiB,EAAE,CAAC;YACpB,iBAAiB,EAAE,CAAC;YACpB,aAAa,EAAE,EAAE;SAClB,CAAC;IACJ,CAAC;IAEO,kBAAkB,CAAC,GAAW;QACpC,MAAM,QAAQ,GAA8E;YAC1F,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;YACvD,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;YACxD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;YACvD,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;YACxD,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE;YACxD,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE;YAC5D,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;YACxD,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;YACzD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;YACvD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;SACxD,CAAC;QACF,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACzC,CAAC;IAEO,4BAA4B,CAAC,OAAe,EAAE,GAAW;QAC/D,mDAAmD;QACnD,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,kBAAkB;QAEtC,MAAM,QAAQ,GAAG;YACf,SAAS;YACT,gBAAgB;YAChB,YAAY;YACZ,UAAU;YACV,eAAe;YACf,WAAW;YACX,YAAY;YACZ,OAAO;YACP,OAAO;YACP,iBAAiB,CAAE,UAAU;SAC9B,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,OAAO,EAAE,CAAC;gBACZ,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,iBAAiB,CAAC,OAAe,EAAE,GAAW,EAAE,QAAgB;QACtE,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,wCAAwC;QACxC,MAAM,gBAAgB,GAA6B;YACjD,KAAK,EAAE;gBACL,oCAAoC;gBACpC,wDAAwD;gBACxD,kDAAkD;aACnD;YACD,KAAK,EAAE;gBACL,sCAAsC;gBACtC,0DAA0D;gBAC1D,oDAAoD;gBACpD,wEAAwE;aACzE;YACD,KAAK,EAAE;gBACL,uCAAuC;aACxC;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAChD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;gBAElE,4DAA4D;gBAC5D,MAAM,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;gBAEnF,IAAI,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBAC3C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;wBAC/B,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,SAAS;wBACf,KAAK,EAAE,sBAAsB,KAAK,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE;wBACtD,WAAW,EAAE,kCAAkC,cAAc,2BAA2B,IAAI,CAAC,gBAAgB,IAAI;wBACjH,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;wBACvE,QAAQ,EAAE,YAAY;wBACtB,UAAU,EAAE,2EAA2E;wBACvF,MAAM,EAAE,MAAM;qBACf,CAAC,CAAC,CAAC;gBACN,CAAC;YACH,CAAC;YACD,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,cAAc;QACvC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,sBAAsB,CAAC,OAAe,EAAE,GAAW;QACzD,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,mDAAmD;YACnD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,CAAC,CAAC;YAE/B,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;YAE5D,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;oBACjB,KAAK,EAAE,CAAC;oBACR,SAAS;gBACX,CAAC;gBACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;gBACnD,IAAI,MAAM,IAAI,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE;oBAAE,MAAM;gBAC/C,KAAK,EAAE,CAAC;YACV,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,wBAAwB;QACxB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,UAAU,EAAE,CAAC;gBACb,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;iBAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACxB,UAAU,EAAE,CAAC;gBACb,IAAI,OAAO,IAAI,UAAU,KAAK,CAAC;oBAAE,MAAM;YACzC,CAAC;iBAAM,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACzB,SAAS,EAAE,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,gBAAgB,CAAC,OAAe,EAAE,GAAW,EAAE,QAAgB;QACrE,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,gBAAgB;QAChB,MAAM,WAAW,GAAG,iCAAiC,CAAC;QACtD,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACtC,IAAI,KAAK,EAAE,CAAC;gBACV,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;oBAC/B,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,KAAK,GAAG,CAAC;oBACf,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,gBAAgB;oBAChD,WAAW,EAAE,mBAAmB,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,aAAa,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM;oBACjG,QAAQ,EAAE,MAAM;oBAChB,QAAQ,EAAE,SAAS;oBACnB,UAAU,EAAE,wDAAwD;oBACpE,MAAM,EAAE,MAAM;iBACf,CAAC,CAAC,CAAC;YACN,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,wDAAwD;QACxD,MAAM,aAAa,GAA2B;YAC5C,KAAK,EAAE,8BAA8B;YACrC,KAAK,EAAE,8BAA8B;YACrC,KAAK,EAAE,aAAa;YACpB,MAAM,EAAE,uBAAuB;SAChC,CAAC;QAEF,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,YAAY,EAAE,CAAC;YACjB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC5B,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC7F,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;wBAC/B,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,KAAK,GAAG,CAAC;wBACf,KAAK,EAAE,0BAA0B;wBACjC,WAAW,EAAE,8EAA8E;wBAC3F,QAAQ,EAAE,MAAM;wBAChB,QAAQ,EAAE,SAAS;wBACnB,UAAU,EAAE,kDAAkD;wBAC9D,MAAM,EAAE,SAAS;qBAClB,CAAC,CAAC,CAAC;oBACJ,YAAY,CAAC,SAAS,GAAG,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,aAAa,CAAC,MASrB;QACC,MAAM,OAAO,GAAY;YACvB,EAAE,EAAE,cAAc,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;YACjE,MAAM,EAAE,IAAI,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,YAAY,EAAE,KAAK;YACnB,WAAW,EAAE,KAAK;YAClB,UAAU,EAAE,QAAQ;YACpB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,WAAW,EAAE,EAAE;SAChB,CAAC;QAEF,OAAO,CAAC,WAAW,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACnD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAED,eAAe,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"complexity.js","sourceRoot":"","sources":["../../src/scanners/complexity.ts"],"names":[],"mappings":"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"}
|