@vyuhlabs/dxkit 2.4.6 → 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 +885 -0
- package/README.md +131 -26
- 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 +83 -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/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 +3 -2
- package/dist/analyzers/tools/osv-scanner-deps.d.ts.map +1 -1
- package/dist/analyzers/tools/osv-scanner-deps.js +32 -14
- package/dist/analyzers/tools/osv-scanner-deps.js.map +1 -1
- 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.map +1 -1
- package/dist/analyzers/tools/tool-registry.js +11 -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/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 +206 -0
- package/dist/languages/index.js.map +1 -1
- package/dist/languages/java.d.ts.map +1 -1
- package/dist/languages/java.js +113 -26
- package/dist/languages/java.js.map +1 -1
- package/dist/languages/kotlin.d.ts.map +1 -1
- package/dist/languages/kotlin.js +132 -26
- 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 +39 -1
- package/dist/languages/ruby.d.ts.map +1 -1
- package/dist/languages/ruby.js +178 -44
- package/dist/languages/ruby.js.map +1 -1
- 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 +16 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/templates/.claude/commands/dashboard.md +17 -9
- 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
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Canonical depth-unlimited path walker for language packs.
|
|
4
|
+
*
|
|
5
|
+
* Every pack that needs to discover its manifest files (`.csproj` /
|
|
6
|
+
* `.sln` for C#, `pyproject.toml` / `setup.py` for Python,
|
|
7
|
+
* `build.gradle.kts` for Kotlin, `pom.xml` for Java, `Gemfile` for
|
|
8
|
+
* Ruby, etc.) routes through `walkPaths`. ONE walker — no per-pack
|
|
9
|
+
* recursive readdir reimplementations, no hardcoded depth caps that
|
|
10
|
+
* silently miss deep monorepo structures.
|
|
11
|
+
*
|
|
12
|
+
* Why a separate primitive from `walk-source-files.ts`:
|
|
13
|
+
*
|
|
14
|
+
* - `walkSourceFiles` resolves auto-generated patterns + test
|
|
15
|
+
* patterns + default extensions from the language registry
|
|
16
|
+
* (`LANGUAGES.flatMap(...)`). Language pack modules that need
|
|
17
|
+
* manifest discovery during their own initialization can't import
|
|
18
|
+
* that — circular dependency, partially-loaded registry entries
|
|
19
|
+
* surface as `undefined`-property reads at module-eval time.
|
|
20
|
+
*
|
|
21
|
+
* - This walker is the foundational layer: pure FS traversal +
|
|
22
|
+
* `isExcludedPath` (gitignore + bundled defaults) + extension
|
|
23
|
+
* filter. No LANGUAGES touch, no autogen/test heuristics. Safe to
|
|
24
|
+
* call from any pack at any point in the load order.
|
|
25
|
+
*
|
|
26
|
+
* Behavioral contract:
|
|
27
|
+
*
|
|
28
|
+
* - **Depth-unlimited.** The single largest class of latent bugs
|
|
29
|
+
* the previous per-pack walkers shipped: `maxDepth = 2/3/4/5`
|
|
30
|
+
* caps chosen by each pack author based on their idea of "deep
|
|
31
|
+
* enough." Real customer monorepos routinely exceed every one of
|
|
32
|
+
* those values (dpl-studio: 6–9). This walker walks the whole
|
|
33
|
+
* tree minus exclusions, period.
|
|
34
|
+
*
|
|
35
|
+
* - **Exclusion-aware.** Honors the bundled exclusion list
|
|
36
|
+
* (`node_modules`, `bin`, `obj`, `vendor`, `dist`, `target`, …)
|
|
37
|
+
* plus the project's `.gitignore` + `.dxkit-ignore` via the
|
|
38
|
+
* canonical `isExcludedPath`. Same answer the rest of dxkit
|
|
39
|
+
* uses.
|
|
40
|
+
*
|
|
41
|
+
* - **Dot-directory pruning.** `.git`, `.vscode`, `.idea`,
|
|
42
|
+
* `.dxkit`, etc. are universally skipped even when not in
|
|
43
|
+
* `.gitignore`.
|
|
44
|
+
*
|
|
45
|
+
* - **POSIX paths, relative to cwd, sorted.** Deterministic for
|
|
46
|
+
* test fixtures and snapshot comparisons.
|
|
47
|
+
*/
|
|
48
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
49
|
+
if (k2 === undefined) k2 = k;
|
|
50
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
51
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
52
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
53
|
+
}
|
|
54
|
+
Object.defineProperty(o, k2, desc);
|
|
55
|
+
}) : (function(o, m, k, k2) {
|
|
56
|
+
if (k2 === undefined) k2 = k;
|
|
57
|
+
o[k2] = m[k];
|
|
58
|
+
}));
|
|
59
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
60
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
61
|
+
}) : function(o, v) {
|
|
62
|
+
o["default"] = v;
|
|
63
|
+
});
|
|
64
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
65
|
+
var ownKeys = function(o) {
|
|
66
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
67
|
+
var ar = [];
|
|
68
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
69
|
+
return ar;
|
|
70
|
+
};
|
|
71
|
+
return ownKeys(o);
|
|
72
|
+
};
|
|
73
|
+
return function (mod) {
|
|
74
|
+
if (mod && mod.__esModule) return mod;
|
|
75
|
+
var result = {};
|
|
76
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
77
|
+
__setModuleDefault(result, mod);
|
|
78
|
+
return result;
|
|
79
|
+
};
|
|
80
|
+
})();
|
|
81
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
82
|
+
exports.clearWalkPathsCache = clearWalkPathsCache;
|
|
83
|
+
exports.walkPaths = walkPaths;
|
|
84
|
+
const fs = __importStar(require("fs"));
|
|
85
|
+
const path = __importStar(require("path"));
|
|
86
|
+
const exclusions_1 = require("./exclusions");
|
|
87
|
+
// Memoization keyed by `(cwd, opts-fingerprint)`. Mirrors
|
|
88
|
+
// `walk-source-files`'s cache pattern so repeat callers within one
|
|
89
|
+
// process pay the walk cost once.
|
|
90
|
+
const walkCache = new Map();
|
|
91
|
+
function clearWalkPathsCache() {
|
|
92
|
+
walkCache.clear();
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Walk the tree rooted at `cwd` and return every file matching the
|
|
96
|
+
* extension or basename filter, depth-unlimited, exclusion-aware.
|
|
97
|
+
* Returns POSIX-style relative paths, sorted. Never throws —
|
|
98
|
+
* unreadable directories are skipped and the partial result is
|
|
99
|
+
* returned.
|
|
100
|
+
*/
|
|
101
|
+
function walkPaths(cwd, opts) {
|
|
102
|
+
const respectIgnore = opts.respectIgnore ?? true;
|
|
103
|
+
const extensions = new Set(opts.extensions.map((e) => (e.startsWith('.') ? e : `.${e}`)));
|
|
104
|
+
const basenames = new Set(opts.basenames ?? []);
|
|
105
|
+
const cacheKey = `${cwd}\0${[...extensions].sort().join(',')}\0${[...basenames].sort().join(',')}\0${respectIgnore}`;
|
|
106
|
+
const hit = walkCache.get(cacheKey);
|
|
107
|
+
if (hit)
|
|
108
|
+
return hit;
|
|
109
|
+
const out = [];
|
|
110
|
+
walkDir(cwd, '', { extensions, basenames, respectIgnore }, out);
|
|
111
|
+
out.sort();
|
|
112
|
+
walkCache.set(cacheKey, out);
|
|
113
|
+
return out;
|
|
114
|
+
}
|
|
115
|
+
function walkDir(cwd, relDir, opts, out) {
|
|
116
|
+
const absDir = relDir ? path.join(cwd, relDir) : cwd;
|
|
117
|
+
let entries;
|
|
118
|
+
try {
|
|
119
|
+
entries = fs.readdirSync(absDir, { withFileTypes: true });
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
for (const ent of entries) {
|
|
125
|
+
const relPath = relDir ? `${relDir}/${ent.name}` : ent.name;
|
|
126
|
+
if (ent.isDirectory()) {
|
|
127
|
+
// Always skip dot-directories — universal noise (.git, .vscode,
|
|
128
|
+
// .idea, .dxkit, .ci, …). Many aren't in `.gitignore` but no
|
|
129
|
+
// sane manifest discovery wants them.
|
|
130
|
+
if (ent.name.startsWith('.'))
|
|
131
|
+
continue;
|
|
132
|
+
// Bundled excludes (node_modules, bin, obj, vendor, target,
|
|
133
|
+
// dist, …) + project `.gitignore`/`.dxkit-ignore`.
|
|
134
|
+
if (opts.respectIgnore && (0, exclusions_1.isExcludedPath)(cwd, relPath))
|
|
135
|
+
continue;
|
|
136
|
+
walkDir(cwd, relPath, opts, out);
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
if (!ent.isFile())
|
|
140
|
+
continue;
|
|
141
|
+
const ext = path.extname(ent.name);
|
|
142
|
+
const matches = opts.extensions.has(ext) || opts.basenames.has(ent.name);
|
|
143
|
+
if (!matches)
|
|
144
|
+
continue;
|
|
145
|
+
if (opts.respectIgnore && (0, exclusions_1.isExcludedPath)(cwd, relPath))
|
|
146
|
+
continue;
|
|
147
|
+
out.push(relPath);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=walk-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walk-paths.js","sourceRoot":"","sources":["../../../src/analyzers/tools/walk-paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { LanguageId } from '../../types';
|
|
2
|
+
export interface WalkOpts {
|
|
3
|
+
/** Restrict to specific extensions (e.g. `['.ts', '.tsx']`). Default:
|
|
4
|
+
* union across every registered language pack. */
|
|
5
|
+
extensions?: string[];
|
|
6
|
+
/** Include test files? Default: false. Test files are matched by
|
|
7
|
+
* `allTestFilePatterns()` — basename globs (`*.test.ts`) and
|
|
8
|
+
* path-anchored patterns (`tests/*.rs`). */
|
|
9
|
+
includeTests?: boolean;
|
|
10
|
+
/** Include auto-generated files (basename glob + 2KB header marker)?
|
|
11
|
+
* Default: false. Matches the post-D028 canonical "counted source
|
|
12
|
+
* file" predicate. */
|
|
13
|
+
includeAutogen?: boolean;
|
|
14
|
+
/** Apply `.gitignore` + `.dxkit-ignore` + bundled defaults? Default:
|
|
15
|
+
* true. Set false only for paths that genuinely need a raw FS view. */
|
|
16
|
+
respectIgnore?: boolean;
|
|
17
|
+
/** Restrict to one language pack's `sourceExtensions`. Default: all. */
|
|
18
|
+
packId?: LanguageId;
|
|
19
|
+
}
|
|
20
|
+
export declare function clearWalkCache(): void;
|
|
21
|
+
/**
|
|
22
|
+
* Walk the source tree rooted at `cwd` and return relative POSIX paths
|
|
23
|
+
* (no leading `./`) sorted for determinism. Returns `[]` for non-
|
|
24
|
+
* existent or non-directory roots — never throws.
|
|
25
|
+
*/
|
|
26
|
+
export declare function walkSourceFiles(cwd: string, opts?: WalkOpts): string[];
|
|
27
|
+
export interface CountOpts {
|
|
28
|
+
/** 'files' = count of files with ≥1 match. 'lines' = total match
|
|
29
|
+
* count across all lines. Default: 'lines'. */
|
|
30
|
+
mode?: 'files' | 'lines';
|
|
31
|
+
/** Skip lines whose match falls on a comment line. Default: false.
|
|
32
|
+
* D074 closure — pre-fix, line-counters matched a commented-out
|
|
33
|
+
* occurrence of a target call the same as a live one and inflated
|
|
34
|
+
* counts 2x+ on commented-code-heavy codebases (platform: 1578
|
|
35
|
+
* reported / 733 active for the JS print-statement family).
|
|
36
|
+
*
|
|
37
|
+
* Per-file comment marker chosen by extension:
|
|
38
|
+
* .ts/.tsx/.js/.jsx/.go/.rs/.java/.kt/.kts/.cs/.cpp/.c/.h/.hpp/.swift -> slash-style
|
|
39
|
+
* .py/.rb/.sh/.yml/.yaml/.toml -> hash-style
|
|
40
|
+
* Files with no known mapping are scanned as-is (no comment filter). */
|
|
41
|
+
skipComments?: boolean;
|
|
42
|
+
/** Return top-N (by match count) offender list. Default: 0 (skip). */
|
|
43
|
+
perFileTopN?: number;
|
|
44
|
+
}
|
|
45
|
+
export interface CountResult {
|
|
46
|
+
/** Sum of matches across all walked files. */
|
|
47
|
+
lines: number;
|
|
48
|
+
/** Count of files with ≥1 match. */
|
|
49
|
+
files: number;
|
|
50
|
+
/** Top-N offenders. Empty unless `perFileTopN > 0`. */
|
|
51
|
+
perFile: Array<{
|
|
52
|
+
file: string;
|
|
53
|
+
count: number;
|
|
54
|
+
}>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Read each file once, scan in-process. Pass `patterns` as compiled
|
|
58
|
+
* regexes for repeated use, or as strings (compiled here with global
|
|
59
|
+
* flag). Each line is tested against the alternation; multiple
|
|
60
|
+
* patterns are unioned via `RegExp` `|` — pass them pre-merged for
|
|
61
|
+
* best performance.
|
|
62
|
+
*/
|
|
63
|
+
export declare function countLineMatches(cwd: string, files: string[], patterns: RegExp[] | string[], opts?: CountOpts): CountResult;
|
|
64
|
+
export type CommentSyntax = 'slash' | 'hash' | 'none';
|
|
65
|
+
export declare function commentSyntaxFor(relPath: string): CommentSyntax;
|
|
66
|
+
export declare function isCommentLine(rawLine: string, syntax: CommentSyntax): boolean;
|
|
67
|
+
/** Surface the pack-aware `sourceExtensions` for a given packId. Used
|
|
68
|
+
* when callers want to walk one pack's files but bypass the registry. */
|
|
69
|
+
export declare function packSourceExtensions(packId: LanguageId): string[];
|
|
70
|
+
//# sourceMappingURL=walk-source-files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walk-source-files.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/walk-source-files.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,MAAM,WAAW,QAAQ;IACvB;uDACmD;IACnD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB;;iDAE6C;IAC7C,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;2BAEuB;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;4EACwE;IACxE,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,wEAAwE;IACxE,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAeD,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,QAAa,GAAG,MAAM,EAAE,CAe1E;AAoJD,MAAM,WAAW,SAAS;IACxB;oDACgD;IAChD,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAEzB;;;;;;;;;6EASyE;IACzE,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,EAC7B,IAAI,GAAE,SAAc,GACnB,WAAW,CAqDb;AAmBD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAqC/D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAQ7E;AAID;0EAC0E;AAC1E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE,CAEjE"}
|
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.clearWalkCache = clearWalkCache;
|
|
37
|
+
exports.walkSourceFiles = walkSourceFiles;
|
|
38
|
+
exports.countLineMatches = countLineMatches;
|
|
39
|
+
exports.commentSyntaxFor = commentSyntaxFor;
|
|
40
|
+
exports.isCommentLine = isCommentLine;
|
|
41
|
+
exports.packSourceExtensions = packSourceExtensions;
|
|
42
|
+
/**
|
|
43
|
+
* G_v4_7 (2.4.7) — canonical source-file walker + line-match counter.
|
|
44
|
+
*
|
|
45
|
+
* Every consumer that needs "the list of source files in this repo"
|
|
46
|
+
* routes through `walkSourceFiles`. Every consumer that needs "how
|
|
47
|
+
* many lines match pattern P across source files" routes through
|
|
48
|
+
* `countLineMatches`. ONE walker, ONE counter — replaces the four
|
|
49
|
+
* site-specific implementations that were drifting (D075, D079).
|
|
50
|
+
*
|
|
51
|
+
* NEVER shells out. Pre-fix `grep -rEf <pat> --include=*.js .` on
|
|
52
|
+
* web-client produced 67MB of stdout (matched minified .js content)
|
|
53
|
+
* and silently failed with ENOBUFS — `run()`'s 64MB ceiling truncated
|
|
54
|
+
* to empty string, `consoleLogCount` reported 0 when reality was ~1370
|
|
55
|
+
* (D082/D083). Walking the curated set in JS and scanning each file's
|
|
56
|
+
* lines in-process eliminates the maxBuffer ceiling entirely.
|
|
57
|
+
*
|
|
58
|
+
* Filter pipeline (per file encountered):
|
|
59
|
+
* 1. Directory prune at entry: `isExcludedPath(cwd, relDir)` → never descend.
|
|
60
|
+
* 2. Extension filter (default `allSourceExtensions()`).
|
|
61
|
+
* 3. Path-pattern filter: `isExcludedPath(cwd, relPath)`.
|
|
62
|
+
* 4. Autogen basename glob (`*.designer.cs`, `*.pb.go`, …).
|
|
63
|
+
* 5. Autogen header marker (first 2KB).
|
|
64
|
+
* 6. Test-file filter (skip unless `includeTests: true`).
|
|
65
|
+
* 7. Pack scoping (when `opts.packId` set).
|
|
66
|
+
*/
|
|
67
|
+
const fs = __importStar(require("fs"));
|
|
68
|
+
const path = __importStar(require("path"));
|
|
69
|
+
const exclusions_1 = require("./exclusions");
|
|
70
|
+
const autogen_header_1 = require("./autogen-header");
|
|
71
|
+
const minified_detection_1 = require("./minified-detection");
|
|
72
|
+
const languages_1 = require("../../languages");
|
|
73
|
+
/** Cache: one entry per (cwd, opts-fingerprint). Cleared via
|
|
74
|
+
* `clearWalkCache()`. Same memo pattern as `loadExclusions`. */
|
|
75
|
+
const walkCache = new Map();
|
|
76
|
+
function clearWalkCache() {
|
|
77
|
+
walkCache.clear();
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Walk the source tree rooted at `cwd` and return relative POSIX paths
|
|
81
|
+
* (no leading `./`) sorted for determinism. Returns `[]` for non-
|
|
82
|
+
* existent or non-directory roots — never throws.
|
|
83
|
+
*/
|
|
84
|
+
function walkSourceFiles(cwd, opts = {}) {
|
|
85
|
+
const resolved = resolveOpts(opts);
|
|
86
|
+
const cacheKey = `${cwd}\0${cacheKeyFor(opts)}`;
|
|
87
|
+
const hit = walkCache.get(cacheKey);
|
|
88
|
+
if (hit)
|
|
89
|
+
return hit;
|
|
90
|
+
const out = [];
|
|
91
|
+
try {
|
|
92
|
+
walkDir(cwd, '', resolved, out);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// I/O error mid-walk: surface what we found so far.
|
|
96
|
+
}
|
|
97
|
+
out.sort();
|
|
98
|
+
walkCache.set(cacheKey, out);
|
|
99
|
+
return out;
|
|
100
|
+
}
|
|
101
|
+
function resolveOpts(opts) {
|
|
102
|
+
// Precedence: explicit `extensions` > pack-scoped extensions > all packs.
|
|
103
|
+
let exts;
|
|
104
|
+
if (opts.extensions) {
|
|
105
|
+
exts = opts.extensions;
|
|
106
|
+
}
|
|
107
|
+
else if (opts.packId) {
|
|
108
|
+
exts = (0, languages_1.getLanguage)(opts.packId)?.sourceExtensions ?? [];
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
exts = (0, languages_1.allSourceExtensions)();
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
extensions: new Set(exts.map((e) => (e.startsWith('.') ? e : `.${e}`))),
|
|
115
|
+
includeTests: opts.includeTests ?? false,
|
|
116
|
+
includeAutogen: opts.includeAutogen ?? false,
|
|
117
|
+
respectIgnore: opts.respectIgnore ?? true,
|
|
118
|
+
autogenBasenamePatterns: opts.includeAutogen ? [] : (0, languages_1.allAutogenSourcePatterns)(),
|
|
119
|
+
testFilePatterns: splitTestPatterns((0, languages_1.allTestFilePatterns)()),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
function cacheKeyFor(opts) {
|
|
123
|
+
return JSON.stringify([
|
|
124
|
+
opts.extensions ?? null,
|
|
125
|
+
opts.includeTests ?? false,
|
|
126
|
+
opts.includeAutogen ?? false,
|
|
127
|
+
opts.respectIgnore ?? true,
|
|
128
|
+
opts.packId ?? null,
|
|
129
|
+
]);
|
|
130
|
+
}
|
|
131
|
+
function walkDir(cwd, relDir, opts, out) {
|
|
132
|
+
const absDir = relDir ? path.join(cwd, relDir) : cwd;
|
|
133
|
+
let entries;
|
|
134
|
+
try {
|
|
135
|
+
entries = fs.readdirSync(absDir, { withFileTypes: true });
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
for (const ent of entries) {
|
|
141
|
+
const relPath = relDir ? `${relDir}/${ent.name}` : ent.name;
|
|
142
|
+
if (ent.isDirectory()) {
|
|
143
|
+
// Prune at directory boundary so node_modules/ etc. are never
|
|
144
|
+
// descended into. Massive perf win on minified-JS-heavy repos.
|
|
145
|
+
if (opts.respectIgnore && (0, exclusions_1.isExcludedPath)(cwd, relPath))
|
|
146
|
+
continue;
|
|
147
|
+
// Skip dot-directories ALWAYS (.git, .vscode, .idea, .dxkit…).
|
|
148
|
+
// These rarely appear in `.gitignore` but are universally noise.
|
|
149
|
+
if (ent.name.startsWith('.'))
|
|
150
|
+
continue;
|
|
151
|
+
walkDir(cwd, relPath, opts, out);
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
if (!ent.isFile())
|
|
155
|
+
continue;
|
|
156
|
+
// Extension gate first (cheap).
|
|
157
|
+
const ext = path.extname(ent.name);
|
|
158
|
+
if (!opts.extensions.has(ext))
|
|
159
|
+
continue;
|
|
160
|
+
// Pack scoping (cheap — done after extension because packId is rare).
|
|
161
|
+
if (opts.respectIgnore && (0, exclusions_1.isExcludedPath)(cwd, relPath))
|
|
162
|
+
continue;
|
|
163
|
+
// Test-file filter.
|
|
164
|
+
if (!opts.includeTests && isTestFile(relPath, ent.name, opts.testFilePatterns))
|
|
165
|
+
continue;
|
|
166
|
+
// Autogen basename glob.
|
|
167
|
+
if (!opts.includeAutogen && matchesAnyBasenameGlob(ent.name, opts.autogenBasenamePatterns)) {
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
// Autogen header marker (most expensive — reads first 2KB).
|
|
171
|
+
if (!opts.includeAutogen && (0, autogen_header_1.isAutogeneratedByHeader)(path.join(absDir, ent.name)))
|
|
172
|
+
continue;
|
|
173
|
+
// Minified / bundled output detection — catches webpack/vite/esbuild
|
|
174
|
+
// hash-suffixed chunks, CDN-downloaded vendor libs dropped into
|
|
175
|
+
// public/, and pre-minified vendored editors that slip past the
|
|
176
|
+
// standard exclusion list. Same opt-in shape as the autogen
|
|
177
|
+
// checks — `includeAutogen: true` keeps them. Cheap: only fires
|
|
178
|
+
// on .js/.jsx/.mjs/.cjs/.css/.scss/.sass/.less and reads 4KB.
|
|
179
|
+
if (!opts.includeAutogen && (0, minified_detection_1.isLikelyMinified)(path.join(absDir, ent.name)))
|
|
180
|
+
continue;
|
|
181
|
+
out.push(relPath);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
function isTestFile(relPath, basename, patterns) {
|
|
185
|
+
for (const pat of patterns.nameOnly) {
|
|
186
|
+
if (matchesBasenameGlob(pat, basename))
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
for (const pat of patterns.pathAnchored) {
|
|
190
|
+
// Path-anchored patterns like `tests/*.rs` — match against the
|
|
191
|
+
// relative path. Convert glob to regex (path-segment aware).
|
|
192
|
+
if (matchesPathGlob(pat, relPath))
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
function matchesAnyBasenameGlob(basename, patterns) {
|
|
198
|
+
for (const pat of patterns) {
|
|
199
|
+
if (matchesBasenameGlob(pat, basename))
|
|
200
|
+
return true;
|
|
201
|
+
}
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
function matchesBasenameGlob(pat, base) {
|
|
205
|
+
if (!pat.includes('*') && !pat.includes('?'))
|
|
206
|
+
return pat === base;
|
|
207
|
+
const regex = globToRegex(pat, false);
|
|
208
|
+
return regex.test(base);
|
|
209
|
+
}
|
|
210
|
+
function matchesPathGlob(pat, relPath) {
|
|
211
|
+
// `tests/*.rs` should match `tests/foo.rs` AND `crate/tests/foo.rs`
|
|
212
|
+
// (path-anchored "anywhere in tree"). Mirrors find's `-path "*/x"`.
|
|
213
|
+
const regex = globToRegex(pat, true);
|
|
214
|
+
return regex.test(relPath);
|
|
215
|
+
}
|
|
216
|
+
function globToRegex(pat, allowSlash) {
|
|
217
|
+
const star = allowSlash ? '.*' : '[^/]*';
|
|
218
|
+
const body = pat
|
|
219
|
+
.replace(/[.+^${}()|[\]\\]/g, '\\$&')
|
|
220
|
+
.replace(/\*/g, star)
|
|
221
|
+
.replace(/\?/g, allowSlash ? '.' : '[^/]');
|
|
222
|
+
// Path-anchored: allow optional leading directory segments.
|
|
223
|
+
return new RegExp(allowSlash ? `(?:^|/)${body}$` : `^${body}$`, 'i');
|
|
224
|
+
}
|
|
225
|
+
function splitTestPatterns(patterns) {
|
|
226
|
+
const nameOnly = [];
|
|
227
|
+
const pathAnchored = [];
|
|
228
|
+
for (const p of patterns) {
|
|
229
|
+
if (p.includes('/'))
|
|
230
|
+
pathAnchored.push(p);
|
|
231
|
+
else
|
|
232
|
+
nameOnly.push(p);
|
|
233
|
+
}
|
|
234
|
+
return { nameOnly, pathAnchored };
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Read each file once, scan in-process. Pass `patterns` as compiled
|
|
238
|
+
* regexes for repeated use, or as strings (compiled here with global
|
|
239
|
+
* flag). Each line is tested against the alternation; multiple
|
|
240
|
+
* patterns are unioned via `RegExp` `|` — pass them pre-merged for
|
|
241
|
+
* best performance.
|
|
242
|
+
*/
|
|
243
|
+
function countLineMatches(cwd, files, patterns, opts = {}) {
|
|
244
|
+
const mode = opts.mode ?? 'lines';
|
|
245
|
+
const skipComments = opts.skipComments ?? false;
|
|
246
|
+
const topN = opts.perFileTopN ?? 0;
|
|
247
|
+
const compiled = compilePatterns(patterns);
|
|
248
|
+
if (compiled.length === 0)
|
|
249
|
+
return { lines: 0, files: 0, perFile: [] };
|
|
250
|
+
let totalLines = 0;
|
|
251
|
+
let totalFiles = 0;
|
|
252
|
+
const perFile = [];
|
|
253
|
+
for (const relPath of files) {
|
|
254
|
+
let content;
|
|
255
|
+
try {
|
|
256
|
+
content = fs.readFileSync(path.join(cwd, relPath), 'utf-8');
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
const commentSyntax = skipComments ? commentSyntaxFor(relPath) : null;
|
|
262
|
+
let fileCount = 0;
|
|
263
|
+
for (const rawLine of content.split('\n')) {
|
|
264
|
+
if (commentSyntax && isCommentLine(rawLine, commentSyntax))
|
|
265
|
+
continue;
|
|
266
|
+
let matched = false;
|
|
267
|
+
for (const re of compiled) {
|
|
268
|
+
// Reset lastIndex on `g` flag patterns to avoid stateful skips.
|
|
269
|
+
re.lastIndex = 0;
|
|
270
|
+
if (re.test(rawLine)) {
|
|
271
|
+
matched = true;
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
if (matched)
|
|
276
|
+
fileCount++;
|
|
277
|
+
}
|
|
278
|
+
if (fileCount > 0) {
|
|
279
|
+
totalFiles++;
|
|
280
|
+
totalLines += fileCount;
|
|
281
|
+
if (topN > 0)
|
|
282
|
+
perFile.push({ file: relPath, count: fileCount });
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
let topOffenders = [];
|
|
286
|
+
if (topN > 0) {
|
|
287
|
+
perFile.sort((a, b) => b.count - a.count);
|
|
288
|
+
topOffenders = perFile.slice(0, topN);
|
|
289
|
+
}
|
|
290
|
+
return {
|
|
291
|
+
lines: mode === 'lines' ? totalLines : totalFiles,
|
|
292
|
+
files: totalFiles,
|
|
293
|
+
perFile: topOffenders,
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
function compilePatterns(patterns) {
|
|
297
|
+
const out = [];
|
|
298
|
+
for (const p of patterns) {
|
|
299
|
+
if (p instanceof RegExp) {
|
|
300
|
+
out.push(p);
|
|
301
|
+
}
|
|
302
|
+
else if (typeof p === 'string' && p.length > 0) {
|
|
303
|
+
try {
|
|
304
|
+
out.push(new RegExp(p));
|
|
305
|
+
}
|
|
306
|
+
catch {
|
|
307
|
+
// Skip un-compilable patterns rather than throwing — matches
|
|
308
|
+
// grep's behaviour of warning and continuing.
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
return out;
|
|
313
|
+
}
|
|
314
|
+
function commentSyntaxFor(relPath) {
|
|
315
|
+
const ext = path.extname(relPath).toLowerCase();
|
|
316
|
+
switch (ext) {
|
|
317
|
+
case '.ts':
|
|
318
|
+
case '.tsx':
|
|
319
|
+
case '.js':
|
|
320
|
+
case '.jsx':
|
|
321
|
+
case '.mjs':
|
|
322
|
+
case '.cjs':
|
|
323
|
+
case '.go':
|
|
324
|
+
case '.rs':
|
|
325
|
+
case '.java':
|
|
326
|
+
case '.kt':
|
|
327
|
+
case '.kts':
|
|
328
|
+
case '.cs':
|
|
329
|
+
case '.cpp':
|
|
330
|
+
case '.cxx':
|
|
331
|
+
case '.cc':
|
|
332
|
+
case '.c':
|
|
333
|
+
case '.h':
|
|
334
|
+
case '.hpp':
|
|
335
|
+
case '.swift':
|
|
336
|
+
case '.scala':
|
|
337
|
+
return 'slash';
|
|
338
|
+
case '.py':
|
|
339
|
+
case '.rb':
|
|
340
|
+
case '.sh':
|
|
341
|
+
case '.bash':
|
|
342
|
+
case '.zsh':
|
|
343
|
+
case '.yml':
|
|
344
|
+
case '.yaml':
|
|
345
|
+
case '.toml':
|
|
346
|
+
case '.r':
|
|
347
|
+
return 'hash';
|
|
348
|
+
default:
|
|
349
|
+
return 'none';
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
function isCommentLine(rawLine, syntax) {
|
|
353
|
+
if (syntax === 'none')
|
|
354
|
+
return false;
|
|
355
|
+
const trimmed = rawLine.trimStart();
|
|
356
|
+
if (!trimmed)
|
|
357
|
+
return false;
|
|
358
|
+
if (syntax === 'slash') {
|
|
359
|
+
return trimmed.startsWith('//') || trimmed.startsWith('/*') || trimmed.startsWith('*');
|
|
360
|
+
}
|
|
361
|
+
return trimmed.startsWith('#');
|
|
362
|
+
}
|
|
363
|
+
// ─── Re-exports for test convenience ────────────────────────────────────────
|
|
364
|
+
/** Surface the pack-aware `sourceExtensions` for a given packId. Used
|
|
365
|
+
* when callers want to walk one pack's files but bypass the registry. */
|
|
366
|
+
function packSourceExtensions(packId) {
|
|
367
|
+
return (0, languages_1.getLanguage)(packId)?.sourceExtensions ?? [];
|
|
368
|
+
}
|
|
369
|
+
//# sourceMappingURL=walk-source-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walk-source-files.js","sourceRoot":"","sources":["../../../src/analyzers/tools/walk-source-files.ts"],"names":[],"mappings":"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"}
|