@eagleoutice/flowr 1.5.2 → 2.0.1

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 (570) hide show
  1. package/abstract-interpretation/handler/binop/binop.d.ts +3 -4
  2. package/abstract-interpretation/handler/binop/binop.js +4 -2
  3. package/abstract-interpretation/handler/binop/operators.d.ts +2 -2
  4. package/abstract-interpretation/handler/binop/operators.js +14 -28
  5. package/abstract-interpretation/processor.d.ts +3 -2
  6. package/abstract-interpretation/processor.js +2 -2
  7. package/benchmark/slicer.d.ts +101 -0
  8. package/benchmark/slicer.js +214 -0
  9. package/benchmark/stats/print.d.ts +7 -0
  10. package/benchmark/stats/print.js +151 -0
  11. package/benchmark/stats/stats.d.ts +42 -0
  12. package/benchmark/stats/stats.js +6 -0
  13. package/benchmark/stopwatch.d.ts +35 -0
  14. package/benchmark/stopwatch.js +79 -0
  15. package/benchmark/summarizer/data.d.ts +54 -0
  16. package/benchmark/summarizer/first-phase/input.d.ts +3 -0
  17. package/benchmark/summarizer/first-phase/input.js +76 -0
  18. package/benchmark/summarizer/first-phase/process.d.ts +11 -0
  19. package/benchmark/summarizer/first-phase/process.js +205 -0
  20. package/benchmark/summarizer/second-phase/graph.d.ts +2 -0
  21. package/benchmark/summarizer/second-phase/graph.js +54 -0
  22. package/benchmark/summarizer/second-phase/process.d.ts +6 -0
  23. package/benchmark/summarizer/second-phase/process.js +127 -0
  24. package/benchmark/summarizer/summarizer.d.ts +31 -0
  25. package/benchmark/summarizer/summarizer.js +58 -0
  26. package/cli/benchmark-app.d.ts +10 -0
  27. package/cli/benchmark-app.js +67 -0
  28. package/cli/benchmark-helper-app.d.ts +9 -0
  29. package/cli/benchmark-helper-app.js +69 -0
  30. package/cli/common/features.d.ts +3 -0
  31. package/cli/common/features.js +30 -0
  32. package/cli/common/options.d.ts +20 -0
  33. package/cli/common/options.js +85 -0
  34. package/cli/common/script.d.ts +21 -0
  35. package/cli/common/script.js +61 -0
  36. package/cli/common/scripts-info.d.ts +25 -0
  37. package/cli/common/scripts-info.js +83 -0
  38. package/cli/export-quads-app.d.ts +7 -0
  39. package/cli/export-quads-app.js +43 -0
  40. package/cli/flowr.d.ts +29 -0
  41. package/cli/flowr.js +141 -0
  42. package/cli/repl/commands/cfg.d.ts +3 -0
  43. package/cli/repl/commands/cfg.js +37 -0
  44. package/cli/repl/commands/commands.d.ts +13 -0
  45. package/cli/repl/commands/commands.js +142 -0
  46. package/cli/repl/commands/dataflow.d.ts +3 -0
  47. package/cli/repl/commands/dataflow.js +34 -0
  48. package/cli/repl/commands/execute.d.ts +4 -0
  49. package/cli/repl/commands/execute.js +27 -0
  50. package/cli/repl/commands/main.d.ts +39 -0
  51. package/cli/repl/commands/main.js +14 -0
  52. package/cli/repl/commands/normalize.d.ts +3 -0
  53. package/cli/repl/commands/normalize.js +34 -0
  54. package/cli/repl/commands/parse.d.ts +2 -0
  55. package/cli/repl/commands/parse.js +110 -0
  56. package/cli/repl/commands/quit.d.ts +2 -0
  57. package/cli/repl/commands/quit.js +15 -0
  58. package/cli/repl/commands/version.d.ts +16 -0
  59. package/cli/repl/commands/version.js +28 -0
  60. package/cli/repl/core.d.ts +36 -0
  61. package/cli/repl/core.js +174 -0
  62. package/cli/repl/execute.d.ts +28 -0
  63. package/cli/repl/execute.js +79 -0
  64. package/cli/repl/print-version.d.ts +2 -0
  65. package/cli/repl/print-version.js +10 -0
  66. package/cli/repl/prompt.d.ts +2 -0
  67. package/cli/repl/prompt.js +9 -0
  68. package/cli/repl/server/connection.d.ts +21 -0
  69. package/cli/repl/server/connection.js +218 -0
  70. package/cli/repl/server/messages/analysis.d.ts +72 -0
  71. package/cli/repl/server/messages/analysis.js +21 -0
  72. package/cli/repl/server/messages/error.d.ts +11 -0
  73. package/{core/input.js → cli/repl/server/messages/error.js} +1 -1
  74. package/cli/repl/server/messages/hello.d.ts +20 -0
  75. package/{core/output.js → cli/repl/server/messages/hello.js} +1 -1
  76. package/cli/repl/server/messages/messages.d.ts +35 -0
  77. package/cli/repl/server/messages/messages.js +40 -0
  78. package/cli/repl/server/messages/repl.d.ts +33 -0
  79. package/cli/repl/server/messages/repl.js +37 -0
  80. package/cli/repl/server/messages/slice.d.ts +26 -0
  81. package/cli/repl/server/messages/slice.js +37 -0
  82. package/cli/repl/server/net.d.ts +49 -0
  83. package/cli/repl/server/net.js +63 -0
  84. package/cli/repl/server/send.d.ts +4 -0
  85. package/cli/repl/server/send.js +18 -0
  86. package/cli/repl/server/server.d.ts +20 -0
  87. package/cli/repl/server/server.js +66 -0
  88. package/cli/repl/server/validate.d.ts +15 -0
  89. package/cli/repl/server/validate.js +34 -0
  90. package/cli/slicer-app.d.ts +11 -0
  91. package/cli/slicer-app.js +83 -0
  92. package/cli/statistics-app.d.ts +11 -0
  93. package/cli/statistics-app.js +99 -0
  94. package/cli/statistics-helper-app.d.ts +11 -0
  95. package/cli/statistics-helper-app.js +87 -0
  96. package/cli/summarizer-app.d.ts +18 -0
  97. package/cli/summarizer-app.js +66 -0
  98. package/core/pipeline-executor.d.ts +154 -0
  99. package/core/pipeline-executor.js +221 -0
  100. package/core/print/dataflow-printer.d.ts +3 -4
  101. package/core/print/dataflow-printer.js +5 -5
  102. package/core/print/normalize-printer.d.ts +1 -1
  103. package/core/print/normalize-printer.js +3 -3
  104. package/core/print/parse-printer.js +3 -3
  105. package/core/print/print.d.ts +13 -4
  106. package/core/print/print.js +13 -2
  107. package/core/print/slice-diff-ansi.d.ts +3 -2
  108. package/core/print/slice-diff-ansi.js +4 -4
  109. package/core/steps/all/core/00-parse.d.ts +28 -0
  110. package/core/steps/all/core/00-parse.js +24 -0
  111. package/core/steps/all/core/10-normalize.d.ts +29 -0
  112. package/core/steps/all/core/10-normalize.js +26 -0
  113. package/core/steps/all/core/20-dataflow.d.ts +27 -0
  114. package/core/steps/all/core/20-dataflow.js +29 -0
  115. package/core/steps/all/static-slicing/00-slice.d.ts +28 -0
  116. package/core/steps/all/static-slicing/00-slice.js +21 -0
  117. package/core/steps/all/static-slicing/10-reconstruct.d.ts +25 -0
  118. package/core/steps/all/static-slicing/10-reconstruct.js +21 -0
  119. package/core/steps/pipeline/create-pipeline.d.ts +6 -0
  120. package/core/steps/pipeline/create-pipeline.js +130 -0
  121. package/core/steps/pipeline/default-pipelines.d.ts +251 -0
  122. package/core/steps/pipeline/default-pipelines.js +18 -0
  123. package/core/steps/pipeline/invalid-pipeline-error.d.ts +6 -0
  124. package/core/steps/pipeline/invalid-pipeline-error.js +14 -0
  125. package/core/steps/pipeline/pipeline.d.ts +60 -0
  126. package/core/steps/pipeline/pipeline.js +28 -0
  127. package/core/steps/pipeline-step.d.ts +85 -0
  128. package/core/steps/pipeline-step.js +8 -0
  129. package/dataflow/environments/append.d.ts +4 -4
  130. package/dataflow/environments/append.js +4 -4
  131. package/dataflow/environments/built-in.d.ts +25 -0
  132. package/dataflow/environments/built-in.js +123 -0
  133. package/dataflow/environments/clone.d.ts +2 -0
  134. package/dataflow/environments/clone.js +23 -0
  135. package/dataflow/environments/{register.d.ts → define.d.ts} +3 -3
  136. package/dataflow/environments/define.js +51 -0
  137. package/dataflow/environments/diff.d.ts +6 -0
  138. package/dataflow/environments/diff.js +85 -0
  139. package/dataflow/environments/environment.d.ts +10 -43
  140. package/dataflow/environments/environment.js +32 -138
  141. package/dataflow/environments/identifier.d.ts +31 -0
  142. package/dataflow/environments/identifier.js +3 -0
  143. package/dataflow/environments/overwrite.d.ts +4 -4
  144. package/dataflow/environments/overwrite.js +9 -22
  145. package/dataflow/environments/resolve-by-name.d.ts +7 -6
  146. package/dataflow/environments/resolve-by-name.js +35 -19
  147. package/dataflow/environments/scoping.js +1 -4
  148. package/dataflow/extractor.d.ts +6 -6
  149. package/dataflow/extractor.js +47 -57
  150. package/dataflow/graph/diff.d.ts +24 -7
  151. package/dataflow/graph/diff.js +114 -74
  152. package/dataflow/graph/edge.d.ts +66 -20
  153. package/dataflow/graph/edge.js +73 -27
  154. package/dataflow/graph/graph.d.ts +53 -29
  155. package/dataflow/graph/graph.js +84 -89
  156. package/dataflow/graph/quads.js +2 -2
  157. package/dataflow/graph/vertex.d.ts +37 -34
  158. package/dataflow/info.d.ts +49 -0
  159. package/dataflow/info.js +29 -0
  160. package/dataflow/internal/linker.d.ts +11 -10
  161. package/dataflow/internal/linker.js +64 -90
  162. package/dataflow/internal/process/functions/call/argument/make-argument.d.ts +6 -0
  163. package/dataflow/internal/process/functions/call/argument/make-argument.js +31 -0
  164. package/dataflow/internal/process/functions/call/argument/unpack-argument.d.ts +3 -0
  165. package/dataflow/internal/process/functions/call/argument/unpack-argument.js +18 -0
  166. package/dataflow/internal/process/functions/call/built-in/built-in-access.d.ts +9 -0
  167. package/dataflow/internal/process/functions/call/built-in/built-in-access.js +82 -0
  168. package/dataflow/internal/process/functions/call/built-in/built-in-assignment.d.ts +29 -0
  169. package/dataflow/internal/process/functions/call/built-in/built-in-assignment.js +167 -0
  170. package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.d.ts +11 -0
  171. package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.js +165 -0
  172. package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.d.ts +7 -0
  173. package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.js +97 -0
  174. package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.d.ts +7 -0
  175. package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.js +165 -0
  176. package/dataflow/internal/process/functions/call/built-in/built-in-get.d.ts +7 -0
  177. package/dataflow/internal/process/functions/call/built-in/built-in-get.js +36 -0
  178. package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.d.ts +7 -0
  179. package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.js +100 -0
  180. package/dataflow/internal/process/functions/call/built-in/built-in-library.d.ts +7 -0
  181. package/dataflow/internal/process/functions/call/built-in/built-in-library.js +32 -0
  182. package/dataflow/internal/process/functions/call/built-in/built-in-logical-bin-op.d.ts +9 -0
  183. package/dataflow/internal/process/functions/call/built-in/built-in-logical-bin-op.js +35 -0
  184. package/dataflow/internal/process/functions/call/built-in/built-in-pipe.d.ts +7 -0
  185. package/dataflow/internal/process/functions/call/built-in/built-in-pipe.js +35 -0
  186. package/dataflow/internal/process/functions/call/built-in/built-in-quote.d.ts +9 -0
  187. package/dataflow/internal/process/functions/call/built-in/built-in-quote.js +29 -0
  188. package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.d.ts +7 -0
  189. package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.js +32 -0
  190. package/dataflow/internal/process/functions/call/built-in/built-in-replacement.d.ts +12 -0
  191. package/dataflow/internal/process/functions/call/built-in/built-in-replacement.js +45 -0
  192. package/dataflow/internal/process/functions/call/built-in/built-in-source.d.ts +11 -0
  193. package/dataflow/internal/process/functions/call/built-in/built-in-source.js +72 -0
  194. package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.d.ts +7 -0
  195. package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.js +61 -0
  196. package/dataflow/internal/process/functions/call/common.d.ts +35 -0
  197. package/dataflow/internal/process/functions/call/common.js +70 -0
  198. package/dataflow/internal/process/functions/call/default-call-handling.d.ts +5 -0
  199. package/dataflow/internal/process/functions/call/default-call-handling.js +15 -0
  200. package/dataflow/internal/process/functions/call/known-call-handling.d.ts +26 -0
  201. package/dataflow/internal/process/functions/call/known-call-handling.js +62 -0
  202. package/dataflow/internal/process/functions/call/named-call-handling.d.ts +7 -0
  203. package/dataflow/internal/process/functions/call/named-call-handling.js +53 -0
  204. package/dataflow/internal/process/functions/call/unnamed-call-handling.d.ts +6 -0
  205. package/dataflow/internal/process/functions/call/unnamed-call-handling.js +58 -0
  206. package/dataflow/internal/process/functions/process-argument.d.ts +9 -0
  207. package/dataflow/internal/process/functions/{argument.js → process-argument.js} +25 -20
  208. package/dataflow/internal/process/functions/{parameter.d.ts → process-parameter.d.ts} +3 -2
  209. package/dataflow/internal/process/functions/{parameter.js → process-parameter.js} +10 -13
  210. package/dataflow/internal/process/process-named-call.d.ts +6 -0
  211. package/dataflow/internal/process/process-named-call.js +17 -0
  212. package/dataflow/internal/process/process-symbol.d.ts +5 -0
  213. package/dataflow/internal/process/process-symbol.js +26 -0
  214. package/dataflow/internal/process/process-uninteresting-leaf.d.ts +4 -0
  215. package/dataflow/internal/process/process-uninteresting-leaf.js +9 -0
  216. package/dataflow/internal/process/process-value.d.ts +4 -0
  217. package/dataflow/internal/process/process-value.js +22 -0
  218. package/dataflow/logger.d.ts +1 -0
  219. package/dataflow/logger.js +6 -0
  220. package/dataflow/processor.d.ts +18 -13
  221. package/dataflow/processor.js +1 -1
  222. package/package.json +48 -85
  223. package/r-bridge/data/data.d.ts +603 -0
  224. package/r-bridge/data/data.js +753 -0
  225. package/r-bridge/data/get.d.ts +19 -0
  226. package/r-bridge/data/get.js +51 -0
  227. package/r-bridge/data/print.d.ts +1 -0
  228. package/r-bridge/data/print.js +58 -0
  229. package/r-bridge/data/types.d.ts +33 -0
  230. package/r-bridge/data/types.js +3 -0
  231. package/r-bridge/init.d.ts +3 -0
  232. package/r-bridge/init.js +22 -0
  233. package/r-bridge/lang-4.x/ast/model/collect.d.ts +2 -1
  234. package/r-bridge/lang-4.x/ast/model/collect.js +2 -2
  235. package/r-bridge/lang-4.x/ast/model/model.d.ts +26 -5
  236. package/r-bridge/lang-4.x/ast/model/nodes/r-access.d.ts +4 -3
  237. package/r-bridge/lang-4.x/ast/model/nodes/r-argument.d.ts +4 -0
  238. package/r-bridge/lang-4.x/ast/model/nodes/r-binary-op.d.ts +0 -17
  239. package/r-bridge/lang-4.x/ast/model/nodes/r-expression-list.d.ts +3 -1
  240. package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.d.ts +6 -4
  241. package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.js +2 -0
  242. package/r-bridge/lang-4.x/ast/model/nodes/r-function-definition.d.ts +2 -3
  243. package/r-bridge/lang-4.x/ast/model/nodes/r-number.d.ts +1 -1
  244. package/r-bridge/lang-4.x/ast/model/nodes/r-string.d.ts +1 -1
  245. package/r-bridge/lang-4.x/ast/model/nodes/r-symbol.js +2 -2
  246. package/r-bridge/lang-4.x/ast/model/nodes/r-unary-op.d.ts +0 -11
  247. package/r-bridge/lang-4.x/ast/model/operators.d.ts +6 -18
  248. package/r-bridge/lang-4.x/ast/model/operators.js +36 -48
  249. package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +19 -15
  250. package/r-bridge/lang-4.x/ast/model/processing/decorate.js +59 -54
  251. package/r-bridge/lang-4.x/ast/model/processing/node-id.d.ts +8 -0
  252. package/r-bridge/lang-4.x/ast/model/processing/node-id.js +18 -0
  253. package/r-bridge/lang-4.x/ast/model/processing/role.d.ts +2 -2
  254. package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.d.ts +28 -17
  255. package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.js +7 -34
  256. package/r-bridge/lang-4.x/ast/model/processing/visitor.js +5 -2
  257. package/r-bridge/lang-4.x/ast/model/type.js +13 -6
  258. package/r-bridge/lang-4.x/ast/parser/json/format.d.ts +4 -1
  259. package/r-bridge/lang-4.x/ast/parser/json/format.js +9 -2
  260. package/r-bridge/lang-4.x/ast/parser/json/parser.d.ts +5 -5
  261. package/r-bridge/lang-4.x/ast/parser/json/parser.js +22 -27
  262. package/r-bridge/lang-4.x/ast/parser/xml/input-format.d.ts +10 -7
  263. package/r-bridge/lang-4.x/ast/parser/xml/input-format.js +19 -11
  264. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then-else.d.ts → normalize-if-then-else.d.ts} +3 -3
  265. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then-else.js → normalize-if-then-else.js} +10 -13
  266. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then.d.ts → normalize-if-then.d.ts} +3 -3
  267. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then.js → normalize-if-then.js} +9 -12
  268. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/normalize-expression.d.ts +10 -0
  269. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/normalize-expression.js +64 -0
  270. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{argument.d.ts → normalize-argument.d.ts} +4 -4
  271. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{argument.js → normalize-argument.js} +13 -17
  272. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{call.d.ts → normalize-call.d.ts} +6 -4
  273. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{call.js → normalize-call.js} +24 -29
  274. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/normalize-definition.d.ts +12 -0
  275. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{definition.js → normalize-definition.js} +14 -19
  276. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{parameter.d.ts → normalize-parameter.d.ts} +4 -4
  277. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{parameter.js → normalize-parameter.js} +12 -16
  278. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-break.d.ts +4 -0
  279. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{break.js → normalize-break.js} +6 -8
  280. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-for.d.ts +4 -0
  281. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{for.js → normalize-for.js} +18 -20
  282. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-next.d.ts +4 -0
  283. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{next.js → normalize-next.js} +6 -8
  284. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-repeat.d.ts +13 -0
  285. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{repeat.js → normalize-repeat.js} +13 -16
  286. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-while.d.ts +4 -0
  287. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{while.js → normalize-while.js} +10 -12
  288. package/r-bridge/lang-4.x/ast/parser/xml/internal/{access.d.ts → normalize-access.d.ts} +4 -4
  289. package/r-bridge/lang-4.x/ast/parser/xml/internal/{access.js → normalize-access.js} +44 -45
  290. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/{binary.d.ts → normalize-binary.d.ts} +3 -3
  291. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/{binary.js → normalize-binary.js} +23 -73
  292. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/normalize-unary.d.ts +13 -0
  293. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/normalize-unary.js +47 -0
  294. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/normalize-comment.d.ts +11 -0
  295. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/{comment.js → normalize-comment.js} +5 -10
  296. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/normalize-line-directive.d.ts +13 -0
  297. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/{line-directive.js → normalize-line-directive.js} +7 -12
  298. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-delimiter.d.ts +3 -0
  299. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-delimiter.js +15 -0
  300. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-expressions.d.ts +10 -0
  301. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-expressions.js +182 -0
  302. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-root.d.ts +4 -0
  303. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-root.js +34 -0
  304. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-single-node.d.ts +13 -0
  305. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-single-node.js +59 -0
  306. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/normalize-number.d.ts +16 -0
  307. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{number.js → normalize-number.js} +12 -18
  308. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/normalize-string.d.ts +11 -0
  309. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{string.js → normalize-string.js} +7 -12
  310. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{symbol.d.ts → normalize-symbol.d.ts} +4 -4
  311. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{symbol.js → normalize-symbol.js} +12 -15
  312. package/r-bridge/lang-4.x/ast/parser/xml/{internal/meta.d.ts → normalize-meta.d.ts} +5 -3
  313. package/r-bridge/lang-4.x/ast/parser/xml/{internal/meta.js → normalize-meta.js} +8 -8
  314. package/r-bridge/lang-4.x/ast/parser/xml/{data.d.ts → normalizer-data.d.ts} +1 -5
  315. package/r-bridge/lang-4.x/ast/parser/xml/normalizer-data.js +3 -0
  316. package/r-bridge/lang-4.x/{values.d.ts → convert-values.d.ts} +2 -2
  317. package/r-bridge/lang-4.x/{values.js → convert-values.js} +5 -5
  318. package/r-bridge/retriever.d.ts +5 -5
  319. package/r-bridge/retriever.js +11 -24
  320. package/r-bridge/shell-executor.d.ts +0 -1
  321. package/r-bridge/shell-executor.js +7 -12
  322. package/r-bridge/shell.d.ts +14 -12
  323. package/r-bridge/shell.js +50 -45
  324. package/reconstruct/reconstruct.d.ts +4 -2
  325. package/reconstruct/reconstruct.js +193 -185
  326. package/slicing/criterion/collect-all.d.ts +4 -3
  327. package/slicing/criterion/collect-all.js +5 -1
  328. package/slicing/criterion/filters/all-variables.js +14 -22
  329. package/slicing/criterion/parse.d.ts +4 -2
  330. package/slicing/criterion/parse.js +13 -11
  331. package/slicing/static/fingerprint.d.ts +5 -0
  332. package/slicing/static/fingerprint.js +17 -0
  333. package/slicing/static/slice-call.d.ts +10 -0
  334. package/slicing/static/slice-call.js +86 -0
  335. package/slicing/static/slicer-types.d.ts +33 -0
  336. package/slicing/static/slicer-types.js +3 -0
  337. package/slicing/static/static-slicer.d.ts +6 -24
  338. package/slicing/static/static-slicer.js +54 -155
  339. package/slicing/static/visiting-queue.d.ts +23 -0
  340. package/slicing/static/visiting-queue.js +53 -0
  341. package/statistics/features/common-syntax-probability.d.ts +29 -0
  342. package/statistics/features/common-syntax-probability.js +159 -0
  343. package/statistics/features/feature.d.ts +182 -0
  344. package/statistics/features/feature.js +39 -0
  345. package/statistics/features/post-processing.d.ts +12 -0
  346. package/statistics/features/post-processing.js +21 -0
  347. package/statistics/features/supported/assignments/assignments.d.ts +12 -0
  348. package/statistics/features/supported/assignments/assignments.js +55 -0
  349. package/statistics/features/supported/assignments/post-process.d.ts +3 -0
  350. package/statistics/features/supported/assignments/post-process.js +124 -0
  351. package/statistics/features/supported/comments/comments.d.ts +18 -0
  352. package/statistics/features/supported/comments/comments.js +133 -0
  353. package/statistics/features/supported/comments/post-process.d.ts +3 -0
  354. package/statistics/features/supported/comments/post-process.js +49 -0
  355. package/statistics/features/supported/control-flow/control-flow.d.ts +17 -0
  356. package/statistics/features/supported/control-flow/control-flow.js +68 -0
  357. package/statistics/features/supported/control-flow/post-process.d.ts +3 -0
  358. package/statistics/features/supported/control-flow/post-process.js +64 -0
  359. package/statistics/features/supported/data-access/data-access.d.ts +15 -0
  360. package/statistics/features/supported/data-access/data-access.js +120 -0
  361. package/statistics/features/supported/data-access/post-process.d.ts +3 -0
  362. package/statistics/features/supported/data-access/post-process.js +106 -0
  363. package/statistics/features/supported/defined-functions/defined-functions.d.ts +34 -0
  364. package/statistics/features/supported/defined-functions/defined-functions.js +142 -0
  365. package/statistics/features/supported/defined-functions/post-process.d.ts +6 -0
  366. package/statistics/features/supported/defined-functions/post-process.js +169 -0
  367. package/statistics/features/supported/expression-list/expression-list.d.ts +9 -0
  368. package/statistics/features/supported/expression-list/expression-list.js +36 -0
  369. package/statistics/features/supported/expression-list/post-process.d.ts +3 -0
  370. package/statistics/features/supported/expression-list/post-process.js +43 -0
  371. package/statistics/features/supported/loops/loops.d.ts +20 -0
  372. package/statistics/features/supported/loops/loops.js +79 -0
  373. package/statistics/features/supported/loops/post-process.d.ts +3 -0
  374. package/statistics/features/supported/loops/post-process.js +71 -0
  375. package/statistics/features/supported/used-functions/post-process.d.ts +6 -0
  376. package/statistics/features/supported/used-functions/post-process.js +178 -0
  377. package/statistics/features/supported/used-functions/used-functions.d.ts +24 -0
  378. package/statistics/features/supported/used-functions/used-functions.js +97 -0
  379. package/statistics/features/supported/used-packages/post-process.d.ts +3 -0
  380. package/statistics/features/supported/used-packages/post-process.js +120 -0
  381. package/statistics/features/supported/used-packages/used-packages.d.ts +16 -0
  382. package/statistics/features/supported/used-packages/used-packages.js +130 -0
  383. package/statistics/features/supported/values/post-process.d.ts +3 -0
  384. package/statistics/features/supported/values/post-process.js +71 -0
  385. package/statistics/features/supported/values/values.d.ts +14 -0
  386. package/statistics/features/supported/values/values.js +101 -0
  387. package/statistics/features/supported/variables/post-process.d.ts +9 -0
  388. package/statistics/features/supported/variables/post-process.js +121 -0
  389. package/statistics/features/supported/variables/variables.d.ts +15 -0
  390. package/statistics/features/supported/variables/variables.js +60 -0
  391. package/statistics/meta-statistics.d.ts +33 -0
  392. package/statistics/meta-statistics.js +17 -0
  393. package/statistics/output/file-provider.d.ts +37 -0
  394. package/statistics/output/file-provider.js +97 -0
  395. package/statistics/output/print-stats.d.ts +17 -0
  396. package/statistics/output/print-stats.js +69 -0
  397. package/statistics/output/statistics-file.d.ts +37 -0
  398. package/statistics/output/statistics-file.js +69 -0
  399. package/statistics/statistics.d.ts +28 -0
  400. package/statistics/statistics.js +108 -0
  401. package/statistics/summarizer/auto-detect.d.ts +2 -0
  402. package/statistics/summarizer/auto-detect.js +32 -0
  403. package/statistics/summarizer/first-phase/process.d.ts +6 -0
  404. package/statistics/summarizer/first-phase/process.js +81 -0
  405. package/statistics/summarizer/post-process/clusterer.d.ts +26 -0
  406. package/statistics/summarizer/post-process/clusterer.js +43 -0
  407. package/statistics/summarizer/post-process/file-based-count.d.ts +17 -0
  408. package/statistics/summarizer/post-process/file-based-count.js +49 -0
  409. package/statistics/summarizer/post-process/histogram.d.ts +59 -0
  410. package/statistics/summarizer/post-process/histogram.js +128 -0
  411. package/statistics/summarizer/post-process/post-process-output.d.ts +16 -0
  412. package/statistics/summarizer/post-process/post-process-output.js +105 -0
  413. package/statistics/summarizer/second-phase/process.d.ts +11 -0
  414. package/statistics/summarizer/second-phase/process.js +116 -0
  415. package/statistics/summarizer/summarizer.d.ts +35 -0
  416. package/statistics/summarizer/summarizer.js +135 -0
  417. package/util/ansi.d.ts +2 -2
  418. package/util/ansi.js +2 -2
  419. package/util/arrays.d.ts +11 -1
  420. package/util/arrays.js +34 -1
  421. package/util/assert.d.ts +1 -0
  422. package/util/assert.js +5 -1
  423. package/util/cfg/cfg.d.ts +3 -2
  424. package/util/cfg/cfg.js +17 -28
  425. package/util/cfg/visitor.d.ts +1 -1
  426. package/util/defaultmap.d.ts +1 -1
  427. package/util/defaultmap.js +1 -1
  428. package/util/diff.d.ts +4 -4
  429. package/util/files.d.ts +2 -2
  430. package/util/files.js +1 -1
  431. package/util/log.d.ts +1 -0
  432. package/util/log.js +7 -1
  433. package/util/logic.d.ts +1 -0
  434. package/util/logic.js +3 -0
  435. package/util/mermaid/ast.d.ts +1 -1
  436. package/util/mermaid/ast.js +2 -2
  437. package/util/mermaid/cfg.d.ts +1 -1
  438. package/util/mermaid/dfg.d.ts +34 -8
  439. package/util/mermaid/dfg.js +99 -70
  440. package/util/mermaid/mermaid.d.ts +1 -1
  441. package/util/mermaid/mermaid.js +6 -7
  442. package/util/objects.js +4 -0
  443. package/util/quads.d.ts +3 -3
  444. package/util/quads.js +0 -1
  445. package/util/range.d.ts +27 -14
  446. package/util/range.js +31 -27
  447. package/util/version.js +1 -1
  448. package/core/index.d.ts +0 -4
  449. package/core/index.js +0 -23
  450. package/core/input.d.ts +0 -42
  451. package/core/output.d.ts +0 -15
  452. package/core/slicer.d.ts +0 -124
  453. package/core/slicer.js +0 -227
  454. package/core/steps.d.ts +0 -508
  455. package/core/steps.js +0 -100
  456. package/dataflow/environments/index.d.ts +0 -7
  457. package/dataflow/environments/index.js +0 -23
  458. package/dataflow/environments/register.js +0 -40
  459. package/dataflow/environments/scopes.d.ts +0 -6
  460. package/dataflow/environments/scopes.js +0 -6
  461. package/dataflow/graph/index.d.ts +0 -4
  462. package/dataflow/graph/index.js +0 -21
  463. package/dataflow/index.d.ts +0 -5
  464. package/dataflow/index.js +0 -24
  465. package/dataflow/internal/info.d.ts +0 -21
  466. package/dataflow/internal/info.js +0 -16
  467. package/dataflow/internal/process/access.d.ts +0 -4
  468. package/dataflow/internal/process/access.js +0 -53
  469. package/dataflow/internal/process/expression-list.d.ts +0 -8
  470. package/dataflow/internal/process/expression-list.js +0 -144
  471. package/dataflow/internal/process/functions/argument.d.ts +0 -8
  472. package/dataflow/internal/process/functions/exit-points.d.ts +0 -2
  473. package/dataflow/internal/process/functions/exit-points.js +0 -121
  474. package/dataflow/internal/process/functions/function-call.d.ts +0 -5
  475. package/dataflow/internal/process/functions/function-call.js +0 -105
  476. package/dataflow/internal/process/functions/function-definition.d.ts +0 -4
  477. package/dataflow/internal/process/functions/function-definition.js +0 -176
  478. package/dataflow/internal/process/functions/source.d.ts +0 -8
  479. package/dataflow/internal/process/functions/source.js +0 -81
  480. package/dataflow/internal/process/if-then-else.d.ts +0 -4
  481. package/dataflow/internal/process/if-then-else.js +0 -56
  482. package/dataflow/internal/process/loops/for-loop.d.ts +0 -4
  483. package/dataflow/internal/process/loops/for-loop.js +0 -54
  484. package/dataflow/internal/process/loops/repeat-loop.d.ts +0 -4
  485. package/dataflow/internal/process/loops/repeat-loop.js +0 -21
  486. package/dataflow/internal/process/loops/while-loop.d.ts +0 -4
  487. package/dataflow/internal/process/loops/while-loop.js +0 -31
  488. package/dataflow/internal/process/operators/assignment.d.ts +0 -4
  489. package/dataflow/internal/process/operators/assignment.js +0 -129
  490. package/dataflow/internal/process/operators/non-assignment-binary-op.d.ts +0 -4
  491. package/dataflow/internal/process/operators/non-assignment-binary-op.js +0 -25
  492. package/dataflow/internal/process/operators/pipe.d.ts +0 -4
  493. package/dataflow/internal/process/operators/pipe.js +0 -46
  494. package/dataflow/internal/process/operators/unary-op.d.ts +0 -4
  495. package/dataflow/internal/process/operators/unary-op.js +0 -10
  496. package/dataflow/internal/process/symbol.d.ts +0 -4
  497. package/dataflow/internal/process/symbol.js +0 -21
  498. package/dataflow/internal/process/uninteresting-leaf.d.ts +0 -3
  499. package/dataflow/internal/process/uninteresting-leaf.js +0 -9
  500. package/index.d.ts +0 -4
  501. package/index.js +0 -21
  502. package/r-bridge/index.d.ts +0 -11
  503. package/r-bridge/index.js +0 -28
  504. package/r-bridge/lang-4.x/ast/index.d.ts +0 -3
  505. package/r-bridge/lang-4.x/ast/index.js +0 -22
  506. package/r-bridge/lang-4.x/ast/model/index.d.ts +0 -6
  507. package/r-bridge/lang-4.x/ast/model/index.js +0 -23
  508. package/r-bridge/lang-4.x/ast/model/nodes/index.d.ts +0 -21
  509. package/r-bridge/lang-4.x/ast/model/nodes/index.js +0 -38
  510. package/r-bridge/lang-4.x/ast/model/nodes/info/index.d.ts +0 -13
  511. package/r-bridge/lang-4.x/ast/model/nodes/info/index.js +0 -27
  512. package/r-bridge/lang-4.x/ast/model/processing/index.d.ts +0 -5
  513. package/r-bridge/lang-4.x/ast/model/processing/index.js +0 -22
  514. package/r-bridge/lang-4.x/ast/parser/xml/hooks.d.ts +0 -292
  515. package/r-bridge/lang-4.x/ast/parser/xml/hooks.js +0 -136
  516. package/r-bridge/lang-4.x/ast/parser/xml/index.d.ts +0 -3
  517. package/r-bridge/lang-4.x/ast/parser/xml/index.js +0 -20
  518. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.d.ts +0 -2
  519. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.js +0 -19
  520. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.d.ts +0 -10
  521. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.js +0 -65
  522. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.d.ts +0 -1
  523. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.js +0 -18
  524. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/definition.d.ts +0 -12
  525. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.d.ts +0 -2
  526. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.js +0 -20
  527. package/r-bridge/lang-4.x/ast/parser/xml/internal/index.d.ts +0 -9
  528. package/r-bridge/lang-4.x/ast/parser/xml/internal/index.js +0 -26
  529. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/break.d.ts +0 -4
  530. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/for.d.ts +0 -4
  531. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.d.ts +0 -5
  532. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.js +0 -22
  533. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/next.d.ts +0 -4
  534. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/repeat.d.ts +0 -13
  535. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/while.d.ts +0 -4
  536. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.d.ts +0 -3
  537. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.js +0 -20
  538. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.d.ts +0 -6
  539. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.js +0 -24
  540. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.d.ts +0 -13
  541. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.js +0 -59
  542. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/comment.d.ts +0 -11
  543. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.d.ts +0 -1
  544. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.js +0 -18
  545. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/line-directive.d.ts +0 -12
  546. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.d.ts +0 -10
  547. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.js +0 -159
  548. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.d.ts +0 -3
  549. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.js +0 -20
  550. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.d.ts +0 -4
  551. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.js +0 -33
  552. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.d.ts +0 -13
  553. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.js +0 -64
  554. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.d.ts +0 -3
  555. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.js +0 -20
  556. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/number.d.ts +0 -13
  557. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/string.d.ts +0 -11
  558. package/r-bridge/lang-4.x/index.d.ts +0 -2
  559. package/r-bridge/lang-4.x/index.js +0 -19
  560. package/slicing/criterion/filters/index.d.ts +0 -1
  561. package/slicing/criterion/filters/index.js +0 -18
  562. package/slicing/criterion/index.d.ts +0 -3
  563. package/slicing/criterion/index.js +0 -20
  564. package/slicing/index.d.ts +0 -3
  565. package/slicing/index.js +0 -20
  566. package/slicing/static/index.d.ts +0 -1
  567. package/slicing/static/index.js +0 -18
  568. package/util/mermaid/index.d.ts +0 -3
  569. package/util/mermaid/index.js +0 -20
  570. /package/{r-bridge/lang-4.x/ast/parser/xml → benchmark/summarizer}/data.js +0 -0
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.summarizeCommonSyntaxTypeCounter = exports.appendCommonSyntaxTypeCounter = exports.updateCommonSyntaxTypeCounts = exports.emptyCommonSyntaxTypeCounts = void 0;
4
+ /**
5
+ * Defines the type of syntax constructs that we track (e.g., true, false, 0, 1, T, F, conditions...)
6
+ */
7
+ const numbers_1 = require("../../util/numbers");
8
+ const summarizer_1 = require("../../util/summarizer");
9
+ const convert_values_1 = require("../../r-bridge/lang-4.x/convert-values");
10
+ function emptyCommonSyntaxTypeCounts(init = () => 0n) {
11
+ return {
12
+ total: init(),
13
+ multiple: init(),
14
+ empty: init(),
15
+ withArgument: init(),
16
+ noValue: init(),
17
+ singleVar: {},
18
+ number: {},
19
+ integer: {},
20
+ complex: {},
21
+ string: {},
22
+ logical: {},
23
+ call: {},
24
+ unnamedCall: init(),
25
+ binOp: {},
26
+ unaryOp: {},
27
+ other: {}
28
+ };
29
+ }
30
+ exports.emptyCommonSyntaxTypeCounts = emptyCommonSyntaxTypeCounts;
31
+ function incrementEntry(map, key) {
32
+ map[key] = (map[key] ?? 0n) + 1n;
33
+ }
34
+ /**
35
+ * Updates the given counts based on the type of the given node.
36
+ */
37
+ function updateCommonSyntaxTypeCounts(current, ...nodes) {
38
+ current.total++;
39
+ if (nodes.length === 0) {
40
+ current.empty++;
41
+ return current;
42
+ }
43
+ else if (nodes.length > 1) {
44
+ current.multiple++;
45
+ return current;
46
+ }
47
+ let node = nodes[0];
48
+ if (node.type === "RArgument" /* RType.Argument */) {
49
+ if (node.name !== undefined) {
50
+ current.withArgument++;
51
+ }
52
+ if (node.value !== undefined) {
53
+ node = node.value;
54
+ }
55
+ else {
56
+ current.noValue++;
57
+ return current;
58
+ }
59
+ }
60
+ switch (node.type) {
61
+ case "RString" /* RType.String */:
62
+ incrementEntry(current.string, node.content.str);
63
+ break;
64
+ case "RSymbol" /* RType.Symbol */:
65
+ incrementEntry(current.singleVar, node.content);
66
+ break;
67
+ case "RLogical" /* RType.Logical */:
68
+ incrementEntry(current.logical, node.content ? convert_values_1.RTrue : convert_values_1.RFalse);
69
+ break;
70
+ case "RNumber" /* RType.Number */:
71
+ if (node.content.complexNumber) {
72
+ incrementEntry(current.complex, node.content.num);
73
+ }
74
+ else if (node.content.markedAsInt) {
75
+ incrementEntry(current.integer, node.content.num);
76
+ }
77
+ else {
78
+ incrementEntry(current.number, node.content.num);
79
+ }
80
+ break;
81
+ case "RFunctionCall" /* RType.FunctionCall */:
82
+ if (node.flavor === 'unnamed') {
83
+ current.unnamedCall++;
84
+ }
85
+ else {
86
+ incrementEntry(current.call, node.functionName.content);
87
+ }
88
+ break;
89
+ case "RBinaryOp" /* RType.BinaryOp */:
90
+ incrementEntry(current.binOp, node.operator);
91
+ break;
92
+ case "RUnaryOp" /* RType.UnaryOp */:
93
+ incrementEntry(current.unaryOp, node.operator);
94
+ break;
95
+ default:
96
+ // for space reasons, we do not record the full lexeme!
97
+ if (node.lexeme) {
98
+ incrementEntry(current.other, node.lexeme);
99
+ }
100
+ break;
101
+ }
102
+ return current;
103
+ }
104
+ exports.updateCommonSyntaxTypeCounts = updateCommonSyntaxTypeCounts;
105
+ function appendRecord(a, b) {
106
+ for (const [key, val] of Object.entries(b)) {
107
+ const get = a[key];
108
+ // we guard with array, to guard against methods like `toString` which are given in js
109
+ if (!get || !Array.isArray(get)) {
110
+ a[key] = [[(0, numbers_1.bigint2number)(val)]];
111
+ continue;
112
+ }
113
+ get.push([(0, numbers_1.bigint2number)(val)]);
114
+ }
115
+ }
116
+ function appendCommonSyntaxTypeCounter(a, b) {
117
+ a.total.push([(0, numbers_1.bigint2number)(b.total)]);
118
+ a.empty.push([(0, numbers_1.bigint2number)(b.empty)]);
119
+ a.multiple.push([(0, numbers_1.bigint2number)(b.multiple)]);
120
+ a.withArgument.push([(0, numbers_1.bigint2number)(b.withArgument)]);
121
+ a.noValue.push([(0, numbers_1.bigint2number)(b.noValue)]);
122
+ a.unnamedCall.push([(0, numbers_1.bigint2number)(b.unnamedCall)]);
123
+ appendRecord(a.singleVar, b.singleVar);
124
+ appendRecord(a.number, b.number);
125
+ appendRecord(a.integer, b.integer);
126
+ appendRecord(a.complex, b.complex);
127
+ appendRecord(a.string, b.string);
128
+ appendRecord(a.logical, b.logical);
129
+ appendRecord(a.call, b.call);
130
+ appendRecord(a.binOp, b.binOp);
131
+ appendRecord(a.unaryOp, b.unaryOp);
132
+ appendRecord(a.other, b.other);
133
+ }
134
+ exports.appendCommonSyntaxTypeCounter = appendCommonSyntaxTypeCounter;
135
+ function summarizeRecord(a) {
136
+ return Object.fromEntries(Object.entries(a).map(([key, val]) => [key, (0, summarizer_1.summarizeMeasurement)(val.flat(), val.length)]));
137
+ }
138
+ function summarizeCommonSyntaxTypeCounter(a) {
139
+ return {
140
+ total: (0, summarizer_1.summarizeMeasurement)(a.total.flat(), a.total.length),
141
+ empty: (0, summarizer_1.summarizeMeasurement)(a.empty.flat(), a.empty.length),
142
+ multiple: (0, summarizer_1.summarizeMeasurement)(a.multiple.flat(), a.multiple.length),
143
+ withArgument: (0, summarizer_1.summarizeMeasurement)(a.withArgument.flat(), a.withArgument.length),
144
+ noValue: (0, summarizer_1.summarizeMeasurement)(a.noValue.flat(), a.noValue.length),
145
+ unnamedCall: (0, summarizer_1.summarizeMeasurement)(a.unnamedCall.flat(), a.unnamedCall.length),
146
+ singleVar: summarizeRecord(a.singleVar),
147
+ number: summarizeRecord(a.number),
148
+ integer: summarizeRecord(a.integer),
149
+ complex: summarizeRecord(a.complex),
150
+ string: summarizeRecord(a.string),
151
+ logical: summarizeRecord(a.logical),
152
+ call: summarizeRecord(a.call),
153
+ binOp: summarizeRecord(a.binOp),
154
+ unaryOp: summarizeRecord(a.unaryOp),
155
+ other: summarizeRecord(a.other)
156
+ };
157
+ }
158
+ exports.summarizeCommonSyntaxTypeCounter = summarizeCommonSyntaxTypeCounter;
159
+ //# sourceMappingURL=common-syntax-probability.js.map
@@ -0,0 +1,182 @@
1
+ /**
2
+ * This module holds the definition of what a {@link Feature} that can be extracted from an R AST is.
3
+ *
4
+ * Furthermore, it contains the definition of all features that are known in {@link ALL_FEATURES}.
5
+ *
6
+ * @module
7
+ */
8
+ import type { EvalOptions } from 'xpath-ts2/src/parse-api';
9
+ import type { MetaStatistics } from '../meta-statistics';
10
+ import type { StatisticsSummarizerConfiguration } from '../summarizer/summarizer';
11
+ import type { MergeableRecord } from '../../util/objects';
12
+ import type { DataflowInformation } from '../../dataflow/info';
13
+ import type { NormalizedAst } from '../../r-bridge/lang-4.x/ast/model/processing/decorate';
14
+ /**
15
+ * Maps each sub-feature name to the number of occurrences of that sub-feature.
16
+ * Allows for one nesting level to denote hierarchical features.
17
+ * <p>
18
+ * Since we are writing to files {@link process}, we only count feature occurrences (some feature/parts are not written to file)
19
+ */
20
+ export type FeatureInfo = Record<string, unknown> & MergeableRecord;
21
+ /**
22
+ * The information and context that a {@link FeatureProcessor} may operate in.
23
+ */
24
+ export interface FeatureProcessorInput extends MergeableRecord {
25
+ /** The XML Document representing the parsed (non-normalized) R AST */
26
+ readonly parsedRAst: Document;
27
+ /** The R AST, after the normalization step */
28
+ readonly normalizedRAst: NormalizedAst;
29
+ /** The dataflow information for the given input */
30
+ readonly dataflow: DataflowInformation;
31
+ /** The filepath that the document originated from (if present, may be undefined if the input was provided as text). This can be relative to the common root directory of requests. */
32
+ readonly filepath: string | undefined;
33
+ }
34
+ /**
35
+ * A function that processes the analysis results of a document and returns the feature information.
36
+ */
37
+ export type FeatureProcessor<T extends FeatureInfo> = (existing: T, input: FeatureProcessorInput) => T;
38
+ /**
39
+ * A feature is something to be retrieved by the statistics.
40
+ *
41
+ * @typeParam T - The type of what should be collected for the feature
42
+ *
43
+ * @see ALL_FEATURES
44
+ */
45
+ export interface Feature<T extends FeatureInfo> {
46
+ /** A descriptive, yet unique name of the feature */
47
+ readonly name: string;
48
+ /** A description of the feature */
49
+ readonly description: string;
50
+ /** A function that retrieves the feature in the document appends it to the existing feature set (we could use a monoid :D), the filepath corresponds to the active file (if any) */
51
+ process: FeatureProcessor<T>;
52
+ /**
53
+ * If present, this feature allows to post-process the results of the feature extraction (for the summarizer).
54
+ * <p>
55
+ * The extraction can use the output path to write files to, and should return the final output.
56
+ *
57
+ * @param featureRoot - The root path to the feature directory which should contain all the files the feature can write to (already merged for every file processed)
58
+ * @param info - The feature statistic maps each file name/context encountered to the feature information as well as the meta statistics for the file
59
+ * @param outputPath - The path to write the output to (besides what is collected in the output and meta information)
60
+ * @param config - The configuration for the summarizer (e.g., to obtain the number of folders to skip for the feature root)
61
+ */
62
+ postProcess?: (featureRoot: string, info: Map<string, FeatureStatisticsWithMeta>, outputPath: string, config: StatisticsSummarizerConfiguration) => void;
63
+ /** Values to start the existing track from */
64
+ initialValue: T;
65
+ }
66
+ /**
67
+ * The source of truth for all features that are supported by the statistics.
68
+ */
69
+ export declare const ALL_FEATURES: {
70
+ readonly usedPackages: Feature<import("ts-essentials").Writable<{
71
+ library: number;
72
+ require: number;
73
+ loadNamespace: number;
74
+ requireNamespace: number;
75
+ attachNamespace: number;
76
+ withinApply: number;
77
+ '::': number;
78
+ ':::': number;
79
+ '<loadedByVariable>': number;
80
+ }>>;
81
+ readonly comments: Feature<import("ts-essentials").Writable<{
82
+ totalAmount: number;
83
+ roxygenComments: number;
84
+ import: number;
85
+ importFrom: number;
86
+ importMethodsFrom: number;
87
+ importClassesFrom: number;
88
+ useDynLib: number;
89
+ export: number;
90
+ exportClass: number;
91
+ exportMethod: number;
92
+ exportS3Method: number;
93
+ exportPattern: number;
94
+ }>>;
95
+ readonly definedFunctions: Feature<import("ts-essentials").Writable<{
96
+ total: number;
97
+ lambdasOnly: number;
98
+ assignedFunctions: number;
99
+ nestedFunctions: number;
100
+ recursive: number;
101
+ deepestNesting: number;
102
+ }>>;
103
+ readonly usedFunctions: Feature<import("ts-essentials").Writable<{
104
+ allFunctionCalls: number;
105
+ args: Record<number, bigint | import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>>;
106
+ nestedFunctionCalls: number;
107
+ deepestNesting: number;
108
+ unnamedCalls: number;
109
+ }>>;
110
+ readonly values: Feature<import("ts-essentials").Writable<{
111
+ allNumerics: number;
112
+ imaginaryNumbers: number;
113
+ integers: number;
114
+ floatHex: number;
115
+ logical: number;
116
+ specialConstants: number;
117
+ strings: number;
118
+ }>>;
119
+ readonly assignments: Feature<import("ts-essentials").Writable<{
120
+ assignmentOperator: Record<string, bigint>;
121
+ assigned: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
122
+ deepestNesting: number;
123
+ nestedOperatorAssignment: number;
124
+ }>>;
125
+ readonly loops: Feature<import("ts-essentials").Writable<{
126
+ forLoops: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
127
+ forLoopVar: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
128
+ forBody: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
129
+ whileLoops: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
130
+ whileBody: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
131
+ repeatLoops: bigint;
132
+ repeatBody: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
133
+ breakStatements: number;
134
+ nextStatements: number;
135
+ implicitLoops: number;
136
+ nestedExplicitLoops: number;
137
+ deepestExplicitNesting: number;
138
+ }>>;
139
+ readonly controlflow: Feature<import("ts-essentials").Writable<{
140
+ ifThen: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
141
+ thenBody: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
142
+ ifThenElse: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
143
+ elseBody: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
144
+ nestedIfThen: number;
145
+ nestedIfThenElse: number;
146
+ deepestNesting: number;
147
+ switchCase: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
148
+ }>>;
149
+ readonly dataAccess: Feature<import("ts-essentials").Writable<{
150
+ singleBracket: Record<number, bigint | import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>>;
151
+ doubleBracket: Record<number, bigint | import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>>;
152
+ chainedOrNestedAccess: number;
153
+ longestChain: number;
154
+ deepestNesting: number;
155
+ byName: number;
156
+ bySlot: number;
157
+ }>>;
158
+ readonly expressionList: Feature<import("ts-essentials").Writable<{
159
+ allExpressionLists: number;
160
+ deepestNesting: number;
161
+ }>>;
162
+ readonly variables: Feature<import("ts-essentials").Writable<{
163
+ numberOfVariableUses: number;
164
+ numberOfDefinitions: number;
165
+ numberOfRedefinitions: number;
166
+ unknownVariables: number;
167
+ }>>;
168
+ };
169
+ export type FeatureKey = keyof typeof ALL_FEATURES;
170
+ export type FeatureValue<K extends FeatureKey> = ReturnType<typeof ALL_FEATURES[K]['process']>;
171
+ /** If the user passes `all`, this should be every feature present in {@link ALL_FEATURES} (see {@link allFeatureNames})*/
172
+ export type FeatureSelection = Set<FeatureKey>;
173
+ export declare const allFeatureNames: Set<FeatureKey>;
174
+ export type FeatureStatistics = {
175
+ [K in FeatureKey]: FeatureInfo;
176
+ };
177
+ export type FeatureStatisticsWithMeta = FeatureStatistics & {
178
+ stats: MetaStatistics;
179
+ };
180
+ export interface Query {
181
+ select(options?: EvalOptions): Node[];
182
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ /**
3
+ * This module holds the definition of what a {@link Feature} that can be extracted from an R AST is.
4
+ *
5
+ * Furthermore, it contains the definition of all features that are known in {@link ALL_FEATURES}.
6
+ *
7
+ * @module
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.allFeatureNames = exports.ALL_FEATURES = void 0;
11
+ const used_packages_1 = require("./supported/used-packages/used-packages");
12
+ const comments_1 = require("./supported/comments/comments");
13
+ const defined_functions_1 = require("./supported/defined-functions/defined-functions");
14
+ const used_functions_1 = require("./supported/used-functions/used-functions");
15
+ const values_1 = require("./supported/values/values");
16
+ const assignments_1 = require("./supported/assignments/assignments");
17
+ const loops_1 = require("./supported/loops/loops");
18
+ const control_flow_1 = require("./supported/control-flow/control-flow");
19
+ const data_access_1 = require("./supported/data-access/data-access");
20
+ const expression_list_1 = require("./supported/expression-list/expression-list");
21
+ const variables_1 = require("./supported/variables/variables");
22
+ /**
23
+ * The source of truth for all features that are supported by the statistics.
24
+ */
25
+ exports.ALL_FEATURES = {
26
+ usedPackages: used_packages_1.usedPackages,
27
+ comments: comments_1.comments,
28
+ definedFunctions: defined_functions_1.definedFunctions,
29
+ usedFunctions: used_functions_1.usedFunctions,
30
+ values: values_1.values,
31
+ assignments: assignments_1.assignments,
32
+ loops: loops_1.loops,
33
+ controlflow: control_flow_1.controlflow,
34
+ dataAccess: data_access_1.dataAccess,
35
+ expressionList: expression_list_1.expressionList,
36
+ variables: variables_1.variables
37
+ };
38
+ exports.allFeatureNames = new Set(Object.keys(exports.ALL_FEATURES));
39
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1,12 @@
1
+ import type { StatisticsSummarizerConfiguration } from '../summarizer/summarizer';
2
+ import type { MergeableRecord } from '../../util/objects';
3
+ export interface SummarizedWithProject<Uniques = Set<string>, Count = number[]> {
4
+ uniqueProjects: Uniques;
5
+ uniqueFiles: Uniques;
6
+ count: Count;
7
+ }
8
+ export declare function emptySummarizedWithProject(): SummarizedWithProject;
9
+ export type ReplaceKeysForSummary<Source, Target> = MergeableRecord & {
10
+ [K in keyof Source]: Target;
11
+ };
12
+ export declare function recordFilePath(summarize: SummarizedWithProject, filepath: string, config: StatisticsSummarizerConfiguration): void;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.recordFilePath = exports.emptySummarizedWithProject = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ function emptySummarizedWithProject() {
9
+ return {
10
+ uniqueProjects: new Set(),
11
+ uniqueFiles: new Set(),
12
+ count: []
13
+ };
14
+ }
15
+ exports.emptySummarizedWithProject = emptySummarizedWithProject;
16
+ function recordFilePath(summarize, filepath, config) {
17
+ summarize.uniqueFiles.add(filepath);
18
+ summarize.uniqueProjects.add(filepath.split(path_1.default.sep)[config.projectSkip] ?? '');
19
+ }
20
+ exports.recordFilePath = recordFilePath;
21
+ //# sourceMappingURL=post-processing.js.map
@@ -0,0 +1,12 @@
1
+ import type { Feature } from '../../feature';
2
+ import type { Writable } from 'ts-essentials';
3
+ declare const initialAssignmentInfo: {
4
+ assignmentOperator: Record<string, bigint>;
5
+ assigned: import("../../common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
6
+ deepestNesting: number;
7
+ nestedOperatorAssignment: number;
8
+ };
9
+ export type AssignmentInfo = Writable<typeof initialAssignmentInfo>;
10
+ export declare const AssignmentOperators: ReadonlySet<string>;
11
+ export declare const assignments: Feature<AssignmentInfo>;
12
+ export {};
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assignments = exports.AssignmentOperators = void 0;
4
+ const common_syntax_probability_1 = require("../../common-syntax-probability");
5
+ const post_process_1 = require("./post-process");
6
+ const visitor_1 = require("../../../../r-bridge/lang-4.x/ast/model/processing/visitor");
7
+ const operators_1 = require("../../../../r-bridge/lang-4.x/ast/model/operators");
8
+ const initialAssignmentInfo = {
9
+ // operator to occurrence count
10
+ assignmentOperator: {},
11
+ assigned: (0, common_syntax_probability_1.emptyCommonSyntaxTypeCounts)(),
12
+ // find combinations like `` is most often used for functions?
13
+ deepestNesting: 0,
14
+ nestedOperatorAssignment: 0
15
+ };
16
+ exports.AssignmentOperators = new Set(operators_1.Operators.filter(op => operators_1.OperatorDatabase[op].usedAs === 'assignment'));
17
+ function visitAssignment(info, input) {
18
+ const assignmentStack = [];
19
+ (0, visitor_1.visitAst)(input.normalizedRAst.ast, node => {
20
+ if (node.type !== "RBinaryOp" /* RType.BinaryOp */ || !exports.AssignmentOperators.has(node.operator)) {
21
+ return;
22
+ }
23
+ if (assignmentStack.length > 0) {
24
+ info.nestedOperatorAssignment++;
25
+ info.deepestNesting = Math.max(info.deepestNesting, assignmentStack.length);
26
+ }
27
+ assignmentStack.push(node);
28
+ info.assignmentOperator[node.operator] = (info.assignmentOperator[node.operator] ?? 0n) + 1n;
29
+ switch (node.operator) {
30
+ case '->':
31
+ case '->>':
32
+ info.assigned = (0, common_syntax_probability_1.updateCommonSyntaxTypeCounts)(info.assigned, node.lhs);
33
+ break;
34
+ default:
35
+ info.assigned = (0, common_syntax_probability_1.updateCommonSyntaxTypeCounts)(info.assigned, node.rhs);
36
+ break;
37
+ }
38
+ }, node => {
39
+ // drop again :D
40
+ if (node.type === "RBinaryOp" /* RType.BinaryOp */ && node.flavor === 'assignment') {
41
+ assignmentStack.pop();
42
+ }
43
+ });
44
+ }
45
+ exports.assignments = {
46
+ name: 'Assignments',
47
+ description: 'all ways to assign something in R',
48
+ process(existing, input) {
49
+ visitAssignment(existing, input);
50
+ return existing;
51
+ },
52
+ initialValue: initialAssignmentInfo,
53
+ postProcess: post_process_1.postProcess
54
+ };
55
+ //# sourceMappingURL=assignments.js.map
@@ -0,0 +1,3 @@
1
+ import type { FeatureStatisticsWithMeta } from '../../feature';
2
+ import type { StatisticsSummarizerConfiguration } from '../../../summarizer/summarizer';
3
+ export declare function postProcess(featureRoot: string, info: Map<string, FeatureStatisticsWithMeta>, outputPath: string, config: StatisticsSummarizerConfiguration): void;
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.postProcess = void 0;
7
+ const common_syntax_probability_1 = require("../../common-syntax-probability");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const arrays_1 = require("../../../../util/arrays");
11
+ const assert_1 = require("../../../../util/assert");
12
+ const numbers_1 = require("../../../../util/numbers");
13
+ const summarizer_1 = require("../../../../util/summarizer");
14
+ function appendOperators(base, b, filepath, config) {
15
+ for (const [key, val] of Object.entries(b)) {
16
+ let get = base.assignmentOperator[key];
17
+ if (!get) {
18
+ get = { uniqueFiles: new Set(), uniqueProjects: new Set(), counts: [] };
19
+ base.assignmentOperator[key] = get;
20
+ }
21
+ const num = (0, numbers_1.bigint2number)(val);
22
+ get.counts.push([num]);
23
+ if (num > 0) {
24
+ get.uniqueFiles.add(filepath);
25
+ get.uniqueProjects.add(filepath.split(path_1.default.sep)[config.projectSkip] ?? '');
26
+ }
27
+ }
28
+ }
29
+ // returns a map that for each combination of operators found (like `<-,=`) returns the number of projects and files
30
+ // that use both of them
31
+ function retrieveUsageCombinationCounts(collected) {
32
+ const ops = Object.keys(collected.assignmentOperator);
33
+ if (ops.length < 1) {
34
+ return new Map();
35
+ }
36
+ const allCombinations = [...(0, arrays_1.getUniqueCombinationsOfSize)(ops, 1)];
37
+ const store = new Map();
38
+ for (const combs of allCombinations) {
39
+ if (combs.length === 1) {
40
+ // we can just copy the information
41
+ const { uniqueProjects, uniqueFiles } = collected.assignmentOperator[combs[0]];
42
+ store.set(combs[0], { uniqueProjects, uniqueFiles });
43
+ continue;
44
+ }
45
+ const existingKey = combs.slice(0, -1).join(',');
46
+ const existing = store.get(existingKey);
47
+ (0, assert_1.guard)(existing !== undefined, `Unable to retrieve cache for ${existingKey}`);
48
+ const newKey = combs.join(',');
49
+ const { uniqueProjects, uniqueFiles } = collected.assignmentOperator[combs[combs.length - 1]];
50
+ const newUniqueProjects = new Set([...existing.uniqueProjects].filter(x => uniqueProjects.has(x)));
51
+ const newUniqueFiles = new Set([...existing.uniqueFiles].filter(x => uniqueFiles.has(x)));
52
+ store.set(newKey, { uniqueProjects: newUniqueProjects, uniqueFiles: newUniqueFiles });
53
+ }
54
+ const result = new Map();
55
+ for (const [key, val] of store.entries()) {
56
+ result.set(key, { uniqueProjects: val.uniqueProjects.size, uniqueFiles: val.uniqueFiles.size });
57
+ }
58
+ return result;
59
+ }
60
+ function writeOperatorCombinationsUsageToCsv(collected, outputPath) {
61
+ // now to get all projects exhausted with _only_ a given subset (e.g., all projects only using '=')
62
+ const operators = retrieveUsageCombinationCounts(collected);
63
+ const out = fs_1.default.createWriteStream(path_1.default.join(outputPath, 'assignments-assigned-combinations.csv'));
64
+ out.write('assignment,unique-projects,unique-files\n');
65
+ for (const [key, val] of operators.entries()) {
66
+ out.write(`${JSON.stringify(key)},${val.uniqueProjects},${val.uniqueFiles}\n`);
67
+ }
68
+ out.close();
69
+ }
70
+ function writeAssignmentMetadataToCsv(outputPath, collected) {
71
+ const out = fs_1.default.createWriteStream(path_1.default.join(outputPath, 'assignments-meta.csv'));
72
+ out.write(`kind,${(0, summarizer_1.summarizedMeasurement2CsvHeader)()}\n`);
73
+ const summarizedDeepestNesting = (0, summarizer_1.summarizeMeasurement)(collected.deepestNesting.flat());
74
+ out.write(`deepest-nesting,${(0, summarizer_1.summarizedMeasurement2Csv)(summarizedDeepestNesting)}\n`);
75
+ const summarizedNestedOperatorAssignment = (0, summarizer_1.summarizeMeasurement)(collected.nestedOperatorAssignment.flat());
76
+ out.write(`nested-operator-assignment,${(0, summarizer_1.summarizedMeasurement2Csv)(summarizedNestedOperatorAssignment)}\n`);
77
+ out.close();
78
+ }
79
+ function writeAssignedTypesToCsv(outputPath, collected) {
80
+ const out = fs_1.default.createWriteStream(path_1.default.join(outputPath, 'assignments-assigned.csv'));
81
+ out.write(`kind,name,${(0, summarizer_1.summarizedMeasurement2CsvHeader)()}\n`);
82
+ for (const [entryName, values] of Object.entries(collected.assigned)) {
83
+ if (Array.isArray(values)) {
84
+ out.write(`${JSON.stringify(entryName)},"",${(0, summarizer_1.summarizedMeasurement2Csv)((0, summarizer_1.summarizeMeasurement)(values.flat()))}\n`);
85
+ }
86
+ else {
87
+ for (const [keyName, keyValue] of Object.entries(values)) {
88
+ out.write(`${JSON.stringify(entryName)},${JSON.stringify(keyName)},${(0, summarizer_1.summarizedMeasurement2Csv)((0, summarizer_1.summarizeMeasurement)(keyValue.flat()))}\n`);
89
+ }
90
+ }
91
+ }
92
+ out.close();
93
+ }
94
+ function writeAssignmentOperatorsToCsv(outputPath, collected) {
95
+ const fnOutStream = fs_1.default.createWriteStream(path_1.default.join(outputPath, 'assignments-assignment-operators.csv'));
96
+ fnOutStream.write(`assignment,unique-projects,unique-files,${(0, summarizer_1.summarizedMeasurement2CsvHeader)()}\n`);
97
+ for (const [key, val] of Object.entries(collected.assignmentOperator)) {
98
+ const { uniqueProjects, uniqueFiles, counts } = val;
99
+ const summarized = (0, summarizer_1.summarizedMeasurement2Csv)((0, summarizer_1.summarizeMeasurement)(counts.flat()));
100
+ fnOutStream.write(`${JSON.stringify(key)},${uniqueProjects.size},${uniqueFiles.size},${summarized}\n`);
101
+ }
102
+ fnOutStream.close();
103
+ }
104
+ function postProcess(featureRoot, info, outputPath, config) {
105
+ const collected = {
106
+ assignmentOperator: {},
107
+ assigned: (0, common_syntax_probability_1.emptyCommonSyntaxTypeCounts)(() => []),
108
+ deepestNesting: [],
109
+ nestedOperatorAssignment: []
110
+ };
111
+ for (const [filepath, data] of info.entries()) {
112
+ const assignmentInfo = data.assignments;
113
+ collected.deepestNesting.push([assignmentInfo.deepestNesting]);
114
+ collected.nestedOperatorAssignment.push([assignmentInfo.nestedOperatorAssignment]);
115
+ (0, common_syntax_probability_1.appendCommonSyntaxTypeCounter)(collected.assigned, assignmentInfo.assigned);
116
+ appendOperators(collected, assignmentInfo.assignmentOperator, filepath, config);
117
+ }
118
+ writeAssignmentOperatorsToCsv(outputPath, collected);
119
+ writeOperatorCombinationsUsageToCsv(collected, outputPath);
120
+ writeAssignmentMetadataToCsv(outputPath, collected);
121
+ writeAssignedTypesToCsv(outputPath, collected);
122
+ }
123
+ exports.postProcess = postProcess;
124
+ //# sourceMappingURL=post-process.js.map
@@ -0,0 +1,18 @@
1
+ import type { Feature } from '../../feature';
2
+ import type { Writable } from 'ts-essentials';
3
+ export declare const initialCommentInfo: {
4
+ totalAmount: number;
5
+ roxygenComments: number;
6
+ import: number;
7
+ importFrom: number;
8
+ importMethodsFrom: number;
9
+ importClassesFrom: number;
10
+ useDynLib: number;
11
+ export: number;
12
+ exportClass: number;
13
+ exportMethod: number;
14
+ exportS3Method: number;
15
+ exportPattern: number;
16
+ };
17
+ export type CommentInfo = Writable<typeof initialCommentInfo>;
18
+ export declare const comments: Feature<CommentInfo>;