@vyuhlabs/dxkit 2.4.5 → 2.4.7
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/CHANGELOG.md +1022 -0
- package/README.md +160 -45
- package/dist/analysis-result.d.ts +112 -0
- package/dist/analysis-result.d.ts.map +1 -0
- package/dist/analysis-result.js +52 -0
- package/dist/analysis-result.js.map +1 -0
- package/dist/analyzers/bom/detailed.d.ts.map +1 -1
- package/dist/analyzers/bom/detailed.js +19 -0
- package/dist/analyzers/bom/detailed.js.map +1 -1
- package/dist/analyzers/bom/gather.d.ts +27 -26
- package/dist/analyzers/bom/gather.d.ts.map +1 -1
- package/dist/analyzers/bom/gather.js +26 -87
- package/dist/analyzers/bom/gather.js.map +1 -1
- package/dist/analyzers/bom/index.d.ts +0 -7
- package/dist/analyzers/bom/index.d.ts.map +1 -1
- package/dist/analyzers/bom/index.js +98 -48
- package/dist/analyzers/bom/index.js.map +1 -1
- package/dist/analyzers/bom/types.d.ts +11 -13
- package/dist/analyzers/bom/types.d.ts.map +1 -1
- package/dist/analyzers/cache.d.ts +95 -0
- package/dist/analyzers/cache.d.ts.map +1 -0
- package/dist/analyzers/cache.js +309 -0
- package/dist/analyzers/cache.js.map +1 -0
- package/dist/analyzers/coverage-runner.d.ts +56 -0
- package/dist/analyzers/coverage-runner.d.ts.map +1 -0
- package/dist/analyzers/coverage-runner.js +72 -0
- package/dist/analyzers/coverage-runner.js.map +1 -0
- package/dist/analyzers/dashboard/index.d.ts +24 -0
- package/dist/analyzers/dashboard/index.d.ts.map +1 -0
- package/dist/analyzers/dashboard/index.js +666 -0
- package/dist/analyzers/dashboard/index.js.map +1 -0
- package/dist/analyzers/developer/gather.d.ts.map +1 -1
- package/dist/analyzers/developer/gather.js +205 -37
- package/dist/analyzers/developer/gather.js.map +1 -1
- package/dist/analyzers/developer/index.d.ts +1 -1
- package/dist/analyzers/developer/index.d.ts.map +1 -1
- package/dist/analyzers/developer/index.js +19 -8
- package/dist/analyzers/developer/index.js.map +1 -1
- package/dist/analyzers/dispatcher.d.ts +37 -0
- package/dist/analyzers/dispatcher.d.ts.map +1 -1
- package/dist/analyzers/dispatcher.js +56 -9
- package/dist/analyzers/dispatcher.js.map +1 -1
- package/dist/analyzers/docs/shallow.d.ts +17 -5
- package/dist/analyzers/docs/shallow.d.ts.map +1 -1
- package/dist/analyzers/docs/shallow.js +65 -2
- package/dist/analyzers/docs/shallow.js.map +1 -1
- package/dist/analyzers/dx/shallow.d.ts +17 -5
- package/dist/analyzers/dx/shallow.d.ts.map +1 -1
- package/dist/analyzers/dx/shallow.js +66 -2
- package/dist/analyzers/dx/shallow.js.map +1 -1
- package/dist/analyzers/health/actions.d.ts +1 -1
- package/dist/analyzers/health/actions.d.ts.map +1 -1
- package/dist/analyzers/health/actions.js +27 -9
- package/dist/analyzers/health/actions.js.map +1 -1
- package/dist/analyzers/health/detailed.d.ts +2 -1
- package/dist/analyzers/health/detailed.d.ts.map +1 -1
- package/dist/analyzers/health/detailed.js +11 -7
- package/dist/analyzers/health/detailed.js.map +1 -1
- package/dist/analyzers/health.d.ts +27 -0
- package/dist/analyzers/health.d.ts.map +1 -1
- package/dist/analyzers/health.js +271 -33
- package/dist/analyzers/health.js.map +1 -1
- package/dist/analyzers/licenses/gather.d.ts +35 -8
- package/dist/analyzers/licenses/gather.d.ts.map +1 -1
- package/dist/analyzers/licenses/gather.js +70 -13
- package/dist/analyzers/licenses/gather.js.map +1 -1
- package/dist/analyzers/licenses/index.d.ts +1 -1
- package/dist/analyzers/licenses/index.d.ts.map +1 -1
- package/dist/analyzers/licenses/index.js +52 -11
- package/dist/analyzers/licenses/index.js.map +1 -1
- package/dist/analyzers/licenses/types.d.ts +15 -0
- package/dist/analyzers/licenses/types.d.ts.map +1 -1
- package/dist/analyzers/maintainability/shallow.d.ts +17 -5
- package/dist/analyzers/maintainability/shallow.d.ts.map +1 -1
- package/dist/analyzers/maintainability/shallow.js +80 -2
- package/dist/analyzers/maintainability/shallow.js.map +1 -1
- package/dist/analyzers/quality/detailed.d.ts.map +1 -1
- package/dist/analyzers/quality/detailed.js +4 -6
- package/dist/analyzers/quality/detailed.js.map +1 -1
- package/dist/analyzers/quality/gather.d.ts +1 -14
- package/dist/analyzers/quality/gather.d.ts.map +1 -1
- package/dist/analyzers/quality/gather.js +48 -137
- package/dist/analyzers/quality/gather.js.map +1 -1
- package/dist/analyzers/quality/index.d.ts +9 -2
- package/dist/analyzers/quality/index.d.ts.map +1 -1
- package/dist/analyzers/quality/index.js +189 -117
- package/dist/analyzers/quality/index.js.map +1 -1
- package/dist/analyzers/quality/shallow.d.ts +50 -5
- package/dist/analyzers/quality/shallow.d.ts.map +1 -1
- package/dist/analyzers/quality/shallow.js +155 -2
- package/dist/analyzers/quality/shallow.js.map +1 -1
- package/dist/analyzers/quality/types.d.ts +14 -0
- package/dist/analyzers/quality/types.d.ts.map +1 -1
- package/dist/analyzers/security/actions.d.ts +11 -4
- package/dist/analyzers/security/actions.d.ts.map +1 -1
- package/dist/analyzers/security/actions.js +87 -37
- package/dist/analyzers/security/actions.js.map +1 -1
- package/dist/analyzers/security/aggregator.d.ts +236 -0
- package/dist/analyzers/security/aggregator.d.ts.map +1 -0
- package/dist/analyzers/security/aggregator.js +347 -0
- package/dist/analyzers/security/aggregator.js.map +1 -0
- package/dist/analyzers/security/detailed.d.ts +2 -2
- package/dist/analyzers/security/detailed.d.ts.map +1 -1
- package/dist/analyzers/security/detailed.js +10 -9
- package/dist/analyzers/security/detailed.js.map +1 -1
- package/dist/analyzers/security/gather.d.ts +103 -1
- package/dist/analyzers/security/gather.d.ts.map +1 -1
- package/dist/analyzers/security/gather.js +281 -9
- package/dist/analyzers/security/gather.js.map +1 -1
- package/dist/analyzers/security/index.d.ts +15 -0
- package/dist/analyzers/security/index.d.ts.map +1 -1
- package/dist/analyzers/security/index.js +463 -50
- package/dist/analyzers/security/index.js.map +1 -1
- package/dist/analyzers/security/shallow.d.ts +50 -6
- package/dist/analyzers/security/shallow.d.ts.map +1 -1
- package/dist/analyzers/security/shallow.js +154 -2
- package/dist/analyzers/security/shallow.js.map +1 -1
- package/dist/analyzers/security/types.d.ts +51 -0
- package/dist/analyzers/security/types.d.ts.map +1 -1
- package/dist/analyzers/tests/detailed.d.ts.map +1 -1
- package/dist/analyzers/tests/detailed.js +2 -3
- package/dist/analyzers/tests/detailed.js.map +1 -1
- package/dist/analyzers/tests/gather.d.ts +2 -1
- package/dist/analyzers/tests/gather.d.ts.map +1 -1
- package/dist/analyzers/tests/gather.js +98 -69
- package/dist/analyzers/tests/gather.js.map +1 -1
- package/dist/analyzers/tests/index.d.ts +11 -2
- package/dist/analyzers/tests/index.d.ts.map +1 -1
- package/dist/analyzers/tests/index.js +85 -18
- package/dist/analyzers/tests/index.js.map +1 -1
- package/dist/analyzers/tests/shallow.d.ts +19 -5
- package/dist/analyzers/tests/shallow.d.ts.map +1 -1
- package/dist/analyzers/tests/shallow.js +89 -2
- package/dist/analyzers/tests/shallow.js.map +1 -1
- package/dist/analyzers/tests/types.d.ts +41 -1
- package/dist/analyzers/tests/types.d.ts.map +1 -1
- package/dist/analyzers/tools/autogen-header.d.ts +8 -0
- package/dist/analyzers/tools/autogen-header.d.ts.map +1 -0
- package/dist/analyzers/tools/autogen-header.js +107 -0
- package/dist/analyzers/tools/autogen-header.js.map +1 -0
- package/dist/analyzers/tools/cloc.d.ts.map +1 -1
- package/dist/analyzers/tools/cloc.js +36 -5
- package/dist/analyzers/tools/cloc.js.map +1 -1
- package/dist/analyzers/tools/coverage.d.ts +1 -1
- package/dist/analyzers/tools/coverage.d.ts.map +1 -1
- package/dist/analyzers/tools/coverage.js.map +1 -1
- package/dist/analyzers/tools/debug-statements.d.ts +17 -0
- package/dist/analyzers/tools/debug-statements.d.ts.map +1 -0
- package/dist/analyzers/tools/debug-statements.js +58 -0
- package/dist/analyzers/tools/debug-statements.js.map +1 -0
- package/dist/analyzers/tools/default-exclusions.gitignore +28 -0
- package/dist/analyzers/tools/exclusions.d.ts +33 -6
- package/dist/analyzers/tools/exclusions.d.ts.map +1 -1
- package/dist/analyzers/tools/exclusions.js +95 -26
- package/dist/analyzers/tools/exclusions.js.map +1 -1
- package/dist/analyzers/tools/generic.d.ts +17 -2
- package/dist/analyzers/tools/generic.d.ts.map +1 -1
- package/dist/analyzers/tools/generic.js +206 -109
- package/dist/analyzers/tools/generic.js.map +1 -1
- package/dist/analyzers/tools/gitleaks.d.ts.map +1 -1
- package/dist/analyzers/tools/gitleaks.js +48 -1
- package/dist/analyzers/tools/gitleaks.js.map +1 -1
- package/dist/analyzers/tools/graphify.d.ts +30 -2
- package/dist/analyzers/tools/graphify.d.ts.map +1 -1
- package/dist/analyzers/tools/graphify.js +131 -15
- package/dist/analyzers/tools/graphify.js.map +1 -1
- package/dist/analyzers/tools/jscpd.d.ts +12 -2
- package/dist/analyzers/tools/jscpd.d.ts.map +1 -1
- package/dist/analyzers/tools/jscpd.js +129 -6
- package/dist/analyzers/tools/jscpd.js.map +1 -1
- package/dist/analyzers/tools/minified-detection.d.ts +9 -0
- package/dist/analyzers/tools/minified-detection.d.ts.map +1 -0
- package/dist/analyzers/tools/minified-detection.js +147 -0
- package/dist/analyzers/tools/minified-detection.js.map +1 -0
- package/dist/analyzers/tools/nuget-package-reference.d.ts +131 -0
- package/dist/analyzers/tools/nuget-package-reference.d.ts.map +1 -0
- package/dist/analyzers/tools/nuget-package-reference.js +175 -0
- package/dist/analyzers/tools/nuget-package-reference.js.map +1 -0
- package/dist/analyzers/tools/osv-scanner-deps.d.ts +48 -0
- package/dist/analyzers/tools/osv-scanner-deps.d.ts.map +1 -0
- package/dist/analyzers/tools/{osv-scanner-maven.js → osv-scanner-deps.js} +78 -46
- package/dist/analyzers/tools/osv-scanner-deps.js.map +1 -0
- package/dist/analyzers/tools/osv.d.ts +36 -0
- package/dist/analyzers/tools/osv.d.ts.map +1 -1
- package/dist/analyzers/tools/osv.js +26 -0
- package/dist/analyzers/tools/osv.js.map +1 -1
- package/dist/analyzers/tools/parallel.d.ts +1 -1
- package/dist/analyzers/tools/parallel.d.ts.map +1 -1
- package/dist/analyzers/tools/parallel.js +2 -2
- package/dist/analyzers/tools/parallel.js.map +1 -1
- package/dist/analyzers/tools/risk-score.d.ts +7 -0
- package/dist/analyzers/tools/risk-score.d.ts.map +1 -1
- package/dist/analyzers/tools/risk-score.js +9 -2
- package/dist/analyzers/tools/risk-score.js.map +1 -1
- package/dist/analyzers/tools/run-tests-helper.d.ts +43 -0
- package/dist/analyzers/tools/run-tests-helper.d.ts.map +1 -0
- package/dist/analyzers/tools/run-tests-helper.js +156 -0
- package/dist/analyzers/tools/run-tests-helper.js.map +1 -0
- package/dist/analyzers/tools/runner.d.ts.map +1 -1
- package/dist/analyzers/tools/runner.js +75 -12
- package/dist/analyzers/tools/runner.js.map +1 -1
- package/dist/analyzers/tools/semgrep.d.ts +39 -2
- package/dist/analyzers/tools/semgrep.d.ts.map +1 -1
- package/dist/analyzers/tools/semgrep.js +131 -9
- package/dist/analyzers/tools/semgrep.js.map +1 -1
- package/dist/analyzers/tools/timing.d.ts +17 -3
- package/dist/analyzers/tools/timing.d.ts.map +1 -1
- package/dist/analyzers/tools/timing.js +36 -14
- package/dist/analyzers/tools/timing.js.map +1 -1
- package/dist/analyzers/tools/tool-registry.d.ts +10 -0
- package/dist/analyzers/tools/tool-registry.d.ts.map +1 -1
- package/dist/analyzers/tools/tool-registry.js +120 -1
- package/dist/analyzers/tools/tool-registry.js.map +1 -1
- package/dist/analyzers/tools/tools-unavailable-prose.d.ts +18 -0
- package/dist/analyzers/tools/tools-unavailable-prose.d.ts.map +1 -0
- package/dist/analyzers/tools/tools-unavailable-prose.js +69 -0
- package/dist/analyzers/tools/tools-unavailable-prose.js.map +1 -0
- package/dist/analyzers/tools/upgrade-plan-resolver.d.ts.map +1 -1
- package/dist/analyzers/tools/upgrade-plan-resolver.js +7 -0
- package/dist/analyzers/tools/upgrade-plan-resolver.js.map +1 -1
- package/dist/analyzers/tools/vendored-advisor.d.ts +43 -0
- package/dist/analyzers/tools/vendored-advisor.d.ts.map +1 -0
- package/dist/analyzers/tools/vendored-advisor.js +107 -0
- package/dist/analyzers/tools/vendored-advisor.js.map +1 -0
- package/dist/analyzers/tools/walk-paths.d.ts +78 -0
- package/dist/analyzers/tools/walk-paths.d.ts.map +1 -0
- package/dist/analyzers/tools/walk-paths.js +150 -0
- package/dist/analyzers/tools/walk-paths.js.map +1 -0
- package/dist/analyzers/tools/walk-source-files.d.ts +70 -0
- package/dist/analyzers/tools/walk-source-files.d.ts.map +1 -0
- package/dist/analyzers/tools/walk-source-files.js +369 -0
- package/dist/analyzers/tools/walk-source-files.js.map +1 -0
- package/dist/analyzers/types.d.ts +204 -4
- package/dist/analyzers/types.d.ts.map +1 -1
- package/dist/analyzers/xlsx/bom.d.ts.map +1 -1
- package/dist/analyzers/xlsx/bom.js +8 -1
- package/dist/analyzers/xlsx/bom.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +557 -189
- package/dist/cli.js.map +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/detect.d.ts.map +1 -1
- package/dist/detect.js +24 -7
- package/dist/detect.js.map +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +103 -53
- package/dist/doctor.js.map +1 -1
- package/dist/languages/capabilities/provider.d.ts +130 -1
- package/dist/languages/capabilities/provider.d.ts.map +1 -1
- package/dist/languages/capabilities/types.d.ts +68 -7
- package/dist/languages/capabilities/types.d.ts.map +1 -1
- package/dist/languages/csharp.d.ts +15 -1
- package/dist/languages/csharp.d.ts.map +1 -1
- package/dist/languages/csharp.js +624 -146
- package/dist/languages/csharp.js.map +1 -1
- package/dist/languages/go.d.ts.map +1 -1
- package/dist/languages/go.js +89 -11
- package/dist/languages/go.js.map +1 -1
- package/dist/languages/index.d.ts +131 -2
- package/dist/languages/index.d.ts.map +1 -1
- package/dist/languages/index.js +208 -0
- package/dist/languages/index.js.map +1 -1
- package/dist/languages/java.d.ts.map +1 -1
- package/dist/languages/java.js +121 -32
- package/dist/languages/java.js.map +1 -1
- package/dist/languages/kotlin.d.ts.map +1 -1
- package/dist/languages/kotlin.js +140 -32
- package/dist/languages/kotlin.js.map +1 -1
- package/dist/languages/python.d.ts.map +1 -1
- package/dist/languages/python.js +149 -44
- package/dist/languages/python.js.map +1 -1
- package/dist/languages/ruby.d.ts +115 -0
- package/dist/languages/ruby.d.ts.map +1 -0
- package/dist/languages/ruby.js +665 -0
- package/dist/languages/ruby.js.map +1 -0
- package/dist/languages/rust.d.ts.map +1 -1
- package/dist/languages/rust.js +103 -16
- package/dist/languages/rust.js.map +1 -1
- package/dist/languages/types.d.ts +228 -5
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/languages/typescript.d.ts.map +1 -1
- package/dist/languages/typescript.js +201 -14
- package/dist/languages/typescript.js.map +1 -1
- package/dist/scoring/dimensions/documentation.d.ts +53 -0
- package/dist/scoring/dimensions/documentation.d.ts.map +1 -0
- package/dist/scoring/dimensions/documentation.js +106 -0
- package/dist/scoring/dimensions/documentation.js.map +1 -0
- package/dist/scoring/dimensions/dx.d.ts +53 -0
- package/dist/scoring/dimensions/dx.d.ts.map +1 -0
- package/dist/scoring/dimensions/dx.js +105 -0
- package/dist/scoring/dimensions/dx.js.map +1 -0
- package/dist/scoring/dimensions/maintainability.d.ts +53 -0
- package/dist/scoring/dimensions/maintainability.d.ts.map +1 -0
- package/dist/scoring/dimensions/maintainability.js +101 -0
- package/dist/scoring/dimensions/maintainability.js.map +1 -0
- package/dist/scoring/dimensions/quality.d.ts +108 -0
- package/dist/scoring/dimensions/quality.d.ts.map +1 -0
- package/dist/scoring/dimensions/quality.js +174 -0
- package/dist/scoring/dimensions/quality.js.map +1 -0
- package/dist/scoring/dimensions/security.d.ts +84 -0
- package/dist/scoring/dimensions/security.d.ts.map +1 -0
- package/dist/scoring/dimensions/security.js +135 -0
- package/dist/scoring/dimensions/security.js.map +1 -0
- package/dist/scoring/dimensions/testing.d.ts +56 -0
- package/dist/scoring/dimensions/testing.d.ts.map +1 -0
- package/dist/scoring/dimensions/testing.js +98 -0
- package/dist/scoring/dimensions/testing.js.map +1 -0
- package/dist/scoring/evaluator.d.ts +27 -0
- package/dist/scoring/evaluator.d.ts.map +1 -0
- package/dist/scoring/evaluator.js +124 -0
- package/dist/scoring/evaluator.js.map +1 -0
- package/dist/scoring/format.d.ts +34 -0
- package/dist/scoring/format.d.ts.map +1 -0
- package/dist/scoring/format.js +63 -0
- package/dist/scoring/format.js.map +1 -0
- package/dist/scoring/index.d.ts +37 -0
- package/dist/scoring/index.d.ts.map +1 -0
- package/dist/scoring/index.js +57 -0
- package/dist/scoring/index.js.map +1 -0
- package/dist/scoring/overall.d.ts +54 -0
- package/dist/scoring/overall.d.ts.map +1 -0
- package/dist/scoring/overall.js +76 -0
- package/dist/scoring/overall.js.map +1 -0
- package/dist/scoring/result.d.ts +111 -0
- package/dist/scoring/result.d.ts.map +1 -0
- package/dist/scoring/result.js +14 -0
- package/dist/scoring/result.js.map +1 -0
- package/dist/scoring/spec.d.ts +76 -0
- package/dist/scoring/spec.d.ts.map +1 -0
- package/dist/scoring/spec.js +22 -0
- package/dist/scoring/spec.js.map +1 -0
- package/dist/scoring/thresholds.d.ts +56 -0
- package/dist/scoring/thresholds.d.ts.map +1 -0
- package/dist/scoring/thresholds.js +75 -0
- package/dist/scoring/thresholds.js.map +1 -0
- package/dist/tools-cli.d.ts.map +1 -1
- package/dist/tools-cli.js +21 -2
- package/dist/tools-cli.js.map +1 -1
- package/dist/types.d.ts +17 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/templates/.claude/commands/dashboard.md +17 -9
- package/templates/.claude/rules/ruby.md +11 -0
- package/templates/configs/ruby/README.md +6 -0
- package/dist/analyzers/scoring.d.ts +0 -49
- package/dist/analyzers/scoring.d.ts.map +0 -1
- package/dist/analyzers/scoring.js +0 -422
- package/dist/analyzers/scoring.js.map +0 -1
- package/dist/analyzers/security/scoring.d.ts +0 -29
- package/dist/analyzers/security/scoring.d.ts.map +0 -1
- package/dist/analyzers/security/scoring.js +0 -40
- package/dist/analyzers/security/scoring.js.map +0 -1
- package/dist/analyzers/tools/osv-scanner-maven.d.ts +0 -42
- package/dist/analyzers/tools/osv-scanner-maven.d.ts.map +0 -1
- package/dist/analyzers/tools/osv-scanner-maven.js.map +0 -1
package/dist/languages/kotlin.js
CHANGED
|
@@ -41,9 +41,11 @@ const fs = __importStar(require("fs"));
|
|
|
41
41
|
const os = __importStar(require("os"));
|
|
42
42
|
const path = __importStar(require("path"));
|
|
43
43
|
const jacoco_1 = require("../analyzers/tools/jacoco");
|
|
44
|
-
const
|
|
44
|
+
const osv_scanner_deps_1 = require("../analyzers/tools/osv-scanner-deps");
|
|
45
|
+
const walk_paths_1 = require("../analyzers/tools/walk-paths");
|
|
45
46
|
const exclusions_1 = require("../analyzers/tools/exclusions");
|
|
46
47
|
const runner_1 = require("../analyzers/tools/runner");
|
|
48
|
+
const run_tests_helper_1 = require("../analyzers/tools/run-tests-helper");
|
|
47
49
|
const tool_registry_1 = require("../analyzers/tools/tool-registry");
|
|
48
50
|
// ─── Detection ──────────────────────────────────────────────────────────────
|
|
49
51
|
/**
|
|
@@ -52,30 +54,11 @@ const tool_registry_1 = require("../analyzers/tools/tool-registry");
|
|
|
52
54
|
* (rare but possible for libraries vendored as plain `src/` trees) and
|
|
53
55
|
* mixed JVM monorepos where Kotlin sits beside Java/Scala.
|
|
54
56
|
*/
|
|
55
|
-
function
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
try {
|
|
61
|
-
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
return false;
|
|
65
|
-
}
|
|
66
|
-
for (const e of entries) {
|
|
67
|
-
if (e.name.startsWith('.') ||
|
|
68
|
-
['node_modules', 'build', '.gradle', 'target'].includes(e.name)) {
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
if (e.isFile() && (e.name.endsWith('.kt') || e.name.endsWith('.kts')))
|
|
72
|
-
return true;
|
|
73
|
-
if (e.isDirectory() && search(path.join(dir, e.name), depth + 1))
|
|
74
|
-
return true;
|
|
75
|
-
}
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
return search(cwd, 0);
|
|
57
|
+
function hasKotlinSource(cwd) {
|
|
58
|
+
// Depth-unlimited via the canonical walker. The previous depth-3
|
|
59
|
+
// cap missed deep mixed-JVM monorepos. Honors `.gitignore` +
|
|
60
|
+
// bundled excludes (`build`, `.gradle`, `target`, …).
|
|
61
|
+
return (0, walk_paths_1.walkPaths)(cwd, { extensions: ['.kt', '.kts'] }).length > 0;
|
|
79
62
|
}
|
|
80
63
|
function detectKotlin(cwd) {
|
|
81
64
|
return ((0, runner_1.fileExists)(cwd, 'build.gradle.kts') ||
|
|
@@ -83,7 +66,7 @@ function detectKotlin(cwd) {
|
|
|
83
66
|
(0, runner_1.fileExists)(cwd, 'build.gradle') ||
|
|
84
67
|
(0, runner_1.fileExists)(cwd, 'settings.gradle') ||
|
|
85
68
|
(0, runner_1.fileExists)(cwd, 'gradlew') ||
|
|
86
|
-
|
|
69
|
+
hasKotlinSource(cwd));
|
|
87
70
|
}
|
|
88
71
|
/**
|
|
89
72
|
* Manifest gate for capability providers. detectKotlin() activates the
|
|
@@ -175,7 +158,7 @@ function parseDetektCheckstyleXml(raw) {
|
|
|
175
158
|
* a missing/unparseable XML is treated as `unavailable`.
|
|
176
159
|
*/
|
|
177
160
|
function gatherKotlinLintResult(cwd) {
|
|
178
|
-
if (!hasKotlinBuildManifest(cwd) && !
|
|
161
|
+
if (!hasKotlinBuildManifest(cwd) && !hasKotlinSource(cwd)) {
|
|
179
162
|
return { kind: 'unavailable', reason: 'no kotlin source' };
|
|
180
163
|
}
|
|
181
164
|
const detekt = (0, tool_registry_1.findTool)(tool_registry_1.TOOL_DEFS.detekt, cwd);
|
|
@@ -220,24 +203,98 @@ const kotlinLintProvider = {
|
|
|
220
203
|
// Parser, finder, and gather glue all live in `src/analyzers/tools/jacoco.ts`
|
|
221
204
|
// — language-agnostic SSOT (CLAUDE.md rule #2). The kotlin pack just
|
|
222
205
|
// declares its provider and delegates. Java pack does the same.
|
|
206
|
+
/**
|
|
207
|
+
* Locate the JaCoCo XML report after a test run (D021). Gradle's
|
|
208
|
+
* default emits to `build/reports/jacoco/test/jacocoTestReport.xml`,
|
|
209
|
+
* Maven's to `target/site/jacoco/jacoco.xml`. The function-form
|
|
210
|
+
* `artifact` param lets us check both; whichever path the build tool
|
|
211
|
+
* wrote to is the one `gatherJaCoCoCoverageResult` will pick up on
|
|
212
|
+
* the next dispatcher pass (it already knows both candidate paths).
|
|
213
|
+
*/
|
|
214
|
+
function findJacocoXmlArtifact(cwd) {
|
|
215
|
+
const candidates = [
|
|
216
|
+
'build/reports/jacoco/test/jacocoTestReport.xml',
|
|
217
|
+
'target/site/jacoco/jacoco.xml',
|
|
218
|
+
'target/site/jacoco-aggregate/jacoco.xml',
|
|
219
|
+
];
|
|
220
|
+
for (const c of candidates) {
|
|
221
|
+
if ((0, runner_1.fileExists)(cwd, c))
|
|
222
|
+
return c;
|
|
223
|
+
}
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Run the JVM build tool's "test + JaCoCo report" cycle from cwd (D021).
|
|
228
|
+
*
|
|
229
|
+
* Picks the command by build manifest, preferring Gradle when both are
|
|
230
|
+
* present (modern Kotlin projects are Gradle-first; the Maven path is
|
|
231
|
+
* here for fixture parity with the java pack and for the rare Kotlin-
|
|
232
|
+
* on-Maven layouts seen in older codebases):
|
|
233
|
+
*
|
|
234
|
+
* - `gradlew` or `build.gradle{,.kts}` → `./gradlew jacocoTestReport`
|
|
235
|
+
* - `pom.xml` → `mvn test jacoco:report`
|
|
236
|
+
*
|
|
237
|
+
* Preflight: require at least one of the above. Without a build
|
|
238
|
+
* manifest, there's no canonical command to run.
|
|
239
|
+
*
|
|
240
|
+
* The JaCoCo plugin must be wired into the build (`apply plugin: 'jacoco'`
|
|
241
|
+
* for Gradle, the `jacoco-maven-plugin` in `pom.xml` for Maven). When
|
|
242
|
+
* it isn't, the command succeeds but no XML is produced — that surfaces
|
|
243
|
+
* as `failed` with the helper's "tests succeeded but no coverage
|
|
244
|
+
* artifact was produced" framing, which is the right hint.
|
|
245
|
+
*/
|
|
246
|
+
function runKotlinTestsWithCoverage(cwd) {
|
|
247
|
+
return Promise.resolve((0, run_tests_helper_1.runTestsWithCoverage)({
|
|
248
|
+
pack: 'kotlin',
|
|
249
|
+
cmd: (() => {
|
|
250
|
+
if ((0, runner_1.fileExists)(cwd, 'gradlew') ||
|
|
251
|
+
(0, runner_1.fileExists)(cwd, 'build.gradle.kts') ||
|
|
252
|
+
(0, runner_1.fileExists)(cwd, 'build.gradle')) {
|
|
253
|
+
const gradle = (0, runner_1.fileExists)(cwd, 'gradlew') ? './gradlew' : 'gradle';
|
|
254
|
+
return `${gradle} jacocoTestReport`;
|
|
255
|
+
}
|
|
256
|
+
return 'mvn test jacoco:report';
|
|
257
|
+
})(),
|
|
258
|
+
cwd,
|
|
259
|
+
artifact: (cwd) => findJacocoXmlArtifact(cwd),
|
|
260
|
+
preflight: (cwd) => {
|
|
261
|
+
const hasGradle = (0, runner_1.fileExists)(cwd, 'build.gradle') ||
|
|
262
|
+
(0, runner_1.fileExists)(cwd, 'build.gradle.kts') ||
|
|
263
|
+
(0, runner_1.fileExists)(cwd, 'gradlew');
|
|
264
|
+
const hasMaven = (0, runner_1.fileExists)(cwd, 'pom.xml');
|
|
265
|
+
if (!hasGradle && !hasMaven) {
|
|
266
|
+
return 'no Gradle/Maven build manifest — cannot run JaCoCo coverage';
|
|
267
|
+
}
|
|
268
|
+
return null;
|
|
269
|
+
},
|
|
270
|
+
}));
|
|
271
|
+
}
|
|
223
272
|
const kotlinCoverageProvider = {
|
|
224
273
|
source: 'kotlin',
|
|
225
274
|
async gather(cwd) {
|
|
226
275
|
return (0, jacoco_1.gatherJaCoCoCoverageResult)(cwd);
|
|
227
276
|
},
|
|
277
|
+
async runTests(cwd) {
|
|
278
|
+
return runKotlinTestsWithCoverage(cwd);
|
|
279
|
+
},
|
|
228
280
|
};
|
|
229
281
|
// ─── DepVulns (osv-scanner against Maven manifests) ─────────────────────────
|
|
230
282
|
//
|
|
231
|
-
// Parser + gather glue live in `src/analyzers/tools/osv-scanner-
|
|
232
|
-
// — language-agnostic SSOT (CLAUDE.md rule #2).
|
|
233
|
-
//
|
|
234
|
-
//
|
|
283
|
+
// Parser + gather glue live in `src/analyzers/tools/osv-scanner-deps.ts`
|
|
284
|
+
// — language-agnostic SSOT (CLAUDE.md rule #2). Kotlin/Java/Ruby packs
|
|
285
|
+
// all delegate to the same module, parameterized by ecosystem string +
|
|
286
|
+
// manifest candidate list. parseOsvScannerFindings is exported there
|
|
287
|
+
// for unit tests.
|
|
288
|
+
const KOTLIN_DEP_MANIFESTS = ['gradle.lockfile', 'pom.xml', 'gradle/verification-metadata.xml'];
|
|
235
289
|
const kotlinDepVulnsProvider = {
|
|
236
290
|
source: 'kotlin',
|
|
237
291
|
async gather(cwd) {
|
|
238
|
-
const outcome = await (0,
|
|
292
|
+
const outcome = await (0, osv_scanner_deps_1.gatherOsvScannerDepVulnsResult)(cwd, 'kotlin', 'Maven', KOTLIN_DEP_MANIFESTS);
|
|
239
293
|
return outcome.kind === 'success' ? outcome.envelope : null;
|
|
240
294
|
},
|
|
295
|
+
async gatherOutcome(cwd) {
|
|
296
|
+
return (0, osv_scanner_deps_1.gatherOsvScannerDepVulnsResult)(cwd, 'kotlin', 'Maven', KOTLIN_DEP_MANIFESTS);
|
|
297
|
+
},
|
|
241
298
|
};
|
|
242
299
|
// ─── Imports (regex extraction, no resolver) ────────────────────────────────
|
|
243
300
|
/**
|
|
@@ -366,6 +423,57 @@ exports.kotlin = {
|
|
|
366
423
|
// `.gradle` = Gradle daemon/cache state,
|
|
367
424
|
// `out` = IntelliJ IDE build output.
|
|
368
425
|
extraExcludes: ['build', '.gradle', 'out'],
|
|
426
|
+
// D027 (2.4.7): KDoc uses the JSDoc-style `/**` block opener.
|
|
427
|
+
docCommentPatterns: ['/\\*\\*'],
|
|
428
|
+
// D034 (2.4.7): JVM TLS-bypass idioms. Shared with the java pack
|
|
429
|
+
// since Kotlin uses the same SSL APIs. Tokens are class/method
|
|
430
|
+
// names that exist solely for permissive/insecure variants:
|
|
431
|
+
// - TrustAllX509TrustManager / NaiveTrustManager — custom
|
|
432
|
+
// "trust everything" implementations
|
|
433
|
+
// - NoopHostnameVerifier — Apache HttpClient's no-op verifier
|
|
434
|
+
// - ALLOW_ALL_HOSTNAME_VERIFIER — legacy SSLConnectionSocketFactory
|
|
435
|
+
// constant for accepting any hostname
|
|
436
|
+
tlsBypassPatterns: [
|
|
437
|
+
'TrustAllX509TrustManager',
|
|
438
|
+
'NaiveTrustManager',
|
|
439
|
+
'NoopHostnameVerifier',
|
|
440
|
+
'ALLOW_ALL_HOSTNAME_VERIFIER',
|
|
441
|
+
],
|
|
442
|
+
upgradeCommand(name, version) {
|
|
443
|
+
return `# Edit build.gradle(.kts): bump ${name} to ${version}, then \`./gradlew build\``;
|
|
444
|
+
},
|
|
445
|
+
// Kotlin spans Spring Boot / Ktor server-side (controllers,
|
|
446
|
+
// services, repositories) and Android client (activities,
|
|
447
|
+
// fragments, viewmodels, screens). Both are first-class — an
|
|
448
|
+
// Android app's primary surface IS its Activity / Fragment /
|
|
449
|
+
// ViewModel layer, regardless of whether HTTP route handlers exist
|
|
450
|
+
// anywhere in the codebase. routePaths narrows so the "Add API
|
|
451
|
+
// documentation" action stays silent on a pure-Android project.
|
|
452
|
+
architecturalShape: {
|
|
453
|
+
primaryComponentPaths: [
|
|
454
|
+
'/controllers/',
|
|
455
|
+
'/services/',
|
|
456
|
+
'/repositories/',
|
|
457
|
+
'/handlers/',
|
|
458
|
+
'/activities/',
|
|
459
|
+
'/fragments/',
|
|
460
|
+
'/viewmodels/',
|
|
461
|
+
'/screens/',
|
|
462
|
+
'/usecases/',
|
|
463
|
+
],
|
|
464
|
+
routePaths: ['/controllers/', '/handlers/', '/routes/'],
|
|
465
|
+
modelPaths: ['/models/', '/entities/', '/dto/', '/dtos/', '/data/'],
|
|
466
|
+
vocabulary: {
|
|
467
|
+
components: 'controllers/activities',
|
|
468
|
+
models: 'models',
|
|
469
|
+
routes: 'routes',
|
|
470
|
+
},
|
|
471
|
+
testGapPriority: {
|
|
472
|
+
high: ['/controllers/', '/services/', '/handlers/', '/usecases/'],
|
|
473
|
+
medium: ['/repositories/', '/activities/', '/fragments/', '/viewmodels/', '/screens/'],
|
|
474
|
+
},
|
|
475
|
+
},
|
|
476
|
+
clocLanguageNames: ['Kotlin'],
|
|
369
477
|
detect: detectKotlin,
|
|
370
478
|
tools: ['detekt', 'osv-scanner'],
|
|
371
479
|
// Semgrep's Kotlin ruleset (`p/kotlin`) is sparse compared to Python/JS
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kotlin.js","sourceRoot":"","sources":["../../src/languages/kotlin.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kotlin.js","sourceRoot":"","sources":["../../src/languages/kotlin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../src/languages/python.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,QAAQ,EAAyC,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../src/languages/python.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,QAAQ,EAAyC,MAAM,6BAA6B,CAAC;AA6BnG,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,SAAS,CAAC;AAwF7D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,GACV,GAAG,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA6B3D;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,GAC/D,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CA0BvB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAoBnE;AAoBD,wFAAwF;AACxF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,CAsCtF;AA6VD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAqB7D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqB7F;AAuHD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA8BlE;AAkGD,eAAO,MAAM,MAAM,EAAE,eAkGpB,CAAC"}
|
package/dist/languages/python.js
CHANGED
|
@@ -47,6 +47,8 @@ const coverage_1 = require("../analyzers/tools/coverage");
|
|
|
47
47
|
const exclusions_1 = require("../analyzers/tools/exclusions");
|
|
48
48
|
const osv_1 = require("../analyzers/tools/osv");
|
|
49
49
|
const runner_1 = require("../analyzers/tools/runner");
|
|
50
|
+
const walk_paths_1 = require("../analyzers/tools/walk-paths");
|
|
51
|
+
const run_tests_helper_1 = require("../analyzers/tools/run-tests-helper");
|
|
50
52
|
const semver_bump_1 = require("../analyzers/tools/semver-bump");
|
|
51
53
|
const tool_registry_1 = require("../analyzers/tools/tool-registry");
|
|
52
54
|
function stripPyComments(src) {
|
|
@@ -63,30 +65,27 @@ function isFile(p) {
|
|
|
63
65
|
function toRel(abs, cwd) {
|
|
64
66
|
return path.relative(cwd, abs).split(path.sep).join('/');
|
|
65
67
|
}
|
|
66
|
-
function
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return false;
|
|
88
|
-
}
|
|
89
|
-
return search(cwd, 0);
|
|
68
|
+
function hasPyFile(cwd) {
|
|
69
|
+
// Depth-unlimited via the canonical walker. The previous depth-2
|
|
70
|
+
// cap missed real Python monorepos (e.g. `services/<svc>/src/*.py`
|
|
71
|
+
// layouts).
|
|
72
|
+
//
|
|
73
|
+
// Requires >=3 `.py` files when no Python manifest is present.
|
|
74
|
+
// The earlier "any .py file anywhere" threshold over-activated on
|
|
75
|
+
// polyglot repos where a single build-output artifact (e.g. a
|
|
76
|
+
// WinForms desktop app shipping one staging `.py` under
|
|
77
|
+
// `StagingArea/Debug/net9.0-windows/`) would otherwise flip the
|
|
78
|
+
// python pack on. With the pack active, `dominantVocabulary`
|
|
79
|
+
// would then pick its Django/Flask-shaped words over the actual
|
|
80
|
+
// dominant language pack's vocabulary — surfaces as wrong-stack
|
|
81
|
+
// prose ("0 views/services, 0 models" on a 2,995-file C# repo).
|
|
82
|
+
//
|
|
83
|
+
// Real Python codebases without a manifest (small scripts, ad-hoc
|
|
84
|
+
// analysis dirs, learning projects) still activate above the
|
|
85
|
+
// threshold — the bar moved from "any" to "non-trivial," not to
|
|
86
|
+
// "requires manifest." Manifest-bearing repos always activate
|
|
87
|
+
// regardless of file count via the caller's `fileExists` checks.
|
|
88
|
+
return (0, walk_paths_1.walkPaths)(cwd, { extensions: ['.py'] }).length >= 3;
|
|
90
89
|
}
|
|
91
90
|
/**
|
|
92
91
|
* Build the pip-audit invocation for the project at `cwd`. Returns null
|
|
@@ -331,14 +330,16 @@ function loadPyTopLevelDepIndex(cwd) {
|
|
|
331
330
|
*/
|
|
332
331
|
async function gatherPyDepVulnsResult(cwd) {
|
|
333
332
|
const pipAudit = (0, tool_registry_1.findTool)(tool_registry_1.TOOL_DEFS['pip-audit'], cwd);
|
|
334
|
-
if (!pipAudit.available || !pipAudit.path)
|
|
335
|
-
return { kind: '
|
|
333
|
+
if (!pipAudit.available || !pipAudit.path) {
|
|
334
|
+
return { kind: 'unavailable', reason: 'pip-audit not installed' };
|
|
335
|
+
}
|
|
336
336
|
const cmd = buildPipAuditCommand(cwd, pipAudit.path);
|
|
337
|
-
if (!cmd)
|
|
338
|
-
return { kind: '
|
|
337
|
+
if (!cmd) {
|
|
338
|
+
return { kind: 'no-manifest', reason: 'no pyproject.toml / setup.py / requirements.txt' };
|
|
339
|
+
}
|
|
339
340
|
const raw = (0, runner_1.run)(cmd, cwd, 120000);
|
|
340
341
|
if (!raw)
|
|
341
|
-
return { kind: 'no
|
|
342
|
+
return { kind: 'unavailable', reason: 'pip-audit produced no output' };
|
|
342
343
|
try {
|
|
343
344
|
const data = JSON.parse(raw);
|
|
344
345
|
const vulnIds = [];
|
|
@@ -413,6 +414,7 @@ async function gatherPyDepVulnsResult(cwd) {
|
|
|
413
414
|
package: dep.name ?? 'unknown',
|
|
414
415
|
installedVersion: dep.version,
|
|
415
416
|
tool: 'pip-audit',
|
|
417
|
+
packId: 'python',
|
|
416
418
|
severity,
|
|
417
419
|
};
|
|
418
420
|
// Embedded score from the primary enrichment pass; alias-fallback
|
|
@@ -479,8 +481,8 @@ async function gatherPyDepVulnsResult(cwd) {
|
|
|
479
481
|
};
|
|
480
482
|
return { kind: 'success', envelope };
|
|
481
483
|
}
|
|
482
|
-
catch {
|
|
483
|
-
return { kind: 'parse
|
|
484
|
+
catch (err) {
|
|
485
|
+
return { kind: 'unavailable', reason: `pip-audit parse error: ${err.message}` };
|
|
484
486
|
}
|
|
485
487
|
}
|
|
486
488
|
const pyDepVulnsProvider = {
|
|
@@ -489,6 +491,9 @@ const pyDepVulnsProvider = {
|
|
|
489
491
|
const outcome = await gatherPyDepVulnsResult(cwd);
|
|
490
492
|
return outcome.kind === 'success' ? outcome.envelope : null;
|
|
491
493
|
},
|
|
494
|
+
async gatherOutcome(cwd) {
|
|
495
|
+
return gatherPyDepVulnsResult(cwd);
|
|
496
|
+
},
|
|
492
497
|
};
|
|
493
498
|
function mapRuffSeverity(code) {
|
|
494
499
|
const prefix = code.match(/^[A-Z]+/)?.[0] ?? '';
|
|
@@ -542,6 +547,9 @@ const pyLintProvider = {
|
|
|
542
547
|
const outcome = gatherPyLintResult(cwd);
|
|
543
548
|
return outcome.kind === 'success' ? outcome.envelope : null;
|
|
544
549
|
},
|
|
550
|
+
async gatherOutcome(cwd) {
|
|
551
|
+
return gatherPyLintResult(cwd);
|
|
552
|
+
},
|
|
545
553
|
};
|
|
546
554
|
/**
|
|
547
555
|
* Single source of truth for the python pack's coverage gathering.
|
|
@@ -564,11 +572,54 @@ function gatherPyCoverageResult(cwd) {
|
|
|
564
572
|
return null;
|
|
565
573
|
}
|
|
566
574
|
}
|
|
575
|
+
/**
|
|
576
|
+
* Run `python -m pytest --cov --cov-report=json:coverage.json` from cwd
|
|
577
|
+
* (D021). Prefer the project's own venv python (`.venv`, poetry, pipenv)
|
|
578
|
+
* when resolvable so the test run uses the env that has pytest +
|
|
579
|
+
* pytest-cov installed — falling back to the user's PATH `python`
|
|
580
|
+
* otherwise.
|
|
581
|
+
*
|
|
582
|
+
* Preflight: require at least one Python manifest (pyproject.toml,
|
|
583
|
+
* setup.py, requirements.txt, Pipfile). Without one, this is almost
|
|
584
|
+
* certainly not a Python project (or it's a script-only directory that
|
|
585
|
+
* would need explicit `--lang python` to opt in).
|
|
586
|
+
*
|
|
587
|
+
* Note: pytest-cov plugin presence is NOT preflighted — there is no
|
|
588
|
+
* TOOL_DEFS entry for it, and the spawn outcome is sufficiently clear
|
|
589
|
+
* when it's missing (`pytest: unrecognized arguments: --cov`). The
|
|
590
|
+
* `coverage-py` tool is registry-tracked but the design-doc command
|
|
591
|
+
* uses pytest-cov, not standalone coverage.py.
|
|
592
|
+
*/
|
|
593
|
+
function runPyTestsWithCoverage(cwd) {
|
|
594
|
+
return Promise.resolve((0, run_tests_helper_1.runTestsWithCoverage)({
|
|
595
|
+
pack: 'python',
|
|
596
|
+
cmd: (() => {
|
|
597
|
+
const venvPython = findPyProjectVenvPython(cwd);
|
|
598
|
+
const py = venvPython ?? 'python';
|
|
599
|
+
return `${py} -m pytest --cov --cov-report=json:coverage.json`;
|
|
600
|
+
})(),
|
|
601
|
+
cwd,
|
|
602
|
+
artifact: 'coverage.json',
|
|
603
|
+
preflight: (cwd) => {
|
|
604
|
+
const hasManifest = (0, runner_1.fileExists)(cwd, 'pyproject.toml') ||
|
|
605
|
+
(0, runner_1.fileExists)(cwd, 'setup.py') ||
|
|
606
|
+
(0, runner_1.fileExists)(cwd, 'requirements.txt') ||
|
|
607
|
+
(0, runner_1.fileExists)(cwd, 'Pipfile');
|
|
608
|
+
if (!hasManifest) {
|
|
609
|
+
return 'no Python project manifest (pyproject.toml/setup.py/requirements.txt/Pipfile) in this directory';
|
|
610
|
+
}
|
|
611
|
+
return null;
|
|
612
|
+
},
|
|
613
|
+
}));
|
|
614
|
+
}
|
|
567
615
|
const pyCoverageProvider = {
|
|
568
616
|
source: 'python',
|
|
569
617
|
async gather(cwd) {
|
|
570
618
|
return gatherPyCoverageResult(cwd);
|
|
571
619
|
},
|
|
620
|
+
async runTests(cwd) {
|
|
621
|
+
return runPyTestsWithCoverage(cwd);
|
|
622
|
+
},
|
|
572
623
|
};
|
|
573
624
|
/**
|
|
574
625
|
* Capture Python module specifiers from source text. Handles both
|
|
@@ -799,26 +850,33 @@ function gatherPyLicensesResult(cwd) {
|
|
|
799
850
|
(0, runner_1.fileExists)(cwd, 'setup.py') ||
|
|
800
851
|
(0, runner_1.fileExists)(cwd, 'requirements.txt') ||
|
|
801
852
|
(0, runner_1.fileExists)(cwd, 'Pipfile');
|
|
802
|
-
if (!hasManifest)
|
|
803
|
-
return
|
|
853
|
+
if (!hasManifest) {
|
|
854
|
+
return {
|
|
855
|
+
kind: 'no-manifest',
|
|
856
|
+
reason: 'no pyproject.toml / setup.py / requirements.txt / Pipfile',
|
|
857
|
+
};
|
|
858
|
+
}
|
|
804
859
|
const venvPython = findPyProjectVenvPython(cwd);
|
|
805
|
-
if (!venvPython)
|
|
806
|
-
return
|
|
860
|
+
if (!venvPython) {
|
|
861
|
+
return { kind: 'unavailable', reason: 'no resolvable project venv python' };
|
|
862
|
+
}
|
|
807
863
|
const status = (0, tool_registry_1.findTool)(tool_registry_1.TOOL_DEFS['pip-licenses'], cwd);
|
|
808
|
-
if (!status.available || !status.path)
|
|
809
|
-
return
|
|
864
|
+
if (!status.available || !status.path) {
|
|
865
|
+
return { kind: 'unavailable', reason: 'pip-licenses not installed' };
|
|
866
|
+
}
|
|
810
867
|
const raw = (0, runner_1.run)(`${status.path} --python ${venvPython} --format=json --with-license-file --no-license-path --with-description --with-urls --with-authors 2>/dev/null`, cwd, 120000);
|
|
811
868
|
if (!raw)
|
|
812
|
-
return
|
|
869
|
+
return { kind: 'unavailable', reason: 'pip-licenses produced no output' };
|
|
813
870
|
let data;
|
|
814
871
|
try {
|
|
815
872
|
data = JSON.parse(raw);
|
|
816
873
|
}
|
|
817
|
-
catch {
|
|
818
|
-
return
|
|
874
|
+
catch (err) {
|
|
875
|
+
return { kind: 'unavailable', reason: `pip-licenses parse error: ${err.message}` };
|
|
876
|
+
}
|
|
877
|
+
if (!Array.isArray(data)) {
|
|
878
|
+
return { kind: 'unavailable', reason: 'pip-licenses output was not a JSON array' };
|
|
819
879
|
}
|
|
820
|
-
if (!Array.isArray(data))
|
|
821
|
-
return null;
|
|
822
880
|
// Top-level attribution reuses the same pip-show-graph BFS the
|
|
823
881
|
// depVulns path builds. Self-parent invariant (`index[top]` contains
|
|
824
882
|
// `top`) classifies every row without a second `pip show` pass.
|
|
@@ -842,15 +900,20 @@ function gatherPyLicensesResult(cwd) {
|
|
|
842
900
|
isTopLevel: hasIndex ? (parents?.includes(entry.Name) ?? false) : undefined,
|
|
843
901
|
});
|
|
844
902
|
}
|
|
845
|
-
|
|
903
|
+
const envelope = {
|
|
846
904
|
schemaVersion: 1,
|
|
847
905
|
tool: 'pip-licenses',
|
|
848
906
|
findings,
|
|
849
907
|
};
|
|
908
|
+
return { kind: 'success', envelope };
|
|
850
909
|
}
|
|
851
910
|
const pyLicensesProvider = {
|
|
852
911
|
source: 'python',
|
|
853
912
|
async gather(cwd) {
|
|
913
|
+
const outcome = gatherPyLicensesResult(cwd);
|
|
914
|
+
return outcome.kind === 'success' ? outcome.envelope : null;
|
|
915
|
+
},
|
|
916
|
+
async gatherOutcome(cwd) {
|
|
854
917
|
return gatherPyLicensesResult(cwd);
|
|
855
918
|
},
|
|
856
919
|
};
|
|
@@ -860,12 +923,54 @@ exports.python = {
|
|
|
860
923
|
sourceExtensions: ['.py'],
|
|
861
924
|
testFilePatterns: ['test_*.py', '*_test.py'],
|
|
862
925
|
extraExcludes: ['__pycache__', '.pytest_cache', '.ruff_cache', '.venv', 'venv', '.mypy_cache'],
|
|
926
|
+
// D027 (2.4.7): Python module/class/function docstrings use either
|
|
927
|
+
// triple-double or triple-single quotes. Match the docstring opener
|
|
928
|
+
// at the start of a (possibly indented) line.
|
|
929
|
+
docCommentPatterns: ['^[[:space:]]*"""', "^[[:space:]]*'''"],
|
|
930
|
+
// D034 (2.4.7): `requests` and `urllib3` TLS-bypass idioms.
|
|
931
|
+
// `verify=False` is the canonical opt-out on every `requests` call;
|
|
932
|
+
// `disable_warnings(InsecureRequestWarning)` typically accompanies it
|
|
933
|
+
// to silence the runtime warning. `VERIFY_SSL=false` is a common
|
|
934
|
+
// env-var convention in Django/Flask configs.
|
|
935
|
+
tlsBypassPatterns: ['verify[[:space:]]*=[[:space:]]*False', 'VERIFY_SSL.*[Ff]alse'],
|
|
936
|
+
upgradeCommand(name, version) {
|
|
937
|
+
return `pip install '${name}==${version}'`;
|
|
938
|
+
},
|
|
939
|
+
// Django (views/viewsets/serializers), Flask/FastAPI (routers, api
|
|
940
|
+
// endpoints), Celery (tasks) — declarations cover the dominant
|
|
941
|
+
// server-side Python patterns. Plain library / data-science code
|
|
942
|
+
// (where `services/` is rare) simply doesn't match anything and
|
|
943
|
+
// the analyzer degrades to "no primary architecture detected" —
|
|
944
|
+
// exactly the pre-extension behavior.
|
|
945
|
+
architecturalShape: {
|
|
946
|
+
primaryComponentPaths: [
|
|
947
|
+
'/views/',
|
|
948
|
+
'/viewsets/',
|
|
949
|
+
'/handlers/',
|
|
950
|
+
'/services/',
|
|
951
|
+
'/api/',
|
|
952
|
+
'/routers/',
|
|
953
|
+
'/tasks/',
|
|
954
|
+
],
|
|
955
|
+
routePaths: ['/views/', '/viewsets/', '/routers/', '/api/', '/urls.py'],
|
|
956
|
+
modelPaths: ['/models/', '/schemas/', '/serializers/'],
|
|
957
|
+
vocabulary: {
|
|
958
|
+
components: 'views/services',
|
|
959
|
+
models: 'models',
|
|
960
|
+
routes: 'routes',
|
|
961
|
+
},
|
|
962
|
+
testGapPriority: {
|
|
963
|
+
high: ['/views/', '/services/', '/handlers/', '/tasks/'],
|
|
964
|
+
medium: ['/viewsets/', '/routers/', '/api/', '/serializers/'],
|
|
965
|
+
},
|
|
966
|
+
},
|
|
967
|
+
clocLanguageNames: ['Python'],
|
|
863
968
|
detect(cwd) {
|
|
864
969
|
return ((0, runner_1.fileExists)(cwd, 'pyproject.toml') ||
|
|
865
970
|
(0, runner_1.fileExists)(cwd, 'setup.py') ||
|
|
866
971
|
(0, runner_1.fileExists)(cwd, 'requirements.txt') ||
|
|
867
972
|
(0, runner_1.fileExists)(cwd, 'Pipfile') ||
|
|
868
|
-
|
|
973
|
+
hasPyFile(cwd));
|
|
869
974
|
},
|
|
870
975
|
tools: ['ruff', 'pip-audit', 'coverage-py', 'pip-licenses'],
|
|
871
976
|
semgrepRulesets: ['p/python'],
|