@zxyycom/vibe-check 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -75
- package/dist/esm/check/check.mjs +4 -0
- package/dist/esm/check/check.mjs.map +1 -1
- package/dist/esm/check/flag-enablement.mjs +32 -0
- package/dist/esm/check/flag-enablement.mjs.map +1 -0
- package/dist/esm/check/handoff-provider-identity.mjs +18 -0
- package/dist/esm/check/handoff-provider-identity.mjs.map +1 -0
- package/dist/esm/check/inherited-collection.mjs +2 -2
- package/dist/esm/check/inherited-collection.mjs.map +1 -1
- package/dist/esm/check/project-changes.mjs +2 -0
- package/dist/esm/check/project-changes.mjs.map +1 -0
- package/dist/esm/check/project-context.mjs +2 -0
- package/dist/esm/check/project-context.mjs.map +1 -0
- package/dist/esm/check-settlement/fact-validation.mjs +17 -23
- package/dist/esm/check-settlement/fact-validation.mjs.map +1 -1
- package/dist/esm/check-settlement/facts.mjs.map +1 -1
- package/dist/esm/check-settlement/outcome-normalization.mjs +9 -19
- package/dist/esm/check-settlement/outcome-normalization.mjs.map +1 -1
- package/dist/esm/check-settlement/reason-shape.mjs +12 -0
- package/dist/esm/check-settlement/reason-shape.mjs.map +1 -0
- package/dist/esm/check-settlement/record-store.mjs +14 -17
- package/dist/esm/check-settlement/record-store.mjs.map +1 -1
- package/dist/esm/check-settlement/session.mjs +8 -2
- package/dist/esm/check-settlement/session.mjs.map +1 -1
- package/dist/esm/data-boundary/canonical-data.mjs +36 -7
- package/dist/esm/data-boundary/canonical-data.mjs.map +1 -1
- package/dist/esm/data-boundary/canonical-json.mjs.map +1 -1
- package/dist/esm/data-boundary/closed-values.mjs +43 -3
- package/dist/esm/data-boundary/closed-values.mjs.map +1 -1
- package/dist/esm/{package-checks/project-files → data-boundary}/config-glob.mjs +3 -3
- package/dist/esm/data-boundary/config-glob.mjs.map +1 -0
- package/dist/esm/data-boundary/project-path.mjs +19 -0
- package/dist/esm/data-boundary/project-path.mjs.map +1 -0
- package/dist/esm/data-boundary/value-shapes.mjs +9 -0
- package/dist/esm/data-boundary/value-shapes.mjs.map +1 -1
- package/dist/esm/index.mjs +16 -2
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/machine-output/v4/atomic-publication.mjs +5 -16
- package/dist/esm/machine-output/v4/atomic-publication.mjs.map +1 -1
- package/dist/esm/package-checks/check-authoring.mjs +69 -0
- package/dist/esm/package-checks/check-authoring.mjs.map +1 -0
- package/dist/esm/package-checks/code-quality-findings/finding-waiver-authoring.mjs +40 -0
- package/dist/esm/package-checks/code-quality-findings/finding-waiver-authoring.mjs.map +1 -0
- package/dist/esm/package-checks/code-quality-findings/finding-waiver-evidence.mjs +48 -0
- package/dist/esm/package-checks/code-quality-findings/finding-waiver-evidence.mjs.map +1 -0
- package/dist/esm/package-checks/code-quality-findings/policy.mjs +20 -0
- package/dist/esm/package-checks/code-quality-findings/policy.mjs.map +1 -1
- package/dist/esm/package-checks/command-check/command-check.mjs +55 -0
- package/dist/esm/package-checks/command-check/command-check.mjs.map +1 -0
- package/dist/esm/package-checks/command-check/contract.mjs +2 -0
- package/dist/esm/package-checks/command-check/contract.mjs.map +1 -0
- package/dist/esm/package-checks/command-check/execution.mjs +134 -0
- package/dist/esm/package-checks/command-check/execution.mjs.map +1 -0
- package/dist/esm/package-checks/command-check/options.mjs +284 -0
- package/dist/esm/package-checks/command-check/options.mjs.map +1 -0
- package/dist/esm/package-checks/command-check/transcript.mjs +26 -0
- package/dist/esm/package-checks/command-check/transcript.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/area-policy.mjs +15 -7
- package/dist/esm/package-checks/duplicate-detection/area-policy.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs +1 -1
- package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/default-check.mjs +10 -12
- package/dist/esm/package-checks/duplicate-detection/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/execution.mjs +44 -20
- package/dist/esm/package-checks/duplicate-detection/execution.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs +59 -0
- package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/finding-waiver-identity.mjs +55 -0
- package/dist/esm/package-checks/duplicate-detection/finding-waiver-identity.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs +2 -2
- package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs +1 -1
- package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs +15 -5
- package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs +5 -4
- package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs +22 -47
- package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/options-validation.mjs +20 -25
- package/dist/esm/package-checks/duplicate-detection/options-validation.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/options.mjs.map +1 -1
- package/dist/esm/package-checks/duplicate-detection/records.mjs +27 -6
- package/dist/esm/package-checks/duplicate-detection/records.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/constructor.mjs +9 -11
- package/dist/esm/package-checks/file-metrics/constructor.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/execution.mjs +11 -20
- package/dist/esm/package-checks/file-metrics/execution.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/finding-messages.mjs +22 -0
- package/dist/esm/package-checks/file-metrics/finding-messages.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/options-resolution.mjs +11 -43
- package/dist/esm/package-checks/file-metrics/options-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/options-validation.mjs +15 -25
- package/dist/esm/package-checks/file-metrics/options-validation.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/options.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/records.mjs +2 -9
- package/dist/esm/package-checks/file-metrics/records.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/scc/availability.mjs +2 -2
- package/dist/esm/package-checks/file-metrics/scc/availability.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/scc/batch-planner.mjs +38 -0
- package/dist/esm/package-checks/file-metrics/scc/batch-planner.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/scc/logical-scan-resources.mjs +35 -0
- package/dist/esm/package-checks/file-metrics/scc/logical-scan-resources.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/scc/parser.mjs +4 -4
- package/dist/esm/package-checks/file-metrics/scc/parser.mjs.map +1 -1
- package/dist/esm/package-checks/file-metrics/scc/scanner.mjs +104 -31
- package/dist/esm/package-checks/file-metrics/scc/scanner.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analysis.mjs +61 -15
- package/dist/esm/package-checks/function-metrics/analysis.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/analyzer/analysis-context.mjs +550 -0
- package/dist/esm/package-checks/function-metrics/analyzer/analysis-context.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs +332 -0
- package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/contracts.mjs +7 -0
- package/dist/esm/package-checks/function-metrics/analyzer/contracts.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs +22 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardnd.mjs +113 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardnd.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/protocol.mjs +180 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/protocol.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/registry.mjs +121 -0
- package/dist/esm/package-checks/function-metrics/analyzer/extensions/registry.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs +218 -0
- package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/port-facade.mjs +96 -0
- package/dist/esm/package-checks/function-metrics/analyzer/port-facade.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/reader-registry.mjs +76 -0
- package/dist/esm/package-checks/function-metrics/analyzer/reader-registry.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/csharp.mjs +88 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/csharp.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs +466 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs +289 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/gdscript.mjs +38 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/gdscript.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/go.mjs +44 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/go.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/java-body-states.mjs +113 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/java-body-states.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/java.mjs +247 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/java.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/javascript.mjs +16 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/javascript.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/kotlin.mjs +103 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/kotlin.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/lua.mjs +55 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/lua.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs +106 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/perl.mjs +367 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/perl.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs +265 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/php.mjs +53 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/php.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs +306 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs +404 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs +216 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/ruby.mjs +75 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/ruby.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/rust.mjs +32 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/rust.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/scala.mjs +47 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/scala.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/solidity.mjs +22 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/solidity.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/st.mjs +142 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/st.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/swift.mjs +94 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/swift.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/tsx.mjs +149 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/tsx.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs +85 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs +612 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/vue.mjs +31 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/vue.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs +25 -0
- package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/clike.mjs +492 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/clike.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs +544 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/golike.mjs +141 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/golike.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs +69 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/rubylike.mjs +154 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/rubylike.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/script-language.mjs +36 -0
- package/dist/esm/package-checks/function-metrics/analyzer/shared/script-language.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer-adapter.mjs +56 -0
- package/dist/esm/package-checks/function-metrics/analyzer-adapter.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker-contract.mjs +2 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker-contract.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs +120 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker.mjs +24 -0
- package/dist/esm/package-checks/function-metrics/analyzer-worker.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/constructor.mjs +10 -12
- package/dist/esm/package-checks/function-metrics/constructor.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/execution.mjs +51 -35
- package/dist/esm/package-checks/function-metrics/execution.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/finding-messages.mjs +75 -0
- package/dist/esm/package-checks/function-metrics/finding-messages.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/finding-waiver-identity.mjs +28 -0
- package/dist/esm/package-checks/function-metrics/finding-waiver-identity.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/measurement-model.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/measurement.mjs +163 -26
- package/dist/esm/package-checks/function-metrics/measurement.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/options-resolution.mjs +30 -63
- package/dist/esm/package-checks/function-metrics/options-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/options-validation.mjs +27 -32
- package/dist/esm/package-checks/function-metrics/options-validation.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/options.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/records.mjs +31 -1
- package/dist/esm/package-checks/function-metrics/records.mjs.map +1 -1
- package/dist/esm/package-checks/function-metrics/target-files.mjs +6 -67
- package/dist/esm/package-checks/function-metrics/target-files.mjs.map +1 -1
- package/dist/esm/package-checks/{function-metrics/lizard → host-environment}/csv.mjs +1 -0
- package/dist/esm/package-checks/host-environment/csv.mjs.map +1 -0
- package/dist/esm/package-checks/host-environment/git.mjs +12 -1
- package/dist/esm/package-checks/host-environment/git.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/path.mjs +1 -17
- package/dist/esm/package-checks/host-environment/path.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/process/contract.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/process/result.mjs +43 -17
- package/dist/esm/package-checks/host-environment/process/result.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/process/runner.mjs +7 -5
- package/dist/esm/package-checks/host-environment/process/runner.mjs.map +1 -1
- package/dist/esm/package-checks/host-environment/process.mjs +5 -0
- package/dist/esm/package-checks/host-environment/process.mjs.map +1 -0
- package/dist/esm/package-checks/json-schema-validation/default-check.mjs +9 -11
- package/dist/esm/package-checks/json-schema-validation/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/final-data.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/options-validation.mjs +15 -17
- package/dist/esm/package-checks/json-schema-validation/options-validation.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/options.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs +6 -2
- package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs.map +1 -1
- package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs +11 -3
- package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs.map +1 -1
- package/dist/esm/package-checks/json-validation/default-check.mjs +9 -11
- package/dist/esm/package-checks/json-validation/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/json-validation/final-data.mjs.map +1 -1
- package/dist/esm/package-checks/json-validation/options-validation.mjs +4 -10
- package/dist/esm/package-checks/json-validation/options-validation.mjs.map +1 -1
- package/dist/esm/package-checks/json-validation/options.mjs.map +1 -1
- package/dist/esm/package-checks/local-cache-options.mjs +28 -0
- package/dist/esm/package-checks/local-cache-options.mjs.map +1 -0
- package/dist/esm/package-checks/maintenance-reminders/final-data.mjs.map +1 -1
- package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs +37 -45
- package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs.map +1 -1
- package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs +3 -1
- package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/default-check.mjs +19 -27
- package/dist/esm/package-checks/markdown-link-validation/default-check.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/execution.mjs +27 -24
- package/dist/esm/package-checks/markdown-link-validation/execution.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs +82 -53
- package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/final-data.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs +36 -0
- package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/local-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs +2 -2
- package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs +1 -3
- package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs +10 -3
- package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs +12 -11
- package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/options.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs +184 -0
- package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache.mjs +131 -0
- package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs +58 -57
- package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs.map +1 -1
- package/dist/esm/package-checks/markdown-link-validation/source-reader.mjs +54 -0
- package/dist/esm/package-checks/markdown-link-validation/source-reader.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/unavailable-reasons.mjs +16 -0
- package/dist/esm/package-checks/markdown-link-validation/unavailable-reasons.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/adapter.mjs +125 -0
- package/dist/esm/package-checks/markdown-lint/adapter.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/default-check.mjs +37 -0
- package/dist/esm/package-checks/markdown-lint/default-check.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/execution.mjs +202 -0
- package/dist/esm/package-checks/markdown-lint/execution.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/final-data.mjs +16 -0
- package/dist/esm/package-checks/markdown-lint/final-data.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/finding-messages.mjs +72 -0
- package/dist/esm/package-checks/markdown-lint/finding-messages.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/finding-waiver-identity.mjs +41 -0
- package/dist/esm/package-checks/markdown-lint/finding-waiver-identity.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/findings-cache.mjs +110 -0
- package/dist/esm/package-checks/markdown-lint/findings-cache.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/options-resolution.mjs +74 -0
- package/dist/esm/package-checks/markdown-lint/options-resolution.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/options-validation.mjs +41 -0
- package/dist/esm/package-checks/markdown-lint/options-validation.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/options.mjs +13 -0
- package/dist/esm/package-checks/markdown-lint/options.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/records.mjs +65 -0
- package/dist/esm/package-checks/markdown-lint/records.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-lint/unavailable-reasons.mjs +14 -0
- package/dist/esm/package-checks/markdown-lint/unavailable-reasons.mjs.map +1 -0
- package/dist/esm/package-checks/project-files/collection.mjs +24 -20
- package/dist/esm/package-checks/project-files/collection.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/configuration.mjs +3 -11
- package/dist/esm/package-checks/project-files/configuration.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/gitlink-revision.mjs +3 -6
- package/dist/esm/package-checks/project-files/gitlink-revision.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/gitlink-worktree.mjs +23 -7
- package/dist/esm/package-checks/project-files/gitlink-worktree.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/public-collection.mjs +56 -0
- package/dist/esm/package-checks/project-files/public-collection.mjs.map +1 -0
- package/dist/esm/package-checks/project-files/revision-paths.mjs +3 -3
- package/dist/esm/package-checks/project-files/revision-paths.mjs.map +1 -1
- package/dist/esm/package-checks/project-files/revision-worktree-files.mjs +12 -16
- package/dist/esm/package-checks/project-files/revision-worktree-files.mjs.map +1 -1
- package/dist/esm/package-checks/secret-detection/classification.mjs +15 -0
- package/dist/esm/package-checks/secret-detection/classification.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/default-check.mjs +37 -0
- package/dist/esm/package-checks/secret-detection/default-check.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/execution.mjs +172 -0
- package/dist/esm/package-checks/secret-detection/execution.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/final-data.mjs +33 -0
- package/dist/esm/package-checks/secret-detection/final-data.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/finding-waiver-identity.mjs +30 -0
- package/dist/esm/package-checks/secret-detection/finding-waiver-identity.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/input-preparation.mjs +192 -0
- package/dist/esm/package-checks/secret-detection/input-preparation.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/options-resolution.mjs +40 -0
- package/dist/esm/package-checks/secret-detection/options-resolution.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/options-validation.mjs +22 -0
- package/dist/esm/package-checks/secret-detection/options-validation.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/options.mjs +2 -0
- package/dist/esm/package-checks/secret-detection/options.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/records.mjs +31 -0
- package/dist/esm/package-checks/secret-detection/records.mjs.map +1 -0
- package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs +84 -0
- package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs.map +1 -0
- package/dist/esm/package-tools/admission-policy/define-admission-policy.mjs +10 -0
- package/dist/esm/package-tools/admission-policy/define-admission-policy.mjs.map +1 -0
- package/dist/esm/package-tools/cache/cache-json-by-key.mjs +188 -0
- package/dist/esm/package-tools/cache/cache-json-by-key.mjs.map +1 -0
- package/dist/esm/package-tools/finding-presentation/finding-presentation.mjs +40 -0
- package/dist/esm/package-tools/finding-presentation/finding-presentation.mjs.map +1 -0
- package/dist/esm/{finding-waivers → package-tools/finding-waivers}/reconciliation.mjs +14 -5
- package/dist/esm/package-tools/finding-waivers/reconciliation.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/critical-path-ranking.mjs +46 -0
- package/dist/esm/package-tools/learned-critical-path/critical-path-ranking.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/bounded-history.mjs +56 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/bounded-history.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/prediction.mjs +122 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/prediction.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/preparation.mjs +43 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/preparation.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/recording.mjs +109 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/recording.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/storage.mjs +187 -0
- package/dist/esm/package-tools/learned-critical-path/duration-model/storage.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/selection-layers.mjs +27 -0
- package/dist/esm/package-tools/learned-critical-path/selection-layers.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/static-decision.mjs +55 -0
- package/dist/esm/package-tools/learned-critical-path/static-decision.mjs.map +1 -0
- package/dist/esm/package-tools/learned-critical-path/strategy.mjs +179 -0
- package/dist/esm/package-tools/learned-critical-path/strategy.mjs.map +1 -0
- package/dist/esm/project-definition/check-tree/authoring.mjs +19 -176
- package/dist/esm/project-definition/check-tree/authoring.mjs.map +1 -1
- package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs +184 -0
- package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs.map +1 -0
- package/dist/esm/project-definition/check-tree/collection-authoring.mjs +16 -0
- package/dist/esm/project-definition/check-tree/collection-authoring.mjs.map +1 -0
- package/dist/esm/project-definition/check-tree/flag-conditions.mjs +71 -0
- package/dist/esm/project-definition/check-tree/flag-conditions.mjs.map +1 -0
- package/dist/esm/project-definition/check-tree/materialization.mjs +22 -9
- package/dist/esm/project-definition/check-tree/materialization.mjs.map +1 -1
- package/dist/esm/project-definition/check-tree/resolution.mjs +52 -19
- package/dist/esm/project-definition/check-tree/resolution.mjs.map +1 -1
- package/dist/esm/project-definition/check-tree/scheduling-authoring.mjs +73 -0
- package/dist/esm/project-definition/check-tree/scheduling-authoring.mjs.map +1 -0
- package/dist/esm/project-definition/declarative-snapshot.mjs +74 -0
- package/dist/esm/project-definition/declarative-snapshot.mjs.map +1 -0
- package/dist/esm/project-definition/output-defaults.mjs +18 -1
- package/dist/esm/project-definition/output-defaults.mjs.map +1 -1
- package/dist/esm/project-definition/output-validation.mjs +15 -15
- package/dist/esm/project-definition/output-validation.mjs.map +1 -1
- package/dist/esm/project-definition/progress-rendering-output.mjs +52 -0
- package/dist/esm/project-definition/progress-rendering-output.mjs.map +1 -0
- package/dist/esm/project-definition/project-changes.mjs +70 -0
- package/dist/esm/project-definition/project-changes.mjs.map +1 -0
- package/dist/esm/project-definition/project-definition-validation.mjs +132 -16
- package/dist/esm/project-definition/project-definition-validation.mjs.map +1 -1
- package/dist/esm/project-definition/project-definition.mjs +62 -50
- package/dist/esm/project-definition/project-definition.mjs.map +1 -1
- package/dist/esm/project-definition/resource-unit-mapping.mjs +21 -0
- package/dist/esm/project-definition/resource-unit-mapping.mjs.map +1 -0
- package/dist/esm/project-definition/scheduler-policy.mjs +2 -0
- package/dist/esm/project-definition/scheduler-policy.mjs.map +1 -0
- package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs +57 -0
- package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs.map +1 -0
- package/dist/esm/project-run/admission-strategy-provider/prepared-admission-strategy.mjs +2 -0
- package/dist/esm/project-run/admission-strategy-provider/prepared-admission-strategy.mjs.map +1 -0
- package/dist/esm/project-run/admission-strategy-provider/provider.mjs +23 -0
- package/dist/esm/project-run/admission-strategy-provider/provider.mjs.map +1 -0
- package/dist/esm/project-run/aggregation.mjs +42 -57
- package/dist/esm/project-run/aggregation.mjs.map +1 -1
- package/dist/esm/project-run/changes/git.mjs +161 -0
- package/dist/esm/project-run/changes/git.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/admitted-check-execution.mjs +41 -0
- package/dist/esm/project-run/check-execution/admitted-check-execution.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/callback.mjs +37 -9
- package/dist/esm/project-run/check-execution/callback.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/console-capture.mjs +220 -0
- package/dist/esm/project-run/check-execution/console-capture.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/dependencies.mjs +99 -6
- package/dist/esm/project-run/check-execution/dependencies.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/execution-finalization.mjs +57 -14
- package/dist/esm/project-run/check-execution/execution-finalization.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/execution-settlement.mjs +44 -19
- package/dist/esm/project-run/check-execution/execution-settlement.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/flag-controls.mjs +95 -0
- package/dist/esm/project-run/check-execution/flag-controls.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/lifecycle.mjs +2 -0
- package/dist/esm/project-run/check-execution/lifecycle.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/messages.mjs +5 -0
- package/dist/esm/project-run/check-execution/messages.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/plan.mjs +9 -5
- package/dist/esm/project-run/check-execution/plan.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/{preflight-result.mjs → preparation-result.mjs} +24 -24
- package/dist/esm/project-run/check-execution/preparation-result.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/preparation.mjs +172 -0
- package/dist/esm/project-run/check-execution/preparation.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/ready-check-execution.mjs +71 -0
- package/dist/esm/project-run/check-execution/ready-check-execution.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/resolved-checks.mjs +44 -139
- package/dist/esm/project-run/check-execution/resolved-checks.mjs.map +1 -1
- package/dist/esm/project-run/check-execution/resolved-execution-result.mjs +2 -0
- package/dist/esm/project-run/check-execution/resolved-execution-result.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/scheduled-check-run.mjs +79 -0
- package/dist/esm/project-run/check-execution/scheduled-check-run.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/terminal-result.mjs +70 -25
- package/dist/esm/project-run/check-execution/terminal-result.mjs.map +1 -1
- package/dist/esm/project-run/{completion.mjs → completion/completion.mjs} +34 -39
- package/dist/esm/project-run/completion/completion.mjs.map +1 -0
- package/dist/esm/project-run/{machine-publication.mjs → completion/machine-publication.mjs} +1 -1
- package/dist/esm/project-run/completion/machine-publication.mjs.map +1 -0
- package/dist/esm/project-run/completion/result-resolver.mjs +36 -0
- package/dist/esm/project-run/completion/result-resolver.mjs.map +1 -0
- package/dist/esm/project-run/controls/contract.mjs.map +1 -1
- package/dist/esm/project-run/controls/outputs-override-validation.mjs +67 -47
- package/dist/esm/project-run/controls/outputs-override-validation.mjs.map +1 -1
- package/dist/esm/project-run/controls/validation-result.mjs.map +1 -1
- package/dist/esm/project-run/controls/validation.mjs +79 -62
- package/dist/esm/project-run/controls/validation.mjs.map +1 -1
- package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs +3 -3
- package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs.map +1 -1
- package/dist/esm/project-run/diagnostic-logging/logger.mjs +100 -161
- package/dist/esm/project-run/diagnostic-logging/logger.mjs.map +1 -1
- package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs +159 -0
- package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs.map +1 -0
- package/dist/esm/project-run/invocation/candidate.mjs +65 -0
- package/dist/esm/project-run/invocation/candidate.mjs.map +1 -0
- package/dist/esm/project-run/invocation/candidates.mjs +26 -0
- package/dist/esm/project-run/invocation/candidates.mjs.map +1 -0
- package/dist/esm/project-run/invocation/creation.mjs +83 -0
- package/dist/esm/project-run/invocation/creation.mjs.map +1 -0
- package/dist/esm/project-run/invocation/execution.mjs +98 -0
- package/dist/esm/project-run/invocation/execution.mjs.map +1 -0
- package/dist/esm/project-run/invocation/paths.mjs +77 -0
- package/dist/esm/project-run/invocation/paths.mjs.map +1 -0
- package/dist/esm/project-run/invocation/progress.mjs +30 -0
- package/dist/esm/project-run/invocation/progress.mjs.map +1 -0
- package/dist/esm/project-run/invocation/run.mjs +82 -0
- package/dist/esm/project-run/invocation/run.mjs.map +1 -0
- package/dist/esm/project-run/invocation/scheduler.mjs +64 -0
- package/dist/esm/project-run/invocation/scheduler.mjs.map +1 -0
- package/dist/esm/project-run/{output-configuration.mjs → outputs/configuration.mjs} +3 -2
- package/dist/esm/project-run/outputs/configuration.mjs.map +1 -0
- package/dist/esm/project-run/outputs/status.mjs +105 -0
- package/dist/esm/project-run/outputs/status.mjs.map +1 -0
- package/dist/esm/project-run/progress-rendering/presentation.mjs +140 -26
- package/dist/esm/project-run/progress-rendering/presentation.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs +118 -22
- package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs +50 -10
- package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs.map +1 -1
- package/dist/esm/project-run/progress-rendering/renderer.mjs +11 -4
- package/dist/esm/project-run/progress-rendering/renderer.mjs.map +1 -1
- package/dist/esm/project-run/project-context.mjs +3 -2
- package/dist/esm/project-run/project-context.mjs.map +1 -1
- package/dist/esm/project-run/result.mjs +2 -0
- package/dist/esm/project-run/result.mjs.map +1 -1
- package/dist/esm/project-run/run.mjs +1 -1
- package/dist/esm/project-run/run.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph-lookup.mjs +45 -0
- package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph-lookup.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs +171 -0
- package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/core.mjs +163 -0
- package/dist/esm/project-run/task-scheduler/admission-core/core.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/input.mjs +119 -0
- package/dist/esm/project-run/task-scheduler/admission-core/input.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/projection.mjs +124 -0
- package/dist/esm/project-run/task-scheduler/admission-core/projection.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-index.mjs +99 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-index.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs +196 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs +168 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs +121 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection.mjs +65 -0
- package/dist/esm/project-run/task-scheduler/admission-core/selection.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-scope-layers.mjs +25 -0
- package/dist/esm/project-run/task-scheduler/admission-scope-layers.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/admission-selection-policy.mjs +55 -0
- package/dist/esm/project-run/task-scheduler/admission-selection-policy.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/custom-admission-policy.mjs +110 -0
- package/dist/esm/project-run/task-scheduler/custom-admission-policy.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/execution-state.mjs +34 -5
- package/dist/esm/project-run/task-scheduler/execution-state.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/forced-block-effect-replay.mjs +46 -0
- package/dist/esm/project-run/task-scheduler/forced-block-effect-replay.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/graph-validation.mjs +54 -26
- package/dist/esm/project-run/task-scheduler/graph-validation.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/graph.mjs +79 -3
- package/dist/esm/project-run/task-scheduler/graph.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs +211 -0
- package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/measurement/integrals.mjs +116 -0
- package/dist/esm/project-run/task-scheduler/measurement/integrals.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/measurement/policy.mjs +67 -0
- package/dist/esm/project-run/task-scheduler/measurement/policy.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/measurement/summary.mjs +123 -0
- package/dist/esm/project-run/task-scheduler/measurement/summary.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/measurement/timing.mjs +164 -0
- package/dist/esm/project-run/task-scheduler/measurement/timing.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs +90 -62
- package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs +20 -6
- package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs +5 -105
- package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs +0 -9
- package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs +48 -28
- package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs.map +1 -1
- package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs +91 -0
- package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/scheduler-task-lifecycle.mjs +94 -0
- package/dist/esm/project-run/task-scheduler/scheduler-task-lifecycle.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs +66 -0
- package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/scheduler.mjs +183 -114
- package/dist/esm/project-run/task-scheduler/scheduler.mjs.map +1 -1
- package/docs/api-mechanics.md +167 -121
- package/docs/changelog.md +300 -0
- package/docs/checks/duplicate-detection.md +131 -60
- package/docs/checks/file-metrics.md +68 -46
- package/docs/checks/function-metrics.md +119 -163
- package/docs/checks/json-schema-validation.md +65 -37
- package/docs/checks/json-validation.md +59 -27
- package/docs/checks/maintenance-reminders.md +68 -32
- package/docs/checks/markdown-link-validation.md +104 -56
- package/docs/checks/markdown-lint.md +167 -0
- package/docs/checks/secret-detection.md +153 -0
- package/docs/examples/artifacts/mixed-outcomes/definition.ts +14 -14
- package/docs/guides/building-project-gate.md +706 -0
- package/docs/guides/cache-results.md +63 -0
- package/docs/guides/callbacks.md +93 -0
- package/docs/guides/check-dependencies.md +152 -0
- package/docs/guides/collecting-project-files.md +59 -0
- package/docs/guides/command-check.md +155 -0
- package/docs/guides/data-boundaries.md +140 -0
- package/docs/guides/extending-check-lifecycle.md +164 -0
- package/docs/guides/finding-waivers.md +87 -0
- package/docs/guides/learned-scheduling.md +83 -0
- package/docs/guides/presenting-findings.md +54 -0
- package/docs/guides/run-outputs.md +171 -0
- package/docs/guides/scheduling.md +208 -0
- package/docs/guides/simulating-admission.md +55 -0
- package/docs/output.md +13 -21
- package/licenses/Lizard-1.24.0-MIT.txt +30 -0
- package/{third-party-licenses/momoa-3.3.12-LICENSE → licenses/Lizard-1.24.0-lizard.py-Apache-2.0.txt} +1 -0
- package/licenses/Pygments-2.18.0-BSD-2-Clause.txt +25 -0
- package/licenses/analyzer-translations-NOTICE.md +24 -0
- package/licenses/lizard-1.24.0-provenance.json +957 -0
- package/package.json +19 -6
- package/src/check/check.ts +382 -92
- package/src/check/flag-enablement.ts +76 -0
- package/src/check/handoff-provider-identity.ts +34 -0
- package/src/check/inherited-collection.ts +2 -2
- package/src/check/project-changes.ts +14 -0
- package/src/check/project-context.ts +11 -0
- package/src/check-settlement/fact-validation.ts +29 -39
- package/src/check-settlement/facts.ts +1 -1
- package/src/check-settlement/outcome-normalization.ts +17 -35
- package/src/check-settlement/reason-shape.ts +20 -0
- package/src/check-settlement/record-store.ts +18 -15
- package/src/check-settlement/session.ts +12 -3
- package/src/data-boundary/canonical-data.ts +36 -9
- package/src/data-boundary/canonical-json.ts +18 -1
- package/src/data-boundary/closed-values.ts +54 -5
- package/src/data-boundary/config-glob.ts +17 -0
- package/src/data-boundary/project-path.ts +21 -0
- package/src/data-boundary/value-shapes.ts +12 -0
- package/src/index.ts +134 -5
- package/src/machine-output/v4/atomic-publication.ts +4 -17
- package/src/package-checks/check-authoring.ts +136 -0
- package/src/package-checks/code-quality-findings/finding-waiver-authoring.ts +46 -0
- package/src/package-checks/code-quality-findings/finding-waiver-evidence.ts +95 -0
- package/src/package-checks/code-quality-findings/policy.ts +23 -0
- package/src/package-checks/command-check/command-check.ts +152 -0
- package/src/package-checks/command-check/contract.ts +168 -0
- package/src/package-checks/command-check/execution.ts +211 -0
- package/src/package-checks/command-check/options.ts +331 -0
- package/src/package-checks/command-check/transcript.ts +35 -0
- package/src/package-checks/duplicate-detection/area-policy.ts +24 -13
- package/src/package-checks/duplicate-detection/cache/identity.ts +1 -1
- package/src/package-checks/duplicate-detection/default-check.ts +38 -7
- package/src/package-checks/duplicate-detection/execution.ts +82 -24
- package/src/package-checks/duplicate-detection/finding-messages.ts +75 -0
- package/src/package-checks/duplicate-detection/finding-waiver-identity.ts +68 -0
- package/src/package-checks/duplicate-detection/jscpd/availability.ts +2 -2
- package/src/package-checks/duplicate-detection/jscpd/command-resolution.ts +1 -1
- package/src/package-checks/duplicate-detection/jscpd/json-report.ts +24 -5
- package/src/package-checks/duplicate-detection/jscpd/scanner.ts +6 -7
- package/src/package-checks/duplicate-detection/options-resolution.ts +32 -57
- package/src/package-checks/duplicate-detection/options-validation.ts +23 -31
- package/src/package-checks/duplicate-detection/options.ts +26 -3
- package/src/package-checks/duplicate-detection/records.ts +65 -12
- package/src/package-checks/file-metrics/constructor.ts +29 -6
- package/src/package-checks/file-metrics/execution.ts +17 -20
- package/src/package-checks/file-metrics/finding-messages.ts +29 -0
- package/src/package-checks/file-metrics/options-resolution.ts +19 -52
- package/src/package-checks/file-metrics/options-validation.ts +23 -32
- package/src/package-checks/file-metrics/options.ts +6 -3
- package/src/package-checks/file-metrics/records.ts +11 -23
- package/src/package-checks/file-metrics/scc/availability.ts +2 -2
- package/src/package-checks/file-metrics/scc/batch-planner.ts +56 -0
- package/src/package-checks/file-metrics/scc/logical-scan-resources.ts +59 -0
- package/src/package-checks/file-metrics/scc/parser.ts +4 -4
- package/src/package-checks/file-metrics/scc/scanner.ts +135 -33
- package/src/package-checks/function-metrics/analysis.ts +81 -21
- package/src/package-checks/function-metrics/analyzer/analysis-context.ts +749 -0
- package/src/package-checks/function-metrics/analyzer/analysis-model.ts +421 -0
- package/src/package-checks/function-metrics/analyzer/contracts.ts +54 -0
- package/src/package-checks/function-metrics/analyzer/extension-output.ts +269 -0
- package/src/package-checks/function-metrics/analyzer/extensions/extension-base.ts +33 -0
- package/src/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.ts +25 -0
- package/src/package-checks/function-metrics/analyzer/extensions/lizardnd.ts +144 -0
- package/src/package-checks/function-metrics/analyzer/extensions/protocol.ts +345 -0
- package/src/package-checks/function-metrics/analyzer/extensions/registry.ts +157 -0
- package/src/package-checks/function-metrics/analyzer/pipeline.ts +313 -0
- package/src/package-checks/function-metrics/analyzer/port-facade.ts +142 -0
- package/src/package-checks/function-metrics/analyzer/reader-registry.ts +84 -0
- package/src/package-checks/function-metrics/analyzer/readers/csharp.ts +110 -0
- package/src/package-checks/function-metrics/analyzer/readers/erlang.ts +501 -0
- package/src/package-checks/function-metrics/analyzer/readers/fortran.ts +294 -0
- package/src/package-checks/function-metrics/analyzer/readers/gdscript.ts +42 -0
- package/src/package-checks/function-metrics/analyzer/readers/go.ts +53 -0
- package/src/package-checks/function-metrics/analyzer/readers/java-body-states.ts +141 -0
- package/src/package-checks/function-metrics/analyzer/readers/java.ts +270 -0
- package/src/package-checks/function-metrics/analyzer/readers/javascript.ts +19 -0
- package/src/package-checks/function-metrics/analyzer/readers/kotlin.ts +120 -0
- package/src/package-checks/function-metrics/analyzer/readers/lua.ts +68 -0
- package/src/package-checks/function-metrics/analyzer/readers/objc.ts +113 -0
- package/src/package-checks/function-metrics/analyzer/readers/perl.ts +340 -0
- package/src/package-checks/function-metrics/analyzer/readers/php-states.ts +253 -0
- package/src/package-checks/function-metrics/analyzer/readers/php.ts +63 -0
- package/src/package-checks/function-metrics/analyzer/readers/plsql.ts +310 -0
- package/src/package-checks/function-metrics/analyzer/readers/python.ts +432 -0
- package/src/package-checks/function-metrics/analyzer/readers/r.ts +235 -0
- package/src/package-checks/function-metrics/analyzer/readers/ruby.ts +88 -0
- package/src/package-checks/function-metrics/analyzer/readers/rust.ts +47 -0
- package/src/package-checks/function-metrics/analyzer/readers/scala.ts +60 -0
- package/src/package-checks/function-metrics/analyzer/readers/solidity.ts +32 -0
- package/src/package-checks/function-metrics/analyzer/readers/st.ts +161 -0
- package/src/package-checks/function-metrics/analyzer/readers/swift.ts +116 -0
- package/src/package-checks/function-metrics/analyzer/readers/tsx.ts +165 -0
- package/src/package-checks/function-metrics/analyzer/readers/ttcn.ts +96 -0
- package/src/package-checks/function-metrics/analyzer/readers/typescript.ts +599 -0
- package/src/package-checks/function-metrics/analyzer/readers/vue.ts +43 -0
- package/src/package-checks/function-metrics/analyzer/readers/zig.ts +36 -0
- package/src/package-checks/function-metrics/analyzer/shared/clike.ts +541 -0
- package/src/package-checks/function-metrics/analyzer/shared/code-reader.ts +684 -0
- package/src/package-checks/function-metrics/analyzer/shared/golike.ts +143 -0
- package/src/package-checks/function-metrics/analyzer/shared/js-style-regex.ts +80 -0
- package/src/package-checks/function-metrics/analyzer/shared/rubylike.ts +161 -0
- package/src/package-checks/function-metrics/analyzer/shared/script-language.ts +50 -0
- package/src/package-checks/function-metrics/analyzer-adapter.ts +84 -0
- package/src/package-checks/function-metrics/analyzer-worker-contract.ts +10 -0
- package/src/package-checks/function-metrics/analyzer-worker-port.ts +164 -0
- package/src/package-checks/function-metrics/analyzer-worker.ts +31 -0
- package/src/package-checks/function-metrics/constructor.ts +32 -9
- package/src/package-checks/function-metrics/execution.ts +94 -41
- package/src/package-checks/function-metrics/finding-messages.ts +95 -0
- package/src/package-checks/function-metrics/finding-waiver-identity.ts +36 -0
- package/src/package-checks/function-metrics/measurement-model.ts +15 -1
- package/src/package-checks/function-metrics/measurement.ts +223 -36
- package/src/package-checks/function-metrics/options-resolution.ts +39 -75
- package/src/package-checks/function-metrics/options-validation.ts +30 -39
- package/src/package-checks/function-metrics/options.ts +32 -13
- package/src/package-checks/function-metrics/records.ts +73 -7
- package/src/package-checks/function-metrics/target-files.ts +10 -70
- package/src/package-checks/{file-metrics/scc → host-environment}/csv.ts +1 -2
- package/src/package-checks/host-environment/git.ts +13 -2
- package/src/package-checks/host-environment/path.ts +1 -20
- package/src/package-checks/host-environment/process/contract.ts +17 -9
- package/src/package-checks/host-environment/process/result.ts +48 -20
- package/src/package-checks/host-environment/process/runner.ts +8 -4
- package/src/package-checks/host-environment/process.ts +10 -0
- package/src/package-checks/json-schema-validation/default-check.ts +38 -5
- package/src/package-checks/json-schema-validation/final-data.ts +8 -0
- package/src/package-checks/json-schema-validation/options-validation.ts +16 -23
- package/src/package-checks/json-schema-validation/options.ts +27 -1
- package/src/package-checks/json-schema-validation/reference-resolver.ts +6 -2
- package/src/package-checks/json-schema-validation/schema-policy.ts +10 -5
- package/src/package-checks/json-validation/default-check.ts +27 -6
- package/src/package-checks/json-validation/final-data.ts +5 -0
- package/src/package-checks/json-validation/options-validation.ts +4 -18
- package/src/package-checks/json-validation/options.ts +4 -1
- package/src/package-checks/local-cache-options.ts +40 -0
- package/src/package-checks/maintenance-reminders/final-data.ts +18 -0
- package/src/package-checks/maintenance-reminders/maintenance-reminders.ts +89 -9
- package/src/package-checks/maintenance-reminders/maintenance-support.ts +3 -3
- package/src/package-checks/markdown-link-validation/default-check.ts +57 -8
- package/src/package-checks/markdown-link-validation/execution.ts +51 -57
- package/src/package-checks/markdown-link-validation/filesystem-probes.ts +108 -51
- package/src/package-checks/markdown-link-validation/final-data.ts +5 -0
- package/src/package-checks/markdown-link-validation/finding-messages.ts +48 -0
- package/src/package-checks/markdown-link-validation/local-resolution.ts +17 -9
- package/src/package-checks/markdown-link-validation/local-resolver.ts +5 -2
- package/src/package-checks/markdown-link-validation/markdown-parser.ts +1 -5
- package/src/package-checks/markdown-link-validation/options-resolution.ts +14 -3
- package/src/package-checks/markdown-link-validation/options-validation.ts +12 -19
- package/src/package-checks/markdown-link-validation/options.ts +15 -1
- package/src/package-checks/markdown-link-validation/parse-facts-cache-payload.ts +245 -0
- package/src/package-checks/markdown-link-validation/parse-facts-cache.ts +154 -0
- package/src/package-checks/markdown-link-validation/resolver-engine.ts +75 -65
- package/src/package-checks/markdown-link-validation/source-reader.ts +86 -0
- package/src/package-checks/markdown-link-validation/unavailable-reasons.ts +42 -0
- package/src/package-checks/markdown-lint/adapter.ts +167 -0
- package/src/package-checks/markdown-lint/default-check.ts +92 -0
- package/src/package-checks/markdown-lint/execution.ts +266 -0
- package/src/package-checks/markdown-lint/final-data.ts +33 -0
- package/src/package-checks/markdown-lint/finding-messages.ts +87 -0
- package/src/package-checks/markdown-lint/finding-waiver-identity.ts +54 -0
- package/src/package-checks/markdown-lint/findings-cache.ts +141 -0
- package/src/package-checks/markdown-lint/options-resolution.ts +102 -0
- package/src/package-checks/markdown-lint/options-validation.ts +50 -0
- package/src/package-checks/markdown-lint/options.ts +82 -0
- package/src/package-checks/markdown-lint/records.ts +132 -0
- package/src/package-checks/markdown-lint/unavailable-reasons.ts +33 -0
- package/src/package-checks/project-files/collection.ts +39 -23
- package/src/package-checks/project-files/config-glob.ts +1 -17
- package/src/package-checks/project-files/configuration.ts +4 -15
- package/src/package-checks/project-files/gitlink-revision.ts +5 -7
- package/src/package-checks/project-files/gitlink-worktree.ts +36 -8
- package/src/package-checks/project-files/public-collection.ts +92 -0
- package/src/package-checks/project-files/revision-paths.ts +3 -3
- package/src/package-checks/project-files/revision-worktree-files.ts +17 -17
- package/src/package-checks/secret-detection/classification.ts +30 -0
- package/src/package-checks/secret-detection/default-check.ts +73 -0
- package/src/package-checks/secret-detection/execution.ts +247 -0
- package/src/package-checks/secret-detection/final-data.ts +57 -0
- package/src/package-checks/secret-detection/finding-waiver-identity.ts +37 -0
- package/src/package-checks/secret-detection/input-preparation.ts +290 -0
- package/src/package-checks/secret-detection/options-resolution.ts +65 -0
- package/src/package-checks/secret-detection/options-validation.ts +27 -0
- package/src/package-checks/secret-detection/options.ts +39 -0
- package/src/package-checks/secret-detection/records.ts +77 -0
- package/src/package-checks/secret-detection/secretlint/adapter.ts +122 -0
- package/src/package-tools/admission-policy/define-admission-policy.ts +54 -0
- package/src/package-tools/cache/cache-json-by-key.ts +300 -0
- package/src/package-tools/finding-presentation/finding-presentation.ts +69 -0
- package/src/{finding-waivers → package-tools/finding-waivers}/reconciliation.ts +16 -8
- package/src/package-tools/learned-critical-path/critical-path-ranking.ts +76 -0
- package/src/package-tools/learned-critical-path/duration-model/bounded-history.ts +108 -0
- package/src/package-tools/learned-critical-path/duration-model/prediction.ts +184 -0
- package/src/package-tools/learned-critical-path/duration-model/preparation.ts +79 -0
- package/src/package-tools/learned-critical-path/duration-model/recording.ts +209 -0
- package/src/package-tools/learned-critical-path/duration-model/storage.ts +251 -0
- package/src/package-tools/learned-critical-path/selection-layers.ts +71 -0
- package/src/package-tools/learned-critical-path/static-decision.ts +105 -0
- package/src/package-tools/learned-critical-path/strategy.ts +302 -0
- package/src/project-definition/check-tree/authoring.ts +40 -234
- package/src/project-definition/check-tree/check-fields-authoring.ts +242 -0
- package/src/project-definition/check-tree/collection-authoring.ts +13 -0
- package/src/project-definition/check-tree/flag-conditions.ts +99 -0
- package/src/project-definition/check-tree/materialization.ts +21 -9
- package/src/project-definition/check-tree/resolution.ts +84 -28
- package/src/project-definition/check-tree/scheduling-authoring.ts +114 -0
- package/src/project-definition/declarative-snapshot.ts +94 -0
- package/src/project-definition/output-defaults.ts +32 -1
- package/src/project-definition/output-validation.ts +15 -15
- package/src/project-definition/progress-rendering-output.ts +121 -0
- package/src/project-definition/project-changes.ts +112 -0
- package/src/project-definition/project-definition-validation.ts +166 -19
- package/src/project-definition/project-definition.ts +177 -67
- package/src/project-definition/resource-unit-mapping.ts +25 -0
- package/src/project-definition/scheduler-policy.ts +556 -0
- package/src/project-run/admission-strategy-provider/custom-strategy-preparation.ts +83 -0
- package/src/project-run/admission-strategy-provider/prepared-admission-strategy.ts +27 -0
- package/src/project-run/admission-strategy-provider/provider.ts +45 -0
- package/src/project-run/aggregation.ts +52 -70
- package/src/project-run/changes/git.ts +206 -0
- package/src/project-run/check-execution/admitted-check-execution.ts +62 -0
- package/src/project-run/check-execution/callback.ts +52 -9
- package/src/project-run/check-execution/console-capture.ts +262 -0
- package/src/project-run/check-execution/dependencies.ts +161 -10
- package/src/project-run/check-execution/execution-finalization.ts +103 -27
- package/src/project-run/check-execution/execution-settlement.ts +99 -32
- package/src/project-run/check-execution/flag-controls.ts +146 -0
- package/src/project-run/check-execution/lifecycle.ts +29 -0
- package/src/project-run/check-execution/messages.ts +8 -0
- package/src/project-run/check-execution/plan.ts +12 -8
- package/src/project-run/check-execution/{preflight-result.ts → preparation-result.ts} +34 -32
- package/src/project-run/check-execution/preparation.ts +309 -0
- package/src/project-run/check-execution/ready-check-execution.ts +97 -0
- package/src/project-run/check-execution/resolved-checks.ts +92 -232
- package/src/project-run/check-execution/resolved-execution-result.ts +22 -0
- package/src/project-run/check-execution/scheduled-check-run.ts +119 -0
- package/src/project-run/check-execution/terminal-result.ts +108 -29
- package/src/project-run/{completion.ts → completion/completion.ts} +33 -59
- package/src/project-run/{machine-publication.ts → completion/machine-publication.ts} +4 -4
- package/src/project-run/completion/result-resolver.ts +60 -0
- package/src/project-run/controls/contract.ts +22 -9
- package/src/project-run/controls/outputs-override-validation.ts +83 -60
- package/src/project-run/controls/validation-result.ts +17 -6
- package/src/project-run/controls/validation.ts +110 -68
- package/src/project-run/diagnostic-logging/diagnostic-detail-rendering.ts +1 -2
- package/src/project-run/diagnostic-logging/logger.ts +132 -207
- package/src/project-run/diagnostic-logging/observation-rendering.ts +203 -0
- package/src/project-run/invocation/candidate.ts +99 -0
- package/src/project-run/invocation/candidates.ts +56 -0
- package/src/project-run/invocation/creation.ts +120 -0
- package/src/project-run/invocation/execution.ts +136 -0
- package/src/project-run/invocation/paths.ts +154 -0
- package/src/project-run/invocation/progress.ts +38 -0
- package/src/project-run/invocation/run.ts +144 -0
- package/src/project-run/invocation/scheduler.ts +82 -0
- package/src/project-run/{output-configuration.ts → outputs/configuration.ts} +6 -5
- package/src/project-run/outputs/status.ts +161 -0
- package/src/project-run/progress-rendering/presentation.ts +150 -36
- package/src/project-run/progress-rendering/renderer-formatting.ts +185 -25
- package/src/project-run/progress-rendering/renderer-lifecycle.ts +61 -9
- package/src/project-run/progress-rendering/renderer.ts +23 -6
- package/src/project-run/project-context.ts +10 -5
- package/src/project-run/result.ts +50 -4
- package/src/project-run/run.ts +7 -6
- package/src/project-run/task-scheduler/admission-core/compiled-graph-lookup.ts +71 -0
- package/src/project-run/task-scheduler/admission-core/compiled-graph.ts +321 -0
- package/src/project-run/task-scheduler/admission-core/core.ts +278 -0
- package/src/project-run/task-scheduler/admission-core/input.ts +138 -0
- package/src/project-run/task-scheduler/admission-core/projection.ts +164 -0
- package/src/project-run/task-scheduler/admission-core/selection-index.ts +165 -0
- package/src/project-run/task-scheduler/admission-core/selection-query.ts +297 -0
- package/src/project-run/task-scheduler/admission-core/selection-seed.ts +282 -0
- package/src/project-run/task-scheduler/admission-core/selection-transition.ts +245 -0
- package/src/project-run/task-scheduler/admission-core/selection.ts +140 -0
- package/src/project-run/task-scheduler/admission-core/trace.ts +177 -0
- package/src/project-run/task-scheduler/admission-scope-layers.ts +44 -0
- package/src/project-run/task-scheduler/admission-selection-policy.ts +116 -0
- package/src/project-run/task-scheduler/custom-admission-policy.ts +128 -0
- package/src/project-run/task-scheduler/execution-state.ts +97 -6
- package/src/project-run/task-scheduler/forced-block-effect-replay.ts +68 -0
- package/src/project-run/task-scheduler/graph-validation.ts +77 -31
- package/src/project-run/task-scheduler/graph.ts +111 -3
- package/src/project-run/task-scheduler/measurement/diagnostics.ts +267 -0
- package/src/project-run/task-scheduler/measurement/integrals.ts +177 -0
- package/src/project-run/task-scheduler/measurement/policy.ts +105 -0
- package/src/project-run/task-scheduler/measurement/summary.ts +175 -0
- package/src/project-run/task-scheduler/measurement/timing.ts +198 -0
- package/src/project-run/task-scheduler/scheduler-admission-decision.ts +143 -134
- package/src/project-run/task-scheduler/scheduler-blocker-summary.ts +34 -9
- package/src/project-run/task-scheduler/scheduler-decision-inspection.ts +28 -170
- package/src/project-run/task-scheduler/scheduler-decision-model.ts +36 -40
- package/src/project-run/task-scheduler/scheduler-decision.ts +68 -36
- package/src/project-run/task-scheduler/scheduler-observation.ts +126 -0
- package/src/project-run/task-scheduler/scheduler-task-lifecycle.ts +150 -0
- package/src/project-run/task-scheduler/scheduler-terminal-measurement.ts +97 -0
- package/src/project-run/task-scheduler/scheduler.ts +233 -171
- package/types/check/check.d.ts +225 -69
- package/types/check/flag-enablement.d.ts +42 -0
- package/types/check/handoff-provider-identity.d.ts +12 -0
- package/types/check/inherited-collection.d.ts +1 -1
- package/types/check/project-changes.d.ts +13 -0
- package/types/check/project-context.d.ts +10 -0
- package/types/check-settlement/facts.d.ts +1 -1
- package/types/check-settlement/reason-shape.d.ts +5 -0
- package/types/check-settlement/record-store.d.ts +2 -2
- package/types/check-settlement/session.d.ts +3 -1
- package/types/data-boundary/canonical-data.d.ts +28 -5
- package/types/data-boundary/canonical-json.d.ts +18 -1
- package/types/data-boundary/closed-values.d.ts +24 -0
- package/types/data-boundary/config-glob.d.ts +5 -0
- package/types/data-boundary/project-path.d.ts +4 -0
- package/types/data-boundary/value-shapes.d.ts +3 -0
- package/types/index.d.ts +40 -9
- package/types/package-checks/check-authoring.d.ts +45 -0
- package/types/package-checks/code-quality-findings/finding-waiver-authoring.d.ts +7 -0
- package/types/package-checks/code-quality-findings/finding-waiver-evidence.d.ts +34 -0
- package/types/package-checks/code-quality-findings/policy.d.ts +4 -0
- package/types/package-checks/command-check/command-check.d.ts +48 -0
- package/types/package-checks/command-check/contract.d.ts +108 -0
- package/types/package-checks/command-check/execution.d.ts +7 -0
- package/types/package-checks/command-check/options.d.ts +11 -0
- package/types/package-checks/command-check/transcript.d.ts +8 -0
- package/types/package-checks/duplicate-detection/area-policy.d.ts +1 -1
- package/types/package-checks/duplicate-detection/default-check.d.ts +5 -2
- package/types/package-checks/duplicate-detection/finding-messages.d.ts +7 -0
- package/types/package-checks/duplicate-detection/finding-waiver-identity.d.ts +3 -0
- package/types/package-checks/duplicate-detection/jscpd/command-resolution.d.ts +1 -1
- package/types/package-checks/duplicate-detection/options.d.ts +21 -3
- package/types/package-checks/duplicate-detection/records.d.ts +20 -3
- package/types/package-checks/file-metrics/constructor.d.ts +5 -2
- package/types/package-checks/file-metrics/finding-messages.d.ts +4 -0
- package/types/package-checks/file-metrics/options.d.ts +4 -3
- package/types/package-checks/file-metrics/records.d.ts +5 -10
- package/types/package-checks/file-metrics/scc/batch-planner.d.ts +18 -0
- package/types/package-checks/file-metrics/scc/logical-scan-resources.d.ts +14 -0
- package/types/package-checks/file-metrics/scc/parser.d.ts +4 -4
- package/types/package-checks/function-metrics/analysis.d.ts +1 -1
- package/types/package-checks/function-metrics/analyzer/analysis-context.d.ts +174 -0
- package/types/package-checks/function-metrics/analyzer/analysis-model.d.ts +135 -0
- package/types/package-checks/function-metrics/analyzer/contracts.d.ts +48 -0
- package/types/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.d.ts +13 -0
- package/types/package-checks/function-metrics/analyzer/extensions/lizardnd.d.ts +28 -0
- package/types/package-checks/function-metrics/analyzer/extensions/protocol.d.ts +99 -0
- package/types/package-checks/function-metrics/analyzer/extensions/registry.d.ts +34 -0
- package/types/package-checks/function-metrics/analyzer/pipeline.d.ts +67 -0
- package/types/package-checks/function-metrics/analyzer/port-facade.d.ts +38 -0
- package/types/package-checks/function-metrics/analyzer/reader-registry.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/csharp.d.ts +22 -0
- package/types/package-checks/function-metrics/analyzer/readers/erlang.d.ts +22 -0
- package/types/package-checks/function-metrics/analyzer/readers/fortran.d.ts +29 -0
- package/types/package-checks/function-metrics/analyzer/readers/gdscript.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/go.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/java-body-states.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/java.d.ts +44 -0
- package/types/package-checks/function-metrics/analyzer/readers/javascript.d.ts +14 -0
- package/types/package-checks/function-metrics/analyzer/readers/kotlin.d.ts +23 -0
- package/types/package-checks/function-metrics/analyzer/readers/lua.d.ts +16 -0
- package/types/package-checks/function-metrics/analyzer/readers/objc.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/perl.d.ts +28 -0
- package/types/package-checks/function-metrics/analyzer/readers/php-states.d.ts +41 -0
- package/types/package-checks/function-metrics/analyzer/readers/php.d.ts +22 -0
- package/types/package-checks/function-metrics/analyzer/readers/plsql.d.ts +24 -0
- package/types/package-checks/function-metrics/analyzer/readers/python.d.ts +50 -0
- package/types/package-checks/function-metrics/analyzer/readers/r.d.ts +22 -0
- package/types/package-checks/function-metrics/analyzer/readers/ruby.d.ts +16 -0
- package/types/package-checks/function-metrics/analyzer/readers/rust.d.ts +20 -0
- package/types/package-checks/function-metrics/analyzer/readers/scala.d.ts +20 -0
- package/types/package-checks/function-metrics/analyzer/readers/solidity.d.ts +19 -0
- package/types/package-checks/function-metrics/analyzer/readers/st.d.ts +37 -0
- package/types/package-checks/function-metrics/analyzer/readers/swift.d.ts +30 -0
- package/types/package-checks/function-metrics/analyzer/readers/tsx.d.ts +15 -0
- package/types/package-checks/function-metrics/analyzer/readers/ttcn.d.ts +22 -0
- package/types/package-checks/function-metrics/analyzer/readers/typescript.d.ts +35 -0
- package/types/package-checks/function-metrics/analyzer/readers/vue.d.ts +18 -0
- package/types/package-checks/function-metrics/analyzer/readers/zig.d.ts +19 -0
- package/types/package-checks/function-metrics/analyzer/shared/clike.d.ts +101 -0
- package/types/package-checks/function-metrics/analyzer/shared/code-reader.d.ts +176 -0
- package/types/package-checks/function-metrics/analyzer/shared/golike.d.ts +39 -0
- package/types/package-checks/function-metrics/analyzer/shared/js-style-regex.d.ts +16 -0
- package/types/package-checks/function-metrics/analyzer/shared/rubylike.d.ts +40 -0
- package/types/package-checks/function-metrics/analyzer/shared/script-language.d.ts +17 -0
- package/types/package-checks/function-metrics/analyzer-adapter.d.ts +26 -0
- package/types/package-checks/function-metrics/analyzer-worker-contract.d.ts +5 -0
- package/types/package-checks/function-metrics/analyzer-worker-port.d.ts +24 -0
- package/types/package-checks/function-metrics/analyzer-worker.d.ts +1 -0
- package/types/package-checks/function-metrics/constructor.d.ts +6 -3
- package/types/package-checks/function-metrics/execution.d.ts +5 -2
- package/types/package-checks/function-metrics/finding-messages.d.ts +9 -0
- package/types/package-checks/function-metrics/finding-waiver-identity.d.ts +2 -0
- package/types/package-checks/function-metrics/measurement-model.d.ts +13 -1
- package/types/package-checks/function-metrics/measurement.d.ts +22 -7
- package/types/package-checks/function-metrics/options.d.ts +26 -12
- package/types/package-checks/function-metrics/records.d.ts +24 -5
- package/types/package-checks/function-metrics/target-files.d.ts +4 -3
- package/types/package-checks/host-environment/csv.d.ts +2 -0
- package/types/package-checks/host-environment/git.d.ts +3 -1
- package/types/package-checks/host-environment/path.d.ts +1 -3
- package/types/package-checks/host-environment/process/contract.d.ts +17 -9
- package/types/package-checks/host-environment/process.d.ts +5 -0
- package/types/package-checks/json-schema-validation/default-check.d.ts +4 -1
- package/types/package-checks/json-schema-validation/final-data.d.ts +8 -0
- package/types/package-checks/json-schema-validation/options.d.ts +33 -4
- package/types/package-checks/json-validation/default-check.d.ts +4 -1
- package/types/package-checks/json-validation/final-data.d.ts +5 -0
- package/types/package-checks/json-validation/options.d.ts +2 -1
- package/types/package-checks/local-cache-options.d.ts +9 -0
- package/types/package-checks/maintenance-reminders/final-data.d.ts +18 -0
- package/types/package-checks/maintenance-reminders/maintenance-reminders.d.ts +11 -2
- package/types/package-checks/markdown-link-validation/default-check.d.ts +13 -4
- package/types/package-checks/markdown-link-validation/execution.d.ts +1 -3
- package/types/package-checks/markdown-link-validation/final-data.d.ts +5 -0
- package/types/package-checks/markdown-link-validation/finding-messages.d.ts +4 -0
- package/types/package-checks/markdown-link-validation/local-resolution.d.ts +12 -6
- package/types/package-checks/markdown-link-validation/local-resolver.d.ts +2 -1
- package/types/package-checks/markdown-link-validation/options.d.ts +13 -1
- package/types/package-checks/markdown-link-validation/parse-facts-cache-payload.d.ts +24 -0
- package/types/package-checks/markdown-link-validation/parse-facts-cache.d.ts +13 -0
- package/types/package-checks/markdown-link-validation/resolver-engine.d.ts +6 -4
- package/types/package-checks/markdown-link-validation/source-reader.d.ts +11 -0
- package/types/package-checks/markdown-link-validation/unavailable-reasons.d.ts +4 -0
- package/types/package-checks/markdown-lint/adapter.d.ts +10 -0
- package/types/package-checks/markdown-lint/default-check.d.ts +37 -0
- package/types/package-checks/markdown-lint/execution.d.ts +24 -0
- package/types/package-checks/markdown-lint/final-data.d.ts +8 -0
- package/types/package-checks/markdown-lint/finding-messages.d.ts +6 -0
- package/types/package-checks/markdown-lint/finding-waiver-identity.d.ts +3 -0
- package/types/package-checks/markdown-lint/findings-cache.d.ts +17 -0
- package/types/package-checks/markdown-lint/options-resolution.d.ts +3 -0
- package/types/package-checks/markdown-lint/options-validation.d.ts +2 -0
- package/types/package-checks/markdown-lint/options.d.ts +65 -0
- package/types/package-checks/markdown-lint/records.d.ts +39 -0
- package/types/package-checks/markdown-lint/unavailable-reasons.d.ts +3 -0
- package/types/package-checks/project-files/public-collection.d.ts +16 -0
- package/types/package-checks/secret-detection/classification.d.ts +12 -0
- package/types/package-checks/secret-detection/default-check.d.ts +14 -0
- package/types/package-checks/secret-detection/execution.d.ts +14 -0
- package/types/package-checks/secret-detection/final-data.d.ts +15 -0
- package/types/package-checks/secret-detection/finding-waiver-identity.d.ts +5 -0
- package/types/package-checks/secret-detection/input-preparation.d.ts +24 -0
- package/types/package-checks/secret-detection/options-resolution.d.ts +6 -0
- package/types/package-checks/secret-detection/options-validation.d.ts +3 -0
- package/types/package-checks/secret-detection/options.d.ts +33 -0
- package/types/package-checks/secret-detection/records.d.ts +35 -0
- package/types/package-checks/secret-detection/secretlint/adapter.d.ts +28 -0
- package/types/package-tools/admission-policy/define-admission-policy.d.ts +26 -0
- package/types/package-tools/cache/cache-json-by-key.d.ts +53 -0
- package/types/package-tools/finding-presentation/finding-presentation.d.ts +27 -0
- package/types/{finding-waivers → package-tools/finding-waivers}/reconciliation.d.ts +3 -3
- package/types/package-tools/learned-critical-path/critical-path-ranking.d.ts +19 -0
- package/types/package-tools/learned-critical-path/duration-model/bounded-history.d.ts +34 -0
- package/types/package-tools/learned-critical-path/duration-model/prediction.d.ts +32 -0
- package/types/package-tools/learned-critical-path/duration-model/preparation.d.ts +28 -0
- package/types/package-tools/learned-critical-path/duration-model/recording.d.ts +28 -0
- package/types/package-tools/learned-critical-path/duration-model/storage.d.ts +12 -0
- package/types/package-tools/learned-critical-path/selection-layers.d.ts +14 -0
- package/types/package-tools/learned-critical-path/static-decision.d.ts +3 -0
- package/types/package-tools/learned-critical-path/strategy.d.ts +35 -0
- package/types/project-definition/check-tree/authoring.d.ts +13 -14
- package/types/project-definition/check-tree/check-fields-authoring.d.ts +30 -0
- package/types/project-definition/check-tree/collection-authoring.d.ts +2 -0
- package/types/project-definition/check-tree/flag-conditions.d.ts +5 -0
- package/types/project-definition/check-tree/resolution.d.ts +13 -6
- package/types/project-definition/check-tree/scheduling-authoring.d.ts +19 -0
- package/types/project-definition/declarative-snapshot.d.ts +10 -0
- package/types/project-definition/output-defaults.d.ts +7 -0
- package/types/project-definition/output-validation.d.ts +2 -1
- package/types/project-definition/progress-rendering-output.d.ts +41 -0
- package/types/project-definition/project-changes.d.ts +30 -0
- package/types/project-definition/project-definition.d.ts +49 -19
- package/types/project-definition/resource-unit-mapping.d.ts +4 -0
- package/types/project-definition/scheduler-policy.d.ts +497 -0
- package/types/project-run/admission-strategy-provider/custom-strategy-preparation.d.ts +9 -0
- package/types/project-run/admission-strategy-provider/prepared-admission-strategy.d.ts +23 -0
- package/types/project-run/admission-strategy-provider/provider.d.ts +13 -0
- package/types/project-run/aggregation.d.ts +8 -6
- package/types/project-run/changes/git.d.ts +14 -0
- package/types/project-run/check-execution/admitted-check-execution.d.ts +18 -0
- package/types/project-run/check-execution/callback.d.ts +5 -1
- package/types/project-run/check-execution/console-capture.d.ts +18 -0
- package/types/project-run/check-execution/dependencies.d.ts +4 -1
- package/types/project-run/check-execution/execution-finalization.d.ts +18 -8
- package/types/project-run/check-execution/execution-settlement.d.ts +18 -7
- package/types/project-run/check-execution/flag-controls.d.ts +27 -0
- package/types/project-run/check-execution/lifecycle.d.ts +24 -0
- package/types/project-run/check-execution/messages.d.ts +2 -0
- package/types/project-run/check-execution/plan.d.ts +2 -3
- package/types/project-run/check-execution/{preflight-result.d.ts → preparation-result.d.ts} +3 -3
- package/types/project-run/check-execution/preparation.d.ts +29 -0
- package/types/project-run/check-execution/ready-check-execution.d.ts +18 -0
- package/types/project-run/check-execution/resolved-checks.d.ts +37 -44
- package/types/project-run/check-execution/resolved-execution-result.d.ts +21 -0
- package/types/project-run/check-execution/scheduled-check-run.d.ts +10 -0
- package/types/project-run/check-execution/terminal-result.d.ts +13 -1
- package/types/project-run/{completion.d.ts → completion/completion.d.ts} +7 -5
- package/types/project-run/{machine-publication.d.ts → completion/machine-publication.d.ts} +3 -3
- package/types/project-run/completion/result-resolver.d.ts +4 -0
- package/types/project-run/controls/contract.d.ts +22 -9
- package/types/project-run/controls/outputs-override-validation.d.ts +2 -1
- package/types/project-run/controls/validation-result.d.ts +12 -4
- package/types/project-run/diagnostic-logging/logger.d.ts +34 -4
- package/types/project-run/diagnostic-logging/observation-rendering.d.ts +7 -0
- package/types/project-run/invocation/candidate.d.ts +12 -0
- package/types/project-run/invocation/candidates.d.ts +8 -0
- package/types/project-run/{invocation-creation.d.ts → invocation/creation.d.ts} +3 -3
- package/types/project-run/invocation/execution.d.ts +5 -0
- package/types/project-run/invocation/paths.d.ts +40 -0
- package/types/project-run/invocation/progress.d.ts +11 -0
- package/types/project-run/invocation/run.d.ts +43 -0
- package/types/project-run/invocation/scheduler.d.ts +16 -0
- package/types/project-run/outputs/configuration.d.ts +3 -0
- package/types/project-run/outputs/status.d.ts +48 -0
- package/types/project-run/progress-rendering/presentation.d.ts +12 -7
- package/types/project-run/progress-rendering/renderer-formatting.d.ts +13 -2
- package/types/project-run/progress-rendering/renderer-lifecycle.d.ts +8 -1
- package/types/project-run/progress-rendering/renderer.d.ts +11 -3
- package/types/project-run/project-context.d.ts +5 -4
- package/types/project-run/result.d.ts +38 -4
- package/types/project-run/run.d.ts +6 -5
- package/types/project-run/task-scheduler/admission-core/compiled-graph-lookup.d.ts +10 -0
- package/types/project-run/task-scheduler/admission-core/compiled-graph.d.ts +31 -0
- package/types/project-run/task-scheduler/admission-core/core.d.ts +57 -0
- package/types/project-run/task-scheduler/admission-core/input.d.ts +4 -0
- package/types/project-run/task-scheduler/admission-core/projection.d.ts +22 -0
- package/types/project-run/task-scheduler/admission-core/selection-index.d.ts +61 -0
- package/types/project-run/task-scheduler/admission-core/selection-query.d.ts +28 -0
- package/types/project-run/task-scheduler/admission-core/selection-seed.d.ts +9 -0
- package/types/project-run/task-scheduler/admission-core/selection-transition.d.ts +4 -0
- package/types/project-run/task-scheduler/admission-core/selection.d.ts +20 -0
- package/types/project-run/task-scheduler/admission-scope-layers.d.ts +8 -0
- package/types/project-run/task-scheduler/admission-selection-policy.d.ts +31 -0
- package/types/project-run/task-scheduler/custom-admission-policy.d.ts +6 -0
- package/types/project-run/task-scheduler/execution-state.d.ts +43 -1
- package/types/project-run/task-scheduler/forced-block-effect-replay.d.ts +9 -0
- package/types/project-run/task-scheduler/graph-validation.d.ts +3 -2
- package/types/project-run/task-scheduler/graph.d.ts +15 -0
- package/types/project-run/task-scheduler/measurement/diagnostics.d.ts +47 -0
- package/types/project-run/task-scheduler/measurement/integrals.d.ts +27 -0
- package/types/project-run/task-scheduler/measurement/policy.d.ts +10 -0
- package/types/project-run/task-scheduler/measurement/summary.d.ts +3 -0
- package/types/project-run/task-scheduler/measurement/timing.d.ts +33 -0
- package/types/project-run/task-scheduler/scheduler-admission-decision.d.ts +13 -1
- package/types/project-run/task-scheduler/scheduler-decision-inspection.d.ts +20 -19
- package/types/project-run/task-scheduler/scheduler-decision-model.d.ts +38 -22
- package/types/project-run/task-scheduler/scheduler-decision.d.ts +4 -1
- package/types/project-run/task-scheduler/scheduler-observation.d.ts +14 -0
- package/types/project-run/task-scheduler/scheduler-task-lifecycle.d.ts +18 -0
- package/types/project-run/task-scheduler/scheduler-terminal-measurement.d.ts +9 -0
- package/dist/esm/finding-waivers/reconciliation.mjs.map +0 -1
- package/dist/esm/package-checks/file-metrics/scc/csv.mjs +0 -17
- package/dist/esm/package-checks/file-metrics/scc/csv.mjs.map +0 -1
- package/dist/esm/package-checks/function-metrics/lizard/availability.mjs +0 -64
- package/dist/esm/package-checks/function-metrics/lizard/availability.mjs.map +0 -1
- package/dist/esm/package-checks/function-metrics/lizard/csv.mjs.map +0 -1
- package/dist/esm/package-checks/function-metrics/lizard/parser.mjs +0 -138
- package/dist/esm/package-checks/function-metrics/lizard/parser.mjs.map +0 -1
- package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs +0 -35
- package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs.map +0 -1
- package/dist/esm/package-checks/host-environment/process/command.mjs +0 -13
- package/dist/esm/package-checks/host-environment/process/command.mjs.map +0 -1
- package/dist/esm/package-checks/project-files/config-glob.mjs.map +0 -1
- package/dist/esm/project-run/check-execution/preflight-result.mjs.map +0 -1
- package/dist/esm/project-run/check-execution/preflight.mjs +0 -186
- package/dist/esm/project-run/check-execution/preflight.mjs.map +0 -1
- package/dist/esm/project-run/completion.mjs.map +0 -1
- package/dist/esm/project-run/invocation-creation.mjs +0 -111
- package/dist/esm/project-run/invocation-creation.mjs.map +0 -1
- package/dist/esm/project-run/invocation.mjs +0 -195
- package/dist/esm/project-run/invocation.mjs.map +0 -1
- package/dist/esm/project-run/machine-publication.mjs.map +0 -1
- package/dist/esm/project-run/output-configuration.mjs.map +0 -1
- package/dist/esm/project-run/output-status.mjs +0 -43
- package/dist/esm/project-run/output-status.mjs.map +0 -1
- package/src/package-checks/function-metrics/lizard/availability.ts +0 -90
- package/src/package-checks/function-metrics/lizard/csv.ts +0 -20
- package/src/package-checks/function-metrics/lizard/parser.ts +0 -179
- package/src/package-checks/function-metrics/lizard/scanner.ts +0 -62
- package/src/package-checks/host-environment/process/command.ts +0 -21
- package/src/project-run/check-execution/preflight.ts +0 -321
- package/src/project-run/invocation-creation.ts +0 -160
- package/src/project-run/invocation.ts +0 -303
- package/src/project-run/output-status.ts +0 -69
- package/types/package-checks/file-metrics/scc/csv.d.ts +0 -1
- package/types/package-checks/function-metrics/lizard/availability.d.ts +0 -11
- package/types/package-checks/function-metrics/lizard/csv.d.ts +0 -1
- package/types/package-checks/function-metrics/lizard/parser.d.ts +0 -17
- package/types/package-checks/function-metrics/lizard/scanner.d.ts +0 -15
- package/types/package-checks/host-environment/process/command.d.ts +0 -7
- package/types/package-checks/project-files/config-glob.d.ts +0 -5
- package/types/project-run/check-execution/preflight.d.ts +0 -27
- package/types/project-run/invocation.d.ts +0 -34
- package/types/project-run/output-configuration.d.ts +0 -3
- package/types/project-run/output-status.d.ts +0 -21
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derived from terryyin/lizard 1.24.0.
|
|
3
|
+
* Sources: lizard_ext/extension_base.py and lizard_ext/lizard*.py extension
|
|
4
|
+
* contracts.
|
|
5
|
+
* Upstream revision: 308b1c3efd8c1c69bcc3eb82deeaec64fd3662ec.
|
|
6
|
+
* SPDX-License-Identifier: MIT
|
|
7
|
+
* Modified: translated to the analyzer-internal extension protocol; this is
|
|
8
|
+
* not exported through the product API as a plugin surface.
|
|
9
|
+
*/
|
|
10
|
+
/** Resolve metadata with the same descriptor precedence used by extension hooks. */
|
|
11
|
+
export function extensionMetadata(extension) {
|
|
12
|
+
return {
|
|
13
|
+
get ordering_index() {
|
|
14
|
+
const attribute = resolveExtensionAttribute(extension, "ordering_index");
|
|
15
|
+
return attribute === undefined ? undefined : readOrderingIndex(attribute.value);
|
|
16
|
+
},
|
|
17
|
+
get FUNCTION_INFO() {
|
|
18
|
+
const attribute = resolveExtensionAttribute(extension, "FUNCTION_INFO");
|
|
19
|
+
return attribute === undefined ? undefined : readFunctionInfoDefinitions(attribute.value);
|
|
20
|
+
},
|
|
21
|
+
get silent_all_others() {
|
|
22
|
+
const attribute = resolveExtensionAttribute(extension, "silent_all_others");
|
|
23
|
+
// Upstream tests presence with hasattr; the stored value is not interpreted.
|
|
24
|
+
return attribute === undefined ? undefined : true;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export function resolveExtensionHook(extension, hookName) {
|
|
29
|
+
const hook = resolveExtensionAttribute(extension, hookName);
|
|
30
|
+
if (hook === undefined)
|
|
31
|
+
return undefined;
|
|
32
|
+
if (!isUnknownFunction(hook.value)) {
|
|
33
|
+
throw new TypeError(`Lizard extension ${hookName} hook is not callable.`);
|
|
34
|
+
}
|
|
35
|
+
return hook.value.bind(hook.receiver);
|
|
36
|
+
}
|
|
37
|
+
/** Resolve Python's special __call__ lookup from the extension type, ignoring its own dictionary. */
|
|
38
|
+
export function resolveExtensionCall(extension) {
|
|
39
|
+
const call = resolveExtensionSpecialMethod(extension, "__call__");
|
|
40
|
+
if (call === undefined)
|
|
41
|
+
return undefined;
|
|
42
|
+
if (!isExtensionCall(call.value)) {
|
|
43
|
+
throw new TypeError("Lizard extension __call__ hook is not callable.");
|
|
44
|
+
}
|
|
45
|
+
return call.value.bind(call.receiver);
|
|
46
|
+
}
|
|
47
|
+
/** Invoke a token hook and reject an extension that supplies neither source hook form. */
|
|
48
|
+
export function invokeExtensionCall(extension, tokens, reader) {
|
|
49
|
+
const call = resolveExtensionCall(extension);
|
|
50
|
+
if (call === undefined)
|
|
51
|
+
throw new TypeError("Lizard extension is missing a callable __call__ hook.");
|
|
52
|
+
return call(tokens, reader);
|
|
53
|
+
}
|
|
54
|
+
/** Invoke an optional cross-file hook with source instance/static resolution. */
|
|
55
|
+
export function invokeExtensionCrossFileProcess(extension, fileInfos) {
|
|
56
|
+
const outcome = invokeExtensionCrossFileProcessOutcome(extension, fileInfos);
|
|
57
|
+
return outcome.hookPresent ? outcome.result : undefined;
|
|
58
|
+
}
|
|
59
|
+
/** Invoke a cross-file hook without collapsing a present undefined result into absence. */
|
|
60
|
+
export function invokeExtensionCrossFileProcessOutcome(extension, fileInfos) {
|
|
61
|
+
const crossFileProcess = resolveExtensionHook(extension, "cross_file_process");
|
|
62
|
+
if (crossFileProcess === undefined)
|
|
63
|
+
return { hookPresent: false };
|
|
64
|
+
return { hookPresent: true, result: crossFileProcess(fileInfos) };
|
|
65
|
+
}
|
|
66
|
+
/** Invoke an optional result hook with source instance/static resolution. */
|
|
67
|
+
export function invokeExtensionPrintResult(extension) {
|
|
68
|
+
resolveExtensionHook(extension, "print_result")?.();
|
|
69
|
+
}
|
|
70
|
+
/** Invoke an optional argument hook with source instance/static resolution. */
|
|
71
|
+
export function invokeExtensionSetArgs(extension, parser) {
|
|
72
|
+
resolveExtensionHook(extension, "set_args")?.(parser);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Model Python's per-class MRO precedence across TypeScript's split prototype
|
|
76
|
+
* and static namespaces. An own instance member wins at its class level, while
|
|
77
|
+
* a subclass static member still shadows an inherited instance member.
|
|
78
|
+
*/
|
|
79
|
+
function resolveExtensionAttribute(extension, attributeName) {
|
|
80
|
+
if (typeof extension === "function") {
|
|
81
|
+
return resolveClassAttribute(extension, attributeName);
|
|
82
|
+
}
|
|
83
|
+
const ownAttribute = readOwnAttribute(extension, extension, attributeName);
|
|
84
|
+
if (ownAttribute !== undefined)
|
|
85
|
+
return ownAttribute;
|
|
86
|
+
return resolveInstanceTypeAttribute(extension, attributeName);
|
|
87
|
+
}
|
|
88
|
+
function resolveExtensionSpecialMethod(extension, methodName) {
|
|
89
|
+
if (typeof extension === "function") {
|
|
90
|
+
return resolveClassAttribute(extension, methodName);
|
|
91
|
+
}
|
|
92
|
+
return resolveInstanceTypeAttribute(extension, methodName);
|
|
93
|
+
}
|
|
94
|
+
function resolveInstanceTypeAttribute(extension, attributeName) {
|
|
95
|
+
let prototype = readPrototype(extension);
|
|
96
|
+
while (prototype !== null && prototype !== Object.prototype) {
|
|
97
|
+
const instanceAttribute = readOwnAttribute(prototype, extension, attributeName);
|
|
98
|
+
if (instanceAttribute !== undefined)
|
|
99
|
+
return instanceAttribute;
|
|
100
|
+
const constructorDescriptor = Object.getOwnPropertyDescriptor(prototype, "constructor");
|
|
101
|
+
const extensionClass = constructorDescriptor?.value;
|
|
102
|
+
if (isRecord(extensionClass)) {
|
|
103
|
+
const staticAttribute = readOwnAttribute(extensionClass, extensionClass, attributeName);
|
|
104
|
+
if (staticAttribute !== undefined)
|
|
105
|
+
return staticAttribute;
|
|
106
|
+
}
|
|
107
|
+
prototype = readPrototype(prototype);
|
|
108
|
+
}
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
function resolveClassAttribute(extensionClass, attributeName) {
|
|
112
|
+
let currentClass = extensionClass;
|
|
113
|
+
while (currentClass !== null && currentClass !== Function.prototype) {
|
|
114
|
+
const attribute = readOwnAttribute(currentClass, currentClass, attributeName);
|
|
115
|
+
if (attribute !== undefined)
|
|
116
|
+
return attribute;
|
|
117
|
+
currentClass = readPrototype(currentClass);
|
|
118
|
+
}
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
function readOwnAttribute(owner, receiver, attributeName) {
|
|
122
|
+
if (Object.getOwnPropertyDescriptor(owner, attributeName) === undefined)
|
|
123
|
+
return undefined;
|
|
124
|
+
const value = Reflect.get(owner, attributeName, receiver);
|
|
125
|
+
return {
|
|
126
|
+
receiver,
|
|
127
|
+
value
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function readPrototype(value) {
|
|
131
|
+
const prototype = Object.getPrototypeOf(value);
|
|
132
|
+
if (prototype === null || isRecord(prototype))
|
|
133
|
+
return prototype;
|
|
134
|
+
throw new TypeError("Lizard extension prototype must be an object or null.");
|
|
135
|
+
}
|
|
136
|
+
function readOrderingIndex(value) {
|
|
137
|
+
if (typeof value !== "number") {
|
|
138
|
+
throw new TypeError("Lizard extension ordering_index metadata must be a number.");
|
|
139
|
+
}
|
|
140
|
+
return value;
|
|
141
|
+
}
|
|
142
|
+
function readFunctionInfoDefinitions(value) {
|
|
143
|
+
if (!isObjectRecord(value)) {
|
|
144
|
+
throw new TypeError("Lizard extension FUNCTION_INFO metadata must be a record.");
|
|
145
|
+
}
|
|
146
|
+
const definitions = {};
|
|
147
|
+
for (const [name, definition] of Object.entries(value)) {
|
|
148
|
+
if (!isObjectRecord(definition)) {
|
|
149
|
+
throw new TypeError(`Lizard extension FUNCTION_INFO['${name}'] must be a record.`);
|
|
150
|
+
}
|
|
151
|
+
const caption = readOptionalCaption(definition.caption, name, "caption");
|
|
152
|
+
const averageCaption = readOptionalCaption(definition.average_caption, name, "average_caption");
|
|
153
|
+
definitions[name] = {
|
|
154
|
+
...(caption === undefined ? {} : { caption }),
|
|
155
|
+
...(averageCaption === undefined ? {} : { average_caption: averageCaption })
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
return definitions;
|
|
159
|
+
}
|
|
160
|
+
function readOptionalCaption(value, definitionName, captionName) {
|
|
161
|
+
if (value === undefined)
|
|
162
|
+
return undefined;
|
|
163
|
+
if (typeof value !== "string") {
|
|
164
|
+
throw new TypeError(`Lizard extension FUNCTION_INFO['${definitionName}'].${captionName} must be a string.`);
|
|
165
|
+
}
|
|
166
|
+
return value;
|
|
167
|
+
}
|
|
168
|
+
function isRecord(value) {
|
|
169
|
+
return (typeof value === "object" && value !== null) || typeof value === "function";
|
|
170
|
+
}
|
|
171
|
+
function isObjectRecord(value) {
|
|
172
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
173
|
+
}
|
|
174
|
+
function isUnknownFunction(value) {
|
|
175
|
+
return typeof value === "function";
|
|
176
|
+
}
|
|
177
|
+
function isExtensionCall(value) {
|
|
178
|
+
return typeof value === "function";
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=protocol.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.mjs","sourceRoot":"","sources":["../../../../../../src/package-checks/function-metrics/analyzer/extensions/protocol.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Derived from terryyin/lizard 1.24.0.\n * Sources: lizard_ext/extension_base.py and lizard_ext/lizard*.py extension\n * contracts.\n * Upstream revision: 308b1c3efd8c1c69bcc3eb82deeaec64fd3662ec.\n * SPDX-License-Identifier: MIT\n * Modified: translated to the analyzer-internal extension protocol; this is\n * not exported through the product API as a plugin surface.\n */\n\nimport type { AnalyzerReader, TokenStream } from \"../contracts.ts\";\nimport type { FileInformation } from \"../analysis-model.ts\";\n\n/** Metadata an extension contributes to FunctionInfo/report schemas. */\nexport interface FunctionInfoDefinition {\n readonly caption?: string;\n readonly average_caption?: string;\n}\n\n/** The source-aligned FUNCTION_INFO mapping owned by one extension. */\nexport type FunctionInfoDefinitions = Readonly<Record<string, FunctionInfoDefinition>>;\n\n/** Python `argparse.add_argument` keyword options used by translated bodies. */\nexport interface ExtensionArgumentKeywordOptions {\n readonly default?: number;\n readonly dest?: string;\n readonly help?: string;\n /** The source `type=int` conversion contract. */\n readonly type?: \"int\";\n}\n\n/** The minimal internal parser seam consumed by source set_args hooks. */\nexport interface ExtensionArgumentRegistrar {\n add_argument(...arguments_: readonly (string | ExtensionArgumentKeywordOptions)[]): void;\n}\n\n/** A source-aligned extension token processor. */\nexport type ExtensionCall = (tokens: TokenStream, reader: AnalyzerReader) => TokenStream;\n\n/** A source-aligned extension cross-file processor. */\nexport type ExtensionCrossFileProcess = {\n bivarianceHack(\n fileInfos: Iterable<FileInformation> | undefined\n ): Iterable<FileInformation> | undefined;\n}[\"bivarianceHack\"];\n\n/** Preserve the distinction between an absent hook and a present hook returning undefined. */\nexport type ExtensionCrossFileProcessOutcome =\n | { readonly hookPresent: false }\n | {\n readonly hookPresent: true;\n readonly result: Iterable<FileInformation> | undefined;\n };\n\n/** A source-aligned extension result printer. */\nexport type ExtensionPrintResult = () => void;\n\n/** A source-aligned extension argument registrar. */\nexport type ExtensionSetArgs = (parser: ExtensionArgumentRegistrar) => void;\n\n/**\n * The internal protocol shared by translated Lizard extension bodies. Hooks\n * are optional here because Python permits class-level static hooks that are\n * resolved from an instantiated extension.\n */\nexport interface LizardExtension {\n __call__?: ExtensionCall;\n readonly ordering_index?: number;\n readonly FUNCTION_INFO?: FunctionInfoDefinitions;\n readonly silent_all_others?: boolean;\n cross_file_process?: ExtensionCrossFileProcess;\n print_result?: ExtensionPrintResult;\n set_args?: ExtensionSetArgs;\n}\n\n/** Python resolves extension class attributes and static methods through instances. */\nexport interface LizardExtensionClassMetadata {\n readonly ordering_index?: number | undefined;\n readonly FUNCTION_INFO?: FunctionInfoDefinitions | undefined;\n readonly silent_all_others?: boolean | undefined;\n}\n\n/** A directly registered class is an opaque descriptor, not a constructor to invoke at load time. */\nexport type LizardExtensionConstructor = LizardExtensionClassMetadata & {\n readonly prototype: LizardExtension;\n};\n\n/** One non-string value retained verbatim by source-aligned registration. */\nexport type RegisteredLizardExtension = LizardExtension | LizardExtensionConstructor;\n\n/** Any processor object on which upstream performs hasattr-style lifecycle lookup. */\nexport type LizardExtensionDescriptor = object;\n\n/** Accepted internal extension registration inputs. */\nexport type ExtensionInput = string | RegisteredLizardExtension;\n\n/** Ordinary hook names resolved through Python's instance attribute lookup. */\nexport type ExtensionHookName = \"cross_file_process\" | \"print_result\" | \"set_args\";\n\n/** Resolve metadata with the same descriptor precedence used by extension hooks. */\nexport function extensionMetadata(\n extension: LizardExtensionDescriptor\n): LizardExtensionClassMetadata {\n return {\n get ordering_index(): number | undefined {\n const attribute = resolveExtensionAttribute(extension, \"ordering_index\");\n return attribute === undefined ? undefined : readOrderingIndex(attribute.value);\n },\n get FUNCTION_INFO(): FunctionInfoDefinitions | undefined {\n const attribute = resolveExtensionAttribute(extension, \"FUNCTION_INFO\");\n return attribute === undefined ? undefined : readFunctionInfoDefinitions(attribute.value);\n },\n get silent_all_others(): boolean | undefined {\n const attribute = resolveExtensionAttribute(extension, \"silent_all_others\");\n // Upstream tests presence with hasattr; the stored value is not interpreted.\n return attribute === undefined ? undefined : true;\n }\n };\n}\n\n/** Resolve a cross-file hook through ordinary Python instance attribute lookup. */\nexport function resolveExtensionHook(\n extension: LizardExtensionDescriptor,\n hookName: \"cross_file_process\"\n): ExtensionCrossFileProcess | undefined;\n/** Resolve a result hook through ordinary Python instance attribute lookup. */\nexport function resolveExtensionHook(\n extension: LizardExtensionDescriptor,\n hookName: \"print_result\"\n): ExtensionPrintResult | undefined;\n/** Resolve an argument hook through ordinary Python instance attribute lookup. */\nexport function resolveExtensionHook(\n extension: LizardExtensionDescriptor,\n hookName: \"set_args\"\n): ExtensionSetArgs | undefined;\nexport function resolveExtensionHook(\n extension: LizardExtensionDescriptor,\n hookName: ExtensionHookName\n): ((...arguments_: never[]) => unknown) | undefined {\n const hook = resolveExtensionAttribute(extension, hookName);\n if (hook === undefined) return undefined;\n if (!isUnknownFunction(hook.value)) {\n throw new TypeError(`Lizard extension ${hookName} hook is not callable.`);\n }\n return hook.value.bind(hook.receiver);\n}\n\n/** Resolve Python's special __call__ lookup from the extension type, ignoring its own dictionary. */\nexport function resolveExtensionCall(\n extension: LizardExtensionDescriptor\n): ExtensionCall | undefined {\n const call = resolveExtensionSpecialMethod(extension, \"__call__\");\n if (call === undefined) return undefined;\n if (!isExtensionCall(call.value)) {\n throw new TypeError(\"Lizard extension __call__ hook is not callable.\");\n }\n return call.value.bind(call.receiver);\n}\n\n/** Invoke a token hook and reject an extension that supplies neither source hook form. */\nexport function invokeExtensionCall(\n extension: LizardExtensionDescriptor,\n tokens: TokenStream,\n reader: AnalyzerReader\n): TokenStream {\n const call = resolveExtensionCall(extension);\n if (call === undefined)\n throw new TypeError(\"Lizard extension is missing a callable __call__ hook.\");\n return call(tokens, reader);\n}\n\n/** Invoke an optional cross-file hook with source instance/static resolution. */\nexport function invokeExtensionCrossFileProcess(\n extension: LizardExtensionDescriptor,\n fileInfos: Iterable<FileInformation> | undefined\n): Iterable<FileInformation> | undefined {\n const outcome = invokeExtensionCrossFileProcessOutcome(extension, fileInfos);\n return outcome.hookPresent ? outcome.result : undefined;\n}\n\n/** Invoke a cross-file hook without collapsing a present undefined result into absence. */\nexport function invokeExtensionCrossFileProcessOutcome(\n extension: LizardExtensionDescriptor,\n fileInfos: Iterable<FileInformation> | undefined\n): ExtensionCrossFileProcessOutcome {\n const crossFileProcess = resolveExtensionHook(extension, \"cross_file_process\");\n if (crossFileProcess === undefined) return { hookPresent: false };\n return { hookPresent: true, result: crossFileProcess(fileInfos) };\n}\n\n/** Invoke an optional result hook with source instance/static resolution. */\nexport function invokeExtensionPrintResult(extension: LizardExtensionDescriptor): void {\n resolveExtensionHook(extension, \"print_result\")?.();\n}\n\n/** Invoke an optional argument hook with source instance/static resolution. */\nexport function invokeExtensionSetArgs(\n extension: LizardExtensionDescriptor,\n parser: ExtensionArgumentRegistrar\n): void {\n resolveExtensionHook(extension, \"set_args\")?.(parser);\n}\n\ninterface ResolvedExtensionAttribute {\n readonly receiver: object;\n readonly value: unknown;\n}\n\n/**\n * Model Python's per-class MRO precedence across TypeScript's split prototype\n * and static namespaces. An own instance member wins at its class level, while\n * a subclass static member still shadows an inherited instance member.\n */\nfunction resolveExtensionAttribute(\n extension: LizardExtensionDescriptor,\n attributeName: string\n): ResolvedExtensionAttribute | undefined {\n if (typeof extension === \"function\") {\n return resolveClassAttribute(extension, attributeName);\n }\n\n const ownAttribute = readOwnAttribute(extension, extension, attributeName);\n if (ownAttribute !== undefined) return ownAttribute;\n\n return resolveInstanceTypeAttribute(extension, attributeName);\n}\n\nfunction resolveExtensionSpecialMethod(\n extension: LizardExtensionDescriptor,\n methodName: \"__call__\"\n): ResolvedExtensionAttribute | undefined {\n if (typeof extension === \"function\") {\n return resolveClassAttribute(extension, methodName);\n }\n return resolveInstanceTypeAttribute(extension, methodName);\n}\n\nfunction resolveInstanceTypeAttribute(\n extension: object,\n attributeName: string\n): ResolvedExtensionAttribute | undefined {\n let prototype = readPrototype(extension);\n while (prototype !== null && prototype !== Object.prototype) {\n const instanceAttribute = readOwnAttribute(prototype, extension, attributeName);\n if (instanceAttribute !== undefined) return instanceAttribute;\n\n const constructorDescriptor = Object.getOwnPropertyDescriptor(prototype, \"constructor\");\n const extensionClass: unknown = constructorDescriptor?.value;\n if (isRecord(extensionClass)) {\n const staticAttribute = readOwnAttribute(extensionClass, extensionClass, attributeName);\n if (staticAttribute !== undefined) return staticAttribute;\n }\n\n prototype = readPrototype(prototype);\n }\n return undefined;\n}\n\nfunction resolveClassAttribute(\n extensionClass: object,\n attributeName: string\n): ResolvedExtensionAttribute | undefined {\n let currentClass: object | null = extensionClass;\n while (currentClass !== null && currentClass !== Function.prototype) {\n const attribute = readOwnAttribute(currentClass, currentClass, attributeName);\n if (attribute !== undefined) return attribute;\n currentClass = readPrototype(currentClass);\n }\n return undefined;\n}\n\nfunction readOwnAttribute(\n owner: object,\n receiver: object,\n attributeName: string\n): ResolvedExtensionAttribute | undefined {\n if (Object.getOwnPropertyDescriptor(owner, attributeName) === undefined) return undefined;\n const value: unknown = Reflect.get(owner, attributeName, receiver);\n return {\n receiver,\n value\n };\n}\n\nfunction readPrototype(value: object): object | null {\n const prototype: unknown = Object.getPrototypeOf(value);\n if (prototype === null || isRecord(prototype)) return prototype;\n throw new TypeError(\"Lizard extension prototype must be an object or null.\");\n}\n\nfunction readOrderingIndex(value: unknown): number {\n if (typeof value !== \"number\") {\n throw new TypeError(\"Lizard extension ordering_index metadata must be a number.\");\n }\n return value;\n}\n\nfunction readFunctionInfoDefinitions(value: unknown): FunctionInfoDefinitions {\n if (!isObjectRecord(value)) {\n throw new TypeError(\"Lizard extension FUNCTION_INFO metadata must be a record.\");\n }\n const definitions: Record<string, FunctionInfoDefinition> = {};\n for (const [name, definition] of Object.entries(value)) {\n if (!isObjectRecord(definition)) {\n throw new TypeError(`Lizard extension FUNCTION_INFO['${name}'] must be a record.`);\n }\n const caption = readOptionalCaption(definition.caption, name, \"caption\");\n const averageCaption = readOptionalCaption(definition.average_caption, name, \"average_caption\");\n definitions[name] = {\n ...(caption === undefined ? {} : { caption }),\n ...(averageCaption === undefined ? {} : { average_caption: averageCaption })\n };\n }\n return definitions;\n}\n\nfunction readOptionalCaption(\n value: unknown,\n definitionName: string,\n captionName: \"average_caption\" | \"caption\"\n): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== \"string\") {\n throw new TypeError(\n `Lizard extension FUNCTION_INFO['${definitionName}'].${captionName} must be a string.`\n );\n }\n return value;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return (typeof value === \"object\" && value !== null) || typeof value === \"function\";\n}\n\nfunction isObjectRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isUnknownFunction(value: unknown): value is (...arguments_: unknown[]) => unknown {\n return typeof value === \"function\";\n}\n\nfunction isExtensionCall(value: unknown): value is ExtensionCall {\n return typeof value === \"function\";\n}\n"]}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derived from terryyin/lizard 1.24.0.
|
|
3
|
+
* Sources: lizard.py:get_extensions and lizard_ext/lizard*.py module names.
|
|
4
|
+
* Upstream revision: 308b1c3efd8c1c69bcc3eb82deeaec64fd3662ec.
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0 AND MIT
|
|
6
|
+
* Modified: translated to an analyzer-internal registration table. Deferred
|
|
7
|
+
* bodies fail explicitly rather than pretending to process source.
|
|
8
|
+
*/
|
|
9
|
+
import { DEFAULT_TOKEN_PROCESSORS } from "../pipeline.mjs";
|
|
10
|
+
import { LizardExtension as ComplexTagsExtension } from "./lizardcomplextags.mjs";
|
|
11
|
+
import { LizardExtension as NestingDepthExtension } from "./lizardnd.mjs";
|
|
12
|
+
import { extensionMetadata } from "./protocol.mjs";
|
|
13
|
+
/** Explicitly fail named loads until their source body is translated. */
|
|
14
|
+
export class DeferredExtensionBodyError extends Error {
|
|
15
|
+
extensionName;
|
|
16
|
+
sourcePath;
|
|
17
|
+
constructor(registration) {
|
|
18
|
+
super(`Lizard extension body '${registration.name}' is deferred and cannot be loaded: ${registration.sourcePath}`);
|
|
19
|
+
this.name = "DeferredExtensionBodyError";
|
|
20
|
+
this.extensionName = registration.name;
|
|
21
|
+
this.sourcePath = registration.sourcePath;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/** All 19 upstream Lizard extension bodies in the current translation scope. */
|
|
25
|
+
export const EXTENSION_REGISTRATIONS = Object.freeze([
|
|
26
|
+
deferred("boolcount"),
|
|
27
|
+
translated("complextags"),
|
|
28
|
+
deferred("cpre"),
|
|
29
|
+
deferred("dependencycount"),
|
|
30
|
+
deferred("dumpcomments"),
|
|
31
|
+
deferred("duplicate"),
|
|
32
|
+
deferred("duplicated_param_list"),
|
|
33
|
+
deferred("exitcount"),
|
|
34
|
+
deferred("gotocount"),
|
|
35
|
+
deferred("ignoreassert"),
|
|
36
|
+
deferred("io"),
|
|
37
|
+
deferred("mccabe"),
|
|
38
|
+
deferred("modified"),
|
|
39
|
+
translated("nd"),
|
|
40
|
+
deferred("nonstrict"),
|
|
41
|
+
deferred("ns"),
|
|
42
|
+
deferred("outside"),
|
|
43
|
+
deferred("statementcount"),
|
|
44
|
+
deferred("wordcount")
|
|
45
|
+
]);
|
|
46
|
+
/**
|
|
47
|
+
* Source-aligned get_extensions semantics: start with the five default
|
|
48
|
+
* processors, then resolve and insert each supplied extension by ordering_index.
|
|
49
|
+
*/
|
|
50
|
+
export function getExtensions(extensionInputs = []) {
|
|
51
|
+
const processors = [...DEFAULT_TOKEN_PROCESSORS];
|
|
52
|
+
for (const extensionInput of extensionInputs) {
|
|
53
|
+
const extension = resolveExtension(extensionInput);
|
|
54
|
+
insertAtOrderingIndex(processors, extension);
|
|
55
|
+
}
|
|
56
|
+
return processors;
|
|
57
|
+
}
|
|
58
|
+
/** Source `get_extensions` spelling for translated analyzer-internal callers. */
|
|
59
|
+
export function get_extensions(extensionNames = []) {
|
|
60
|
+
return getExtensions(extensionNames);
|
|
61
|
+
}
|
|
62
|
+
/** Resolve an object/class directly, or report a known named body as deferred. */
|
|
63
|
+
export function loadExtension(extensionInput) {
|
|
64
|
+
return resolveExtension(extensionInput);
|
|
65
|
+
}
|
|
66
|
+
function deferred(name) {
|
|
67
|
+
return {
|
|
68
|
+
name,
|
|
69
|
+
sourcePath: `lizard_ext/lizard${name}.py`,
|
|
70
|
+
status: "deferred-extension-body"
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function translated(name) {
|
|
74
|
+
return {
|
|
75
|
+
name,
|
|
76
|
+
sourcePath: `lizard_ext/lizard${name}.py`,
|
|
77
|
+
status: "translated"
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function resolveExtension(extensionInput) {
|
|
81
|
+
if (typeof extensionInput === "string")
|
|
82
|
+
return loadNamedExtension(extensionInput);
|
|
83
|
+
return extensionInput;
|
|
84
|
+
}
|
|
85
|
+
function loadNamedExtension(name) {
|
|
86
|
+
const registration = EXTENSION_REGISTRATIONS.find((candidate) => candidate.name === name.toLowerCase());
|
|
87
|
+
if (registration === undefined) {
|
|
88
|
+
throw new Error(`Unknown Lizard extension '${name}'.`);
|
|
89
|
+
}
|
|
90
|
+
if (registration.status === "translated")
|
|
91
|
+
return translatedExtension(registration.name);
|
|
92
|
+
throw new DeferredExtensionBodyError(registration);
|
|
93
|
+
}
|
|
94
|
+
function translatedExtension(name) {
|
|
95
|
+
switch (name) {
|
|
96
|
+
case "complextags":
|
|
97
|
+
return new ComplexTagsExtension();
|
|
98
|
+
case "nd":
|
|
99
|
+
return new NestingDepthExtension();
|
|
100
|
+
default:
|
|
101
|
+
throw new Error(`Translated Lizard extension '${name}' has no body.`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function insertAtOrderingIndex(processors, extension) {
|
|
105
|
+
const orderingIndex = extensionMetadata(extension).ordering_index;
|
|
106
|
+
if (orderingIndex === undefined) {
|
|
107
|
+
processors.push(extension);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (!Number.isInteger(orderingIndex)) {
|
|
111
|
+
throw new RangeError(`Invalid Lizard extension ordering_index '${String(orderingIndex)}'; expected a finite integer.`);
|
|
112
|
+
}
|
|
113
|
+
const index = normalizePythonInsertIndex(orderingIndex, processors.length);
|
|
114
|
+
processors.splice(index, 0, extension);
|
|
115
|
+
}
|
|
116
|
+
function normalizePythonInsertIndex(index, length) {
|
|
117
|
+
if (index < 0)
|
|
118
|
+
return Math.max(length + index, 0);
|
|
119
|
+
return Math.min(index, length);
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=registry.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.mjs","sourceRoot":"","sources":["../../../../../../src/package-checks/function-metrics/analyzer/extensions/registry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Derived from terryyin/lizard 1.24.0.\n * Sources: lizard.py:get_extensions and lizard_ext/lizard*.py module names.\n * Upstream revision: 308b1c3efd8c1c69bcc3eb82deeaec64fd3662ec.\n * SPDX-License-Identifier: Apache-2.0 AND MIT\n * Modified: translated to an analyzer-internal registration table. Deferred\n * bodies fail explicitly rather than pretending to process source.\n */\n\nimport { DEFAULT_TOKEN_PROCESSORS } from \"../pipeline.ts\";\nimport type { AnalyzerProcessor } from \"../contracts.ts\";\nimport { LizardExtension as ComplexTagsExtension } from \"./lizardcomplextags.ts\";\nimport { LizardExtension as NestingDepthExtension } from \"./lizardnd.ts\";\nimport type { ExtensionInput, RegisteredLizardExtension } from \"./protocol.ts\";\nimport { extensionMetadata } from \"./protocol.ts\";\n\nexport type ExtensionBodyStatus = \"deferred-extension-body\" | \"translated\";\n\n/** One known upstream extension module whose body has not yet been translated. */\nexport interface ExtensionRegistration {\n readonly name: string;\n readonly sourcePath: string;\n readonly status: ExtensionBodyStatus;\n}\n\n/** Explicitly fail named loads until their source body is translated. */\nexport class DeferredExtensionBodyError extends Error {\n public readonly extensionName: string;\n public readonly sourcePath: string;\n\n public constructor(registration: ExtensionRegistration) {\n super(\n `Lizard extension body '${registration.name}' is deferred and cannot be loaded: ${registration.sourcePath}`\n );\n this.name = \"DeferredExtensionBodyError\";\n this.extensionName = registration.name;\n this.sourcePath = registration.sourcePath;\n }\n}\n\n/** All 19 upstream Lizard extension bodies in the current translation scope. */\nexport const EXTENSION_REGISTRATIONS: readonly ExtensionRegistration[] = Object.freeze([\n deferred(\"boolcount\"),\n translated(\"complextags\"),\n deferred(\"cpre\"),\n deferred(\"dependencycount\"),\n deferred(\"dumpcomments\"),\n deferred(\"duplicate\"),\n deferred(\"duplicated_param_list\"),\n deferred(\"exitcount\"),\n deferred(\"gotocount\"),\n deferred(\"ignoreassert\"),\n deferred(\"io\"),\n deferred(\"mccabe\"),\n deferred(\"modified\"),\n translated(\"nd\"),\n deferred(\"nonstrict\"),\n deferred(\"ns\"),\n deferred(\"outside\"),\n deferred(\"statementcount\"),\n deferred(\"wordcount\")\n]);\n\n/**\n * Source-aligned get_extensions semantics: start with the five default\n * processors, then resolve and insert each supplied extension by ordering_index.\n */\nexport function getExtensions(\n extensionInputs: readonly ExtensionInput[] = []\n): AnalyzerProcessor[] {\n const processors: AnalyzerProcessor[] = [...DEFAULT_TOKEN_PROCESSORS];\n for (const extensionInput of extensionInputs) {\n const extension = resolveExtension(extensionInput);\n insertAtOrderingIndex(processors, extension);\n }\n return processors;\n}\n\n/** Source `get_extensions` spelling for translated analyzer-internal callers. */\nexport function get_extensions(\n extensionNames: readonly ExtensionInput[] = []\n): AnalyzerProcessor[] {\n return getExtensions(extensionNames);\n}\n\n/** Resolve an object/class directly, or report a known named body as deferred. */\nexport function loadExtension(extensionInput: ExtensionInput): RegisteredLizardExtension {\n return resolveExtension(extensionInput);\n}\n\nfunction deferred(name: string): ExtensionRegistration {\n return {\n name,\n sourcePath: `lizard_ext/lizard${name}.py`,\n status: \"deferred-extension-body\"\n };\n}\n\nfunction translated(name: \"complextags\" | \"nd\"): ExtensionRegistration {\n return {\n name,\n sourcePath: `lizard_ext/lizard${name}.py`,\n status: \"translated\"\n };\n}\n\nfunction resolveExtension(extensionInput: ExtensionInput): RegisteredLizardExtension {\n if (typeof extensionInput === \"string\") return loadNamedExtension(extensionInput);\n return extensionInput;\n}\n\nfunction loadNamedExtension(name: string): RegisteredLizardExtension {\n const registration = EXTENSION_REGISTRATIONS.find(\n (candidate) => candidate.name === name.toLowerCase()\n );\n if (registration === undefined) {\n throw new Error(`Unknown Lizard extension '${name}'.`);\n }\n if (registration.status === \"translated\") return translatedExtension(registration.name);\n throw new DeferredExtensionBodyError(registration);\n}\n\nfunction translatedExtension(name: string): RegisteredLizardExtension {\n switch (name) {\n case \"complextags\":\n return new ComplexTagsExtension();\n case \"nd\":\n return new NestingDepthExtension();\n default:\n throw new Error(`Translated Lizard extension '${name}' has no body.`);\n }\n}\n\nfunction insertAtOrderingIndex(\n processors: AnalyzerProcessor[],\n extension: RegisteredLizardExtension\n): void {\n const orderingIndex = extensionMetadata(extension).ordering_index;\n if (orderingIndex === undefined) {\n processors.push(extension as AnalyzerProcessor);\n return;\n }\n\n if (!Number.isInteger(orderingIndex)) {\n throw new RangeError(\n `Invalid Lizard extension ordering_index '${String(orderingIndex)}'; expected a finite integer.`\n );\n }\n\n const index = normalizePythonInsertIndex(orderingIndex, processors.length);\n processors.splice(index, 0, extension as AnalyzerProcessor);\n}\n\nfunction normalizePythonInsertIndex(index: number, length: number): number {\n if (index < 0) return Math.max(length + index, 0);\n return Math.min(index, length);\n}\n"]}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derived from terryyin/lizard 1.24.0.
|
|
3
|
+
* Sources: lizard.py processor order, FileAnalyzer, map_files_to_analyzer,
|
|
4
|
+
* analyze_files, and extension lifecycle hooks.
|
|
5
|
+
* Upstream revision: 308b1c3efd8c1c69bcc3eb82deeaec64fd3662ec.
|
|
6
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
7
|
+
* Modified: in-memory execution pipeline isolated from state and reporting.
|
|
8
|
+
*/
|
|
9
|
+
import { invokeExtensionCall, invokeExtensionCrossFileProcessOutcome, invokeExtensionSetArgs } from "./extensions/protocol.mjs";
|
|
10
|
+
import { FileInfoBuilder } from "./analysis-context.mjs";
|
|
11
|
+
import { isPythonWhitespace, splitPythonLines } from "./shared/code-reader.mjs";
|
|
12
|
+
/** Python str.strip(), as used by the source comment-directive processor. */
|
|
13
|
+
function stripPythonWhitespace(value) {
|
|
14
|
+
const characters = Array.from(value);
|
|
15
|
+
let firstCharacter = 0;
|
|
16
|
+
while (firstCharacter < characters.length &&
|
|
17
|
+
isPythonWhitespace(characters[firstCharacter] ?? "")) {
|
|
18
|
+
firstCharacter += 1;
|
|
19
|
+
}
|
|
20
|
+
let lastCharacter = characters.length;
|
|
21
|
+
while (lastCharacter > firstCharacter &&
|
|
22
|
+
isPythonWhitespace(characters[lastCharacter - 1] ?? "")) {
|
|
23
|
+
lastCharacter -= 1;
|
|
24
|
+
}
|
|
25
|
+
return characters.slice(firstCharacter, lastCharacter).join("");
|
|
26
|
+
}
|
|
27
|
+
export function preprocessing(tokens, reader) {
|
|
28
|
+
return reader.preprocess?.(tokens) ?? withoutWhitespace(tokens);
|
|
29
|
+
}
|
|
30
|
+
/** Upstream comment directive and generated-code handling. */
|
|
31
|
+
export function* commentCounter(tokens, reader) {
|
|
32
|
+
for (const token of tokens) {
|
|
33
|
+
const comment = reader.getCommentFromToken(token);
|
|
34
|
+
if (comment === undefined) {
|
|
35
|
+
yield token;
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
for (const _line of splitPythonLines(comment).slice(1)) {
|
|
39
|
+
yield "\n";
|
|
40
|
+
}
|
|
41
|
+
const strippedComment = stripPythonWhitespace(comment);
|
|
42
|
+
if (strippedComment.startsWith("#lizard forgive global")) {
|
|
43
|
+
reader.context.forgiveGlobal = true;
|
|
44
|
+
}
|
|
45
|
+
else if (strippedComment.startsWith("#lizard forgives(")) {
|
|
46
|
+
const metricMatch = /#lizard forgives?\(([^)]*)\)/u.exec(strippedComment);
|
|
47
|
+
if (metricMatch?.[1] !== undefined) {
|
|
48
|
+
for (const metric of metricMatch[1].split(",")) {
|
|
49
|
+
const trimmedMetric = stripPythonWhitespace(metric);
|
|
50
|
+
if (trimmedMetric.length > 0) {
|
|
51
|
+
reader.context.currentFunction.forgivenMetrics.add(trimmedMetric);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else if (strippedComment.startsWith("#lizard forgive")) {
|
|
57
|
+
reader.context.forgive = true;
|
|
58
|
+
}
|
|
59
|
+
if (comment.includes("GENERATED CODE"))
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/** Upstream non-comment source-line counting. */
|
|
64
|
+
export function* lineCounter(tokens, reader) {
|
|
65
|
+
const { context } = reader;
|
|
66
|
+
context.currentLine = 1;
|
|
67
|
+
let newline = 1;
|
|
68
|
+
for (const token of tokens) {
|
|
69
|
+
if (token === "\n") {
|
|
70
|
+
context.currentLine += 1;
|
|
71
|
+
newline = 1;
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
const embeddedNewlineCount = token.split("\n").length - 1;
|
|
75
|
+
context.currentLine += embeddedNewlineCount;
|
|
76
|
+
context.addNloc(embeddedNewlineCount + newline);
|
|
77
|
+
newline = 0;
|
|
78
|
+
yield token;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** Upstream file and current-function token counting. */
|
|
82
|
+
export function* tokenCounter(tokens, reader) {
|
|
83
|
+
const { context } = reader;
|
|
84
|
+
for (const token of tokens) {
|
|
85
|
+
context.fileinfo.tokenCount += 1;
|
|
86
|
+
context.currentFunction.tokenCount += 1;
|
|
87
|
+
yield token;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/** Upstream cyclomatic-condition counting. */
|
|
91
|
+
export function* conditionCounter(tokens, reader) {
|
|
92
|
+
for (const token of tokens) {
|
|
93
|
+
if (reader.conditions.has(token))
|
|
94
|
+
reader.context.addCondition();
|
|
95
|
+
yield token;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/** The ordered default processor list from lizard.py:get_extensions. */
|
|
99
|
+
export const DEFAULT_TOKEN_PROCESSORS = Object.freeze([
|
|
100
|
+
preprocessing,
|
|
101
|
+
commentCounter,
|
|
102
|
+
lineCounter,
|
|
103
|
+
tokenCounter,
|
|
104
|
+
conditionCounter
|
|
105
|
+
]);
|
|
106
|
+
/**
|
|
107
|
+
* Drives the in-memory half of upstream FileAnalyzer. Reader registry and
|
|
108
|
+
* filesystem decoding stay at the product integration boundary, so callers
|
|
109
|
+
* supply the concrete reader explicitly.
|
|
110
|
+
*/
|
|
111
|
+
export class FileAnalyzer {
|
|
112
|
+
processors;
|
|
113
|
+
constructor(processors = DEFAULT_TOKEN_PROCESSORS) {
|
|
114
|
+
this.processors = processors;
|
|
115
|
+
}
|
|
116
|
+
analyzeSourceCode(filename, sourceCode, Reader) {
|
|
117
|
+
const context = new FileInfoBuilder(filename);
|
|
118
|
+
const reader = new Reader(context);
|
|
119
|
+
let tokens = Reader.generateTokens(sourceCode);
|
|
120
|
+
try {
|
|
121
|
+
for (const processor of this.processors)
|
|
122
|
+
tokens = applyProcessor(processor, tokens, reader);
|
|
123
|
+
for (const _token of reader.__call__(tokens, reader)) {
|
|
124
|
+
// The reader drives its state machine while the in-memory pipeline drains.
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
if (!isRecursionLimit(error))
|
|
129
|
+
throw error;
|
|
130
|
+
}
|
|
131
|
+
return context.fileinfo;
|
|
132
|
+
}
|
|
133
|
+
/** Source `analyze_source_code` spelling retained for translated extension/core callers. */
|
|
134
|
+
analyze_source_code(filename, sourceCode, Reader) {
|
|
135
|
+
return this.analyzeSourceCode(filename, sourceCode, Reader);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/** The source-aligned default analyzer has only the five core processors. */
|
|
139
|
+
export const DEFAULT_FILE_ANALYZER = new FileAnalyzer(DEFAULT_TOKEN_PROCESSORS);
|
|
140
|
+
/**
|
|
141
|
+
* Source-aligned `map_files_to_analyzer` after the explicitly excluded file
|
|
142
|
+
* opening/multiprocessing entry surface has supplied in-memory source units.
|
|
143
|
+
*/
|
|
144
|
+
export function mapFilesToAnalyzer(files, analyzer, workingThreads) {
|
|
145
|
+
// The Product owns Worker scheduling. Retain the source argument/lifecycle
|
|
146
|
+
// without creating a second analyzer-level concurrency framework.
|
|
147
|
+
void workingThreads;
|
|
148
|
+
return mapInMemoryFiles(files, analyzer);
|
|
149
|
+
}
|
|
150
|
+
/** Source `map_files_to_analyzer` spelling for the retained in-memory lifecycle. */
|
|
151
|
+
export function map_files_to_analyzer(files, analyzer, workingThreads) {
|
|
152
|
+
return mapFilesToAnalyzer(files, analyzer, workingThreads);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Source-aligned `analyze_files` lifecycle. `exts` intentionally uses Python
|
|
156
|
+
* truthiness: an omitted or empty list receives the five default processors.
|
|
157
|
+
*/
|
|
158
|
+
export function analyzeFiles(files, threads = 1, exts) {
|
|
159
|
+
const extensions = exts !== undefined && exts.length > 0 ? exts : [...DEFAULT_TOKEN_PROCESSORS];
|
|
160
|
+
const fileAnalyzer = new FileAnalyzer(extensions);
|
|
161
|
+
let result = mapFilesToAnalyzer(files, fileAnalyzer, threads);
|
|
162
|
+
for (const extension of extensions) {
|
|
163
|
+
const outcome = invokeExtensionCrossFileProcessOutcome(extension, result);
|
|
164
|
+
if (outcome.hookPresent)
|
|
165
|
+
result = outcome.result;
|
|
166
|
+
}
|
|
167
|
+
return result;
|
|
168
|
+
}
|
|
169
|
+
/** Source `analyze_files` spelling for translated internal callers. */
|
|
170
|
+
export function analyze_files(files, threads = 1, exts) {
|
|
171
|
+
return analyzeFiles(files, threads, exts);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Apply source registration-order cross-file passes. A present hook replaces
|
|
175
|
+
* the stream even when it returns undefined; only an absent hook is skipped.
|
|
176
|
+
*/
|
|
177
|
+
export function applyCrossFileProcessors(fileInfos, processors) {
|
|
178
|
+
let processedFileInfos = fileInfos;
|
|
179
|
+
for (const processor of processors) {
|
|
180
|
+
const outcome = invokeExtensionCrossFileProcessOutcome(processor, processedFileInfos);
|
|
181
|
+
if (outcome.hookPresent)
|
|
182
|
+
processedFileInfos = outcome.result;
|
|
183
|
+
}
|
|
184
|
+
return processedFileInfos;
|
|
185
|
+
}
|
|
186
|
+
/** Forward the internal parser seam to extensions in source registration order. */
|
|
187
|
+
export function registerExtensionArguments(processors, parser) {
|
|
188
|
+
for (const processor of processors) {
|
|
189
|
+
invokeExtensionSetArgs(processor, parser);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
export function analyzeSourceCode(filename, sourceCode, Reader, processors = DEFAULT_TOKEN_PROCESSORS) {
|
|
193
|
+
if (processors === DEFAULT_TOKEN_PROCESSORS) {
|
|
194
|
+
return DEFAULT_FILE_ANALYZER.analyzeSourceCode(filename, sourceCode, Reader);
|
|
195
|
+
}
|
|
196
|
+
return new FileAnalyzer(processors).analyzeSourceCode(filename, sourceCode, Reader);
|
|
197
|
+
}
|
|
198
|
+
function* mapInMemoryFiles(files, analyzer) {
|
|
199
|
+
for (const file of files) {
|
|
200
|
+
yield analyzer.analyze_source_code(file.filename, file.sourceCode, file.reader);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
function applyProcessor(processor, tokens, reader) {
|
|
204
|
+
return typeof processor === "function"
|
|
205
|
+
? processor(tokens, reader)
|
|
206
|
+
: invokeExtensionCall(processor, tokens, reader);
|
|
207
|
+
}
|
|
208
|
+
function isRecursionLimit(error) {
|
|
209
|
+
return (error instanceof RangeError &&
|
|
210
|
+
(error.message.includes("call stack") || error.message.toLowerCase().includes("recursion")));
|
|
211
|
+
}
|
|
212
|
+
function* withoutWhitespace(tokens) {
|
|
213
|
+
for (const token of tokens) {
|
|
214
|
+
if (!isPythonWhitespace(token) || token === "\n")
|
|
215
|
+
yield token;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=pipeline.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.mjs","sourceRoot":"","sources":["../../../../../src/package-checks/function-metrics/analyzer/pipeline.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Derived from terryyin/lizard 1.24.0.\n * Sources: lizard.py processor order, FileAnalyzer, map_files_to_analyzer,\n * analyze_files, and extension lifecycle hooks.\n * Upstream revision: 308b1c3efd8c1c69bcc3eb82deeaec64fd3662ec.\n * SPDX-License-Identifier: Apache-2.0\n * Modified: in-memory execution pipeline isolated from state and reporting.\n */\n\nimport {\n invokeExtensionCall,\n invokeExtensionCrossFileProcessOutcome,\n invokeExtensionSetArgs\n} from \"./extensions/protocol.ts\";\nimport type { ExtensionArgumentRegistrar } from \"./extensions/protocol.ts\";\nimport type {\n AnalyzerProcessor,\n AnalyzerReader,\n ReaderConstructor,\n TokenProcessor,\n TokenStream\n} from \"./contracts.ts\";\nimport { FileInfoBuilder } from \"./analysis-context.ts\";\nimport type { FileInformation } from \"./analysis-model.ts\";\nimport { isPythonWhitespace, splitPythonLines } from \"./shared/code-reader.ts\";\n\n/** Python str.strip(), as used by the source comment-directive processor. */\nfunction stripPythonWhitespace(value: string): string {\n const characters = Array.from(value);\n let firstCharacter = 0;\n while (\n firstCharacter < characters.length &&\n isPythonWhitespace(characters[firstCharacter] ?? \"\")\n ) {\n firstCharacter += 1;\n }\n\n let lastCharacter = characters.length;\n while (\n lastCharacter > firstCharacter &&\n isPythonWhitespace(characters[lastCharacter - 1] ?? \"\")\n ) {\n lastCharacter -= 1;\n }\n return characters.slice(firstCharacter, lastCharacter).join(\"\");\n}\n\nexport function preprocessing(tokens: TokenStream, reader: AnalyzerReader): TokenStream {\n return reader.preprocess?.(tokens) ?? withoutWhitespace(tokens);\n}\n\n/** Upstream comment directive and generated-code handling. */\nexport function* commentCounter(tokens: TokenStream, reader: AnalyzerReader): Generator<string> {\n for (const token of tokens) {\n const comment = reader.getCommentFromToken(token);\n if (comment === undefined) {\n yield token;\n continue;\n }\n\n for (const _line of splitPythonLines(comment).slice(1)) {\n yield \"\\n\";\n }\n\n const strippedComment = stripPythonWhitespace(comment);\n if (strippedComment.startsWith(\"#lizard forgive global\")) {\n reader.context.forgiveGlobal = true;\n } else if (strippedComment.startsWith(\"#lizard forgives(\")) {\n const metricMatch = /#lizard forgives?\\(([^)]*)\\)/u.exec(strippedComment);\n if (metricMatch?.[1] !== undefined) {\n for (const metric of metricMatch[1].split(\",\")) {\n const trimmedMetric = stripPythonWhitespace(metric);\n if (trimmedMetric.length > 0) {\n reader.context.currentFunction.forgivenMetrics.add(trimmedMetric);\n }\n }\n }\n } else if (strippedComment.startsWith(\"#lizard forgive\")) {\n reader.context.forgive = true;\n }\n\n if (comment.includes(\"GENERATED CODE\")) return;\n }\n}\n\n/** Upstream non-comment source-line counting. */\nexport function* lineCounter(tokens: TokenStream, reader: AnalyzerReader): Generator<string> {\n const { context } = reader;\n context.currentLine = 1;\n let newline = 1;\n\n for (const token of tokens) {\n if (token === \"\\n\") {\n context.currentLine += 1;\n newline = 1;\n continue;\n }\n\n const embeddedNewlineCount = token.split(\"\\n\").length - 1;\n context.currentLine += embeddedNewlineCount;\n context.addNloc(embeddedNewlineCount + newline);\n newline = 0;\n yield token;\n }\n}\n\n/** Upstream file and current-function token counting. */\nexport function* tokenCounter(tokens: TokenStream, reader: AnalyzerReader): Generator<string> {\n const { context } = reader;\n for (const token of tokens) {\n context.fileinfo.tokenCount += 1;\n context.currentFunction.tokenCount += 1;\n yield token;\n }\n}\n\n/** Upstream cyclomatic-condition counting. */\nexport function* conditionCounter(tokens: TokenStream, reader: AnalyzerReader): Generator<string> {\n for (const token of tokens) {\n if (reader.conditions.has(token)) reader.context.addCondition();\n yield token;\n }\n}\n\n/** The ordered default processor list from lizard.py:get_extensions. */\nexport const DEFAULT_TOKEN_PROCESSORS: readonly TokenProcessor[] = Object.freeze([\n preprocessing,\n commentCounter,\n lineCounter,\n tokenCounter,\n conditionCounter\n]);\n\n/**\n * Drives the in-memory half of upstream FileAnalyzer. Reader registry and\n * filesystem decoding stay at the product integration boundary, so callers\n * supply the concrete reader explicitly.\n */\nexport class FileAnalyzer {\n public readonly processors: readonly AnalyzerProcessor[];\n\n public constructor(processors: readonly AnalyzerProcessor[] = DEFAULT_TOKEN_PROCESSORS) {\n this.processors = processors;\n }\n\n public analyzeSourceCode<Reader extends AnalyzerReader>(\n filename: string,\n sourceCode: string,\n Reader: ReaderConstructor<Reader>\n ): FileInformation {\n const context = new FileInfoBuilder(filename);\n const reader = new Reader(context);\n let tokens = Reader.generateTokens(sourceCode);\n\n try {\n for (const processor of this.processors) tokens = applyProcessor(processor, tokens, reader);\n for (const _token of reader.__call__(tokens, reader)) {\n // The reader drives its state machine while the in-memory pipeline drains.\n }\n } catch (error: unknown) {\n if (!isRecursionLimit(error)) throw error;\n }\n\n return context.fileinfo;\n }\n\n /** Source `analyze_source_code` spelling retained for translated extension/core callers. */\n public analyze_source_code<Reader extends AnalyzerReader>(\n filename: string,\n sourceCode: string,\n Reader: ReaderConstructor<Reader>\n ): FileInformation {\n return this.analyzeSourceCode(filename, sourceCode, Reader);\n }\n}\n\n/** The source-aligned default analyzer has only the five core processors. */\nexport const DEFAULT_FILE_ANALYZER = new FileAnalyzer(DEFAULT_TOKEN_PROCESSORS);\n\n/**\n * One already-admitted source unit at the in-memory boundary. File discovery,\n * decoding and reader selection stay outside this source-aligned core.\n */\nexport interface InMemoryAnalyzerFile {\n readonly filename: string;\n readonly sourceCode: string;\n readonly reader: ReaderConstructor;\n}\n\n/**\n * Source-aligned `map_files_to_analyzer` after the explicitly excluded file\n * opening/multiprocessing entry surface has supplied in-memory source units.\n */\nexport function mapFilesToAnalyzer(\n files: Iterable<InMemoryAnalyzerFile>,\n analyzer: FileAnalyzer,\n workingThreads: number\n): Iterable<FileInformation> {\n // The Product owns Worker scheduling. Retain the source argument/lifecycle\n // without creating a second analyzer-level concurrency framework.\n void workingThreads;\n return mapInMemoryFiles(files, analyzer);\n}\n\n/** Source `map_files_to_analyzer` spelling for the retained in-memory lifecycle. */\nexport function map_files_to_analyzer(\n files: Iterable<InMemoryAnalyzerFile>,\n analyzer: FileAnalyzer,\n workingThreads: number\n): Iterable<FileInformation> {\n return mapFilesToAnalyzer(files, analyzer, workingThreads);\n}\n\n/**\n * Source-aligned `analyze_files` lifecycle. `exts` intentionally uses Python\n * truthiness: an omitted or empty list receives the five default processors.\n */\nexport function analyzeFiles(\n files: Iterable<InMemoryAnalyzerFile>,\n threads = 1,\n exts?: readonly AnalyzerProcessor[]\n): Iterable<FileInformation> | undefined {\n const extensions = exts !== undefined && exts.length > 0 ? exts : [...DEFAULT_TOKEN_PROCESSORS];\n const fileAnalyzer = new FileAnalyzer(extensions);\n let result: Iterable<FileInformation> | undefined = mapFilesToAnalyzer(\n files,\n fileAnalyzer,\n threads\n );\n for (const extension of extensions) {\n const outcome = invokeExtensionCrossFileProcessOutcome(extension, result);\n if (outcome.hookPresent) result = outcome.result;\n }\n return result;\n}\n\n/** Source `analyze_files` spelling for translated internal callers. */\nexport function analyze_files(\n files: Iterable<InMemoryAnalyzerFile>,\n threads = 1,\n exts?: readonly AnalyzerProcessor[]\n): Iterable<FileInformation> | undefined {\n return analyzeFiles(files, threads, exts);\n}\n\n/**\n * Apply source registration-order cross-file passes. A present hook replaces\n * the stream even when it returns undefined; only an absent hook is skipped.\n */\nexport function applyCrossFileProcessors(\n fileInfos: Iterable<FileInformation>,\n processors: readonly AnalyzerProcessor[]\n): Iterable<FileInformation> | undefined {\n let processedFileInfos: Iterable<FileInformation> | undefined = fileInfos;\n for (const processor of processors) {\n const outcome = invokeExtensionCrossFileProcessOutcome(processor, processedFileInfos);\n if (outcome.hookPresent) processedFileInfos = outcome.result;\n }\n return processedFileInfos;\n}\n\n/** Forward the internal parser seam to extensions in source registration order. */\nexport function registerExtensionArguments(\n processors: readonly AnalyzerProcessor[],\n parser: ExtensionArgumentRegistrar\n): void {\n for (const processor of processors) {\n invokeExtensionSetArgs(processor, parser);\n }\n}\n\nexport function analyzeSourceCode<Reader extends AnalyzerReader>(\n filename: string,\n sourceCode: string,\n Reader: ReaderConstructor<Reader>,\n processors: readonly AnalyzerProcessor[] = DEFAULT_TOKEN_PROCESSORS\n): FileInformation {\n if (processors === DEFAULT_TOKEN_PROCESSORS) {\n return DEFAULT_FILE_ANALYZER.analyzeSourceCode(filename, sourceCode, Reader);\n }\n return new FileAnalyzer(processors).analyzeSourceCode(filename, sourceCode, Reader);\n}\n\nfunction* mapInMemoryFiles(\n files: Iterable<InMemoryAnalyzerFile>,\n analyzer: FileAnalyzer\n): Generator<FileInformation> {\n for (const file of files) {\n yield analyzer.analyze_source_code(file.filename, file.sourceCode, file.reader);\n }\n}\nfunction applyProcessor(\n processor: AnalyzerProcessor,\n tokens: TokenStream,\n reader: AnalyzerReader\n): TokenStream {\n return typeof processor === \"function\"\n ? processor(tokens, reader)\n : invokeExtensionCall(processor, tokens, reader);\n}\n\nfunction isRecursionLimit(error: unknown): boolean {\n return (\n error instanceof RangeError &&\n (error.message.includes(\"call stack\") || error.message.toLowerCase().includes(\"recursion\"))\n );\n}\n\nfunction* withoutWhitespace(tokens: TokenStream): Generator<string> {\n for (const token of tokens) {\n if (!isPythonWhitespace(token) || token === \"\\n\") yield token;\n }\n}\n"]}
|