codeslick-cli 1.0.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 +458 -0
- package/__tests__/cli-reporter.test.ts +86 -0
- package/__tests__/config-loader.test.ts +247 -0
- package/__tests__/local-scanner.test.ts +245 -0
- package/bin/codeslick.cjs +153 -0
- package/dist/packages/cli/src/commands/auth.d.ts +36 -0
- package/dist/packages/cli/src/commands/auth.d.ts.map +1 -0
- package/dist/packages/cli/src/commands/auth.js +226 -0
- package/dist/packages/cli/src/commands/auth.js.map +1 -0
- package/dist/packages/cli/src/commands/config.d.ts +37 -0
- package/dist/packages/cli/src/commands/config.d.ts.map +1 -0
- package/dist/packages/cli/src/commands/config.js +196 -0
- package/dist/packages/cli/src/commands/config.js.map +1 -0
- package/dist/packages/cli/src/commands/init.d.ts +32 -0
- package/dist/packages/cli/src/commands/init.d.ts.map +1 -0
- package/dist/packages/cli/src/commands/init.js +171 -0
- package/dist/packages/cli/src/commands/init.js.map +1 -0
- package/dist/packages/cli/src/commands/scan.d.ts +40 -0
- package/dist/packages/cli/src/commands/scan.d.ts.map +1 -0
- package/dist/packages/cli/src/commands/scan.js +204 -0
- package/dist/packages/cli/src/commands/scan.js.map +1 -0
- package/dist/packages/cli/src/config/config-loader.d.ts +67 -0
- package/dist/packages/cli/src/config/config-loader.d.ts.map +1 -0
- package/dist/packages/cli/src/config/config-loader.js +146 -0
- package/dist/packages/cli/src/config/config-loader.js.map +1 -0
- package/dist/packages/cli/src/reporters/cli-reporter.d.ts +69 -0
- package/dist/packages/cli/src/reporters/cli-reporter.d.ts.map +1 -0
- package/dist/packages/cli/src/reporters/cli-reporter.js +244 -0
- package/dist/packages/cli/src/reporters/cli-reporter.js.map +1 -0
- package/dist/packages/cli/src/scanner/local-scanner.d.ts +92 -0
- package/dist/packages/cli/src/scanner/local-scanner.d.ts.map +1 -0
- package/dist/packages/cli/src/scanner/local-scanner.js +221 -0
- package/dist/packages/cli/src/scanner/local-scanner.js.map +1 -0
- package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.d.ts +88 -0
- package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.d.ts.map +1 -0
- package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.js +371 -0
- package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.js.map +1 -0
- package/dist/src/lib/analyzers/helpers/jsx-helpers.d.ts +63 -0
- package/dist/src/lib/analyzers/helpers/jsx-helpers.d.ts.map +1 -0
- package/dist/src/lib/analyzers/helpers/jsx-helpers.js +95 -0
- package/dist/src/lib/analyzers/helpers/jsx-helpers.js.map +1 -0
- package/dist/src/lib/analyzers/helpers/variable-tracker.d.ts +59 -0
- package/dist/src/lib/analyzers/helpers/variable-tracker.d.ts.map +1 -0
- package/dist/src/lib/analyzers/helpers/variable-tracker.js +231 -0
- package/dist/src/lib/analyzers/helpers/variable-tracker.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/access-control.d.ts +20 -0
- package/dist/src/lib/analyzers/java/security-checks/access-control.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/access-control.js +129 -0
- package/dist/src/lib/analyzers/java/security-checks/access-control.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.d.ts +25 -0
- package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.js +221 -0
- package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/code-quality.d.ts +18 -0
- package/dist/src/lib/analyzers/java/security-checks/code-quality.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/code-quality.js +84 -0
- package/dist/src/lib/analyzers/java/security-checks/code-quality.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/crypto-validation.d.ts +18 -0
- package/dist/src/lib/analyzers/java/security-checks/crypto-validation.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/crypto-validation.js +161 -0
- package/dist/src/lib/analyzers/java/security-checks/crypto-validation.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.d.ts +20 -0
- package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.js +163 -0
- package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.d.ts +24 -0
- package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.js +178 -0
- package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/exception-handling.d.ts +25 -0
- package/dist/src/lib/analyzers/java/security-checks/exception-handling.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/exception-handling.js +179 -0
- package/dist/src/lib/analyzers/java/security-checks/exception-handling.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/file-operations.d.ts +17 -0
- package/dist/src/lib/analyzers/java/security-checks/file-operations.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/file-operations.js +67 -0
- package/dist/src/lib/analyzers/java/security-checks/file-operations.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/framework-security.d.ts +25 -0
- package/dist/src/lib/analyzers/java/security-checks/framework-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/framework-security.js +396 -0
- package/dist/src/lib/analyzers/java/security-checks/framework-security.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.d.ts +20 -0
- package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.js +123 -0
- package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/injection-attacks.d.ts +23 -0
- package/dist/src/lib/analyzers/java/security-checks/injection-attacks.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/injection-attacks.js +201 -0
- package/dist/src/lib/analyzers/java/security-checks/injection-attacks.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/insecure-design.d.ts +20 -0
- package/dist/src/lib/analyzers/java/security-checks/insecure-design.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/insecure-design.js +121 -0
- package/dist/src/lib/analyzers/java/security-checks/insecure-design.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/logging-failures.d.ts +20 -0
- package/dist/src/lib/analyzers/java/security-checks/logging-failures.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/logging-failures.js +89 -0
- package/dist/src/lib/analyzers/java/security-checks/logging-failures.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.d.ts +26 -0
- package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.js +309 -0
- package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.d.ts +18 -0
- package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.js +114 -0
- package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.js.map +1 -0
- package/dist/src/lib/analyzers/java/utils/createVulnerability.d.ts +58 -0
- package/dist/src/lib/analyzers/java/utils/createVulnerability.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/utils/createVulnerability.js +71 -0
- package/dist/src/lib/analyzers/java/utils/createVulnerability.js.map +1 -0
- package/dist/src/lib/analyzers/java-analyzer.d.ts +209 -0
- package/dist/src/lib/analyzers/java-analyzer.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java-analyzer.js +1720 -0
- package/dist/src/lib/analyzers/java-analyzer.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.d.ts +27 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.js +123 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.d.ts +44 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.js +224 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.d.ts +50 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.js +284 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.d.ts +27 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.js +86 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.d.ts +32 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.js +44 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/access-control.d.ts +22 -0
- package/dist/src/lib/analyzers/javascript/security-checks/access-control.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/access-control.js +168 -0
- package/dist/src/lib/analyzers/javascript/security-checks/access-control.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.d.ts +25 -0
- package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.js +232 -0
- package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.d.ts +27 -0
- package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.js +222 -0
- package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.d.ts +28 -0
- package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.js +176 -0
- package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.d.ts +23 -0
- package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.js +113 -0
- package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.d.ts +28 -0
- package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.js +227 -0
- package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.d.ts +32 -0
- package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.js +260 -0
- package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.d.ts +26 -0
- package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.js +164 -0
- package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.d.ts +26 -0
- package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.js +775 -0
- package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.d.ts +25 -0
- package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.js +168 -0
- package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/storage-security.d.ts +27 -0
- package/dist/src/lib/analyzers/javascript/security-checks/storage-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/storage-security.js +108 -0
- package/dist/src/lib/analyzers/javascript/security-checks/storage-security.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.d.ts +28 -0
- package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.js +143 -0
- package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.d.ts +53 -0
- package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.js +144 -0
- package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.d.ts +72 -0
- package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.js +314 -0
- package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/utils/createVulnerability.d.ts +58 -0
- package/dist/src/lib/analyzers/javascript/utils/createVulnerability.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/utils/createVulnerability.js +71 -0
- package/dist/src/lib/analyzers/javascript/utils/createVulnerability.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.d.ts +36 -0
- package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.js +70 -0
- package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.d.ts +29 -0
- package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.js +55 -0
- package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.js.map +1 -0
- package/dist/src/lib/analyzers/javascript-analyzer.d.ts +95 -0
- package/dist/src/lib/analyzers/javascript-analyzer.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript-analyzer.js +2141 -0
- package/dist/src/lib/analyzers/javascript-analyzer.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/access-control.d.ts +21 -0
- package/dist/src/lib/analyzers/python/security-checks/access-control.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/access-control.js +305 -0
- package/dist/src/lib/analyzers/python/security-checks/access-control.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.d.ts +25 -0
- package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.js +242 -0
- package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.d.ts +24 -0
- package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.js +207 -0
- package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/code-quality.d.ts +27 -0
- package/dist/src/lib/analyzers/python/security-checks/code-quality.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/code-quality.js +206 -0
- package/dist/src/lib/analyzers/python/security-checks/code-quality.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.d.ts +24 -0
- package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.js +113 -0
- package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/crypto-failures.d.ts +20 -0
- package/dist/src/lib/analyzers/python/security-checks/crypto-failures.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/crypto-failures.js +129 -0
- package/dist/src/lib/analyzers/python/security-checks/crypto-failures.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/data-integrity.d.ts +19 -0
- package/dist/src/lib/analyzers/python/security-checks/data-integrity.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/data-integrity.js +90 -0
- package/dist/src/lib/analyzers/python/security-checks/data-integrity.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/deserialization.d.ts +20 -0
- package/dist/src/lib/analyzers/python/security-checks/deserialization.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/deserialization.js +68 -0
- package/dist/src/lib/analyzers/python/security-checks/deserialization.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/django-security.d.ts +25 -0
- package/dist/src/lib/analyzers/python/security-checks/django-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/django-security.js +180 -0
- package/dist/src/lib/analyzers/python/security-checks/django-security.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.d.ts +23 -0
- package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.js +127 -0
- package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/exception-handling.d.ts +23 -0
- package/dist/src/lib/analyzers/python/security-checks/exception-handling.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/exception-handling.js +120 -0
- package/dist/src/lib/analyzers/python/security-checks/exception-handling.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/flask-security.d.ts +24 -0
- package/dist/src/lib/analyzers/python/security-checks/flask-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/flask-security.js +143 -0
- package/dist/src/lib/analyzers/python/security-checks/flask-security.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/injection-attacks.d.ts +28 -0
- package/dist/src/lib/analyzers/python/security-checks/injection-attacks.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/injection-attacks.js +174 -0
- package/dist/src/lib/analyzers/python/security-checks/injection-attacks.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/insecure-design.d.ts +20 -0
- package/dist/src/lib/analyzers/python/security-checks/insecure-design.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/insecure-design.js +160 -0
- package/dist/src/lib/analyzers/python/security-checks/insecure-design.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/logging-failures.d.ts +20 -0
- package/dist/src/lib/analyzers/python/security-checks/logging-failures.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/logging-failures.js +121 -0
- package/dist/src/lib/analyzers/python/security-checks/logging-failures.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/nosql-injection.d.ts +26 -0
- package/dist/src/lib/analyzers/python/security-checks/nosql-injection.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/nosql-injection.js +248 -0
- package/dist/src/lib/analyzers/python/security-checks/nosql-injection.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.d.ts +26 -0
- package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.js +375 -0
- package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.d.ts +26 -0
- package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.js +160 -0
- package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/web-security.d.ts +23 -0
- package/dist/src/lib/analyzers/python/security-checks/web-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/web-security.js +117 -0
- package/dist/src/lib/analyzers/python/security-checks/web-security.js.map +1 -0
- package/dist/src/lib/analyzers/python/utils/createVulnerability.d.ts +58 -0
- package/dist/src/lib/analyzers/python/utils/createVulnerability.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/utils/createVulnerability.js +71 -0
- package/dist/src/lib/analyzers/python/utils/createVulnerability.js.map +1 -0
- package/dist/src/lib/analyzers/python-analyzer.d.ts +111 -0
- package/dist/src/lib/analyzers/python-analyzer.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python-analyzer.js +1600 -0
- package/dist/src/lib/analyzers/python-analyzer.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.d.ts +14 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.js +47 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.d.ts +13 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.js +36 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.d.ts +15 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.js +68 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.d.ts +15 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.js +68 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.d.ts +12 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.js +45 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.d.ts +14 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.js +47 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.d.ts +13 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.js +36 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys.d.ts +15 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys.js +32 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/credentials.d.ts +15 -0
- package/dist/src/lib/analyzers/secrets/patterns/credentials.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/credentials.js +68 -0
- package/dist/src/lib/analyzers/secrets/patterns/credentials.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/private-keys.d.ts +16 -0
- package/dist/src/lib/analyzers/secrets/patterns/private-keys.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/private-keys.js +79 -0
- package/dist/src/lib/analyzers/secrets/patterns/private-keys.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/tokens.d.ts +15 -0
- package/dist/src/lib/analyzers/secrets/patterns/tokens.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/tokens.js +58 -0
- package/dist/src/lib/analyzers/secrets/patterns/tokens.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/secrets-analyzer.d.ts +88 -0
- package/dist/src/lib/analyzers/secrets/secrets-analyzer.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/secrets-analyzer.js +162 -0
- package/dist/src/lib/analyzers/secrets/secrets-analyzer.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/validators/context-checker.d.ts +56 -0
- package/dist/src/lib/analyzers/secrets/validators/context-checker.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/validators/context-checker.js +199 -0
- package/dist/src/lib/analyzers/secrets/validators/context-checker.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/validators/entropy-checker.d.ts +56 -0
- package/dist/src/lib/analyzers/secrets/validators/entropy-checker.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/validators/entropy-checker.js +102 -0
- package/dist/src/lib/analyzers/secrets/validators/entropy-checker.js.map +1 -0
- package/dist/src/lib/analyzers/security-checks/es6-security.d.ts +38 -0
- package/dist/src/lib/analyzers/security-checks/es6-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/security-checks/es6-security.js +125 -0
- package/dist/src/lib/analyzers/security-checks/es6-security.js.map +1 -0
- package/dist/src/lib/analyzers/security-checks/python-async-security.d.ts +46 -0
- package/dist/src/lib/analyzers/security-checks/python-async-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/security-checks/python-async-security.js +92 -0
- package/dist/src/lib/analyzers/security-checks/python-async-security.js.map +1 -0
- package/dist/src/lib/analyzers/security-checks/react-security.d.ts +49 -0
- package/dist/src/lib/analyzers/security-checks/react-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/security-checks/react-security.js +125 -0
- package/dist/src/lib/analyzers/security-checks/react-security.js.map +1 -0
- package/dist/src/lib/analyzers/types.d.ts +92 -0
- package/dist/src/lib/analyzers/types.d.ts.map +1 -0
- package/dist/src/lib/analyzers/types.js +3 -0
- package/dist/src/lib/analyzers/types.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/access-control.d.ts +19 -0
- package/dist/src/lib/analyzers/typescript/security-checks/access-control.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/access-control.js +210 -0
- package/dist/src/lib/analyzers/typescript/security-checks/access-control.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.d.ts +25 -0
- package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.js +242 -0
- package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/authentication.d.ts +28 -0
- package/dist/src/lib/analyzers/typescript/security-checks/authentication.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/authentication.js +357 -0
- package/dist/src/lib/analyzers/typescript/security-checks/authentication.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-injection.d.ts +26 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-injection.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-injection.js +380 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-injection.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-quality.d.ts +23 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-quality.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-quality.js +109 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-quality.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.d.ts +21 -0
- package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.js +153 -0
- package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.d.ts +23 -0
- package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.js +146 -0
- package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.d.ts +23 -0
- package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.js +187 -0
- package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.d.ts +19 -0
- package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.js +97 -0
- package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.d.ts +29 -0
- package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.js +319 -0
- package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.d.ts +21 -0
- package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.js +121 -0
- package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.d.ts +27 -0
- package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.js +213 -0
- package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/type-security.d.ts +19 -0
- package/dist/src/lib/analyzers/typescript/security-checks/type-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/type-security.js +59 -0
- package/dist/src/lib/analyzers/typescript/security-checks/type-security.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/type-checker.d.ts +17 -0
- package/dist/src/lib/analyzers/typescript/type-checker.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/type-checker.js +515 -0
- package/dist/src/lib/analyzers/typescript/type-checker.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/utils/createVulnerability.d.ts +58 -0
- package/dist/src/lib/analyzers/typescript/utils/createVulnerability.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/utils/createVulnerability.js +71 -0
- package/dist/src/lib/analyzers/typescript/utils/createVulnerability.js.map +1 -0
- package/dist/src/lib/analyzers/typescript-analyzer.d.ts +116 -0
- package/dist/src/lib/analyzers/typescript-analyzer.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript-analyzer.js +1660 -0
- package/dist/src/lib/analyzers/typescript-analyzer.js.map +1 -0
- package/dist/src/lib/security/compliance-mapping.d.ts +29 -0
- package/dist/src/lib/security/compliance-mapping.d.ts.map +1 -0
- package/dist/src/lib/security/compliance-mapping.js +1342 -0
- package/dist/src/lib/security/compliance-mapping.js.map +1 -0
- package/dist/src/lib/security/severity-scoring.d.ts +47 -0
- package/dist/src/lib/security/severity-scoring.d.ts.map +1 -0
- package/dist/src/lib/security/severity-scoring.js +965 -0
- package/dist/src/lib/security/severity-scoring.js.map +1 -0
- package/dist/src/lib/standards/references.d.ts +16 -0
- package/dist/src/lib/standards/references.d.ts.map +1 -0
- package/dist/src/lib/standards/references.js +1161 -0
- package/dist/src/lib/standards/references.js.map +1 -0
- package/dist/src/lib/types/index.d.ts +167 -0
- package/dist/src/lib/types/index.d.ts.map +1 -0
- package/dist/src/lib/types/index.js +3 -0
- package/dist/src/lib/types/index.js.map +1 -0
- package/dist/src/lib/utils/code-cleaner.d.ts +59 -0
- package/dist/src/lib/utils/code-cleaner.d.ts.map +1 -0
- package/dist/src/lib/utils/code-cleaner.js +283 -0
- package/dist/src/lib/utils/code-cleaner.js.map +1 -0
- package/package.json +51 -0
- package/src/commands/auth.ts +308 -0
- package/src/commands/config.ts +226 -0
- package/src/commands/init.ts +202 -0
- package/src/commands/scan.ts +238 -0
- package/src/config/config-loader.ts +175 -0
- package/src/reporters/cli-reporter.ts +282 -0
- package/src/scanner/local-scanner.ts +250 -0
- package/tsconfig.json +24 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Code Detection Utilities
|
|
3
|
+
*
|
|
4
|
+
* Shared utilities for detecting AI-generated code patterns across all languages.
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - 8 code smell heuristic detectors (weighted scoring)
|
|
8
|
+
* - Confidence scoring system (HIGH/MEDIUM/LOW)
|
|
9
|
+
* - Language-agnostic pattern detection
|
|
10
|
+
*
|
|
11
|
+
* Phase 1.5, Week 5-7 (AI-Generated Code Detection)
|
|
12
|
+
* Created: January 8, 2026
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Detection result with confidence level and severity
|
|
16
|
+
*/
|
|
17
|
+
export interface DetectionResult {
|
|
18
|
+
hallucinationPatterns: number;
|
|
19
|
+
heuristicScore: number;
|
|
20
|
+
confidence: 'HIGH' | 'MEDIUM' | 'LOW';
|
|
21
|
+
severity: 'CRITICAL' | 'HIGH' | 'MEDIUM';
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Heuristic scores (weighted 0.0-1.0)
|
|
25
|
+
*/
|
|
26
|
+
export interface HeuristicScores {
|
|
27
|
+
overEngineeredErrors: number;
|
|
28
|
+
unnecessaryWrappers: number;
|
|
29
|
+
verboseComments: number;
|
|
30
|
+
mixedNaming: number;
|
|
31
|
+
redundantNullChecks: number;
|
|
32
|
+
unnecessaryAsync: number;
|
|
33
|
+
genericVariables: number;
|
|
34
|
+
inconsistentStrings: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 1. Detect over-engineered error handling
|
|
38
|
+
* Pattern: 4+ nested if/else conditions inside catch blocks
|
|
39
|
+
*/
|
|
40
|
+
export declare function detectOverEngineeredErrorHandling(lines: string[]): number;
|
|
41
|
+
/**
|
|
42
|
+
* 2. Detect unnecessary wrapper functions
|
|
43
|
+
* Pattern: Single-line function body that only calls another function
|
|
44
|
+
*/
|
|
45
|
+
export declare function detectUnnecessaryWrappers(lines: string[]): number;
|
|
46
|
+
/**
|
|
47
|
+
* 3. Detect verbose/redundant comments
|
|
48
|
+
* Pattern: Comment duplicates code logic exactly (>70% lexical overlap)
|
|
49
|
+
*/
|
|
50
|
+
export declare function detectVerboseComments(lines: string[]): number;
|
|
51
|
+
/**
|
|
52
|
+
* 4. Detect mixed naming conventions
|
|
53
|
+
* Pattern: camelCase + snake_case in same 10-line window
|
|
54
|
+
*/
|
|
55
|
+
export declare function detectMixedNamingConventions(lines: string[]): number;
|
|
56
|
+
/**
|
|
57
|
+
* 5. Detect redundant null checks
|
|
58
|
+
* Pattern: Multiple null/undefined checks on same variable within 5 lines
|
|
59
|
+
*/
|
|
60
|
+
export declare function detectRedundantNullChecks(lines: string[]): number;
|
|
61
|
+
/**
|
|
62
|
+
* 6. Detect unnecessary async functions
|
|
63
|
+
* Pattern: async function with no await keywords
|
|
64
|
+
*/
|
|
65
|
+
export declare function detectUnnecessaryAsync(lines: string[]): number;
|
|
66
|
+
/**
|
|
67
|
+
* 7. Detect generic variable name overuse
|
|
68
|
+
* Pattern: data, result, temp, value used >5 times in single function
|
|
69
|
+
*/
|
|
70
|
+
export declare function detectGenericVariableOveruse(lines: string[]): number;
|
|
71
|
+
/**
|
|
72
|
+
* 8. Detect inconsistent string concatenation
|
|
73
|
+
* Pattern: Mix of +, template literals, .concat() in same function
|
|
74
|
+
*/
|
|
75
|
+
export declare function detectInconsistentStringConcatenation(lines: string[]): number;
|
|
76
|
+
/**
|
|
77
|
+
* Calculate confidence score from hallucination count and heuristic scores
|
|
78
|
+
*/
|
|
79
|
+
export declare function calculateAICodeConfidence(hallucinationCount: number, heuristicScores: HeuristicScores): DetectionResult | null;
|
|
80
|
+
/**
|
|
81
|
+
* Check if filename indicates a test file
|
|
82
|
+
*/
|
|
83
|
+
export declare function isTestFile(filename?: string): boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Remove comments and string literals from a line to avoid false positives
|
|
86
|
+
*/
|
|
87
|
+
export declare function removeCommentsAndStrings(line: string, language: string): string;
|
|
88
|
+
//# sourceMappingURL=ai-code-detection-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-code-detection-utils.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/analyzers/helpers/ai-code-detection-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAgBD;;;GAGG;AACH,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAwCzE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAsCjE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAsC7D;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAqBpE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAwBjE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAgC9D;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAuCpE;AAED;;;GAGG;AACH,wBAAgB,qCAAqC,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAyC7E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,kBAAkB,EAAE,MAAM,EAC1B,eAAe,EAAE,eAAe,GAC/B,eAAe,GAAG,IAAI,CA4CxB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CASrD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAmB/E"}
|
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* AI Code Detection Utilities
|
|
4
|
+
*
|
|
5
|
+
* Shared utilities for detecting AI-generated code patterns across all languages.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - 8 code smell heuristic detectors (weighted scoring)
|
|
9
|
+
* - Confidence scoring system (HIGH/MEDIUM/LOW)
|
|
10
|
+
* - Language-agnostic pattern detection
|
|
11
|
+
*
|
|
12
|
+
* Phase 1.5, Week 5-7 (AI-Generated Code Detection)
|
|
13
|
+
* Created: January 8, 2026
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.detectOverEngineeredErrorHandling = detectOverEngineeredErrorHandling;
|
|
17
|
+
exports.detectUnnecessaryWrappers = detectUnnecessaryWrappers;
|
|
18
|
+
exports.detectVerboseComments = detectVerboseComments;
|
|
19
|
+
exports.detectMixedNamingConventions = detectMixedNamingConventions;
|
|
20
|
+
exports.detectRedundantNullChecks = detectRedundantNullChecks;
|
|
21
|
+
exports.detectUnnecessaryAsync = detectUnnecessaryAsync;
|
|
22
|
+
exports.detectGenericVariableOveruse = detectGenericVariableOveruse;
|
|
23
|
+
exports.detectInconsistentStringConcatenation = detectInconsistentStringConcatenation;
|
|
24
|
+
exports.calculateAICodeConfidence = calculateAICodeConfidence;
|
|
25
|
+
exports.isTestFile = isTestFile;
|
|
26
|
+
exports.removeCommentsAndStrings = removeCommentsAndStrings;
|
|
27
|
+
/**
|
|
28
|
+
* Heuristic weights (sum = 1.0)
|
|
29
|
+
*/
|
|
30
|
+
const HEURISTIC_WEIGHTS = {
|
|
31
|
+
overEngineeredErrors: 0.15,
|
|
32
|
+
unnecessaryWrappers: 0.12,
|
|
33
|
+
verboseComments: 0.10,
|
|
34
|
+
mixedNaming: 0.13,
|
|
35
|
+
redundantNullChecks: 0.15,
|
|
36
|
+
unnecessaryAsync: 0.12,
|
|
37
|
+
genericVariables: 0.10,
|
|
38
|
+
inconsistentStrings: 0.13,
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* 1. Detect over-engineered error handling
|
|
42
|
+
* Pattern: 4+ nested if/else conditions inside catch blocks
|
|
43
|
+
*/
|
|
44
|
+
function detectOverEngineeredErrorHandling(lines) {
|
|
45
|
+
let score = 0;
|
|
46
|
+
let inCatchBlock = false;
|
|
47
|
+
let catchBlockStart = -1;
|
|
48
|
+
let braceDepth = 0;
|
|
49
|
+
for (let i = 0; i < lines.length; i++) {
|
|
50
|
+
const line = lines[i].trim();
|
|
51
|
+
// Detect catch block start
|
|
52
|
+
if (line.match(/}\s*catch\s*\(/) || line.match(/except\s*:/)) {
|
|
53
|
+
inCatchBlock = true;
|
|
54
|
+
catchBlockStart = i;
|
|
55
|
+
braceDepth = 0;
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (inCatchBlock) {
|
|
59
|
+
// Track braces
|
|
60
|
+
braceDepth += (line.match(/{/g) || []).length;
|
|
61
|
+
braceDepth -= (line.match(/}/g) || []).length;
|
|
62
|
+
// Exit catch block
|
|
63
|
+
if (braceDepth < 0) {
|
|
64
|
+
inCatchBlock = false;
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
// Count nested if/else conditions
|
|
68
|
+
const catchBlock = lines.slice(catchBlockStart, i + 1).join('\n');
|
|
69
|
+
const ifElseCount = (catchBlock.match(/\b(if|else\s+if|elif)\s*\(/g) || []).length;
|
|
70
|
+
if (ifElseCount >= 4) {
|
|
71
|
+
score = 1.0; // Maximum score for this heuristic
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return score;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 2. Detect unnecessary wrapper functions
|
|
80
|
+
* Pattern: Single-line function body that only calls another function
|
|
81
|
+
*/
|
|
82
|
+
function detectUnnecessaryWrappers(lines) {
|
|
83
|
+
let wrapperCount = 0;
|
|
84
|
+
let totalFunctions = 0;
|
|
85
|
+
for (let i = 0; i < lines.length; i++) {
|
|
86
|
+
const line = lines[i].trim();
|
|
87
|
+
// Detect function declarations
|
|
88
|
+
const isFunctionDeclaration = line.match(/^function\s+\w+\s*\(/) || // JavaScript function
|
|
89
|
+
line.match(/^def\s+\w+\s*\(/) || // Python def
|
|
90
|
+
line.match(/^(public|private|protected)?\s*(static)?\s+\w+\s+\w+\s*\(/); // Java method
|
|
91
|
+
if (isFunctionDeclaration) {
|
|
92
|
+
totalFunctions++;
|
|
93
|
+
// Check if next non-empty line is a single return/call
|
|
94
|
+
let nextLineIndex = i + 1;
|
|
95
|
+
while (nextLineIndex < lines.length && lines[nextLineIndex].trim() === '') {
|
|
96
|
+
nextLineIndex++;
|
|
97
|
+
}
|
|
98
|
+
if (nextLineIndex < lines.length) {
|
|
99
|
+
const nextLine = lines[nextLineIndex].trim();
|
|
100
|
+
// Single-line wrapper patterns
|
|
101
|
+
const isSingleLineWrapper = nextLine.match(/^return\s+\w+\([^)]*\);?\s*$/) || // return func(x);
|
|
102
|
+
nextLine.match(/^return\s+\w+\.\w+\([^)]*\);?\s*$/); // return obj.func(x);
|
|
103
|
+
if (isSingleLineWrapper) {
|
|
104
|
+
wrapperCount++;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return totalFunctions > 0 ? Math.min(wrapperCount / totalFunctions, 1.0) : 0;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* 3. Detect verbose/redundant comments
|
|
113
|
+
* Pattern: Comment duplicates code logic exactly (>70% lexical overlap)
|
|
114
|
+
*/
|
|
115
|
+
function detectVerboseComments(lines) {
|
|
116
|
+
let redundantCount = 0;
|
|
117
|
+
let totalComments = 0;
|
|
118
|
+
for (let i = 0; i < lines.length - 1; i++) {
|
|
119
|
+
const line = lines[i].trim();
|
|
120
|
+
const nextLine = lines[i + 1].trim();
|
|
121
|
+
// Detect single-line comments
|
|
122
|
+
const isComment = line.startsWith('//') || // JavaScript/Java
|
|
123
|
+
line.startsWith('#'); // Python
|
|
124
|
+
if (isComment && nextLine.length > 5) {
|
|
125
|
+
totalComments++;
|
|
126
|
+
// Extract comment text
|
|
127
|
+
const commentText = line.replace(/^(\/\/|#)\s*/, '').toLowerCase();
|
|
128
|
+
const codeText = nextLine.replace(/[^a-z0-9\s]/gi, ' ').toLowerCase();
|
|
129
|
+
// Calculate lexical overlap
|
|
130
|
+
const commentWords = new Set(commentText.split(/\s+/).filter(w => w.length > 2));
|
|
131
|
+
const codeWords = new Set(codeText.split(/\s+/).filter(w => w.length > 2));
|
|
132
|
+
let overlapCount = 0;
|
|
133
|
+
commentWords.forEach(word => {
|
|
134
|
+
if (codeWords.has(word))
|
|
135
|
+
overlapCount++;
|
|
136
|
+
});
|
|
137
|
+
const overlapRatio = commentWords.size > 0 ? overlapCount / commentWords.size : 0;
|
|
138
|
+
if (overlapRatio >= 0.7) {
|
|
139
|
+
redundantCount++;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return totalComments > 0 ? Math.min(redundantCount / totalComments, 1.0) : 0;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* 4. Detect mixed naming conventions
|
|
147
|
+
* Pattern: camelCase + snake_case in same 10-line window
|
|
148
|
+
*/
|
|
149
|
+
function detectMixedNamingConventions(lines) {
|
|
150
|
+
let mixedWindows = 0;
|
|
151
|
+
const windowSize = 10;
|
|
152
|
+
for (let i = 0; i <= lines.length - windowSize; i++) {
|
|
153
|
+
const window = lines.slice(i, i + windowSize).join('\n');
|
|
154
|
+
// Extract variable/function names
|
|
155
|
+
const camelCaseMatches = window.match(/\b[a-z][a-zA-Z0-9]*[A-Z][a-zA-Z0-9]*/g) || [];
|
|
156
|
+
const snakeCaseMatches = window.match(/\b[a-z][a-z0-9]*_[a-z0-9_]*/g) || [];
|
|
157
|
+
// Both conventions present in same window (excluding constants)
|
|
158
|
+
const hasBothConventions = camelCaseMatches.length > 0 && snakeCaseMatches.length > 0;
|
|
159
|
+
if (hasBothConventions) {
|
|
160
|
+
mixedWindows++;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
const totalWindows = Math.max(lines.length - windowSize + 1, 1);
|
|
164
|
+
return Math.min(mixedWindows / totalWindows, 1.0);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* 5. Detect redundant null checks
|
|
168
|
+
* Pattern: Multiple null/undefined checks on same variable within 5 lines
|
|
169
|
+
*/
|
|
170
|
+
function detectRedundantNullChecks(lines) {
|
|
171
|
+
let redundantChecks = 0;
|
|
172
|
+
for (let i = 0; i < lines.length; i++) {
|
|
173
|
+
const window = lines.slice(i, Math.min(i + 5, lines.length)).join('\n');
|
|
174
|
+
// Extract all variable names in null checks
|
|
175
|
+
const nullCheckPattern = /(\w+)\s*(===|!==|==|!=)\s*(null|undefined)/g;
|
|
176
|
+
const matches = Array.from(window.matchAll(nullCheckPattern));
|
|
177
|
+
// Count checks per variable
|
|
178
|
+
const checksPerVariable = new Map();
|
|
179
|
+
matches.forEach(match => {
|
|
180
|
+
const varName = match[1];
|
|
181
|
+
checksPerVariable.set(varName, (checksPerVariable.get(varName) || 0) + 1);
|
|
182
|
+
});
|
|
183
|
+
// Detect variables with 2+ checks
|
|
184
|
+
checksPerVariable.forEach(count => {
|
|
185
|
+
if (count >= 2)
|
|
186
|
+
redundantChecks++;
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
return Math.min(redundantChecks / 10, 1.0); // Normalize (10 = very high)
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* 6. Detect unnecessary async functions
|
|
193
|
+
* Pattern: async function with no await keywords
|
|
194
|
+
*/
|
|
195
|
+
function detectUnnecessaryAsync(lines) {
|
|
196
|
+
let unnecessaryAsyncCount = 0;
|
|
197
|
+
let totalAsyncFunctions = 0;
|
|
198
|
+
let inAsyncFunction = false;
|
|
199
|
+
let functionStartLine = -1;
|
|
200
|
+
for (let i = 0; i < lines.length; i++) {
|
|
201
|
+
const line = lines[i].trim();
|
|
202
|
+
// Detect async function start
|
|
203
|
+
if (line.match(/^async\s+(function|def)/)) {
|
|
204
|
+
inAsyncFunction = true;
|
|
205
|
+
functionStartLine = i;
|
|
206
|
+
totalAsyncFunctions++;
|
|
207
|
+
}
|
|
208
|
+
// Detect function end (closing brace or dedent in Python)
|
|
209
|
+
if (inAsyncFunction && line.match(/^}/)) {
|
|
210
|
+
const functionBody = lines.slice(functionStartLine, i + 1).join('\n');
|
|
211
|
+
// Check if function contains any await keywords
|
|
212
|
+
const hasAwait = functionBody.match(/\bawait\b/);
|
|
213
|
+
if (!hasAwait) {
|
|
214
|
+
unnecessaryAsyncCount++;
|
|
215
|
+
}
|
|
216
|
+
inAsyncFunction = false;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return totalAsyncFunctions > 0 ? Math.min(unnecessaryAsyncCount / totalAsyncFunctions, 1.0) : 0;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* 7. Detect generic variable name overuse
|
|
223
|
+
* Pattern: data, result, temp, value used >5 times in single function
|
|
224
|
+
*/
|
|
225
|
+
function detectGenericVariableOveruse(lines) {
|
|
226
|
+
const genericNames = ['data', 'result', 'temp', 'value', 'item', 'obj', 'arr'];
|
|
227
|
+
let overuseCount = 0;
|
|
228
|
+
let inFunction = false;
|
|
229
|
+
let functionStart = -1;
|
|
230
|
+
for (let i = 0; i < lines.length; i++) {
|
|
231
|
+
const line = lines[i].trim();
|
|
232
|
+
// Detect function start
|
|
233
|
+
const isFunctionStart = line.match(/^function\s+\w+\s*\(/) ||
|
|
234
|
+
line.match(/^def\s+\w+\s*\(/) ||
|
|
235
|
+
line.match(/^(public|private|protected)?\s*(static)?\s+\w+\s+\w+\s*\(/);
|
|
236
|
+
if (isFunctionStart) {
|
|
237
|
+
inFunction = true;
|
|
238
|
+
functionStart = i;
|
|
239
|
+
}
|
|
240
|
+
// Detect function end
|
|
241
|
+
if (inFunction && line.match(/^}/)) {
|
|
242
|
+
const functionBody = lines.slice(functionStart, i + 1).join('\n');
|
|
243
|
+
// Count generic variable usage
|
|
244
|
+
genericNames.forEach(name => {
|
|
245
|
+
const pattern = new RegExp(`\\b${name}\\b`, 'g');
|
|
246
|
+
const matches = functionBody.match(pattern) || [];
|
|
247
|
+
if (matches.length > 5) {
|
|
248
|
+
overuseCount++;
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
inFunction = false;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return Math.min(overuseCount / 5, 1.0); // Normalize (5 = very high)
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* 8. Detect inconsistent string concatenation
|
|
258
|
+
* Pattern: Mix of +, template literals, .concat() in same function
|
|
259
|
+
*/
|
|
260
|
+
function detectInconsistentStringConcatenation(lines) {
|
|
261
|
+
let inconsistentFunctions = 0;
|
|
262
|
+
let totalFunctions = 0;
|
|
263
|
+
let inFunction = false;
|
|
264
|
+
let functionStart = -1;
|
|
265
|
+
for (let i = 0; i < lines.length; i++) {
|
|
266
|
+
const line = lines[i].trim();
|
|
267
|
+
// Detect function start
|
|
268
|
+
const isFunctionStart = line.match(/^function\s+\w+\s*\(/) ||
|
|
269
|
+
line.match(/^def\s+\w+\s*\(/);
|
|
270
|
+
if (isFunctionStart) {
|
|
271
|
+
inFunction = true;
|
|
272
|
+
functionStart = i;
|
|
273
|
+
totalFunctions++;
|
|
274
|
+
}
|
|
275
|
+
// Detect function end
|
|
276
|
+
if (inFunction && line.match(/^}/)) {
|
|
277
|
+
const functionBody = lines.slice(functionStart, i + 1).join('\n');
|
|
278
|
+
// Detect different concatenation methods
|
|
279
|
+
const hasPlus = functionBody.match(/['"`]\s*\+\s*['"`]/);
|
|
280
|
+
const hasTemplateLiteral = functionBody.match(/`[^`]*\${[^}]*}[^`]*`/);
|
|
281
|
+
const hasConcat = functionBody.match(/\.concat\s*\(/);
|
|
282
|
+
// Count methods used
|
|
283
|
+
const methodCount = [hasPlus, hasTemplateLiteral, hasConcat].filter(Boolean).length;
|
|
284
|
+
if (methodCount >= 2) {
|
|
285
|
+
inconsistentFunctions++;
|
|
286
|
+
}
|
|
287
|
+
inFunction = false;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
return totalFunctions > 0 ? Math.min(inconsistentFunctions / totalFunctions, 1.0) : 0;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Calculate confidence score from hallucination count and heuristic scores
|
|
294
|
+
*/
|
|
295
|
+
function calculateAICodeConfidence(hallucinationCount, heuristicScores) {
|
|
296
|
+
// Calculate weighted heuristic score
|
|
297
|
+
const heuristicScore = heuristicScores.overEngineeredErrors * HEURISTIC_WEIGHTS.overEngineeredErrors +
|
|
298
|
+
heuristicScores.unnecessaryWrappers * HEURISTIC_WEIGHTS.unnecessaryWrappers +
|
|
299
|
+
heuristicScores.verboseComments * HEURISTIC_WEIGHTS.verboseComments +
|
|
300
|
+
heuristicScores.mixedNaming * HEURISTIC_WEIGHTS.mixedNaming +
|
|
301
|
+
heuristicScores.redundantNullChecks * HEURISTIC_WEIGHTS.redundantNullChecks +
|
|
302
|
+
heuristicScores.unnecessaryAsync * HEURISTIC_WEIGHTS.unnecessaryAsync +
|
|
303
|
+
heuristicScores.genericVariables * HEURISTIC_WEIGHTS.genericVariables +
|
|
304
|
+
heuristicScores.inconsistentStrings * HEURISTIC_WEIGHTS.inconsistentStrings;
|
|
305
|
+
// HIGH confidence: 2+ hallucinations OR 1 hallucination + strong heuristics
|
|
306
|
+
if (hallucinationCount >= 2 || (hallucinationCount >= 1 && heuristicScore >= 0.5)) {
|
|
307
|
+
return {
|
|
308
|
+
hallucinationPatterns: hallucinationCount,
|
|
309
|
+
heuristicScore,
|
|
310
|
+
confidence: 'HIGH',
|
|
311
|
+
severity: 'CRITICAL',
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
// MEDIUM confidence: 1 hallucination OR strong heuristics
|
|
315
|
+
if (hallucinationCount === 1 || heuristicScore >= 0.4) {
|
|
316
|
+
return {
|
|
317
|
+
hallucinationPatterns: hallucinationCount,
|
|
318
|
+
heuristicScore,
|
|
319
|
+
confidence: 'MEDIUM',
|
|
320
|
+
severity: 'HIGH',
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
// LOW confidence: Weak heuristics only
|
|
324
|
+
if (heuristicScore >= 0.25) {
|
|
325
|
+
return {
|
|
326
|
+
hallucinationPatterns: 0,
|
|
327
|
+
heuristicScore,
|
|
328
|
+
confidence: 'LOW',
|
|
329
|
+
severity: 'MEDIUM',
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
// No detection
|
|
333
|
+
return null;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Check if filename indicates a test file
|
|
337
|
+
*/
|
|
338
|
+
function isTestFile(filename) {
|
|
339
|
+
if (!filename)
|
|
340
|
+
return false;
|
|
341
|
+
const basename = filename.split('/').pop() || '';
|
|
342
|
+
return filename.includes('.test.') ||
|
|
343
|
+
filename.includes('.spec.') ||
|
|
344
|
+
filename.includes('__tests__/') ||
|
|
345
|
+
filename.endsWith('Test.java') ||
|
|
346
|
+
filename.endsWith('_test.py') ||
|
|
347
|
+
basename.startsWith('test_'); // Python: test_*.py
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Remove comments and string literals from a line to avoid false positives
|
|
351
|
+
*/
|
|
352
|
+
function removeCommentsAndStrings(line, language) {
|
|
353
|
+
let cleaned = line;
|
|
354
|
+
if (language === 'javascript' || language === 'typescript' || language === 'java') {
|
|
355
|
+
// Remove string literals
|
|
356
|
+
cleaned = cleaned.replace(/"[^"]*"/g, '""');
|
|
357
|
+
cleaned = cleaned.replace(/'[^']*'/g, "''");
|
|
358
|
+
cleaned = cleaned.replace(/`[^`]*`/g, '``');
|
|
359
|
+
// Remove comments
|
|
360
|
+
cleaned = cleaned.replace(/\/\/.*$/, '');
|
|
361
|
+
}
|
|
362
|
+
else if (language === 'python') {
|
|
363
|
+
// Remove string literals
|
|
364
|
+
cleaned = cleaned.replace(/"[^"]*"/g, '""');
|
|
365
|
+
cleaned = cleaned.replace(/'[^']*'/g, "''");
|
|
366
|
+
// Remove comments
|
|
367
|
+
cleaned = cleaned.replace(/#.*$/, '');
|
|
368
|
+
}
|
|
369
|
+
return cleaned;
|
|
370
|
+
}
|
|
371
|
+
//# sourceMappingURL=ai-code-detection-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-code-detection-utils.js","sourceRoot":"","sources":["../../../../../../../src/lib/analyzers/helpers/ai-code-detection-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSX Helpers Module
|
|
3
|
+
*
|
|
4
|
+
* Pure functions for detecting and handling JSX syntax in JavaScript/TypeScript code.
|
|
5
|
+
* Helps prevent false positives in variable tracking and syntax validation.
|
|
6
|
+
*
|
|
7
|
+
* @module jsx-helpers
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Detects if code contains JSX syntax
|
|
11
|
+
*
|
|
12
|
+
* @param code - The source code to analyze
|
|
13
|
+
* @returns true if JSX is detected, false otherwise
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* detectJSX('return <div>Hello</div>') // true
|
|
17
|
+
* detectJSX('const x = 5') // false
|
|
18
|
+
*/
|
|
19
|
+
export declare function detectJSX(code: string): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Returns the set of JSX elements and attributes that should be excluded
|
|
22
|
+
* from variable tracking to prevent false positives.
|
|
23
|
+
*
|
|
24
|
+
* @returns Set of JSX element names and common attributes
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* const elements = getJSXElements();
|
|
28
|
+
* elements.has('div') // true
|
|
29
|
+
* elements.has('onClick') // true
|
|
30
|
+
*/
|
|
31
|
+
export declare function getJSXElements(): Set<string>;
|
|
32
|
+
/**
|
|
33
|
+
* Checks if a variable name is actually a JSX element or attribute
|
|
34
|
+
*
|
|
35
|
+
* @param varName - The variable name to check
|
|
36
|
+
* @param hasJSX - Whether JSX was detected in the code
|
|
37
|
+
* @returns true if the variable is a JSX element/attribute, false otherwise
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* isJSXElement('div', true) // true
|
|
41
|
+
* isJSXElement('myVar', true) // false
|
|
42
|
+
* isJSXElement('div', false) // false (no JSX in code)
|
|
43
|
+
*/
|
|
44
|
+
export declare function isJSXElement(varName: string, hasJSX: boolean): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Checks if a variable name appears as JSX text content (between > and </)
|
|
47
|
+
* This prevents false positives like:
|
|
48
|
+
* <a href={url}>Click here</a>
|
|
49
|
+
* where "here" would be flagged as an undeclared variable
|
|
50
|
+
*
|
|
51
|
+
* @param varName - The variable name to check
|
|
52
|
+
* @param line - The line number (1-indexed)
|
|
53
|
+
* @param lines - Array of all code lines
|
|
54
|
+
* @param hasJSX - Whether JSX was detected in the code
|
|
55
|
+
* @returns true if the variable is JSX text content, false otherwise
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* const lines = ['<a href={url}>Click here</a>'];
|
|
59
|
+
* isJSXTextContent('here', 1, lines, true) // true
|
|
60
|
+
* isJSXTextContent('url', 1, lines, true) // false
|
|
61
|
+
*/
|
|
62
|
+
export declare function isJSXTextContent(varName: string, line: number, lines: string[], hasJSX: boolean): boolean;
|
|
63
|
+
//# sourceMappingURL=jsx-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx-helpers.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/analyzers/helpers/jsx-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,IAAI,GAAG,CAAC,MAAM,CAAC,CAc5C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAGtE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,OAAO,GACd,OAAO,CAMT"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* JSX Helpers Module
|
|
4
|
+
*
|
|
5
|
+
* Pure functions for detecting and handling JSX syntax in JavaScript/TypeScript code.
|
|
6
|
+
* Helps prevent false positives in variable tracking and syntax validation.
|
|
7
|
+
*
|
|
8
|
+
* @module jsx-helpers
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.detectJSX = detectJSX;
|
|
12
|
+
exports.getJSXElements = getJSXElements;
|
|
13
|
+
exports.isJSXElement = isJSXElement;
|
|
14
|
+
exports.isJSXTextContent = isJSXTextContent;
|
|
15
|
+
/**
|
|
16
|
+
* Detects if code contains JSX syntax
|
|
17
|
+
*
|
|
18
|
+
* @param code - The source code to analyze
|
|
19
|
+
* @returns true if JSX is detected, false otherwise
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* detectJSX('return <div>Hello</div>') // true
|
|
23
|
+
* detectJSX('const x = 5') // false
|
|
24
|
+
*/
|
|
25
|
+
function detectJSX(code) {
|
|
26
|
+
return /<[a-zA-Z][a-zA-Z0-9]*[\s>]/.test(code);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Returns the set of JSX elements and attributes that should be excluded
|
|
30
|
+
* from variable tracking to prevent false positives.
|
|
31
|
+
*
|
|
32
|
+
* @returns Set of JSX element names and common attributes
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* const elements = getJSXElements();
|
|
36
|
+
* elements.has('div') // true
|
|
37
|
+
* elements.has('onClick') // true
|
|
38
|
+
*/
|
|
39
|
+
function getJSXElements() {
|
|
40
|
+
return new Set([
|
|
41
|
+
// HTML elements
|
|
42
|
+
'div', 'span', 'a', 'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',
|
|
43
|
+
'button', 'input', 'form', 'label', 'select', 'option', 'textarea',
|
|
44
|
+
'ul', 'ol', 'li', 'table', 'tr', 'td', 'th', 'thead', 'tbody',
|
|
45
|
+
'img', 'video', 'audio', 'canvas', 'svg', 'path',
|
|
46
|
+
'header', 'footer', 'nav', 'main', 'section', 'article', 'aside',
|
|
47
|
+
// Common JSX attributes that might be flagged
|
|
48
|
+
'href', 'src', 'alt', 'id', 'className', 'style', 'onClick',
|
|
49
|
+
'onChange', 'onSubmit', 'value', 'placeholder', 'type', 'name',
|
|
50
|
+
'disabled', 'checked', 'selected', 'required', 'readOnly',
|
|
51
|
+
'rel', 'target', 'title', 'aria', 'data'
|
|
52
|
+
]);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Checks if a variable name is actually a JSX element or attribute
|
|
56
|
+
*
|
|
57
|
+
* @param varName - The variable name to check
|
|
58
|
+
* @param hasJSX - Whether JSX was detected in the code
|
|
59
|
+
* @returns true if the variable is a JSX element/attribute, false otherwise
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* isJSXElement('div', true) // true
|
|
63
|
+
* isJSXElement('myVar', true) // false
|
|
64
|
+
* isJSXElement('div', false) // false (no JSX in code)
|
|
65
|
+
*/
|
|
66
|
+
function isJSXElement(varName, hasJSX) {
|
|
67
|
+
if (!hasJSX)
|
|
68
|
+
return false;
|
|
69
|
+
return getJSXElements().has(varName);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Checks if a variable name appears as JSX text content (between > and </)
|
|
73
|
+
* This prevents false positives like:
|
|
74
|
+
* <a href={url}>Click here</a>
|
|
75
|
+
* where "here" would be flagged as an undeclared variable
|
|
76
|
+
*
|
|
77
|
+
* @param varName - The variable name to check
|
|
78
|
+
* @param line - The line number (1-indexed)
|
|
79
|
+
* @param lines - Array of all code lines
|
|
80
|
+
* @param hasJSX - Whether JSX was detected in the code
|
|
81
|
+
* @returns true if the variable is JSX text content, false otherwise
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* const lines = ['<a href={url}>Click here</a>'];
|
|
85
|
+
* isJSXTextContent('here', 1, lines, true) // true
|
|
86
|
+
* isJSXTextContent('url', 1, lines, true) // false
|
|
87
|
+
*/
|
|
88
|
+
function isJSXTextContent(varName, line, lines, hasJSX) {
|
|
89
|
+
if (!hasJSX)
|
|
90
|
+
return false;
|
|
91
|
+
const lineText = lines[line - 1]; // Convert 1-indexed to 0-indexed
|
|
92
|
+
const jsxTextPattern = new RegExp(`>[^<]*\\b${varName}\\b[^<]*</`);
|
|
93
|
+
return jsxTextPattern.test(lineText);
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=jsx-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx-helpers.js","sourceRoot":"","sources":["../../../../../../../src/lib/analyzers/helpers/jsx-helpers.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAYH,8BAEC;AAaD,wCAcC;AAcD,oCAGC;AAmBD,4CAWC;AAtFD;;;;;;;;;GASG;AACH,SAAgB,SAAS,CAAC,IAAY;IACpC,OAAO,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,cAAc;IAC5B,OAAO,IAAI,GAAG,CAAC;QACb,gBAAgB;QAChB,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC3D,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU;QAClE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;QAC7D,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM;QAChD,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO;QAChE,8CAA8C;QAC9C,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS;QAC3D,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM;QAC9D,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;QACzD,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;KACzC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,YAAY,CAAC,OAAe,EAAE,MAAe;IAC3D,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,OAAO,cAAc,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,gBAAgB,CAC9B,OAAe,EACf,IAAY,EACZ,KAAe,EACf,MAAe;IAEf,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE1B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,iCAAiC;IACnE,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,YAAY,OAAO,YAAY,CAAC,CAAC;IACnE,OAAO,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACvC,CAAC"}
|