@zxyycom/vibe-check 0.0.2 → 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.
Files changed (670) hide show
  1. package/README.md +36 -5
  2. package/dist/esm/check/check.mjs +4 -0
  3. package/dist/esm/check/check.mjs.map +1 -1
  4. package/dist/esm/check/flag-enablement.mjs +32 -0
  5. package/dist/esm/check/flag-enablement.mjs.map +1 -0
  6. package/dist/esm/check/handoff-provider-identity.mjs +18 -0
  7. package/dist/esm/check/handoff-provider-identity.mjs.map +1 -0
  8. package/dist/esm/check/inherited-collection.mjs +1 -1
  9. package/dist/esm/check/inherited-collection.mjs.map +1 -1
  10. package/dist/esm/check/project-changes.mjs +2 -0
  11. package/dist/esm/check/project-changes.mjs.map +1 -0
  12. package/dist/esm/check/project-context.mjs +2 -0
  13. package/dist/esm/check/project-context.mjs.map +1 -0
  14. package/dist/esm/check-settlement/facts.mjs.map +1 -1
  15. package/dist/esm/check-settlement/record-store.mjs +1 -1
  16. package/dist/esm/check-settlement/record-store.mjs.map +1 -1
  17. package/dist/esm/data-boundary/canonical-data.mjs +36 -7
  18. package/dist/esm/data-boundary/canonical-data.mjs.map +1 -1
  19. package/dist/esm/data-boundary/canonical-json.mjs.map +1 -1
  20. package/dist/esm/data-boundary/closed-values.mjs +28 -4
  21. package/dist/esm/data-boundary/closed-values.mjs.map +1 -1
  22. package/dist/esm/{package-checks/project-files → data-boundary}/config-glob.mjs +3 -3
  23. package/dist/esm/data-boundary/config-glob.mjs.map +1 -0
  24. package/dist/esm/data-boundary/project-path.mjs +19 -0
  25. package/dist/esm/data-boundary/project-path.mjs.map +1 -0
  26. package/dist/esm/index.mjs +12 -5
  27. package/dist/esm/index.mjs.map +1 -1
  28. package/dist/esm/machine-output/v4/atomic-publication.mjs +4 -1
  29. package/dist/esm/machine-output/v4/atomic-publication.mjs.map +1 -1
  30. package/dist/esm/package-checks/check-authoring.mjs +69 -0
  31. package/dist/esm/package-checks/check-authoring.mjs.map +1 -0
  32. package/dist/esm/package-checks/code-quality-findings/finding-waiver-authoring.mjs.map +1 -1
  33. package/dist/esm/package-checks/code-quality-findings/finding-waiver-evidence.mjs.map +1 -1
  34. package/dist/esm/package-checks/command-check/command-check.mjs +55 -0
  35. package/dist/esm/package-checks/command-check/command-check.mjs.map +1 -0
  36. package/dist/esm/package-checks/command-check/contract.mjs +2 -0
  37. package/dist/esm/package-checks/command-check/contract.mjs.map +1 -0
  38. package/dist/esm/package-checks/command-check/execution.mjs +134 -0
  39. package/dist/esm/package-checks/command-check/execution.mjs.map +1 -0
  40. package/dist/esm/package-checks/command-check/options.mjs +284 -0
  41. package/dist/esm/package-checks/command-check/options.mjs.map +1 -0
  42. package/dist/esm/package-checks/command-check/transcript.mjs +26 -0
  43. package/dist/esm/package-checks/command-check/transcript.mjs.map +1 -0
  44. package/dist/esm/package-checks/duplicate-detection/default-check.mjs +9 -11
  45. package/dist/esm/package-checks/duplicate-detection/default-check.mjs.map +1 -1
  46. package/dist/esm/package-checks/duplicate-detection/execution.mjs +2 -4
  47. package/dist/esm/package-checks/duplicate-detection/execution.mjs.map +1 -1
  48. package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs +1 -1
  49. package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs.map +1 -1
  50. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs +1 -1
  51. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs.map +1 -1
  52. package/dist/esm/package-checks/duplicate-detection/options.mjs.map +1 -1
  53. package/dist/esm/package-checks/duplicate-detection/records.mjs.map +1 -1
  54. package/dist/esm/package-checks/file-metrics/constructor.mjs +9 -11
  55. package/dist/esm/package-checks/file-metrics/constructor.mjs.map +1 -1
  56. package/dist/esm/package-checks/file-metrics/execution.mjs +2 -4
  57. package/dist/esm/package-checks/file-metrics/execution.mjs.map +1 -1
  58. package/dist/esm/package-checks/file-metrics/finding-messages.mjs +1 -1
  59. package/dist/esm/package-checks/file-metrics/finding-messages.mjs.map +1 -1
  60. package/dist/esm/package-checks/file-metrics/options.mjs.map +1 -1
  61. package/dist/esm/package-checks/file-metrics/records.mjs.map +1 -1
  62. package/dist/esm/package-checks/file-metrics/scc/availability.mjs +1 -1
  63. package/dist/esm/package-checks/file-metrics/scc/availability.mjs.map +1 -1
  64. package/dist/esm/package-checks/file-metrics/scc/batch-planner.mjs +38 -0
  65. package/dist/esm/package-checks/file-metrics/scc/batch-planner.mjs.map +1 -0
  66. package/dist/esm/package-checks/file-metrics/scc/logical-scan-resources.mjs +35 -0
  67. package/dist/esm/package-checks/file-metrics/scc/logical-scan-resources.mjs.map +1 -0
  68. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs +102 -29
  69. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs.map +1 -1
  70. package/dist/esm/package-checks/function-metrics/analysis.mjs +7 -2
  71. package/dist/esm/package-checks/function-metrics/analysis.mjs.map +1 -1
  72. package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs +1 -1
  73. package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs.map +1 -1
  74. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs +1 -3
  75. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs.map +1 -1
  76. package/dist/esm/package-checks/function-metrics/analyzer/extensions/protocol.mjs.map +1 -1
  77. package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs +3 -2
  78. package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs.map +1 -1
  79. package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs +6 -6
  80. package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs.map +1 -1
  81. package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs +1 -1
  82. package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs.map +1 -1
  83. package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs +9 -3
  84. package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs.map +1 -1
  85. package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs +12 -7
  86. package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs.map +1 -1
  87. package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs +6 -6
  88. package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs.map +1 -1
  89. package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs +5 -3
  90. package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs.map +1 -1
  91. package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs +2 -0
  92. package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs.map +1 -1
  93. package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs +9 -3
  94. package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs.map +1 -1
  95. package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs +9 -3
  96. package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs.map +1 -1
  97. package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs +3 -1
  98. package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs.map +1 -1
  99. package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs +3 -1
  100. package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs.map +1 -1
  101. package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs +12 -5
  102. package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs.map +1 -1
  103. package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs +20 -8
  104. package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs.map +1 -1
  105. package/dist/esm/package-checks/function-metrics/constructor.mjs +9 -11
  106. package/dist/esm/package-checks/function-metrics/constructor.mjs.map +1 -1
  107. package/dist/esm/package-checks/function-metrics/execution.mjs +2 -4
  108. package/dist/esm/package-checks/function-metrics/execution.mjs.map +1 -1
  109. package/dist/esm/package-checks/function-metrics/finding-messages.mjs +1 -1
  110. package/dist/esm/package-checks/function-metrics/finding-messages.mjs.map +1 -1
  111. package/dist/esm/package-checks/function-metrics/measurement.mjs +3 -1
  112. package/dist/esm/package-checks/function-metrics/measurement.mjs.map +1 -1
  113. package/dist/esm/package-checks/function-metrics/options.mjs.map +1 -1
  114. package/dist/esm/package-checks/function-metrics/records.mjs.map +1 -1
  115. package/dist/esm/package-checks/host-environment/git.mjs +11 -0
  116. package/dist/esm/package-checks/host-environment/git.mjs.map +1 -1
  117. package/dist/esm/package-checks/host-environment/path.mjs +1 -17
  118. package/dist/esm/package-checks/host-environment/path.mjs.map +1 -1
  119. package/dist/esm/package-checks/host-environment/process/contract.mjs.map +1 -1
  120. package/dist/esm/package-checks/host-environment/process/result.mjs +43 -17
  121. package/dist/esm/package-checks/host-environment/process/result.mjs.map +1 -1
  122. package/dist/esm/package-checks/host-environment/process/runner.mjs +7 -5
  123. package/dist/esm/package-checks/host-environment/process/runner.mjs.map +1 -1
  124. package/dist/esm/package-checks/json-schema-validation/default-check.mjs +9 -11
  125. package/dist/esm/package-checks/json-schema-validation/default-check.mjs.map +1 -1
  126. package/dist/esm/package-checks/json-schema-validation/options.mjs.map +1 -1
  127. package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs +6 -2
  128. package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs.map +1 -1
  129. package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs +11 -3
  130. package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs.map +1 -1
  131. package/dist/esm/package-checks/json-validation/default-check.mjs +9 -11
  132. package/dist/esm/package-checks/json-validation/default-check.mjs.map +1 -1
  133. package/dist/esm/package-checks/json-validation/options.mjs.map +1 -1
  134. package/dist/esm/package-checks/local-cache-options.mjs +28 -0
  135. package/dist/esm/package-checks/local-cache-options.mjs.map +1 -0
  136. package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs +37 -45
  137. package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs.map +1 -1
  138. package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs +3 -1
  139. package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs.map +1 -1
  140. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs +19 -33
  141. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs.map +1 -1
  142. package/dist/esm/package-checks/markdown-link-validation/execution.mjs +1 -1
  143. package/dist/esm/package-checks/markdown-link-validation/execution.mjs.map +1 -1
  144. package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs +1 -1
  145. package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs.map +1 -1
  146. package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs +1 -3
  147. package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs.map +1 -1
  148. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs +3 -18
  149. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs.map +1 -1
  150. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs +2 -14
  151. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs.map +1 -1
  152. package/dist/esm/package-checks/markdown-link-validation/options.mjs.map +1 -1
  153. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs +4 -5
  154. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs.map +1 -1
  155. package/dist/esm/package-checks/markdown-lint/adapter.mjs +125 -0
  156. package/dist/esm/package-checks/markdown-lint/adapter.mjs.map +1 -0
  157. package/dist/esm/package-checks/markdown-lint/default-check.mjs +37 -0
  158. package/dist/esm/package-checks/markdown-lint/default-check.mjs.map +1 -0
  159. package/dist/esm/package-checks/markdown-lint/execution.mjs +202 -0
  160. package/dist/esm/package-checks/markdown-lint/execution.mjs.map +1 -0
  161. package/dist/esm/package-checks/markdown-lint/final-data.mjs +16 -0
  162. package/dist/esm/package-checks/markdown-lint/final-data.mjs.map +1 -0
  163. package/dist/esm/package-checks/markdown-lint/finding-messages.mjs +72 -0
  164. package/dist/esm/package-checks/markdown-lint/finding-messages.mjs.map +1 -0
  165. package/dist/esm/package-checks/markdown-lint/finding-waiver-identity.mjs +41 -0
  166. package/dist/esm/package-checks/markdown-lint/finding-waiver-identity.mjs.map +1 -0
  167. package/dist/esm/package-checks/markdown-lint/findings-cache.mjs +110 -0
  168. package/dist/esm/package-checks/markdown-lint/findings-cache.mjs.map +1 -0
  169. package/dist/esm/package-checks/markdown-lint/options-resolution.mjs +74 -0
  170. package/dist/esm/package-checks/markdown-lint/options-resolution.mjs.map +1 -0
  171. package/dist/esm/package-checks/markdown-lint/options-validation.mjs +41 -0
  172. package/dist/esm/package-checks/markdown-lint/options-validation.mjs.map +1 -0
  173. package/dist/esm/package-checks/markdown-lint/options.mjs +13 -0
  174. package/dist/esm/package-checks/markdown-lint/options.mjs.map +1 -0
  175. package/dist/esm/package-checks/markdown-lint/records.mjs +65 -0
  176. package/dist/esm/package-checks/markdown-lint/records.mjs.map +1 -0
  177. package/dist/esm/package-checks/markdown-lint/unavailable-reasons.mjs +14 -0
  178. package/dist/esm/package-checks/markdown-lint/unavailable-reasons.mjs.map +1 -0
  179. package/dist/esm/package-checks/project-files/collection.mjs +23 -19
  180. package/dist/esm/package-checks/project-files/collection.mjs.map +1 -1
  181. package/dist/esm/package-checks/project-files/configuration.mjs +1 -1
  182. package/dist/esm/package-checks/project-files/configuration.mjs.map +1 -1
  183. package/dist/esm/package-checks/project-files/gitlink-revision.mjs +2 -5
  184. package/dist/esm/package-checks/project-files/gitlink-revision.mjs.map +1 -1
  185. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs +22 -6
  186. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs.map +1 -1
  187. package/dist/esm/package-checks/project-files/public-collection.mjs +1 -1
  188. package/dist/esm/package-checks/project-files/public-collection.mjs.map +1 -1
  189. package/dist/esm/package-checks/project-files/revision-paths.mjs +3 -3
  190. package/dist/esm/package-checks/project-files/revision-paths.mjs.map +1 -1
  191. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs +11 -15
  192. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs.map +1 -1
  193. package/dist/esm/package-checks/secret-detection/default-check.mjs +9 -11
  194. package/dist/esm/package-checks/secret-detection/default-check.mjs.map +1 -1
  195. package/dist/esm/package-checks/secret-detection/execution.mjs +2 -2
  196. package/dist/esm/package-checks/secret-detection/execution.mjs.map +1 -1
  197. package/dist/esm/package-checks/secret-detection/input-preparation.mjs +46 -7
  198. package/dist/esm/package-checks/secret-detection/input-preparation.mjs.map +1 -1
  199. package/dist/esm/package-checks/secret-detection/options.mjs.map +1 -1
  200. package/dist/esm/package-checks/secret-detection/records.mjs.map +1 -1
  201. package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs +3 -4
  202. package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs.map +1 -1
  203. package/dist/esm/package-tools/admission-policy/define-admission-policy.mjs +10 -0
  204. package/dist/esm/package-tools/admission-policy/define-admission-policy.mjs.map +1 -0
  205. package/dist/esm/{cache → package-tools/cache}/cache-json-by-key.mjs +13 -14
  206. package/dist/esm/package-tools/cache/cache-json-by-key.mjs.map +1 -0
  207. package/dist/esm/package-tools/finding-presentation/finding-presentation.mjs.map +1 -0
  208. package/dist/esm/{finding-waivers → package-tools/finding-waivers}/reconciliation.mjs +14 -5
  209. package/dist/esm/package-tools/finding-waivers/reconciliation.mjs.map +1 -0
  210. package/dist/esm/package-tools/learned-critical-path/critical-path-ranking.mjs.map +1 -0
  211. package/dist/esm/package-tools/learned-critical-path/duration-model/bounded-history.mjs.map +1 -0
  212. package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/prediction.mjs +2 -2
  213. package/dist/esm/package-tools/learned-critical-path/duration-model/prediction.mjs.map +1 -0
  214. package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/preparation.mjs +4 -2
  215. package/dist/esm/package-tools/learned-critical-path/duration-model/preparation.mjs.map +1 -0
  216. package/dist/esm/package-tools/learned-critical-path/duration-model/recording.mjs.map +1 -0
  217. package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/storage.mjs +8 -8
  218. package/dist/esm/package-tools/learned-critical-path/duration-model/storage.mjs.map +1 -0
  219. package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/selection-layers.mjs +1 -2
  220. package/dist/esm/package-tools/learned-critical-path/selection-layers.mjs.map +1 -0
  221. package/dist/esm/package-tools/learned-critical-path/static-decision.mjs.map +1 -0
  222. package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/strategy.mjs +3 -3
  223. package/dist/esm/package-tools/learned-critical-path/strategy.mjs.map +1 -0
  224. package/dist/esm/project-definition/check-tree/authoring.mjs +8 -5
  225. package/dist/esm/project-definition/check-tree/authoring.mjs.map +1 -1
  226. package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs +79 -66
  227. package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs.map +1 -1
  228. package/dist/esm/project-definition/check-tree/flag-conditions.mjs +71 -0
  229. package/dist/esm/project-definition/check-tree/flag-conditions.mjs.map +1 -0
  230. package/dist/esm/project-definition/check-tree/materialization.mjs +13 -8
  231. package/dist/esm/project-definition/check-tree/materialization.mjs.map +1 -1
  232. package/dist/esm/project-definition/check-tree/resolution.mjs +7 -6
  233. package/dist/esm/project-definition/check-tree/resolution.mjs.map +1 -1
  234. package/dist/esm/project-definition/declarative-snapshot.mjs +2 -1
  235. package/dist/esm/project-definition/declarative-snapshot.mjs.map +1 -1
  236. package/dist/esm/project-definition/project-changes.mjs +70 -0
  237. package/dist/esm/project-definition/project-changes.mjs.map +1 -0
  238. package/dist/esm/project-definition/project-definition-validation.mjs +40 -8
  239. package/dist/esm/project-definition/project-definition-validation.mjs.map +1 -1
  240. package/dist/esm/project-definition/project-definition.mjs +22 -15
  241. package/dist/esm/project-definition/project-definition.mjs.map +1 -1
  242. package/dist/esm/project-definition/scheduler-policy.mjs.map +1 -1
  243. package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs +9 -6
  244. package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs.map +1 -1
  245. package/dist/esm/project-run/admission-strategy-provider/prepared-admission-strategy.mjs.map +1 -1
  246. package/dist/esm/project-run/aggregation.mjs +42 -59
  247. package/dist/esm/project-run/aggregation.mjs.map +1 -1
  248. package/dist/esm/project-run/changes/git.mjs +161 -0
  249. package/dist/esm/project-run/changes/git.mjs.map +1 -0
  250. package/dist/esm/project-run/check-execution/admitted-check-execution.mjs +41 -0
  251. package/dist/esm/project-run/check-execution/admitted-check-execution.mjs.map +1 -0
  252. package/dist/esm/project-run/check-execution/callback.mjs +3 -2
  253. package/dist/esm/project-run/check-execution/callback.mjs.map +1 -1
  254. package/dist/esm/project-run/check-execution/dependencies.mjs +80 -5
  255. package/dist/esm/project-run/check-execution/dependencies.mjs.map +1 -1
  256. package/dist/esm/project-run/check-execution/execution-finalization.mjs +5 -3
  257. package/dist/esm/project-run/check-execution/execution-finalization.mjs.map +1 -1
  258. package/dist/esm/project-run/check-execution/execution-settlement.mjs +37 -16
  259. package/dist/esm/project-run/check-execution/execution-settlement.mjs.map +1 -1
  260. package/dist/esm/project-run/check-execution/flag-controls.mjs +15 -7
  261. package/dist/esm/project-run/check-execution/flag-controls.mjs.map +1 -1
  262. package/dist/esm/project-run/check-execution/lifecycle.mjs.map +1 -1
  263. package/dist/esm/project-run/check-execution/{preflight-result.mjs → preparation-result.mjs} +24 -24
  264. package/dist/esm/project-run/check-execution/preparation-result.mjs.map +1 -0
  265. package/dist/esm/project-run/check-execution/{preflight.mjs → preparation.mjs} +52 -52
  266. package/dist/esm/project-run/check-execution/preparation.mjs.map +1 -0
  267. package/dist/esm/project-run/check-execution/ready-check-execution.mjs +71 -0
  268. package/dist/esm/project-run/check-execution/ready-check-execution.mjs.map +1 -0
  269. package/dist/esm/project-run/check-execution/resolved-checks.mjs +27 -164
  270. package/dist/esm/project-run/check-execution/resolved-checks.mjs.map +1 -1
  271. package/dist/esm/project-run/check-execution/scheduled-check-run.mjs +79 -0
  272. package/dist/esm/project-run/check-execution/scheduled-check-run.mjs.map +1 -0
  273. package/dist/esm/project-run/check-execution/terminal-result.mjs +70 -25
  274. package/dist/esm/project-run/check-execution/terminal-result.mjs.map +1 -1
  275. package/dist/esm/project-run/completion/completion.mjs +18 -1
  276. package/dist/esm/project-run/completion/completion.mjs.map +1 -1
  277. package/dist/esm/project-run/controls/contract.mjs.map +1 -1
  278. package/dist/esm/project-run/controls/validation.mjs +7 -54
  279. package/dist/esm/project-run/controls/validation.mjs.map +1 -1
  280. package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs +3 -3
  281. package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs.map +1 -1
  282. package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs +1 -1
  283. package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs.map +1 -1
  284. package/dist/esm/project-run/invocation/candidate.mjs +17 -13
  285. package/dist/esm/project-run/invocation/candidate.mjs.map +1 -1
  286. package/dist/esm/project-run/invocation/candidates.mjs +26 -0
  287. package/dist/esm/project-run/invocation/candidates.mjs.map +1 -0
  288. package/dist/esm/project-run/invocation/creation.mjs +7 -3
  289. package/dist/esm/project-run/invocation/creation.mjs.map +1 -1
  290. package/dist/esm/project-run/invocation/execution.mjs +98 -0
  291. package/dist/esm/project-run/invocation/execution.mjs.map +1 -0
  292. package/dist/esm/project-run/invocation/run.mjs +13 -112
  293. package/dist/esm/project-run/invocation/run.mjs.map +1 -1
  294. package/dist/esm/project-run/invocation/scheduler.mjs +13 -6
  295. package/dist/esm/project-run/invocation/scheduler.mjs.map +1 -1
  296. package/dist/esm/project-run/outputs/status.mjs +12 -12
  297. package/dist/esm/project-run/outputs/status.mjs.map +1 -1
  298. package/dist/esm/project-run/progress-rendering/presentation.mjs +31 -11
  299. package/dist/esm/project-run/progress-rendering/presentation.mjs.map +1 -1
  300. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs +11 -4
  301. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs.map +1 -1
  302. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs +20 -6
  303. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs.map +1 -1
  304. package/dist/esm/project-run/progress-rendering/renderer.mjs +6 -2
  305. package/dist/esm/project-run/progress-rendering/renderer.mjs.map +1 -1
  306. package/dist/esm/project-run/project-context.mjs +2 -1
  307. package/dist/esm/project-run/project-context.mjs.map +1 -1
  308. package/dist/esm/project-run/result.mjs +2 -2
  309. package/dist/esm/project-run/result.mjs.map +1 -1
  310. package/dist/esm/project-run/run.mjs.map +1 -1
  311. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph-lookup.mjs +45 -0
  312. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph-lookup.mjs.map +1 -0
  313. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs +9 -4
  314. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs.map +1 -1
  315. package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs +3 -5
  316. package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs.map +1 -1
  317. package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs +25 -8
  318. package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs.map +1 -1
  319. package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs +8 -8
  320. package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs.map +1 -1
  321. package/dist/esm/project-run/task-scheduler/execution-state.mjs.map +1 -1
  322. package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs +8 -4
  323. package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs.map +1 -1
  324. package/dist/esm/project-run/task-scheduler/measurement/timing.mjs +12 -6
  325. package/dist/esm/project-run/task-scheduler/measurement/timing.mjs.map +1 -1
  326. package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs +3 -1
  327. package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs.map +1 -1
  328. package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs +17 -17
  329. package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs.map +1 -1
  330. package/dist/esm/project-run/task-scheduler/scheduler.mjs +18 -6
  331. package/dist/esm/project-run/task-scheduler/scheduler.mjs.map +1 -1
  332. package/docs/api-mechanics.md +147 -28
  333. package/docs/changelog.md +145 -2
  334. package/docs/checks/duplicate-detection.md +22 -3
  335. package/docs/checks/file-metrics.md +25 -6
  336. package/docs/checks/function-metrics.md +21 -2
  337. package/docs/checks/json-schema-validation.md +25 -4
  338. package/docs/checks/json-validation.md +24 -5
  339. package/docs/checks/maintenance-reminders.md +30 -6
  340. package/docs/checks/markdown-link-validation.md +24 -4
  341. package/docs/checks/markdown-lint.md +167 -0
  342. package/docs/checks/secret-detection.md +31 -7
  343. package/docs/examples/artifacts/mixed-outcomes/definition.ts +10 -10
  344. package/docs/guides/building-project-gate.md +706 -0
  345. package/docs/guides/callbacks.md +81 -22
  346. package/docs/guides/check-dependencies.md +41 -10
  347. package/docs/guides/collecting-project-files.md +7 -7
  348. package/docs/guides/command-check.md +155 -0
  349. package/docs/guides/data-boundaries.md +140 -0
  350. package/docs/guides/extending-check-lifecycle.md +77 -25
  351. package/docs/guides/finding-waivers.md +43 -1
  352. package/docs/guides/learned-scheduling.md +1 -1
  353. package/docs/guides/run-outputs.md +35 -9
  354. package/docs/guides/scheduling.md +15 -15
  355. package/docs/output.md +6 -5
  356. package/package.json +2 -1
  357. package/src/check/check.ts +332 -92
  358. package/src/check/flag-enablement.ts +76 -0
  359. package/src/check/handoff-provider-identity.ts +34 -0
  360. package/src/check/inherited-collection.ts +1 -1
  361. package/src/check/project-changes.ts +14 -0
  362. package/src/check/project-context.ts +11 -0
  363. package/src/check-settlement/facts.ts +1 -1
  364. package/src/check-settlement/record-store.ts +1 -1
  365. package/src/data-boundary/canonical-data.ts +36 -9
  366. package/src/data-boundary/canonical-json.ts +18 -1
  367. package/src/data-boundary/closed-values.ts +26 -6
  368. package/src/data-boundary/config-glob.ts +17 -0
  369. package/src/data-boundary/project-path.ts +21 -0
  370. package/src/index.ts +72 -11
  371. package/src/machine-output/v4/atomic-publication.ts +3 -1
  372. package/src/package-checks/check-authoring.ts +136 -0
  373. package/src/package-checks/code-quality-findings/finding-waiver-authoring.ts +1 -1
  374. package/src/package-checks/code-quality-findings/finding-waiver-evidence.ts +1 -1
  375. package/src/package-checks/command-check/command-check.ts +152 -0
  376. package/src/package-checks/command-check/contract.ts +168 -0
  377. package/src/package-checks/command-check/execution.ts +211 -0
  378. package/src/package-checks/command-check/options.ts +331 -0
  379. package/src/package-checks/command-check/transcript.ts +35 -0
  380. package/src/package-checks/duplicate-detection/default-check.ts +37 -6
  381. package/src/package-checks/duplicate-detection/execution.ts +2 -4
  382. package/src/package-checks/duplicate-detection/finding-messages.ts +2 -2
  383. package/src/package-checks/duplicate-detection/jscpd/availability.ts +1 -1
  384. package/src/package-checks/duplicate-detection/options.ts +6 -3
  385. package/src/package-checks/duplicate-detection/records.ts +1 -1
  386. package/src/package-checks/file-metrics/constructor.ts +29 -6
  387. package/src/package-checks/file-metrics/execution.ts +2 -4
  388. package/src/package-checks/file-metrics/finding-messages.ts +1 -1
  389. package/src/package-checks/file-metrics/options.ts +6 -3
  390. package/src/package-checks/file-metrics/records.ts +1 -1
  391. package/src/package-checks/file-metrics/scc/availability.ts +1 -1
  392. package/src/package-checks/file-metrics/scc/batch-planner.ts +56 -0
  393. package/src/package-checks/file-metrics/scc/logical-scan-resources.ts +59 -0
  394. package/src/package-checks/file-metrics/scc/scanner.ts +134 -32
  395. package/src/package-checks/function-metrics/analysis.ts +7 -2
  396. package/src/package-checks/function-metrics/analyzer/analysis-model.ts +1 -1
  397. package/src/package-checks/function-metrics/analyzer/extension-output.ts +14 -6
  398. package/src/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.ts +1 -3
  399. package/src/package-checks/function-metrics/analyzer/extensions/protocol.ts +3 -3
  400. package/src/package-checks/function-metrics/analyzer/pipeline.ts +4 -2
  401. package/src/package-checks/function-metrics/analyzer/readers/erlang.ts +6 -6
  402. package/src/package-checks/function-metrics/analyzer/readers/fortran.ts +1 -1
  403. package/src/package-checks/function-metrics/analyzer/readers/objc.ts +9 -3
  404. package/src/package-checks/function-metrics/analyzer/readers/php-states.ts +14 -7
  405. package/src/package-checks/function-metrics/analyzer/readers/plsql.ts +8 -4
  406. package/src/package-checks/function-metrics/analyzer/readers/python.ts +4 -3
  407. package/src/package-checks/function-metrics/analyzer/readers/r.ts +2 -1
  408. package/src/package-checks/function-metrics/analyzer/readers/ttcn.ts +9 -3
  409. package/src/package-checks/function-metrics/analyzer/readers/typescript.ts +9 -3
  410. package/src/package-checks/function-metrics/analyzer/readers/zig.ts +2 -1
  411. package/src/package-checks/function-metrics/analyzer/shared/code-reader.ts +3 -1
  412. package/src/package-checks/function-metrics/analyzer/shared/js-style-regex.ts +10 -5
  413. package/src/package-checks/function-metrics/analyzer-worker-port.ts +20 -6
  414. package/src/package-checks/function-metrics/constructor.ts +30 -7
  415. package/src/package-checks/function-metrics/execution.ts +2 -4
  416. package/src/package-checks/function-metrics/finding-messages.ts +2 -2
  417. package/src/package-checks/function-metrics/measurement.ts +3 -1
  418. package/src/package-checks/function-metrics/options.ts +6 -3
  419. package/src/package-checks/function-metrics/records.ts +1 -1
  420. package/src/package-checks/host-environment/git.ts +11 -0
  421. package/src/package-checks/host-environment/path.ts +1 -20
  422. package/src/package-checks/host-environment/process/contract.ts +17 -9
  423. package/src/package-checks/host-environment/process/result.ts +48 -20
  424. package/src/package-checks/host-environment/process/runner.ts +8 -4
  425. package/src/package-checks/json-schema-validation/default-check.ts +38 -5
  426. package/src/package-checks/json-schema-validation/options.ts +4 -1
  427. package/src/package-checks/json-schema-validation/reference-resolver.ts +6 -2
  428. package/src/package-checks/json-schema-validation/schema-policy.ts +10 -5
  429. package/src/package-checks/json-validation/default-check.ts +27 -6
  430. package/src/package-checks/json-validation/options.ts +4 -1
  431. package/src/package-checks/local-cache-options.ts +40 -0
  432. package/src/package-checks/maintenance-reminders/maintenance-reminders.ts +89 -9
  433. package/src/package-checks/maintenance-reminders/maintenance-support.ts +3 -3
  434. package/src/package-checks/markdown-link-validation/default-check.ts +48 -5
  435. package/src/package-checks/markdown-link-validation/execution.ts +1 -1
  436. package/src/package-checks/markdown-link-validation/finding-messages.ts +1 -1
  437. package/src/package-checks/markdown-link-validation/markdown-parser.ts +1 -5
  438. package/src/package-checks/markdown-link-validation/options-resolution.ts +2 -19
  439. package/src/package-checks/markdown-link-validation/options-validation.ts +2 -17
  440. package/src/package-checks/markdown-link-validation/options.ts +6 -7
  441. package/src/package-checks/markdown-link-validation/parse-facts-cache-payload.ts +4 -5
  442. package/src/package-checks/markdown-lint/adapter.ts +167 -0
  443. package/src/package-checks/markdown-lint/default-check.ts +92 -0
  444. package/src/package-checks/markdown-lint/execution.ts +266 -0
  445. package/src/package-checks/markdown-lint/final-data.ts +33 -0
  446. package/src/package-checks/markdown-lint/finding-messages.ts +87 -0
  447. package/src/package-checks/markdown-lint/finding-waiver-identity.ts +54 -0
  448. package/src/package-checks/markdown-lint/findings-cache.ts +141 -0
  449. package/src/package-checks/markdown-lint/options-resolution.ts +102 -0
  450. package/src/package-checks/markdown-lint/options-validation.ts +50 -0
  451. package/src/package-checks/markdown-lint/options.ts +82 -0
  452. package/src/package-checks/markdown-lint/records.ts +132 -0
  453. package/src/package-checks/markdown-lint/unavailable-reasons.ts +33 -0
  454. package/src/package-checks/project-files/collection.ts +38 -22
  455. package/src/package-checks/project-files/config-glob.ts +1 -17
  456. package/src/package-checks/project-files/configuration.ts +1 -1
  457. package/src/package-checks/project-files/gitlink-revision.ts +4 -6
  458. package/src/package-checks/project-files/gitlink-worktree.ts +35 -7
  459. package/src/package-checks/project-files/public-collection.ts +1 -1
  460. package/src/package-checks/project-files/revision-paths.ts +3 -3
  461. package/src/package-checks/project-files/revision-worktree-files.ts +16 -16
  462. package/src/package-checks/secret-detection/default-check.ts +29 -6
  463. package/src/package-checks/secret-detection/execution.ts +2 -2
  464. package/src/package-checks/secret-detection/input-preparation.ts +64 -7
  465. package/src/package-checks/secret-detection/options.ts +5 -2
  466. package/src/package-checks/secret-detection/records.ts +1 -1
  467. package/src/package-checks/secret-detection/secretlint/adapter.ts +3 -4
  468. package/src/package-tools/admission-policy/define-admission-policy.ts +54 -0
  469. package/src/{cache → package-tools/cache}/cache-json-by-key.ts +13 -17
  470. package/src/{check → package-tools/finding-presentation}/finding-presentation.ts +3 -1
  471. package/src/{finding-waivers → package-tools/finding-waivers}/reconciliation.ts +16 -8
  472. package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/prediction.ts +5 -2
  473. package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/preparation.ts +5 -3
  474. package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/recording.ts +5 -4
  475. package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/storage.ts +9 -10
  476. package/src/{learned-critical-path → package-tools/learned-critical-path}/selection-layers.ts +2 -3
  477. package/src/{learned-critical-path → package-tools/learned-critical-path}/static-decision.ts +1 -1
  478. package/src/{learned-critical-path → package-tools/learned-critical-path}/strategy.ts +7 -4
  479. package/src/project-definition/check-tree/authoring.ts +15 -8
  480. package/src/project-definition/check-tree/check-fields-authoring.ts +106 -91
  481. package/src/project-definition/check-tree/flag-conditions.ts +99 -0
  482. package/src/project-definition/check-tree/materialization.ts +12 -8
  483. package/src/project-definition/check-tree/resolution.ts +13 -15
  484. package/src/project-definition/declarative-snapshot.ts +9 -2
  485. package/src/project-definition/project-changes.ts +112 -0
  486. package/src/project-definition/project-definition-validation.ts +58 -10
  487. package/src/project-definition/project-definition.ts +41 -68
  488. package/src/project-definition/scheduler-policy.ts +6 -3
  489. package/src/project-run/admission-strategy-provider/custom-strategy-preparation.ts +11 -8
  490. package/src/project-run/admission-strategy-provider/prepared-admission-strategy.ts +2 -2
  491. package/src/project-run/aggregation.ts +51 -74
  492. package/src/project-run/changes/git.ts +206 -0
  493. package/src/project-run/check-execution/admitted-check-execution.ts +62 -0
  494. package/src/project-run/check-execution/callback.ts +3 -2
  495. package/src/project-run/check-execution/dependencies.ts +120 -6
  496. package/src/project-run/check-execution/execution-finalization.ts +6 -4
  497. package/src/project-run/check-execution/execution-settlement.ts +88 -29
  498. package/src/project-run/check-execution/flag-controls.ts +22 -8
  499. package/src/project-run/check-execution/lifecycle.ts +14 -6
  500. package/src/project-run/check-execution/{preflight-result.ts → preparation-result.ts} +34 -32
  501. package/src/project-run/check-execution/{preflight.ts → preparation.ts} +92 -84
  502. package/src/project-run/check-execution/ready-check-execution.ts +97 -0
  503. package/src/project-run/check-execution/resolved-checks.ts +40 -219
  504. package/src/project-run/check-execution/scheduled-check-run.ts +119 -0
  505. package/src/project-run/check-execution/terminal-result.ts +108 -29
  506. package/src/project-run/completion/completion.ts +17 -3
  507. package/src/project-run/controls/contract.ts +6 -16
  508. package/src/project-run/controls/validation.ts +7 -60
  509. package/src/project-run/diagnostic-logging/diagnostic-detail-rendering.ts +1 -2
  510. package/src/project-run/diagnostic-logging/observation-rendering.ts +1 -1
  511. package/src/project-run/invocation/candidate.ts +28 -15
  512. package/src/project-run/invocation/candidates.ts +56 -0
  513. package/src/project-run/invocation/creation.ts +7 -3
  514. package/src/project-run/invocation/execution.ts +136 -0
  515. package/src/project-run/invocation/run.ts +15 -179
  516. package/src/project-run/invocation/scheduler.ts +13 -6
  517. package/src/project-run/outputs/status.ts +15 -15
  518. package/src/project-run/progress-rendering/presentation.ts +35 -13
  519. package/src/project-run/progress-rendering/renderer-formatting.ts +20 -7
  520. package/src/project-run/progress-rendering/renderer-lifecycle.ts +23 -6
  521. package/src/project-run/progress-rendering/renderer.ts +10 -4
  522. package/src/project-run/project-context.ts +8 -4
  523. package/src/project-run/result.ts +5 -5
  524. package/src/project-run/run.ts +1 -1
  525. package/src/project-run/task-scheduler/admission-core/compiled-graph-lookup.ts +71 -0
  526. package/src/project-run/task-scheduler/admission-core/compiled-graph.ts +9 -4
  527. package/src/project-run/task-scheduler/admission-core/selection-query.ts +6 -4
  528. package/src/project-run/task-scheduler/admission-core/selection-seed.ts +36 -6
  529. package/src/project-run/task-scheduler/admission-core/selection-transition.ts +17 -8
  530. package/src/project-run/task-scheduler/execution-state.ts +4 -4
  531. package/src/project-run/task-scheduler/measurement/diagnostics.ts +10 -4
  532. package/src/project-run/task-scheduler/measurement/timing.ts +13 -5
  533. package/src/project-run/task-scheduler/scheduler-observation.ts +3 -1
  534. package/src/project-run/task-scheduler/scheduler-terminal-measurement.ts +24 -22
  535. package/src/project-run/task-scheduler/scheduler.ts +23 -6
  536. package/types/check/check.d.ts +178 -67
  537. package/types/check/flag-enablement.d.ts +42 -0
  538. package/types/check/handoff-provider-identity.d.ts +12 -0
  539. package/types/check/project-changes.d.ts +13 -0
  540. package/types/check/project-context.d.ts +10 -0
  541. package/types/check-settlement/facts.d.ts +1 -1
  542. package/types/data-boundary/canonical-data.d.ts +28 -5
  543. package/types/data-boundary/canonical-json.d.ts +18 -1
  544. package/types/data-boundary/closed-values.d.ts +17 -1
  545. package/types/data-boundary/config-glob.d.ts +5 -0
  546. package/types/data-boundary/project-path.d.ts +4 -0
  547. package/types/index.d.ts +27 -11
  548. package/types/package-checks/check-authoring.d.ts +45 -0
  549. package/types/package-checks/code-quality-findings/finding-waiver-authoring.d.ts +1 -1
  550. package/types/package-checks/code-quality-findings/finding-waiver-evidence.d.ts +1 -1
  551. package/types/package-checks/command-check/command-check.d.ts +48 -0
  552. package/types/package-checks/command-check/contract.d.ts +108 -0
  553. package/types/package-checks/command-check/execution.d.ts +7 -0
  554. package/types/package-checks/command-check/options.d.ts +11 -0
  555. package/types/package-checks/command-check/transcript.d.ts +8 -0
  556. package/types/package-checks/duplicate-detection/default-check.d.ts +5 -2
  557. package/types/package-checks/duplicate-detection/finding-messages.d.ts +1 -1
  558. package/types/package-checks/duplicate-detection/options.d.ts +4 -3
  559. package/types/package-checks/duplicate-detection/records.d.ts +1 -1
  560. package/types/package-checks/file-metrics/constructor.d.ts +5 -2
  561. package/types/package-checks/file-metrics/options.d.ts +4 -3
  562. package/types/package-checks/file-metrics/records.d.ts +1 -1
  563. package/types/package-checks/file-metrics/scc/batch-planner.d.ts +18 -0
  564. package/types/package-checks/file-metrics/scc/logical-scan-resources.d.ts +14 -0
  565. package/types/package-checks/function-metrics/analyzer/extensions/protocol.d.ts +3 -3
  566. package/types/package-checks/function-metrics/constructor.d.ts +5 -2
  567. package/types/package-checks/function-metrics/finding-messages.d.ts +1 -1
  568. package/types/package-checks/function-metrics/options.d.ts +4 -3
  569. package/types/package-checks/function-metrics/records.d.ts +1 -1
  570. package/types/package-checks/host-environment/git.d.ts +2 -0
  571. package/types/package-checks/host-environment/path.d.ts +1 -3
  572. package/types/package-checks/host-environment/process/contract.d.ts +17 -9
  573. package/types/package-checks/json-schema-validation/default-check.d.ts +4 -1
  574. package/types/package-checks/json-schema-validation/options.d.ts +2 -1
  575. package/types/package-checks/json-validation/default-check.d.ts +4 -1
  576. package/types/package-checks/json-validation/options.d.ts +2 -1
  577. package/types/package-checks/local-cache-options.d.ts +9 -0
  578. package/types/package-checks/maintenance-reminders/maintenance-reminders.d.ts +11 -2
  579. package/types/package-checks/markdown-link-validation/default-check.d.ts +4 -1
  580. package/types/package-checks/markdown-link-validation/options.d.ts +4 -7
  581. package/types/package-checks/markdown-lint/adapter.d.ts +10 -0
  582. package/types/package-checks/markdown-lint/default-check.d.ts +37 -0
  583. package/types/package-checks/markdown-lint/execution.d.ts +24 -0
  584. package/types/package-checks/markdown-lint/final-data.d.ts +8 -0
  585. package/types/package-checks/markdown-lint/finding-messages.d.ts +6 -0
  586. package/types/package-checks/markdown-lint/finding-waiver-identity.d.ts +3 -0
  587. package/types/package-checks/markdown-lint/findings-cache.d.ts +17 -0
  588. package/types/package-checks/markdown-lint/options-resolution.d.ts +3 -0
  589. package/types/package-checks/markdown-lint/options-validation.d.ts +2 -0
  590. package/types/package-checks/markdown-lint/options.d.ts +65 -0
  591. package/types/package-checks/markdown-lint/records.d.ts +39 -0
  592. package/types/package-checks/markdown-lint/unavailable-reasons.d.ts +3 -0
  593. package/types/package-checks/secret-detection/default-check.d.ts +4 -1
  594. package/types/package-checks/secret-detection/options.d.ts +3 -2
  595. package/types/package-tools/admission-policy/define-admission-policy.d.ts +26 -0
  596. package/types/{check → package-tools/finding-presentation}/finding-presentation.d.ts +3 -1
  597. package/types/{finding-waivers → package-tools/finding-waivers}/reconciliation.d.ts +3 -3
  598. package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/prediction.d.ts +2 -2
  599. package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/preparation.d.ts +1 -1
  600. package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/recording.d.ts +1 -1
  601. package/types/{learned-critical-path → package-tools/learned-critical-path}/selection-layers.d.ts +1 -1
  602. package/types/{learned-critical-path → package-tools/learned-critical-path}/static-decision.d.ts +1 -1
  603. package/types/{learned-critical-path → package-tools/learned-critical-path}/strategy.d.ts +1 -1
  604. package/types/project-definition/check-tree/authoring.d.ts +5 -3
  605. package/types/project-definition/check-tree/check-fields-authoring.d.ts +12 -7
  606. package/types/project-definition/check-tree/flag-conditions.d.ts +5 -0
  607. package/types/project-definition/check-tree/resolution.d.ts +6 -4
  608. package/types/project-definition/declarative-snapshot.d.ts +4 -1
  609. package/types/project-definition/project-changes.d.ts +30 -0
  610. package/types/project-definition/project-definition.d.ts +15 -30
  611. package/types/project-definition/scheduler-policy.d.ts +3 -3
  612. package/types/project-run/admission-strategy-provider/prepared-admission-strategy.d.ts +2 -2
  613. package/types/project-run/aggregation.d.ts +8 -6
  614. package/types/project-run/changes/git.d.ts +14 -0
  615. package/types/project-run/check-execution/admitted-check-execution.d.ts +18 -0
  616. package/types/project-run/check-execution/dependencies.d.ts +3 -0
  617. package/types/project-run/check-execution/execution-finalization.d.ts +1 -1
  618. package/types/project-run/check-execution/execution-settlement.d.ts +15 -7
  619. package/types/project-run/check-execution/flag-controls.d.ts +1 -1
  620. package/types/project-run/check-execution/lifecycle.d.ts +9 -5
  621. package/types/project-run/check-execution/{preflight-result.d.ts → preparation-result.d.ts} +3 -3
  622. package/types/project-run/check-execution/{preflight.d.ts → preparation.d.ts} +10 -9
  623. package/types/project-run/check-execution/ready-check-execution.d.ts +18 -0
  624. package/types/project-run/check-execution/resolved-checks.d.ts +12 -13
  625. package/types/project-run/check-execution/scheduled-check-run.d.ts +10 -0
  626. package/types/project-run/check-execution/terminal-result.d.ts +13 -1
  627. package/types/project-run/completion/completion.d.ts +3 -1
  628. package/types/project-run/controls/contract.d.ts +6 -16
  629. package/types/project-run/invocation/candidates.d.ts +8 -0
  630. package/types/project-run/invocation/execution.d.ts +5 -0
  631. package/types/project-run/invocation/run.d.ts +2 -2
  632. package/types/project-run/outputs/status.d.ts +4 -4
  633. package/types/project-run/progress-rendering/presentation.d.ts +4 -3
  634. package/types/project-run/progress-rendering/renderer-formatting.d.ts +5 -2
  635. package/types/project-run/progress-rendering/renderer-lifecycle.d.ts +2 -0
  636. package/types/project-run/progress-rendering/renderer.d.ts +4 -2
  637. package/types/project-run/project-context.d.ts +3 -3
  638. package/types/project-run/result.d.ts +3 -3
  639. package/types/project-run/run.d.ts +1 -1
  640. package/types/project-run/task-scheduler/admission-core/compiled-graph-lookup.d.ts +10 -0
  641. package/types/project-run/task-scheduler/execution-state.d.ts +4 -4
  642. package/types/project-run/task-scheduler/measurement/diagnostics.d.ts +2 -2
  643. package/types/project-run/task-scheduler/scheduler-terminal-measurement.d.ts +1 -1
  644. package/dist/esm/cache/cache-json-by-key.mjs.map +0 -1
  645. package/dist/esm/check/finding-presentation.mjs.map +0 -1
  646. package/dist/esm/finding-waivers/reconciliation.mjs.map +0 -1
  647. package/dist/esm/learned-critical-path/duration-model/bounded-history.mjs.map +0 -1
  648. package/dist/esm/learned-critical-path/duration-model/prediction.mjs.map +0 -1
  649. package/dist/esm/learned-critical-path/duration-model/preparation.mjs.map +0 -1
  650. package/dist/esm/learned-critical-path/duration-model/recording.mjs.map +0 -1
  651. package/dist/esm/learned-critical-path/duration-model/storage.mjs.map +0 -1
  652. package/dist/esm/learned-critical-path/selection-layers.mjs.map +0 -1
  653. package/dist/esm/learned-critical-path/static-decision.mjs.map +0 -1
  654. package/dist/esm/learned-critical-path/strategy.mjs.map +0 -1
  655. package/dist/esm/package-checks/project-files/config-glob.mjs.map +0 -1
  656. package/dist/esm/project-run/check-execution/preflight-result.mjs.map +0 -1
  657. package/dist/esm/project-run/check-execution/preflight.mjs.map +0 -1
  658. package/dist/esm/project-run/task-scheduler/critical-path-ranking.mjs.map +0 -1
  659. package/types/package-checks/project-files/config-glob.d.ts +0 -5
  660. /package/dist/esm/{check → package-tools/finding-presentation}/finding-presentation.mjs +0 -0
  661. /package/dist/esm/{project-run/task-scheduler → package-tools/learned-critical-path}/critical-path-ranking.mjs +0 -0
  662. /package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/bounded-history.mjs +0 -0
  663. /package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/recording.mjs +0 -0
  664. /package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/static-decision.mjs +0 -0
  665. /package/src/{project-run/task-scheduler → package-tools/learned-critical-path}/critical-path-ranking.ts +0 -0
  666. /package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/bounded-history.ts +0 -0
  667. /package/types/{cache → package-tools/cache}/cache-json-by-key.d.ts +0 -0
  668. /package/types/{project-run/task-scheduler → package-tools/learned-critical-path}/critical-path-ranking.d.ts +0 -0
  669. /package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/bounded-history.d.ts +0 -0
  670. /package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/storage.d.ts +0 -0
@@ -1 +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]) {\n for (const metric of metricMatch[1].split(\",\")) {\n const trimmedMetric = stripPythonWhitespace(metric);\n if (trimmedMetric) reader.context.currentFunction.forgivenMetrics.add(trimmedMetric);\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"]}
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"]}
@@ -135,13 +135,13 @@ function* generatePygmentsCompatibleErlangTokenValues(sourceCode) {
135
135
  continue;
136
136
  }
137
137
  const baseInteger = matchAt(ERLANG_BASE_INTEGER, sourceCode, index);
138
- if (baseInteger) {
138
+ if (baseInteger !== undefined) {
139
139
  yield baseInteger;
140
140
  index += baseInteger.length;
141
141
  continue;
142
142
  }
143
143
  const integer = matchAt(ERLANG_INTEGER, sourceCode, index);
144
- if (integer) {
144
+ if (integer !== undefined) {
145
145
  yield integer;
146
146
  index += integer.length;
147
147
  continue;
@@ -154,7 +154,7 @@ function* generatePygmentsCompatibleErlangTokenValues(sourceCode) {
154
154
  continue;
155
155
  }
156
156
  const variable = matchAt(ERLANG_VARIABLE, sourceCode, index);
157
- if (variable) {
157
+ if (variable !== undefined) {
158
158
  yield variable;
159
159
  index += variable.length;
160
160
  continue;
@@ -341,16 +341,16 @@ function consumeErlangDirective(sourceCode, index) {
341
341
  }
342
342
  function consumeErlangMacro(sourceCode, index) {
343
343
  const variable = matchAt(ERLANG_VARIABLE, sourceCode, index);
344
- if (variable)
344
+ if (variable !== undefined)
345
345
  return index + variable.length;
346
346
  return consumeErlangAtom(sourceCode, index);
347
347
  }
348
348
  function consumeErlangAtom(sourceCode, index) {
349
349
  const quotedAtom = matchAt(ERLANG_QUOTED_ATOM, sourceCode, index);
350
- if (quotedAtom)
350
+ if (quotedAtom !== undefined)
351
351
  return index + quotedAtom.length;
352
352
  const identifier = matchAt(ERLANG_ATOM_IDENTIFIER, sourceCode, index);
353
- return identifier ? index + identifier.length : index;
353
+ return identifier !== undefined ? index + identifier.length : index;
354
354
  }
355
355
  function isPygmentsLineStart(sourceCode, index) {
356
356
  return index === 0 || sourceCode[index - 1] === "\n";
@@ -1 +1 @@
1
- {"version":3,"file":"erlang.mjs","sourceRoot":"","sources":["../../../../../../src/package-checks/function-metrics/analyzer/readers/erlang.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Derived from terryyin/lizard 1.24.0.\n * Sources: lizard_languages/erlang.py (MIT) and Pygments 2.18.0\n * pygments/lexers/erlang.py (BSD-2-Clause).\n * Upstream revision: 308b1c3efd8c1c69bcc3eb82deeaec64fd3662ec.\n * SPDX-License-Identifier: MIT AND BSD-2-Clause\n * Modified: translated to the product-owned TypeScript analyzer with a\n * reader-local Pygments-compatible lexer and no Python/Pygments runtime.\n */\n\nimport type { FileInfoBuilder } from \"../analysis-context.ts\";\nimport { CodeReader, CodeStateMachine, isPythonWhitespace } from \"../shared/code-reader.ts\";\n\n// Preserve Pygments 2.18's root alternatives in source order: its early `>`\n// alternative intentionally tokenizes `>=` as `>` then `=`.\nconst ERLANG_OPERATORS = [\n \"++\",\n \"+\",\n \"--\",\n \"-\",\n \"*\",\n \"/\",\n \"<\",\n \">\",\n \"/=\",\n \"=:=\",\n \"=/=\",\n \"=<\",\n \">=\",\n \"==\",\n \"=\",\n \"<-\",\n \"!\",\n \"?\"\n] as const;\nconst ERLANG_ATOM_IDENTIFIER = /[a-z][\\p{L}\\p{N}_]*/uy;\nconst ERLANG_VARIABLE = /[A-Z_][\\p{L}\\p{N}_]*/uy;\nconst ERLANG_QUOTED_ATOM = /'[^\\n']*[^\\\\]'/uy;\nconst ERLANG_BASE_INTEGER = /(?:[2-9]|[12][0-9]|3[0-6])#[0-9A-Za-z]+/uy;\nconst ERLANG_INTEGER = /\\d+/uy;\nconst ERLANG_STRING_INTERPOLATION = /~[0-9.*]*[~#+BPWXb-ginpswx]/uy;\nconst ERLANG_PUNCTUATION = new Set([\n \"]\",\n \"[\",\n \":\",\n \"_\",\n \"@\",\n '\"',\n \".\",\n \"{\",\n \"}\",\n \"(\",\n \")\",\n \"|\",\n \";\",\n \",\"\n]);\n\nexport class ErlangReader extends CodeReader {\n public static override ext = [\"erl\", \"hrl\", \"es\", \"escript\"];\n public static override languageNames = [\"erlang\"];\n public static override controlFlowKeywords = new Set([\"if\", \"catch\", \"when\"]);\n public static override logicalOperators = new Set([\"and\", \"or\", \"not\"]);\n public static override caseKeywords = new Set([\"case\"]);\n public static override ternaryOperators = new Set([\"?\"]);\n\n public constructor(context: FileInfoBuilder) {\n super(context, ErlangReader);\n this.parallelStates = [new ErlangStates(context)];\n }\n\n public static override *generateTokens(sourceCode: string): Generator<string> {\n yield* generatePygmentsCompatibleErlangTokenValues(sourceCode);\n }\n\n public override get_comment_from_token(token: string): string | undefined {\n return token.startsWith(\"%%\") ? token.slice(2) : undefined;\n }\n}\n\n/**\n * Reader-local value lexer matching the token values that ErlangReader keeps\n * after upstream filters Pygments Whitespace tokens. It intentionally models\n * no reusable lexer API and carries no Pygments dependency into Product code.\n */\nfunction* generatePygmentsCompatibleErlangTokenValues(sourceCode: string): Generator<string> {\n let index = 0;\n let inDirective = false;\n while (index < sourceCode.length) {\n if (inDirective) {\n // RegexLexer resets a non-matching state at a line-feed, yielding its\n // Whitespace token. Horizontal whitespace remains an Error value while\n // `directive` is active, so it cannot take the root whitespace path.\n if (sourceCode[index] === \"\\n\") {\n index += 1;\n inDirective = false;\n continue;\n }\n const directive = consumeErlangDirective(sourceCode, index);\n if (directive !== undefined) {\n yield* directive.values;\n index = directive.end;\n inDirective = false;\n continue;\n }\n\n // RegexLexer leaves the directive state active after every unmatched\n // character. Its eventual atom match ends that state, so `-16#f.`\n // yields `-`, `1`, `6`, `#`, `f`, `.` rather than a number token.\n yield codePointAt(sourceCode, index);\n index += codePointAt(sourceCode, index).length;\n continue;\n }\n\n const whitespaceEnd = consumeErlangWhitespace(sourceCode, index);\n if (whitespaceEnd > index) {\n index = whitespaceEnd;\n continue;\n }\n\n if (sourceCode[index] === \"%\") {\n const commentEnd = consumeUntilLineEnd(sourceCode, index);\n yield sourceCode.slice(index, commentEnd);\n index = commentEnd;\n continue;\n }\n\n if (sourceCode[index] === \"-\" && isPygmentsLineStart(sourceCode, index)) {\n yield \"-\";\n index += 1;\n inDirective = true;\n continue;\n }\n\n // The Pygments root operator pattern is intentionally checked before\n // binary/map and number rules. This preserves source token values such as\n // `<<` -> `<`, `<` and `>=` -> `>`, `=`.\n const operator = ERLANG_OPERATORS.find((candidate) => sourceCode.startsWith(candidate, index));\n if (operator) {\n yield operator;\n index += operator.length;\n continue;\n }\n\n if (sourceCode[index] === '\"') {\n const [stringValues, stringEnd] = tokenizeErlangString(sourceCode, index);\n yield* stringValues;\n index = stringEnd;\n continue;\n }\n\n const baseInteger = matchAt(ERLANG_BASE_INTEGER, sourceCode, index);\n if (baseInteger) {\n yield baseInteger;\n index += baseInteger.length;\n continue;\n }\n\n const integer = matchAt(ERLANG_INTEGER, sourceCode, index);\n if (integer) {\n yield integer;\n index += integer.length;\n continue;\n }\n\n // Pygments' punctuation rule precedes variable matching, so `_Tree`\n // becomes `_`, `Tree` rather than one variable token.\n if (ERLANG_PUNCTUATION.has(sourceCode[index] ?? \"\")) {\n yield sourceCode[index] ?? \"\";\n index += 1;\n continue;\n }\n\n const variable = matchAt(ERLANG_VARIABLE, sourceCode, index);\n if (variable) {\n yield variable;\n index += variable.length;\n continue;\n }\n\n const atomEnd = consumeErlangAtom(sourceCode, index);\n if (atomEnd > index) {\n yield sourceCode.slice(index, atomEnd);\n index = atomEnd;\n continue;\n }\n\n if (sourceCode[index] === \"$\") {\n const characterEnd = consumeErlangCharacter(sourceCode, index);\n if (characterEnd !== undefined) {\n yield sourceCode.slice(index, characterEnd);\n index = characterEnd;\n continue;\n }\n }\n\n if (sourceCode[index] === \"#\") {\n const recordEnd = consumeErlangRecordLabel(sourceCode, index);\n if (recordEnd > index + 1) {\n yield sourceCode.slice(index, recordEnd);\n index = recordEnd;\n continue;\n }\n }\n\n const hashbangEnd = consumeErlangHashbang(sourceCode, index);\n if (hashbangEnd !== undefined) {\n // Pygments emits a Comment.Hashbang token including its newline; the\n // upstream reader filters token *types* rather than stripping its value.\n yield sourceCode.slice(index, hashbangEnd);\n index = hashbangEnd;\n continue;\n }\n\n if (sourceCode.startsWith(\"#{\", index)) {\n yield \"#{\";\n index += 2;\n continue;\n }\n\n yield codePointAt(sourceCode, index);\n index += codePointAt(sourceCode, index).length;\n }\n}\n\n/** Consume Python/Pygments whitespace, including Python's C0 separators. */\nfunction consumeErlangWhitespace(sourceCode: string, index: number): number {\n let end = index;\n while (end < sourceCode.length) {\n const character = String.fromCodePoint(sourceCode.codePointAt(end) ?? 0);\n if (!isPythonWhitespace(character)) break;\n end += character.length;\n }\n return end;\n}\n\nfunction matchAt(expression: RegExp, sourceCode: string, index: number): string | undefined {\n expression.lastIndex = index;\n return expression.exec(sourceCode)?.[0];\n}\n\nfunction consumeUntilLineEnd(sourceCode: string, index: number): number {\n const lineFeed = sourceCode.indexOf(\"\\n\", index);\n return lineFeed < 0 ? sourceCode.length : lineFeed;\n}\n\nfunction tokenizeErlangString(\n sourceCode: string,\n start: number\n): readonly [readonly string[], number] {\n const values = ['\"'];\n let index = start + 1;\n let segmentStart = index;\n\n while (index < sourceCode.length) {\n const character = sourceCode[index];\n if (character === '\"') {\n if (segmentStart < index) values.push(sourceCode.slice(segmentStart, index));\n values.push('\"');\n return [values, index + 1];\n }\n if (character === \"\\\\\") {\n if (segmentStart < index) values.push(sourceCode.slice(segmentStart, index));\n const escapeEnd = consumeErlangEscape(sourceCode, index);\n if (escapeEnd === undefined) {\n // RegexLexer emits one Error token for an invalid escape, then resumes\n // the normal string text rule at its following character.\n values.push(\"\\\\\");\n index += 1;\n } else {\n values.push(sourceCode.slice(index, escapeEnd));\n index = escapeEnd;\n }\n segmentStart = index;\n continue;\n }\n if (character === \"~\") {\n if (segmentStart < index) values.push(sourceCode.slice(segmentStart, index));\n ERLANG_STRING_INTERPOLATION.lastIndex = index;\n const interpolation = ERLANG_STRING_INTERPOLATION.exec(sourceCode)?.[0] ?? \"~\";\n values.push(interpolation);\n index += interpolation.length;\n segmentStart = index;\n continue;\n }\n index += 1;\n }\n\n if (segmentStart < index) values.push(sourceCode.slice(segmentStart, index));\n return [values, index];\n}\n\nfunction consumeErlangCharacter(sourceCode: string, start: number): number | undefined {\n const characterStart = start + 1;\n if (characterStart >= sourceCode.length) return undefined;\n if (sourceCode[characterStart] !== \"\\\\\") {\n return characterStart + codePointAt(sourceCode, characterStart).length;\n }\n\n const escapeEnd = consumeErlangEscape(sourceCode, characterStart);\n if (escapeEnd !== undefined) return escapeEnd;\n const escapedWhitespaceOrPercent = sourceCode[characterStart + 1];\n return escapedWhitespaceOrPercent === \" \" || escapedWhitespaceOrPercent === \"%\"\n ? characterStart + 2\n : undefined;\n}\n\n/** Exact Pygments 2.18 `escape_re` value boundary. */\nfunction consumeErlangEscape(sourceCode: string, start: number): number | undefined {\n const marker = sourceCode[start + 1];\n if (marker === undefined) return undefined;\n if (/[bdefnrstv'\"\\\\]/u.test(marker)) return start + 2;\n if (marker === \"^\") {\n return /^[a-zA-Z]$/u.test(sourceCode[start + 2] ?? \"\") ? start + 3 : undefined;\n }\n if (marker === \"x\" && /^[0-9a-fA-F]{2}$/u.test(sourceCode.slice(start + 2, start + 4))) {\n return start + 4;\n }\n if (marker === \"x\" && sourceCode[start + 2] === \"{\") {\n let index = start + 3;\n while (/^[0-9a-fA-F]$/u.test(sourceCode[index] ?? \"\")) index += 1;\n return index > start + 3 && sourceCode[index] === \"}\" ? index + 1 : undefined;\n }\n if (/^[0-7]$/u.test(marker)) {\n let index = start + 2;\n while (\n index < Math.min(sourceCode.length, start + 4) &&\n /[0-7]/u.test(sourceCode[index] ?? \"\")\n ) {\n index += 1;\n }\n return index;\n }\n return undefined;\n}\n\nfunction consumeErlangRecordLabel(sourceCode: string, start: number): number {\n const firstAtomEnd = consumeErlangAtom(sourceCode, start + 1);\n if (firstAtomEnd === start + 1) return start + 1;\n const dotIndex = sourceCode.startsWith(\":.\", firstAtomEnd) ? firstAtomEnd + 1 : firstAtomEnd;\n if (sourceCode[dotIndex] !== \".\") return firstAtomEnd;\n const secondAtomEnd = consumeErlangAtom(sourceCode, dotIndex + 1);\n return secondAtomEnd > dotIndex + 1 ? secondAtomEnd : firstAtomEnd;\n}\n\n/**\n * Pygments 2.18's `directive` state: a valid `define`/`record` declaration\n * or one atom exits it; each other character is emitted as an Error value.\n */\nfunction consumeErlangDirective(\n sourceCode: string,\n index: number\n): { readonly values: readonly string[]; readonly end: number } | undefined {\n for (const directiveName of [\"define\", \"record\"] as const) {\n if (!sourceCode.startsWith(directiveName, index)) continue;\n let bracket = index + directiveName.length;\n bracket = consumeErlangWhitespace(sourceCode, bracket);\n if (sourceCode[bracket] !== \"(\") continue;\n const macroEnd = consumeErlangMacro(sourceCode, bracket + 1);\n if (macroEnd === bracket + 1) continue;\n return {\n values: [directiveName, \"(\", sourceCode.slice(bracket + 1, macroEnd)],\n end: macroEnd\n };\n }\n\n const atomEnd = consumeErlangAtom(sourceCode, index);\n return atomEnd > index ? { values: [sourceCode.slice(index, atomEnd)], end: atomEnd } : undefined;\n}\n\nfunction consumeErlangMacro(sourceCode: string, index: number): number {\n const variable = matchAt(ERLANG_VARIABLE, sourceCode, index);\n if (variable) return index + variable.length;\n return consumeErlangAtom(sourceCode, index);\n}\n\nfunction consumeErlangAtom(sourceCode: string, index: number): number {\n const quotedAtom = matchAt(ERLANG_QUOTED_ATOM, sourceCode, index);\n if (quotedAtom) return index + quotedAtom.length;\n const identifier = matchAt(ERLANG_ATOM_IDENTIFIER, sourceCode, index);\n return identifier ? index + identifier.length : index;\n}\n\nfunction isPygmentsLineStart(sourceCode: string, index: number): boolean {\n return index === 0 || sourceCode[index - 1] === \"\\n\";\n}\n\n/** Exact Pygments 2.18 `\\\\A#!.+\\\\n` Hashbang boundary. */\nfunction consumeErlangHashbang(sourceCode: string, index: number): number | undefined {\n if (index !== 0 || !sourceCode.startsWith(\"#!\", index)) return undefined;\n const lineFeed = sourceCode.indexOf(\"\\n\", index + 2);\n return lineFeed > index + 2 ? lineFeed + 1 : undefined;\n}\n\nfunction codePointAt(sourceCode: string, index: number): string {\n return String.fromCodePoint(sourceCode.codePointAt(index) ?? 0);\n}\n\n/* Source state callbacks retain their method identity; CodeStateMachine supplies the owning receiver. */\n/* oxlint-disable typescript/unbound-method */\nclass ErlangStates extends CodeStateMachine {\n public static readonly func_name_pattern = /^[A-Za-z]+[A-Za-z0-9_]*/u;\n private punctuated = false;\n private lbr = 0;\n private rbr = 0;\n\n public constructor(context: FileInfoBuilder) {\n super(context);\n this.punctuated = false;\n }\n\n public override statemachine_clone(): CodeStateMachine {\n return new ErlangStates(this.context);\n }\n\n public override _state_global(token: string): void {\n if (token === \"-\") {\n this.punctuated = true;\n } else if (ErlangStates.func_name_pattern.test(token) && !this.punctuated) {\n this.context.pushNewFunction(token);\n this._state = this._state_after_name;\n } else if (token === \"end\") {\n this._state = this._state_nested_end;\n } else if (token === \".\" || token === \";\") {\n this.statemachine_return();\n } else {\n this.punctuated = false;\n }\n }\n\n private readonly _state_after_name = (token: string): void => {\n if (token === \"(\") {\n this._state = this._state_start_of_params;\n this.context.addToLongFunctionName(token);\n this.lbr = 1;\n this.rbr = 0;\n } else {\n this.func_match_failed(token);\n }\n };\n\n private readonly _state_start_of_params = (token: string): void => {\n if (token === \")\") {\n this.rbr += 1;\n if (this.lbr === this.rbr) {\n this._state = this._state_end_of_params;\n this.context.addToLongFunctionName(` ${token}`);\n this.punctuated = false;\n return;\n }\n }\n if (token === \"(\") this.lbr += 1;\n this.context.parameter(token);\n };\n\n private readonly _state_end_of_params = (token: string): void => {\n if (token === \"-\") {\n this.punctuated = true;\n } else if (token === \">\" && this.punctuated) {\n if (\n this.context.stackedFunctions.length <= 1 ||\n this.context.currentFunction.name === \"fun\"\n ) {\n this.next(this._state_func_first_line, token);\n }\n } else {\n this.func_match_failed(token);\n }\n };\n\n private readonly _state_func_first_line = (_token: string): void => {\n this.sub_state(this.statemachine_clone(), () => {\n this._state = this._state_global;\n this.context.endOfFunction();\n });\n this.punctuated = false;\n };\n\n private readonly _state_nested_end = (token: string): void => {\n if (\n (token === \".\" || token === \",\") &&\n this.context.stackedFunctions.length > 1 &&\n this.context.stackedFunctions.at(-1)?.name === \"fun\"\n ) {\n this.statemachine_return();\n return;\n }\n this._state = this._state_global;\n };\n\n private readonly func_match_failed = (token: string): void => {\n this.punctuated = false;\n this._state = this._state_global;\n const currentComplexity = this.context.currentFunction.cyclomaticComplexity - 1;\n this.context.currentFunction =\n this.context.stackedFunctions.pop() ?? this.context.globalPseudoFunction;\n this.context.addCondition(currentComplexity);\n this.next(this._state_global, token);\n };\n}\n/* oxlint-enable typescript/unbound-method */\n"]}
1
+ {"version":3,"file":"erlang.mjs","sourceRoot":"","sources":["../../../../../../src/package-checks/function-metrics/analyzer/readers/erlang.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Derived from terryyin/lizard 1.24.0.\n * Sources: lizard_languages/erlang.py (MIT) and Pygments 2.18.0\n * pygments/lexers/erlang.py (BSD-2-Clause).\n * Upstream revision: 308b1c3efd8c1c69bcc3eb82deeaec64fd3662ec.\n * SPDX-License-Identifier: MIT AND BSD-2-Clause\n * Modified: translated to the product-owned TypeScript analyzer with a\n * reader-local Pygments-compatible lexer and no Python/Pygments runtime.\n */\n\nimport type { FileInfoBuilder } from \"../analysis-context.ts\";\nimport { CodeReader, CodeStateMachine, isPythonWhitespace } from \"../shared/code-reader.ts\";\n\n// Preserve Pygments 2.18's root alternatives in source order: its early `>`\n// alternative intentionally tokenizes `>=` as `>` then `=`.\nconst ERLANG_OPERATORS = [\n \"++\",\n \"+\",\n \"--\",\n \"-\",\n \"*\",\n \"/\",\n \"<\",\n \">\",\n \"/=\",\n \"=:=\",\n \"=/=\",\n \"=<\",\n \">=\",\n \"==\",\n \"=\",\n \"<-\",\n \"!\",\n \"?\"\n] as const;\nconst ERLANG_ATOM_IDENTIFIER = /[a-z][\\p{L}\\p{N}_]*/uy;\nconst ERLANG_VARIABLE = /[A-Z_][\\p{L}\\p{N}_]*/uy;\nconst ERLANG_QUOTED_ATOM = /'[^\\n']*[^\\\\]'/uy;\nconst ERLANG_BASE_INTEGER = /(?:[2-9]|[12][0-9]|3[0-6])#[0-9A-Za-z]+/uy;\nconst ERLANG_INTEGER = /\\d+/uy;\nconst ERLANG_STRING_INTERPOLATION = /~[0-9.*]*[~#+BPWXb-ginpswx]/uy;\nconst ERLANG_PUNCTUATION = new Set([\n \"]\",\n \"[\",\n \":\",\n \"_\",\n \"@\",\n '\"',\n \".\",\n \"{\",\n \"}\",\n \"(\",\n \")\",\n \"|\",\n \";\",\n \",\"\n]);\n\nexport class ErlangReader extends CodeReader {\n public static override ext = [\"erl\", \"hrl\", \"es\", \"escript\"];\n public static override languageNames = [\"erlang\"];\n public static override controlFlowKeywords = new Set([\"if\", \"catch\", \"when\"]);\n public static override logicalOperators = new Set([\"and\", \"or\", \"not\"]);\n public static override caseKeywords = new Set([\"case\"]);\n public static override ternaryOperators = new Set([\"?\"]);\n\n public constructor(context: FileInfoBuilder) {\n super(context, ErlangReader);\n this.parallelStates = [new ErlangStates(context)];\n }\n\n public static override *generateTokens(sourceCode: string): Generator<string> {\n yield* generatePygmentsCompatibleErlangTokenValues(sourceCode);\n }\n\n public override get_comment_from_token(token: string): string | undefined {\n return token.startsWith(\"%%\") ? token.slice(2) : undefined;\n }\n}\n\n/**\n * Reader-local value lexer matching the token values that ErlangReader keeps\n * after upstream filters Pygments Whitespace tokens. It intentionally models\n * no reusable lexer API and carries no Pygments dependency into Product code.\n */\nfunction* generatePygmentsCompatibleErlangTokenValues(sourceCode: string): Generator<string> {\n let index = 0;\n let inDirective = false;\n while (index < sourceCode.length) {\n if (inDirective) {\n // RegexLexer resets a non-matching state at a line-feed, yielding its\n // Whitespace token. Horizontal whitespace remains an Error value while\n // `directive` is active, so it cannot take the root whitespace path.\n if (sourceCode[index] === \"\\n\") {\n index += 1;\n inDirective = false;\n continue;\n }\n const directive = consumeErlangDirective(sourceCode, index);\n if (directive !== undefined) {\n yield* directive.values;\n index = directive.end;\n inDirective = false;\n continue;\n }\n\n // RegexLexer leaves the directive state active after every unmatched\n // character. Its eventual atom match ends that state, so `-16#f.`\n // yields `-`, `1`, `6`, `#`, `f`, `.` rather than a number token.\n yield codePointAt(sourceCode, index);\n index += codePointAt(sourceCode, index).length;\n continue;\n }\n\n const whitespaceEnd = consumeErlangWhitespace(sourceCode, index);\n if (whitespaceEnd > index) {\n index = whitespaceEnd;\n continue;\n }\n\n if (sourceCode[index] === \"%\") {\n const commentEnd = consumeUntilLineEnd(sourceCode, index);\n yield sourceCode.slice(index, commentEnd);\n index = commentEnd;\n continue;\n }\n\n if (sourceCode[index] === \"-\" && isPygmentsLineStart(sourceCode, index)) {\n yield \"-\";\n index += 1;\n inDirective = true;\n continue;\n }\n\n // The Pygments root operator pattern is intentionally checked before\n // binary/map and number rules. This preserves source token values such as\n // `<<` -> `<`, `<` and `>=` -> `>`, `=`.\n const operator = ERLANG_OPERATORS.find((candidate) => sourceCode.startsWith(candidate, index));\n if (operator) {\n yield operator;\n index += operator.length;\n continue;\n }\n\n if (sourceCode[index] === '\"') {\n const [stringValues, stringEnd] = tokenizeErlangString(sourceCode, index);\n yield* stringValues;\n index = stringEnd;\n continue;\n }\n\n const baseInteger = matchAt(ERLANG_BASE_INTEGER, sourceCode, index);\n if (baseInteger !== undefined) {\n yield baseInteger;\n index += baseInteger.length;\n continue;\n }\n\n const integer = matchAt(ERLANG_INTEGER, sourceCode, index);\n if (integer !== undefined) {\n yield integer;\n index += integer.length;\n continue;\n }\n\n // Pygments' punctuation rule precedes variable matching, so `_Tree`\n // becomes `_`, `Tree` rather than one variable token.\n if (ERLANG_PUNCTUATION.has(sourceCode[index] ?? \"\")) {\n yield sourceCode[index] ?? \"\";\n index += 1;\n continue;\n }\n\n const variable = matchAt(ERLANG_VARIABLE, sourceCode, index);\n if (variable !== undefined) {\n yield variable;\n index += variable.length;\n continue;\n }\n\n const atomEnd = consumeErlangAtom(sourceCode, index);\n if (atomEnd > index) {\n yield sourceCode.slice(index, atomEnd);\n index = atomEnd;\n continue;\n }\n\n if (sourceCode[index] === \"$\") {\n const characterEnd = consumeErlangCharacter(sourceCode, index);\n if (characterEnd !== undefined) {\n yield sourceCode.slice(index, characterEnd);\n index = characterEnd;\n continue;\n }\n }\n\n if (sourceCode[index] === \"#\") {\n const recordEnd = consumeErlangRecordLabel(sourceCode, index);\n if (recordEnd > index + 1) {\n yield sourceCode.slice(index, recordEnd);\n index = recordEnd;\n continue;\n }\n }\n\n const hashbangEnd = consumeErlangHashbang(sourceCode, index);\n if (hashbangEnd !== undefined) {\n // Pygments emits a Comment.Hashbang token including its newline; the\n // upstream reader filters token *types* rather than stripping its value.\n yield sourceCode.slice(index, hashbangEnd);\n index = hashbangEnd;\n continue;\n }\n\n if (sourceCode.startsWith(\"#{\", index)) {\n yield \"#{\";\n index += 2;\n continue;\n }\n\n yield codePointAt(sourceCode, index);\n index += codePointAt(sourceCode, index).length;\n }\n}\n\n/** Consume Python/Pygments whitespace, including Python's C0 separators. */\nfunction consumeErlangWhitespace(sourceCode: string, index: number): number {\n let end = index;\n while (end < sourceCode.length) {\n const character = String.fromCodePoint(sourceCode.codePointAt(end) ?? 0);\n if (!isPythonWhitespace(character)) break;\n end += character.length;\n }\n return end;\n}\n\nfunction matchAt(expression: RegExp, sourceCode: string, index: number): string | undefined {\n expression.lastIndex = index;\n return expression.exec(sourceCode)?.[0];\n}\n\nfunction consumeUntilLineEnd(sourceCode: string, index: number): number {\n const lineFeed = sourceCode.indexOf(\"\\n\", index);\n return lineFeed < 0 ? sourceCode.length : lineFeed;\n}\n\nfunction tokenizeErlangString(\n sourceCode: string,\n start: number\n): readonly [readonly string[], number] {\n const values = ['\"'];\n let index = start + 1;\n let segmentStart = index;\n\n while (index < sourceCode.length) {\n const character = sourceCode[index];\n if (character === '\"') {\n if (segmentStart < index) values.push(sourceCode.slice(segmentStart, index));\n values.push('\"');\n return [values, index + 1];\n }\n if (character === \"\\\\\") {\n if (segmentStart < index) values.push(sourceCode.slice(segmentStart, index));\n const escapeEnd = consumeErlangEscape(sourceCode, index);\n if (escapeEnd === undefined) {\n // RegexLexer emits one Error token for an invalid escape, then resumes\n // the normal string text rule at its following character.\n values.push(\"\\\\\");\n index += 1;\n } else {\n values.push(sourceCode.slice(index, escapeEnd));\n index = escapeEnd;\n }\n segmentStart = index;\n continue;\n }\n if (character === \"~\") {\n if (segmentStart < index) values.push(sourceCode.slice(segmentStart, index));\n ERLANG_STRING_INTERPOLATION.lastIndex = index;\n const interpolation = ERLANG_STRING_INTERPOLATION.exec(sourceCode)?.[0] ?? \"~\";\n values.push(interpolation);\n index += interpolation.length;\n segmentStart = index;\n continue;\n }\n index += 1;\n }\n\n if (segmentStart < index) values.push(sourceCode.slice(segmentStart, index));\n return [values, index];\n}\n\nfunction consumeErlangCharacter(sourceCode: string, start: number): number | undefined {\n const characterStart = start + 1;\n if (characterStart >= sourceCode.length) return undefined;\n if (sourceCode[characterStart] !== \"\\\\\") {\n return characterStart + codePointAt(sourceCode, characterStart).length;\n }\n\n const escapeEnd = consumeErlangEscape(sourceCode, characterStart);\n if (escapeEnd !== undefined) return escapeEnd;\n const escapedWhitespaceOrPercent = sourceCode[characterStart + 1];\n return escapedWhitespaceOrPercent === \" \" || escapedWhitespaceOrPercent === \"%\"\n ? characterStart + 2\n : undefined;\n}\n\n/** Exact Pygments 2.18 `escape_re` value boundary. */\nfunction consumeErlangEscape(sourceCode: string, start: number): number | undefined {\n const marker = sourceCode[start + 1];\n if (marker === undefined) return undefined;\n if (/[bdefnrstv'\"\\\\]/u.test(marker)) return start + 2;\n if (marker === \"^\") {\n return /^[a-zA-Z]$/u.test(sourceCode[start + 2] ?? \"\") ? start + 3 : undefined;\n }\n if (marker === \"x\" && /^[0-9a-fA-F]{2}$/u.test(sourceCode.slice(start + 2, start + 4))) {\n return start + 4;\n }\n if (marker === \"x\" && sourceCode[start + 2] === \"{\") {\n let index = start + 3;\n while (/^[0-9a-fA-F]$/u.test(sourceCode[index] ?? \"\")) index += 1;\n return index > start + 3 && sourceCode[index] === \"}\" ? index + 1 : undefined;\n }\n if (/^[0-7]$/u.test(marker)) {\n let index = start + 2;\n while (\n index < Math.min(sourceCode.length, start + 4) &&\n /[0-7]/u.test(sourceCode[index] ?? \"\")\n ) {\n index += 1;\n }\n return index;\n }\n return undefined;\n}\n\nfunction consumeErlangRecordLabel(sourceCode: string, start: number): number {\n const firstAtomEnd = consumeErlangAtom(sourceCode, start + 1);\n if (firstAtomEnd === start + 1) return start + 1;\n const dotIndex = sourceCode.startsWith(\":.\", firstAtomEnd) ? firstAtomEnd + 1 : firstAtomEnd;\n if (sourceCode[dotIndex] !== \".\") return firstAtomEnd;\n const secondAtomEnd = consumeErlangAtom(sourceCode, dotIndex + 1);\n return secondAtomEnd > dotIndex + 1 ? secondAtomEnd : firstAtomEnd;\n}\n\n/**\n * Pygments 2.18's `directive` state: a valid `define`/`record` declaration\n * or one atom exits it; each other character is emitted as an Error value.\n */\nfunction consumeErlangDirective(\n sourceCode: string,\n index: number\n): { readonly values: readonly string[]; readonly end: number } | undefined {\n for (const directiveName of [\"define\", \"record\"] as const) {\n if (!sourceCode.startsWith(directiveName, index)) continue;\n let bracket = index + directiveName.length;\n bracket = consumeErlangWhitespace(sourceCode, bracket);\n if (sourceCode[bracket] !== \"(\") continue;\n const macroEnd = consumeErlangMacro(sourceCode, bracket + 1);\n if (macroEnd === bracket + 1) continue;\n return {\n values: [directiveName, \"(\", sourceCode.slice(bracket + 1, macroEnd)],\n end: macroEnd\n };\n }\n\n const atomEnd = consumeErlangAtom(sourceCode, index);\n return atomEnd > index ? { values: [sourceCode.slice(index, atomEnd)], end: atomEnd } : undefined;\n}\n\nfunction consumeErlangMacro(sourceCode: string, index: number): number {\n const variable = matchAt(ERLANG_VARIABLE, sourceCode, index);\n if (variable !== undefined) return index + variable.length;\n return consumeErlangAtom(sourceCode, index);\n}\n\nfunction consumeErlangAtom(sourceCode: string, index: number): number {\n const quotedAtom = matchAt(ERLANG_QUOTED_ATOM, sourceCode, index);\n if (quotedAtom !== undefined) return index + quotedAtom.length;\n const identifier = matchAt(ERLANG_ATOM_IDENTIFIER, sourceCode, index);\n return identifier !== undefined ? index + identifier.length : index;\n}\n\nfunction isPygmentsLineStart(sourceCode: string, index: number): boolean {\n return index === 0 || sourceCode[index - 1] === \"\\n\";\n}\n\n/** Exact Pygments 2.18 `\\\\A#!.+\\\\n` Hashbang boundary. */\nfunction consumeErlangHashbang(sourceCode: string, index: number): number | undefined {\n if (index !== 0 || !sourceCode.startsWith(\"#!\", index)) return undefined;\n const lineFeed = sourceCode.indexOf(\"\\n\", index + 2);\n return lineFeed > index + 2 ? lineFeed + 1 : undefined;\n}\n\nfunction codePointAt(sourceCode: string, index: number): string {\n return String.fromCodePoint(sourceCode.codePointAt(index) ?? 0);\n}\n\n/* Source state callbacks retain their method identity; CodeStateMachine supplies the owning receiver. */\n/* oxlint-disable typescript/unbound-method */\nclass ErlangStates extends CodeStateMachine {\n public static readonly func_name_pattern = /^[A-Za-z]+[A-Za-z0-9_]*/u;\n private punctuated = false;\n private lbr = 0;\n private rbr = 0;\n\n public constructor(context: FileInfoBuilder) {\n super(context);\n this.punctuated = false;\n }\n\n public override statemachine_clone(): CodeStateMachine {\n return new ErlangStates(this.context);\n }\n\n public override _state_global(token: string): void {\n if (token === \"-\") {\n this.punctuated = true;\n } else if (ErlangStates.func_name_pattern.test(token) && !this.punctuated) {\n this.context.pushNewFunction(token);\n this._state = this._state_after_name;\n } else if (token === \"end\") {\n this._state = this._state_nested_end;\n } else if (token === \".\" || token === \";\") {\n this.statemachine_return();\n } else {\n this.punctuated = false;\n }\n }\n\n private readonly _state_after_name = (token: string): void => {\n if (token === \"(\") {\n this._state = this._state_start_of_params;\n this.context.addToLongFunctionName(token);\n this.lbr = 1;\n this.rbr = 0;\n } else {\n this.func_match_failed(token);\n }\n };\n\n private readonly _state_start_of_params = (token: string): void => {\n if (token === \")\") {\n this.rbr += 1;\n if (this.lbr === this.rbr) {\n this._state = this._state_end_of_params;\n this.context.addToLongFunctionName(` ${token}`);\n this.punctuated = false;\n return;\n }\n }\n if (token === \"(\") this.lbr += 1;\n this.context.parameter(token);\n };\n\n private readonly _state_end_of_params = (token: string): void => {\n if (token === \"-\") {\n this.punctuated = true;\n } else if (token === \">\" && this.punctuated) {\n if (\n this.context.stackedFunctions.length <= 1 ||\n this.context.currentFunction.name === \"fun\"\n ) {\n this.next(this._state_func_first_line, token);\n }\n } else {\n this.func_match_failed(token);\n }\n };\n\n private readonly _state_func_first_line = (_token: string): void => {\n this.sub_state(this.statemachine_clone(), () => {\n this._state = this._state_global;\n this.context.endOfFunction();\n });\n this.punctuated = false;\n };\n\n private readonly _state_nested_end = (token: string): void => {\n if (\n (token === \".\" || token === \",\") &&\n this.context.stackedFunctions.length > 1 &&\n this.context.stackedFunctions.at(-1)?.name === \"fun\"\n ) {\n this.statemachine_return();\n return;\n }\n this._state = this._state_global;\n };\n\n private readonly func_match_failed = (token: string): void => {\n this.punctuated = false;\n this._state = this._state_global;\n const currentComplexity = this.context.currentFunction.cyclomaticComplexity - 1;\n this.context.currentFunction =\n this.context.stackedFunctions.pop() ?? this.context.globalPseudoFunction;\n this.context.addCondition(currentComplexity);\n this.next(this._state_global, token);\n };\n}\n/* oxlint-enable typescript/unbound-method */\n"]}
@@ -58,7 +58,7 @@ export class FortranReader extends CodeReader {
58
58
  }
59
59
  newLine = token === "\n";
60
60
  const macro = /^#\s*(\w+)/u.exec(token)?.[1]?.toLowerCase();
61
- if (macro) {
61
+ if (macro !== undefined) {
62
62
  if (["if", "ifdef", "ifndef", "elif"].includes(macro))
63
63
  this.context.addCondition();
64
64
  if (macroDepth > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"fortran.mjs","sourceRoot":"","sources":["../../../../../../src/package-checks/function-metrics/analyzer/readers/fortran.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Derived from terryyin/lizard 1.24.0.\n * Source: lizard_languages/fortran.py.\n * Upstream revision: 308b1c3efd8c1c69bcc3eb82deeaec64fd3662ec.\n * SPDX-License-Identifier: MIT\n * Modified: translated to the product-owned TypeScript analyzer.\n */\n\nimport type { FileInfoBuilder } from \"../analysis-context.ts\";\nimport type { TokenStream } from \"../contracts.ts\";\nimport {\n CodeReader,\n CodeStateMachine,\n isPythonWhitespace,\n type TokenFactory\n} from \"../shared/code-reader.ts\";\n\n/** Source mixin retained as a constructable class despite TypeScript's single inheritance. */\nexport class FortranCommentsMixin {\n public static get_comment_from_token(token: string): string | undefined {\n return token.startsWith(\"!\") ? token.slice(1) : undefined;\n }\n\n public static getCommentFromToken(token: string): string | undefined {\n return this.get_comment_from_token(token);\n }\n}\n\nexport class FortranReader extends CodeReader {\n public static override ext = [\"f70\", \"f90\", \"f95\", \"f03\", \"f08\", \"f\", \"for\", \"ftn\", \"fpp\"];\n public static override languageNames = [\"fortran\"];\n public static override controlFlowKeywords = new Set([\"IF\", \"DO\", \"if\", \"do\"]);\n public static override logicalOperators = new Set([\".AND.\", \".OR.\", \".and.\", \".or.\"]);\n public static override caseKeywords = new Set([\"CASE\", \"case\"]);\n public static override ternaryOperators = new Set<string>();\n public static readonly _blocks = [\n \"PROGRAM\",\n \"MODULE\",\n \"SUBMODULE\",\n \"SUBROUTINE\",\n \"FUNCTION\",\n \"TYPE\",\n \"INTERFACE\",\n \"BLOCK\",\n \"IF\",\n \"DO\",\n \"FORALL\",\n \"WHERE\",\n \"SELECT\",\n \"ASSOCIATE\"\n ] as const;\n public macro_disabled = false;\n\n public constructor(context: FileInfoBuilder) {\n super(context, FortranReader);\n this.parallelStates = [new FortranStates(context, this)];\n }\n\n public static override *generateTokens(\n sourceCode: string,\n addition = \"\",\n tokenFactory?: TokenFactory\n ): Generator<string> {\n const untilEnd = String.raw`(?:\\\\\\n|[^\\n])*`;\n const endings = FortranReader._blocks.map((block) => String.raw`END\\s*${block}`).join(\"|\");\n const sourceAddition = String.raw`(?i)//|#${untilEnd}|!${untilEnd}|^\\*${untilEnd}|\\.OR\\.|\\.AND\\.|ELSE\\s+IF|MODULE\\s+PROCEDURE|${endings}${addition}`;\n yield* CodeReader.generateTokens(sourceCode, sourceAddition, tokenFactory);\n }\n\n public *preprocess(tokens: TokenStream): Generator<string> {\n let macroDepth = 0;\n let newLine = true;\n for (let token of tokens) {\n if (newLine && (token[0]?.toUpperCase() === \"C\" || token[0] === \"*\")) {\n token = `!${token.slice(1)}`;\n }\n newLine = token === \"\\n\";\n\n const macro = /^#\\s*(\\w+)/u.exec(token)?.[1]?.toLowerCase();\n if (macro) {\n if ([\"if\", \"ifdef\", \"ifndef\", \"elif\"].includes(macro)) this.context.addCondition();\n if (macroDepth > 0) {\n if ([\"if\", \"ifdef\", \"ifndef\"].includes(macro)) macroDepth += 1;\n else if (macro === \"endif\") macroDepth -= 1;\n } else if ([\"else\", \"elif\"].includes(macro)) {\n macroDepth += 1;\n }\n this.macro_disabled = macroDepth !== 0;\n } else if (!isPythonWhitespace(token) || token === \"\\n\") {\n yield token;\n }\n }\n }\n\n public override get_comment_from_token(token: string): string | undefined {\n return FortranCommentsMixin.get_comment_from_token(token);\n }\n}\n\n/* Source state callbacks retain their method identity; CodeStateMachine supplies the owning receiver. */\n/* oxlint-disable typescript/unbound-method */\nclass FortranStates extends CodeStateMachine {\n private readonly reader: FortranReader;\n private in_interface = false;\n public static readonly _ends = new RegExp(`END\\\\s*(?:${FortranReader._blocks.join(\"|\")})`, \"iu\");\n public static readonly IGNORE_NEXT_TOKENS = new Set([\"%\", \"::\", \"SAVE\", \"DATA\"]);\n public static readonly IGNORE_VAR_TOKENS = new Set([\n \"INTEGER\",\n \"REAL\",\n \"COMPLEX\",\n \"LOGICAL\",\n \"CHARACTER\"\n ]);\n public static readonly RESET_STATE_TOKENS = new Set([\"RECURSIVE\", \"ELEMENTAL\"]);\n public static readonly FUNCTION_NAME_TOKENS = new Set([\"SUBROUTINE\", \"FUNCTION\"]);\n public static readonly NESTING_KEYWORDS = new Set([\n \"FORALL\",\n \"WHERE\",\n \"SELECT\",\n \"INTERFACE\",\n \"ASSOCIATE\"\n ]);\n public static readonly PROCEDURE_TOKENS = new Set([\"PROCEDURE\", \"MODULE PROCEDURE\"]);\n\n public constructor(context: FileInfoBuilder, reader: FortranReader) {\n super(context);\n this.reader = reader;\n this.last_token = undefined;\n }\n\n public override consume(token: string): boolean {\n if (this.reader.macro_disabled) return false;\n\n // fortran.py defines its own `__call__`; unlike the shared base it keeps a\n // completed callback installed. Retain that reader-local source behavior.\n if (this.invokeCurrentState(token)) {\n this.next(this.saved_state);\n this.callback?.();\n }\n this.last_token = token;\n return this.to_exit;\n }\n\n public override _state_global(token: string): void {\n const upper = token.toUpperCase();\n if (FortranStates.IGNORE_NEXT_TOKENS.has(upper)) this._state = this._ignore_next;\n else if (FortranStates.IGNORE_VAR_TOKENS.has(upper)) {\n this._state = this._ignore_var;\n } else if (token === \"(\") {\n this.next(this._ignore_expr, token);\n } else if (FortranStates.RESET_STATE_TOKENS.has(upper)) {\n this.reset_state();\n } else if (FortranStates.FUNCTION_NAME_TOKENS.has(upper)) {\n this._state = this._function_name;\n } else if (upper === \"PROGRAM\") {\n this._state = this._namespace;\n } else if (upper === \"MODULE\") {\n this._state = this._module_or_procedure;\n } else if (upper === \"SUBMODULE\") {\n this._state = this._module;\n this._module(token);\n } else if (upper === \"TYPE\") {\n this._state = this._type;\n } else if (upper === \"IF\") {\n this._state = this._if;\n } else if (upper === \"BLOCK\") {\n this._state = this._ignore_if_paren;\n } else if (upper === \"DO\") {\n this._state = this._ignore_if_label;\n } else if (FortranStates.NESTING_KEYWORDS.has(upper)) {\n this.context.addBareNesting();\n if (upper === \"INTERFACE\") this.in_interface = true;\n } else if (upper === \"ELSE\") {\n this.context.popNesting();\n this.context.addBareNesting();\n } else if (upper.replaceAll(\" \", \"\") === \"ELSEIF\") {\n this.context.popNesting();\n if (upper === \"ELSEIF\") this.context.addCondition();\n this._state = this._if;\n } else if (upper === \"END\" || FortranStates._ends.test(token)) {\n if (upper.replaceAll(\" \", \"\").startsWith(\"ENDINTERFACE\")) this.in_interface = false;\n this.context.popNesting();\n }\n }\n\n private readonly reset_state = (token?: string): void => {\n this._state = this._state_global;\n if (token !== undefined) this._state_global(token);\n };\n\n private readonly _ignore_next = (_token: string): void => {\n this.reset_state();\n };\n\n private readonly _ignore_var = (token: string): void => {\n if (FortranStates.FUNCTION_NAME_TOKENS.has(token.toUpperCase())) this.reset_state(token);\n else this.reset_state();\n };\n\n private readonly _ignore_if_paren = (token: string): void => {\n if (token === \"(\") this.next(this._ignore_expr, token);\n else {\n this.context.addBareNesting();\n this.reset_state();\n }\n };\n\n private readonly _ignore_if_label = (token: string): void => {\n if (/^\\d+$/u.test(token)) this.reset_state();\n else {\n this.context.addBareNesting();\n this.reset_state(token);\n }\n };\n\n private readonly _ignore_expr = (token: string): void => {\n this.readInsideBracketsThen(\"()\", token, () => {}, this._state_global);\n };\n\n private readonly _function_name = (token: string): void => {\n this.context.restartNewFunction(token);\n this.context.addToLongFunctionName(\"(\");\n this._state = this._function_has_param;\n };\n\n private readonly _function_has_param = (token: string): void => {\n if (token === \"(\") this.next(this._function_params, token);\n else this._function(token);\n };\n\n private readonly _function_params = (token: string): void => {\n this.readInsideBracketsThen(\n \"()\",\n token,\n (parameterToken) => {\n if (!\"()\".includes(parameterToken)) this.context.parameter(parameterToken);\n },\n this._function\n );\n };\n\n private readonly _function = (token: string): void => {\n this.context.addToLongFunctionName(\" )\");\n this.context.addBareNesting();\n this.reset_state(token);\n };\n\n private readonly _module = (token: string): void => {\n const upper = token.toUpperCase();\n if (FortranStates.FUNCTION_NAME_TOKENS.has(upper)) this._state = this._function_name;\n else if (FortranStates.PROCEDURE_TOKENS.has(upper)) this._state = this._procedure;\n else this._namespace(token);\n };\n\n private readonly _procedure = (token: string): void => {\n this.context.restartNewFunction(token);\n this.context.addBareNesting();\n this.reset_state();\n };\n\n private readonly _type = (token: string): void => {\n if (token === \",\" || token === \"::\" || /^\\p{L}/u.test(token)) this._namespace(token);\n else this.reset_state(token);\n };\n\n private readonly _namespace = (token: string): void => {\n this.context.addNamespace(token);\n this.reset_state();\n };\n\n private readonly _if = (token: string): void => {\n if (token === \"(\") this.next(this._if_cond, token);\n else this.reset_state(token);\n };\n\n private readonly _if_cond = (token: string): void => {\n this.readInsideBracketsThen(\"()\", token, () => {}, this._if_then);\n };\n\n private readonly _if_then = (token: string): void => {\n if (token.toUpperCase() === \"THEN\") {\n this.context.addBareNesting();\n this.reset_state();\n } else {\n this.reset_state(token);\n }\n };\n\n private readonly _module_or_procedure = (token: string): void => {\n if (token.toUpperCase() === \"PROCEDURE\") this._state = this._procedure;\n else this._module(token);\n };\n}\n/* oxlint-enable typescript/unbound-method */\n"]}
1
+ {"version":3,"file":"fortran.mjs","sourceRoot":"","sources":["../../../../../../src/package-checks/function-metrics/analyzer/readers/fortran.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Derived from terryyin/lizard 1.24.0.\n * Source: lizard_languages/fortran.py.\n * Upstream revision: 308b1c3efd8c1c69bcc3eb82deeaec64fd3662ec.\n * SPDX-License-Identifier: MIT\n * Modified: translated to the product-owned TypeScript analyzer.\n */\n\nimport type { FileInfoBuilder } from \"../analysis-context.ts\";\nimport type { TokenStream } from \"../contracts.ts\";\nimport {\n CodeReader,\n CodeStateMachine,\n isPythonWhitespace,\n type TokenFactory\n} from \"../shared/code-reader.ts\";\n\n/** Source mixin retained as a constructable class despite TypeScript's single inheritance. */\nexport class FortranCommentsMixin {\n public static get_comment_from_token(token: string): string | undefined {\n return token.startsWith(\"!\") ? token.slice(1) : undefined;\n }\n\n public static getCommentFromToken(token: string): string | undefined {\n return this.get_comment_from_token(token);\n }\n}\n\nexport class FortranReader extends CodeReader {\n public static override ext = [\"f70\", \"f90\", \"f95\", \"f03\", \"f08\", \"f\", \"for\", \"ftn\", \"fpp\"];\n public static override languageNames = [\"fortran\"];\n public static override controlFlowKeywords = new Set([\"IF\", \"DO\", \"if\", \"do\"]);\n public static override logicalOperators = new Set([\".AND.\", \".OR.\", \".and.\", \".or.\"]);\n public static override caseKeywords = new Set([\"CASE\", \"case\"]);\n public static override ternaryOperators = new Set<string>();\n public static readonly _blocks = [\n \"PROGRAM\",\n \"MODULE\",\n \"SUBMODULE\",\n \"SUBROUTINE\",\n \"FUNCTION\",\n \"TYPE\",\n \"INTERFACE\",\n \"BLOCK\",\n \"IF\",\n \"DO\",\n \"FORALL\",\n \"WHERE\",\n \"SELECT\",\n \"ASSOCIATE\"\n ] as const;\n public macro_disabled = false;\n\n public constructor(context: FileInfoBuilder) {\n super(context, FortranReader);\n this.parallelStates = [new FortranStates(context, this)];\n }\n\n public static override *generateTokens(\n sourceCode: string,\n addition = \"\",\n tokenFactory?: TokenFactory\n ): Generator<string> {\n const untilEnd = String.raw`(?:\\\\\\n|[^\\n])*`;\n const endings = FortranReader._blocks.map((block) => String.raw`END\\s*${block}`).join(\"|\");\n const sourceAddition = String.raw`(?i)//|#${untilEnd}|!${untilEnd}|^\\*${untilEnd}|\\.OR\\.|\\.AND\\.|ELSE\\s+IF|MODULE\\s+PROCEDURE|${endings}${addition}`;\n yield* CodeReader.generateTokens(sourceCode, sourceAddition, tokenFactory);\n }\n\n public *preprocess(tokens: TokenStream): Generator<string> {\n let macroDepth = 0;\n let newLine = true;\n for (let token of tokens) {\n if (newLine && (token[0]?.toUpperCase() === \"C\" || token[0] === \"*\")) {\n token = `!${token.slice(1)}`;\n }\n newLine = token === \"\\n\";\n\n const macro = /^#\\s*(\\w+)/u.exec(token)?.[1]?.toLowerCase();\n if (macro !== undefined) {\n if ([\"if\", \"ifdef\", \"ifndef\", \"elif\"].includes(macro)) this.context.addCondition();\n if (macroDepth > 0) {\n if ([\"if\", \"ifdef\", \"ifndef\"].includes(macro)) macroDepth += 1;\n else if (macro === \"endif\") macroDepth -= 1;\n } else if ([\"else\", \"elif\"].includes(macro)) {\n macroDepth += 1;\n }\n this.macro_disabled = macroDepth !== 0;\n } else if (!isPythonWhitespace(token) || token === \"\\n\") {\n yield token;\n }\n }\n }\n\n public override get_comment_from_token(token: string): string | undefined {\n return FortranCommentsMixin.get_comment_from_token(token);\n }\n}\n\n/* Source state callbacks retain their method identity; CodeStateMachine supplies the owning receiver. */\n/* oxlint-disable typescript/unbound-method */\nclass FortranStates extends CodeStateMachine {\n private readonly reader: FortranReader;\n private in_interface = false;\n public static readonly _ends = new RegExp(`END\\\\s*(?:${FortranReader._blocks.join(\"|\")})`, \"iu\");\n public static readonly IGNORE_NEXT_TOKENS = new Set([\"%\", \"::\", \"SAVE\", \"DATA\"]);\n public static readonly IGNORE_VAR_TOKENS = new Set([\n \"INTEGER\",\n \"REAL\",\n \"COMPLEX\",\n \"LOGICAL\",\n \"CHARACTER\"\n ]);\n public static readonly RESET_STATE_TOKENS = new Set([\"RECURSIVE\", \"ELEMENTAL\"]);\n public static readonly FUNCTION_NAME_TOKENS = new Set([\"SUBROUTINE\", \"FUNCTION\"]);\n public static readonly NESTING_KEYWORDS = new Set([\n \"FORALL\",\n \"WHERE\",\n \"SELECT\",\n \"INTERFACE\",\n \"ASSOCIATE\"\n ]);\n public static readonly PROCEDURE_TOKENS = new Set([\"PROCEDURE\", \"MODULE PROCEDURE\"]);\n\n public constructor(context: FileInfoBuilder, reader: FortranReader) {\n super(context);\n this.reader = reader;\n this.last_token = undefined;\n }\n\n public override consume(token: string): boolean {\n if (this.reader.macro_disabled) return false;\n\n // fortran.py defines its own `__call__`; unlike the shared base it keeps a\n // completed callback installed. Retain that reader-local source behavior.\n if (this.invokeCurrentState(token)) {\n this.next(this.saved_state);\n this.callback?.();\n }\n this.last_token = token;\n return this.to_exit;\n }\n\n public override _state_global(token: string): void {\n const upper = token.toUpperCase();\n if (FortranStates.IGNORE_NEXT_TOKENS.has(upper)) this._state = this._ignore_next;\n else if (FortranStates.IGNORE_VAR_TOKENS.has(upper)) {\n this._state = this._ignore_var;\n } else if (token === \"(\") {\n this.next(this._ignore_expr, token);\n } else if (FortranStates.RESET_STATE_TOKENS.has(upper)) {\n this.reset_state();\n } else if (FortranStates.FUNCTION_NAME_TOKENS.has(upper)) {\n this._state = this._function_name;\n } else if (upper === \"PROGRAM\") {\n this._state = this._namespace;\n } else if (upper === \"MODULE\") {\n this._state = this._module_or_procedure;\n } else if (upper === \"SUBMODULE\") {\n this._state = this._module;\n this._module(token);\n } else if (upper === \"TYPE\") {\n this._state = this._type;\n } else if (upper === \"IF\") {\n this._state = this._if;\n } else if (upper === \"BLOCK\") {\n this._state = this._ignore_if_paren;\n } else if (upper === \"DO\") {\n this._state = this._ignore_if_label;\n } else if (FortranStates.NESTING_KEYWORDS.has(upper)) {\n this.context.addBareNesting();\n if (upper === \"INTERFACE\") this.in_interface = true;\n } else if (upper === \"ELSE\") {\n this.context.popNesting();\n this.context.addBareNesting();\n } else if (upper.replaceAll(\" \", \"\") === \"ELSEIF\") {\n this.context.popNesting();\n if (upper === \"ELSEIF\") this.context.addCondition();\n this._state = this._if;\n } else if (upper === \"END\" || FortranStates._ends.test(token)) {\n if (upper.replaceAll(\" \", \"\").startsWith(\"ENDINTERFACE\")) this.in_interface = false;\n this.context.popNesting();\n }\n }\n\n private readonly reset_state = (token?: string): void => {\n this._state = this._state_global;\n if (token !== undefined) this._state_global(token);\n };\n\n private readonly _ignore_next = (_token: string): void => {\n this.reset_state();\n };\n\n private readonly _ignore_var = (token: string): void => {\n if (FortranStates.FUNCTION_NAME_TOKENS.has(token.toUpperCase())) this.reset_state(token);\n else this.reset_state();\n };\n\n private readonly _ignore_if_paren = (token: string): void => {\n if (token === \"(\") this.next(this._ignore_expr, token);\n else {\n this.context.addBareNesting();\n this.reset_state();\n }\n };\n\n private readonly _ignore_if_label = (token: string): void => {\n if (/^\\d+$/u.test(token)) this.reset_state();\n else {\n this.context.addBareNesting();\n this.reset_state(token);\n }\n };\n\n private readonly _ignore_expr = (token: string): void => {\n this.readInsideBracketsThen(\"()\", token, () => {}, this._state_global);\n };\n\n private readonly _function_name = (token: string): void => {\n this.context.restartNewFunction(token);\n this.context.addToLongFunctionName(\"(\");\n this._state = this._function_has_param;\n };\n\n private readonly _function_has_param = (token: string): void => {\n if (token === \"(\") this.next(this._function_params, token);\n else this._function(token);\n };\n\n private readonly _function_params = (token: string): void => {\n this.readInsideBracketsThen(\n \"()\",\n token,\n (parameterToken) => {\n if (!\"()\".includes(parameterToken)) this.context.parameter(parameterToken);\n },\n this._function\n );\n };\n\n private readonly _function = (token: string): void => {\n this.context.addToLongFunctionName(\" )\");\n this.context.addBareNesting();\n this.reset_state(token);\n };\n\n private readonly _module = (token: string): void => {\n const upper = token.toUpperCase();\n if (FortranStates.FUNCTION_NAME_TOKENS.has(upper)) this._state = this._function_name;\n else if (FortranStates.PROCEDURE_TOKENS.has(upper)) this._state = this._procedure;\n else this._namespace(token);\n };\n\n private readonly _procedure = (token: string): void => {\n this.context.restartNewFunction(token);\n this.context.addBareNesting();\n this.reset_state();\n };\n\n private readonly _type = (token: string): void => {\n if (token === \",\" || token === \"::\" || /^\\p{L}/u.test(token)) this._namespace(token);\n else this.reset_state(token);\n };\n\n private readonly _namespace = (token: string): void => {\n this.context.addNamespace(token);\n this.reset_state();\n };\n\n private readonly _if = (token: string): void => {\n if (token === \"(\") this.next(this._if_cond, token);\n else this.reset_state(token);\n };\n\n private readonly _if_cond = (token: string): void => {\n this.readInsideBracketsThen(\"()\", token, () => {}, this._if_then);\n };\n\n private readonly _if_then = (token: string): void => {\n if (token.toUpperCase() === \"THEN\") {\n this.context.addBareNesting();\n this.reset_state();\n } else {\n this.reset_state(token);\n }\n };\n\n private readonly _module_or_procedure = (token: string): void => {\n if (token.toUpperCase() === \"PROCEDURE\") this._state = this._procedure;\n else this._module(token);\n };\n}\n/* oxlint-enable typescript/unbound-method */\n"]}
@@ -30,7 +30,9 @@ class ObjCStates extends CLikeStates {
30
30
  this.next(this._typedef, token);
31
31
  }
32
32
  else if (token === "(") {
33
- this.next((currentToken) => this._state_dec(currentToken), token);
33
+ this.next((currentToken) => {
34
+ this._state_dec(currentToken);
35
+ }, token);
34
36
  }
35
37
  }
36
38
  _state_dec_to_imp(token) {
@@ -50,7 +52,9 @@ class ObjCStates extends CLikeStates {
50
52
  this.context.addToFunctionName(token);
51
53
  }
52
54
  else if (token === "{") {
53
- this.next((currentToken) => this._state_entering_imp(currentToken), "{");
55
+ this.next((currentToken) => {
56
+ this._state_entering_imp(currentToken);
57
+ }, "{");
54
58
  }
55
59
  else {
56
60
  this.next(this.globalState);
@@ -66,7 +70,9 @@ class ObjCStates extends CLikeStates {
66
70
  // Source ignores selector commas.
67
71
  }
68
72
  else if (token === "{") {
69
- this.next((currentToken) => this._state_entering_imp(currentToken), "{");
73
+ this.next((currentToken) => {
74
+ this._state_entering_imp(currentToken);
75
+ }, "{");
70
76
  }
71
77
  else {
72
78
  this.next(this._state_objc_dec_begin);
@@ -1 +1 @@
1
- {"version":3,"file":"objc.mjs","sourceRoot":"","sources":["../../../../../../src/package-checks/function-metrics/analyzer/readers/objc.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Derived from terryyin/lizard 1.24.0.\n * Source: lizard_languages/objc.py.\n * Upstream revision: 308b1c3efd8c1c69bcc3eb82deeaec64fd3662ec.\n * SPDX-License-Identifier: MIT\n * Modified: translated to TypeScript while retaining Objective-C's CLikeStates\n * declaration override, selector lifecycle and typedef suppression.\n */\n\nimport type { FileInfoBuilder } from \"../analysis-context.ts\";\nimport { CLikeNestingStackStates, CLikeReader, CLikeStates } from \"../shared/clike.ts\";\n\n/** Objective-C reader with source-compatible C-like and selector state fan-out. */\nexport class ObjCReader extends CLikeReader {\n public static override ext: readonly string[] = [\"m\", \"mm\"];\n public static override languageNames: readonly string[] = [\"objectivec\", \"objective-c\", \"objc\"];\n\n public constructor(context: FileInfoBuilder) {\n super(context);\n this.parallelStates = [new ObjCStates(context), new CLikeNestingStackStates(context)];\n }\n\n public fake_and_useless(): void {}\n\n public useless_and_fake(): void {}\n}\n\n/** Direct translation of lizard_languages.objc.ObjCStates. */\nclass ObjCStates extends CLikeStates {\n private _objc_param_paren_depth = 0;\n\n public override statemachine_clone(): ObjCStates {\n return new ObjCStates(this.context);\n }\n\n public override _state_global(token: string): void {\n super._state_global(token);\n if (token === \"typedef\") {\n this.next(this._typedef, token);\n } else if (token === \"(\") {\n this.next((currentToken) => this._state_dec(currentToken), token);\n }\n }\n\n protected override _state_dec_to_imp(token: string): void {\n if (token === \"+\" || token === \"-\") {\n this.next(this.globalState);\n return;\n }\n super._state_dec_to_imp(token);\n if (this.state !== this._state_imp) {\n this.next(this._state_objc_dec_begin);\n this.context.restartNewFunction(token);\n }\n }\n\n private readonly _state_objc_dec_begin = (token: string): void => {\n if (token === \":\") {\n this.next(this._state_objc_dec);\n this.context.addToFunctionName(token);\n } else if (token === \"{\") {\n this.next((currentToken) => this._state_entering_imp(currentToken), \"{\");\n } else {\n this.next(this.globalState);\n }\n };\n\n private readonly _state_objc_dec = (token: string): void => {\n if (token === \"(\") {\n this._objc_param_paren_depth = 0;\n this.next(this._state_objc_param_type);\n this.context.addToLongFunctionName(token);\n } else if (token === \",\") {\n // Source ignores selector commas.\n } else if (token === \"{\") {\n this.next((currentToken) => this._state_entering_imp(currentToken), \"{\");\n } else {\n this.next(this._state_objc_dec_begin);\n this.context.addToFunctionName(` ${token}`);\n }\n };\n\n private readonly _state_objc_param_type = (token: string): void => {\n if (token === \"(\") {\n this._objc_param_paren_depth += 1;\n } else if (token === \")\") {\n if (this._objc_param_paren_depth > 0) {\n this._objc_param_paren_depth -= 1;\n } else {\n this.next(this._state_objc_param);\n }\n }\n this.context.addToLongFunctionName(` ${token}`);\n };\n\n private readonly _state_objc_param = (_token: string): void => {\n this.next(this._state_objc_dec);\n };\n\n private readonly _typedef = (token: string): void => {\n this.readUntilThen(\";\", token, this.finishTypedef);\n };\n\n private readonly finishTypedef = (_token: string, _savedTokens: readonly string[]): void => {\n this.next(this.globalState);\n };\n}\n"]}
1
+ {"version":3,"file":"objc.mjs","sourceRoot":"","sources":["../../../../../../src/package-checks/function-metrics/analyzer/readers/objc.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Derived from terryyin/lizard 1.24.0.\n * Source: lizard_languages/objc.py.\n * Upstream revision: 308b1c3efd8c1c69bcc3eb82deeaec64fd3662ec.\n * SPDX-License-Identifier: MIT\n * Modified: translated to TypeScript while retaining Objective-C's CLikeStates\n * declaration override, selector lifecycle and typedef suppression.\n */\n\nimport type { FileInfoBuilder } from \"../analysis-context.ts\";\nimport { CLikeNestingStackStates, CLikeReader, CLikeStates } from \"../shared/clike.ts\";\n\n/** Objective-C reader with source-compatible C-like and selector state fan-out. */\nexport class ObjCReader extends CLikeReader {\n public static override ext: readonly string[] = [\"m\", \"mm\"];\n public static override languageNames: readonly string[] = [\"objectivec\", \"objective-c\", \"objc\"];\n\n public constructor(context: FileInfoBuilder) {\n super(context);\n this.parallelStates = [new ObjCStates(context), new CLikeNestingStackStates(context)];\n }\n\n public fake_and_useless(): void {}\n\n public useless_and_fake(): void {}\n}\n\n/** Direct translation of lizard_languages.objc.ObjCStates. */\nclass ObjCStates extends CLikeStates {\n private _objc_param_paren_depth = 0;\n\n public override statemachine_clone(): ObjCStates {\n return new ObjCStates(this.context);\n }\n\n public override _state_global(token: string): void {\n super._state_global(token);\n if (token === \"typedef\") {\n this.next(this._typedef, token);\n } else if (token === \"(\") {\n this.next((currentToken) => {\n this._state_dec(currentToken);\n }, token);\n }\n }\n\n protected override _state_dec_to_imp(token: string): void {\n if (token === \"+\" || token === \"-\") {\n this.next(this.globalState);\n return;\n }\n super._state_dec_to_imp(token);\n if (this.state !== this._state_imp) {\n this.next(this._state_objc_dec_begin);\n this.context.restartNewFunction(token);\n }\n }\n\n private readonly _state_objc_dec_begin = (token: string): void => {\n if (token === \":\") {\n this.next(this._state_objc_dec);\n this.context.addToFunctionName(token);\n } else if (token === \"{\") {\n this.next((currentToken) => {\n this._state_entering_imp(currentToken);\n }, \"{\");\n } else {\n this.next(this.globalState);\n }\n };\n\n private readonly _state_objc_dec = (token: string): void => {\n if (token === \"(\") {\n this._objc_param_paren_depth = 0;\n this.next(this._state_objc_param_type);\n this.context.addToLongFunctionName(token);\n } else if (token === \",\") {\n // Source ignores selector commas.\n } else if (token === \"{\") {\n this.next((currentToken) => {\n this._state_entering_imp(currentToken);\n }, \"{\");\n } else {\n this.next(this._state_objc_dec_begin);\n this.context.addToFunctionName(` ${token}`);\n }\n };\n\n private readonly _state_objc_param_type = (token: string): void => {\n if (token === \"(\") {\n this._objc_param_paren_depth += 1;\n } else if (token === \")\") {\n if (this._objc_param_paren_depth > 0) {\n this._objc_param_paren_depth -= 1;\n } else {\n this.next(this._state_objc_param);\n }\n }\n this.context.addToLongFunctionName(` ${token}`);\n };\n\n private readonly _state_objc_param = (_token: string): void => {\n this.next(this._state_objc_dec);\n };\n\n private readonly _typedef = (token: string): void => {\n this.readUntilThen(\";\", token, this.finishTypedef);\n };\n\n private readonly finishTypedef = (_token: string, _savedTokens: readonly string[]): void => {\n this.next(this.globalState);\n };\n}\n"]}
@@ -101,7 +101,7 @@ export class PHPLanguageStates extends CodeStateMachine {
101
101
  this._state = this._state_global;
102
102
  };
103
103
  _trait_declaration = (token) => {
104
- if (token && !isPythonWhitespace(token) && !["{", "("].includes(token)) {
104
+ if (token.length > 0 && !isPythonWhitespace(token) && !["{", "("].includes(token)) {
105
105
  this.trait_name = token;
106
106
  this.in_trait = true;
107
107
  this._state = this._state_global;
@@ -112,7 +112,7 @@ export class PHPLanguageStates extends CodeStateMachine {
112
112
  }
113
113
  };
114
114
  _class_declaration = (token) => {
115
- if (token &&
115
+ if (token.length > 0 &&
116
116
  !isPythonWhitespace(token) &&
117
117
  !["{", "(", "extends", "implements"].includes(token)) {
118
118
  this.class_name = token;
@@ -127,11 +127,11 @@ export class PHPLanguageStates extends CodeStateMachine {
127
127
  _function_name = (token) => {
128
128
  if (token && !isPythonWhitespace(token) && token !== "(") {
129
129
  const methodName = token;
130
- if (this.in_class && this.class_name) {
130
+ if (this.in_class && this.class_name !== undefined && this.class_name.length > 0) {
131
131
  this.function_name = `${this.class_name}::${methodName}`;
132
132
  this.short_function_name = methodName;
133
133
  }
134
- else if (this.in_trait && this.trait_name) {
134
+ else if (this.in_trait && this.trait_name !== undefined && this.trait_name.length > 0) {
135
135
  this.function_name = `${this.trait_name}::${methodName}`;
136
136
  this.short_function_name = methodName;
137
137
  }
@@ -149,8 +149,10 @@ export class PHPLanguageStates extends CodeStateMachine {
149
149
  this.function_name = `${this.trait_name}::(anonymous)`;
150
150
  }
151
151
  else {
152
- this.function_name = this.assignments.at(-1) || "(anonymous)";
153
- if (this.assignments.at(-1))
152
+ const assignment = this.assignments.at(-1);
153
+ this.function_name =
154
+ assignment !== undefined && assignment.length > 0 ? assignment : "(anonymous)";
155
+ if (assignment !== undefined && assignment.length > 0)
154
156
  this.assignments.pop();
155
157
  }
156
158
  this.bracket_level = 1;
@@ -163,7 +165,10 @@ export class PHPLanguageStates extends CodeStateMachine {
163
165
  if (token !== "(")
164
166
  return;
165
167
  this.bracket_level = 1;
166
- if (this.in_class && this.class_name && !this.is_function_declaration) {
168
+ if (this.in_class &&
169
+ this.class_name !== undefined &&
170
+ this.class_name.length > 0 &&
171
+ !this.is_function_declaration) {
167
172
  this.context.pushNewFunction(this.short_function_name);
168
173
  }
169
174
  else {