@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,83 @@
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
+ const fs_1 = __importDefault(require("fs"));
7
+ const assert_1 = require("../util/assert");
8
+ const log_1 = require("../util/log");
9
+ const process_1 = require("../benchmark/summarizer/first-phase/process");
10
+ const slice_diff_ansi_1 = require("../core/print/slice-diff-ansi");
11
+ const json_1 = require("../util/json");
12
+ const script_1 = require("./common/script");
13
+ const slicer_1 = require("../benchmark/slicer");
14
+ const print_1 = require("../benchmark/stats/print");
15
+ const options = (0, script_1.processCommandLineArgs)('slicer', ['input', 'criterion'], {
16
+ subtitle: 'Slice R code based on a given slicing criterion',
17
+ examples: [
18
+ '{bold -c} {italic "12@product"} {italic test/testfiles/example.R}',
19
+ // why double escaped :C
20
+ '{bold -c} {italic "3@a"} {bold -r} {italic "a <- 3\\\\nb <- 4\\\\nprint(a)"} {bold --diff}',
21
+ '{bold -i} {italic example.R} {bold --stats} {bold --criterion} {italic "8:3;3:1;12@product"}',
22
+ '{bold --help}'
23
+ ]
24
+ });
25
+ async function getSlice() {
26
+ const slicer = new slicer_1.BenchmarkSlicer();
27
+ (0, assert_1.guard)(options.input !== undefined, 'input must be given');
28
+ (0, assert_1.guard)(options.criterion !== undefined, 'a slicing criterion must be given');
29
+ await slicer.init(options['input-is-text'] ? { request: 'text', content: options.input } : { request: 'file', content: options.input });
30
+ let mappedSlices = [];
31
+ let reconstruct = undefined;
32
+ const doSlicing = options.criterion.trim() !== '';
33
+ let slice = undefined;
34
+ if (doSlicing) {
35
+ const slices = options.criterion.split(';').map(c => c.trim());
36
+ try {
37
+ const { stats: { reconstructedCode, slicingCriteria }, slice: sliced } = await slicer.slice(...slices);
38
+ slice = sliced;
39
+ mappedSlices = slicingCriteria;
40
+ reconstruct = reconstructedCode;
41
+ if (options.output) {
42
+ console.log('Written reconstructed code to', options.output);
43
+ console.log(`Automatically selected ${reconstructedCode.autoSelected} statements`);
44
+ fs_1.default.writeFileSync(options.output, reconstructedCode.code);
45
+ }
46
+ else if (!options.api && !options.diff) {
47
+ console.log(reconstructedCode.code);
48
+ }
49
+ }
50
+ catch (e) {
51
+ log_1.log.error(`[Skipped] Error while processing ${options.input}: ${e.message} (${e.stack ?? ''})`);
52
+ }
53
+ }
54
+ const { stats, normalize, parse, tokenMap, dataflow } = slicer.finish();
55
+ const mappedCriteria = mappedSlices.map(c => ` ${c.criterion} => ${c.id} (${JSON.stringify(normalize.idMap.get(c.id)?.location)})`).join('\n');
56
+ log_1.log.info(`Mapped criteria:\n${mappedCriteria}`);
57
+ const sliceStatsAsString = (0, print_1.stats2string)(await (0, process_1.summarizeSlicerStats)(stats));
58
+ if (options.api) {
59
+ const output = {
60
+ tokenMap,
61
+ parse,
62
+ normalize,
63
+ dataflow,
64
+ ...(options.stats ? { stats } : {}),
65
+ ...(doSlicing ? { slice: mappedSlices, reconstruct } : {})
66
+ };
67
+ console.log(JSON.stringify(output, json_1.jsonReplacer));
68
+ }
69
+ else {
70
+ if (doSlicing && options.diff) {
71
+ const originalCode = options['input-is-text'] ? options.input : fs_1.default.readFileSync(options.input).toString();
72
+ console.log((0, slice_diff_ansi_1.sliceDiffAnsi)(slice.result, normalize, new Set(mappedSlices.map(({ id }) => id)), originalCode));
73
+ }
74
+ if (options.stats) {
75
+ console.log(sliceStatsAsString);
76
+ const filename = `${options.input}.stats`;
77
+ console.log(`Writing stats for ${options.input} to "${filename}"`);
78
+ fs_1.default.writeFileSync(filename, sliceStatsAsString);
79
+ }
80
+ }
81
+ }
82
+ void getSlice();
83
+ //# sourceMappingURL=slicer-app.js.map
@@ -0,0 +1,11 @@
1
+ export interface StatsCliOptions {
2
+ readonly verbose: boolean;
3
+ readonly help: boolean;
4
+ readonly limit: number | undefined;
5
+ readonly input: string[];
6
+ readonly 'dump-json': boolean;
7
+ readonly 'output-dir': string;
8
+ readonly 'no-ansi': boolean;
9
+ readonly parallel: number;
10
+ readonly features: string[];
11
+ }
@@ -0,0 +1,99 @@
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
+ const features_1 = require("./common/features");
7
+ const path_1 = __importDefault(require("path"));
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const log_1 = require("../util/log");
10
+ const ansi_1 = require("../util/ansi");
11
+ const parallel_1 = require("../util/parallel");
12
+ const files_1 = require("../util/files");
13
+ const json_1 = require("../util/json");
14
+ const script_1 = require("./common/script");
15
+ const statistics_file_1 = require("../statistics/output/statistics-file");
16
+ const options = (0, script_1.processCommandLineArgs)('stats', [], {
17
+ subtitle: 'Given input files or folders, this will collect usage statistics for the given features and write them to a file',
18
+ examples: [
19
+ '{bold -i} {italic example.R} {bold -i} {italic example2.R} {bold --output-dir} {italic "output-folder/"}',
20
+ '{italic "folder1/"} {bold --features} {italic all} {bold --output-dir} {italic "output-folder/"}',
21
+ '{bold --post-process} {italic "output-folder"} {bold --features} {italic assignments}',
22
+ '{bold --help}'
23
+ ]
24
+ });
25
+ if (options.input.length === 0) {
26
+ console.error('No input files given. Nothing to do. See \'--help\' if this is an error.');
27
+ process.exit(0);
28
+ }
29
+ if (options['no-ansi']) {
30
+ log_1.log.info('disabling ansi colors');
31
+ (0, ansi_1.setFormatter)(ansi_1.voidFormatter);
32
+ }
33
+ const processedFeatures = (0, features_1.validateFeatures)(options.features);
34
+ (0, statistics_file_1.initFileProvider)(options['output-dir']);
35
+ const testRegex = /[^/]*\/test/i;
36
+ const exampleRegex = /[^/]*\/example/i;
37
+ function getPrefixForFile(file) {
38
+ if (testRegex.test(file)) {
39
+ return 'test-';
40
+ }
41
+ else if (exampleRegex.test(file)) {
42
+ return 'example-';
43
+ }
44
+ else {
45
+ return '';
46
+ }
47
+ }
48
+ function getSuffixForFile(base, file) {
49
+ const subpath = path_1.default.relative(base, file);
50
+ return '--' + subpath.replace(/\//g, '/');
51
+ }
52
+ async function collectFileArguments(verboseAdd, dumpJson, features) {
53
+ const files = [];
54
+ let counter = 0;
55
+ let presentSteps = 5000;
56
+ let skipped = 0;
57
+ for await (const f of (0, files_1.allRFilesFrom)(options.input)) {
58
+ const outputDir = path_1.default.join(options['output-dir'], `${getPrefixForFile(f.content)}${getSuffixForFile(options.input.length === 1 ? options.input[0] : '', f.content)}`);
59
+ const target = (0, features_1.retrieveArchiveName)(outputDir);
60
+ if (fs_1.default.existsSync(target)) {
61
+ console.log(`Archive ${target} exists. Skip.`);
62
+ skipped++;
63
+ continue;
64
+ }
65
+ files.push(['--input', f.content, '--output-dir', outputDir, '--compress', '--root-dir', options.input.length === 1 ? options.input[0] : '""', ...verboseAdd, ...features, ...dumpJson]);
66
+ if (++counter % presentSteps === 0) {
67
+ console.log(`Collected ${counter} files`);
68
+ if (counter >= 10 * presentSteps) {
69
+ presentSteps *= 5;
70
+ }
71
+ }
72
+ }
73
+ console.log(`Total: ${counter} files (${skipped} skipped with archive existing)`);
74
+ return files;
75
+ }
76
+ async function getStats() {
77
+ console.log(`Processing features: ${JSON.stringify(processedFeatures, json_1.jsonReplacer)}`);
78
+ console.log(`Using ${options.parallel} parallel executors`);
79
+ const verboseAdd = options.verbose ? ['--verbose'] : [];
80
+ const features = [...processedFeatures].flatMap(s => ['--features', s]);
81
+ const dumpJson = options['dump-json'] ? ['--dump-json'] : [];
82
+ // we do not use the limit argument to be able to pick the limit randomly
83
+ const args = await collectFileArguments(verboseAdd, dumpJson, features);
84
+ if (options.limit) {
85
+ console.log('Shuffle...');
86
+ log_1.log.info(`limiting to ${options.limit} files`);
87
+ // shuffle and limit
88
+ args.sort(() => Math.random() - 0.5);
89
+ }
90
+ console.log('Prepare Pool...');
91
+ const limit = options.limit ?? args.length;
92
+ const pool = new parallel_1.LimitedThreadPool(`${__dirname}/statistics-helper-app`, args, limit, options.parallel);
93
+ console.log('Run Pool...');
94
+ await pool.run();
95
+ const stats = pool.getStats();
96
+ console.log(`Processed ${stats.counter} files, skipped ${stats.skipped.length} files due to errors`);
97
+ }
98
+ void getStats();
99
+ //# sourceMappingURL=statistics-app.js.map
@@ -0,0 +1,11 @@
1
+ export interface StatsHelperCliOptions {
2
+ readonly verbose: boolean;
3
+ readonly help: boolean;
4
+ readonly input: string;
5
+ readonly compress: boolean;
6
+ readonly 'dump-json': boolean;
7
+ readonly 'output-dir': string;
8
+ readonly 'root-dir': string;
9
+ readonly 'no-ansi': boolean;
10
+ readonly features: string[];
11
+ }
@@ -0,0 +1,87 @@
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
+ const fs_1 = __importDefault(require("fs"));
7
+ const features_1 = require("./common/features");
8
+ const log_1 = require("../util/log");
9
+ const ansi_1 = require("../util/ansi");
10
+ const tar_1 = require("tar");
11
+ const cfg_1 = require("../util/cfg/cfg");
12
+ const print_1 = require("../core/print/print");
13
+ const _00_parse_1 = require("../core/steps/all/core/00-parse");
14
+ const _10_normalize_1 = require("../core/steps/all/core/10-normalize");
15
+ const _20_dataflow_1 = require("../core/steps/all/core/20-dataflow");
16
+ const json_1 = require("../util/json");
17
+ const time_1 = require("../util/time");
18
+ const assert_1 = require("../util/assert");
19
+ const script_1 = require("./common/script");
20
+ const shell_1 = require("../r-bridge/shell");
21
+ const statistics_file_1 = require("../statistics/output/statistics-file");
22
+ const statistics_1 = require("../statistics/statistics");
23
+ const options = (0, script_1.processCommandLineArgs)('stats-helper', [], {
24
+ subtitle: 'Given a single input file, this will collect usage statistics for the given features and write them to a file',
25
+ examples: [
26
+ '{bold -i} {italic example.R} {bold -i} {italic example2.R} {bold --output-dir} {italic "output-folder/"}',
27
+ '{bold --help}'
28
+ ]
29
+ });
30
+ if (options['no-ansi']) {
31
+ log_1.log.info('disabling ansi colors');
32
+ (0, ansi_1.setFormatter)(ansi_1.voidFormatter);
33
+ }
34
+ let target = undefined;
35
+ if (options.compress) {
36
+ target = (0, features_1.retrieveArchiveName)(options['output-dir']);
37
+ if (fs_1.default.existsSync(target)) {
38
+ console.log(`Archive ${target} exists. Skip.`);
39
+ process.exit(0);
40
+ }
41
+ }
42
+ // assume correct
43
+ const processedFeatures = new Set(options.features);
44
+ const shell = new shell_1.RShell();
45
+ (0, statistics_file_1.initFileProvider)(options['output-dir']);
46
+ function compressFolder(folder, target) {
47
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
48
+ (0, tar_1.create)({
49
+ gzip: true,
50
+ file: target,
51
+ portable: true,
52
+ preservePaths: false
53
+ }, [folder]).then(() => {
54
+ // now, remove the folder
55
+ fs_1.default.rmSync(folder, { recursive: true, force: true });
56
+ }, () => {
57
+ console.log(`failed to compress ${folder}`);
58
+ });
59
+ }
60
+ async function getStatsForSingleFile() {
61
+ await shell.obtainTmpDir();
62
+ const stats = await (0, statistics_1.extractUsageStatistics)(shell, () => { }, processedFeatures, (0, statistics_1.staticRequests)({ request: 'file', content: options.input }), options['root-dir']);
63
+ // console.warn(`skipped ${stats.meta.failedRequests.length} requests due to errors (run with logs to get more info)`)
64
+ if (stats.outputs.size === 1) {
65
+ if (options['dump-json']) {
66
+ const [, output] = [...stats.outputs.entries()][0];
67
+ const cfg = (0, cfg_1.extractCFG)(output.normalize);
68
+ statistics_file_1.statisticsFileProvider.append('output-json', 'parse', await (0, print_1.printStepResult)(_00_parse_1.PARSE_WITH_R_SHELL_STEP, output.parse, 2 /* StepOutputFormat.Json */));
69
+ statistics_file_1.statisticsFileProvider.append('output-json', 'normalize', await (0, print_1.printStepResult)(_10_normalize_1.NORMALIZE, output.normalize, 2 /* StepOutputFormat.Json */));
70
+ statistics_file_1.statisticsFileProvider.append('output-json', 'dataflow', await (0, print_1.printStepResult)(_20_dataflow_1.STATIC_DATAFLOW, output.dataflow, 2 /* StepOutputFormat.Json */));
71
+ statistics_file_1.statisticsFileProvider.append('output-json', 'cfg', JSON.stringify(cfg, json_1.jsonReplacer));
72
+ }
73
+ statistics_file_1.statisticsFileProvider.append('meta', 'stats', JSON.stringify({ ...stats.meta, file: options.input }, json_1.jsonReplacer));
74
+ statistics_file_1.statisticsFileProvider.append('meta', 'features', JSON.stringify(stats.features, json_1.jsonReplacer));
75
+ }
76
+ else {
77
+ log_1.log.error(`expected exactly one output vs. ${stats.outputs.size}, got: ${JSON.stringify([...stats.outputs.keys()], json_1.jsonReplacer, 2)}`);
78
+ }
79
+ if (options.compress) {
80
+ (0, assert_1.guard)(target !== undefined, 'target must be defined given the compress option');
81
+ console.log(`[${(0, time_1.date2string)(new Date())}] Compressing ${options['output-dir']} to ${target}`);
82
+ compressFolder(options['output-dir'], target);
83
+ }
84
+ shell.close();
85
+ }
86
+ void getStatsForSingleFile();
87
+ //# sourceMappingURL=statistics-helper-app.js.map
@@ -0,0 +1,18 @@
1
+ /**
2
+ * The summarizer intends to post-process and summarize the results of
3
+ * * the benchmark tool, and
4
+ * * the statistics extraction.
5
+ *
6
+ * @module
7
+ */
8
+ export interface SummarizerCliOptions {
9
+ verbose: boolean;
10
+ help: boolean;
11
+ 'ultimate-only': boolean;
12
+ categorize: boolean;
13
+ input: string;
14
+ type: string;
15
+ output?: string;
16
+ graph?: boolean;
17
+ 'project-skip': number;
18
+ }
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ /**
3
+ * The summarizer intends to post-process and summarize the results of
4
+ * * the benchmark tool, and
5
+ * * the statistics extraction.
6
+ *
7
+ * @module
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const summarizer_1 = require("../benchmark/summarizer/summarizer");
11
+ const summarizer_2 = require("../statistics/summarizer/summarizer");
12
+ const auto_detect_1 = require("../statistics/summarizer/auto-detect");
13
+ const script_1 = require("./common/script");
14
+ const feature_1 = require("../statistics/features/feature");
15
+ const options = (0, script_1.processCommandLineArgs)('summarizer', ['input'], {
16
+ subtitle: 'Summarize and explain the results of the benchmark tool. Summarizes in two stages: first per-request, and then overall',
17
+ examples: [
18
+ '{italic benchmark.json}',
19
+ '{bold --help}'
20
+ ]
21
+ });
22
+ const outputBase = (options.output ?? options.input).replace(/\.json$|\/$/, '-summary');
23
+ console.log(`Writing outputs to base ${outputBase}`);
24
+ function getBenchmarkSummarizer() {
25
+ return new summarizer_1.BenchmarkSummarizer({
26
+ graphOutputPath: options.graph ? `${outputBase}-graph.json` : undefined,
27
+ inputPath: options.input,
28
+ intermediateOutputPath: outputBase,
29
+ outputPath: `${outputBase}-ultimate.json`,
30
+ logger: console.log
31
+ });
32
+ }
33
+ function getStatisticsSummarizer() {
34
+ return new summarizer_2.StatisticsSummarizer({
35
+ inputPath: options.input,
36
+ outputPath: `${outputBase}-final`,
37
+ intermediateOutputPath: `${outputBase}-intermediate/`,
38
+ projectSkip: options['project-skip'],
39
+ featuresToUse: feature_1.allFeatureNames,
40
+ logger: console.log
41
+ });
42
+ }
43
+ async function retrieveSummarizer() {
44
+ const type = options.type === 'auto' ? await (0, auto_detect_1.detectSummarizationType)(options.input) : options.type;
45
+ if (type === "benchmark" /* SummarizerType.Benchmark */) {
46
+ console.log('Summarizing benchmark');
47
+ return getBenchmarkSummarizer();
48
+ }
49
+ else if (type === "statistics" /* SummarizerType.Statistics */) {
50
+ console.log('Summarizing statistics');
51
+ return getStatisticsSummarizer();
52
+ }
53
+ else {
54
+ console.error('Unknown type', type, 'either give "benchmark" or "statistics"');
55
+ process.exit(1);
56
+ }
57
+ }
58
+ async function run() {
59
+ const summarizer = await retrieveSummarizer();
60
+ if (!options['ultimate-only']) {
61
+ await summarizer.preparationPhase(options.categorize);
62
+ }
63
+ await summarizer.summarizePhase();
64
+ }
65
+ void run();
66
+ //# sourceMappingURL=summarizer-app.js.map
@@ -0,0 +1,154 @@
1
+ import type { PipelineStepName } from './steps/pipeline-step';
2
+ import { PipelineStepStage } from './steps/pipeline-step';
3
+ import type { Pipeline, PipelineInput, PipelineOutput, PipelinePerRequestInput, PipelineStepOutputWithName } from './steps/pipeline/pipeline';
4
+ /**
5
+ * The pipeline executor allows to execute arbitrary {@link Pipeline|pipelines} in a step-by-step fashion.
6
+ * If you are not yet in the possession of a {@link Pipeline|pipeline}, you can use the {@link createPipeline} function
7
+ * to create one for yourself, based on the steps that you want to execute.
8
+ *
9
+ * Those steps are split into two phases or "stages" (which is the name that we will use in the following), represented
10
+ * by the {@link PipelineStepStage} type. These allow us to separate things that have to be done
11
+ * once per-file, e.g., actually parsing the AST, from those that we need to repeat 'once per request' (whatever this
12
+ * request may be). In other words, what can be cached between operations and what cannot.
13
+ *
14
+ * Furthermore, this executor follows an iterable fashion to be *as flexible as possible*
15
+ * (e.g., to be instrumented with measurements). So, you can use the pipeline executor like this:
16
+ *
17
+ * ```ts
18
+ * const stepper = new PipelineExecutor( ... )
19
+ * while(stepper.hasNextStep()) {
20
+ * await stepper.nextStep()
21
+ * }
22
+ *
23
+ * stepper.switchToRequestStage()
24
+ *
25
+ * while(stepper.hasNextStep()) {
26
+ * await stepper.nextStep()
27
+ * }
28
+ *
29
+ * const result = stepper.getResults()
30
+ * ```
31
+ *
32
+ * Of course, you might think, that this is rather overkill if you simply want to receive the result.
33
+ * And this is true. Therefore, if you do not want to perform some kind of magic in-between steps, you can use the
34
+ * **{@link allRemainingSteps}** function like this:
35
+ *
36
+ * ```ts
37
+ * const stepper = new PipelineExecutor( ... )
38
+ * const result = await stepper.allRemainingSteps()
39
+ * ```
40
+ *
41
+ * As the name suggests, you can combine this name with previous calls to {@link nextStep} to only execute the remaining
42
+ * steps in case, for whatever reason you only want to instrument some steps.
43
+ *
44
+ * By default, the {@link PipelineExecutor} does not offer an automatic way to repeat requests (mostly to prevent accidental errors).
45
+ * However, you can use the
46
+ * **{@link updateRequest}** function to reset the request steps and re-execute them for a new request. This allows something like the following:
47
+ *
48
+ * ```ts
49
+ * const stepper = new PipelineExecutor( ... )
50
+ * const result = await stepper.allRemainingSteps()
51
+ *
52
+ * stepper.updateRequest( ... )
53
+ * const result2 = await stepper.allRemainingSteps()
54
+ * ```
55
+ *
56
+ * **Example - Slicing With the Pipeline Executor**:
57
+ *
58
+ * Suppose, you want to... you know _slice_ a file (which was, at one point the origin of flowR), then you can
59
+ * either create a pipeline yourself with the respective steps, or you can use the {@link DEFAULT_SLICING_PIPELINE} (and friends).
60
+ * With it, slicing essentially becomes 'easy-as-pie':
61
+ *
62
+ * ```ts
63
+ * const slicer = new PipelineExecutor(DEFAULT_SLICING_PIPELINE, {
64
+ * shell: new RShell(),
65
+ * // of course, the criterion and request given here are just examples, you can use whatever you want to slice!
66
+ * criterion: ['2@b'],
67
+ * request: requestFromInput('b <- 3; x <- 5\ncat(b)'),
68
+ * })
69
+ * const result = await slicer.allRemainingSteps()
70
+ * ```
71
+ *
72
+ * But now, we want to slice for `x` in the first line as well! We can do that by adding:
73
+ *
74
+ * ```ts
75
+ * stepper.updateRequest({ criterion: ['1@x'] })
76
+ * const result2 = await stepper.allRemainingSteps()
77
+ * ```
78
+ *
79
+ * @note Even though using the pipeline executor introduces a small performance overhead, we consider
80
+ * it to be the baseline for performance benchmarking. It may very well be possible to squeeze out a little bit more by
81
+ * directly constructing the steps in the right order. However, we consider this to be negligible when compared with the time required
82
+ * for, for example, the dataflow analysis of larger files.
83
+ *
84
+ * @see PipelineExecutor#allRemainingSteps
85
+ * @see PipelineExecutor#nextStep
86
+ */
87
+ export declare class PipelineExecutor<P extends Pipeline> {
88
+ private readonly pipeline;
89
+ private readonly length;
90
+ private input;
91
+ private output;
92
+ private currentExecutionStage;
93
+ private stepCounter;
94
+ /**
95
+ * Construct a new pipeline executor.
96
+ * The required additional input is specified by the {@link IPipelineStep#requiredInput|required input configuration} of each step in the `pipeline`.
97
+ *
98
+ * @param pipeline - The {@link Pipeline} to execute, probably created with {@link createPipeline}.
99
+ * @param input - External {@link PipelineInput|configuration and input} required to execute the given pipeline.
100
+ */
101
+ constructor(pipeline: P, input: PipelineInput<P>);
102
+ /**
103
+ * Retrieve the current {@link PipelineStepStage|stage} the pipeline executor is in.
104
+ *
105
+ * @see currentExecutionStage
106
+ * @see switchToRequestStage
107
+ * @see PipelineStepStage
108
+ */
109
+ getCurrentStage(): PipelineStepStage;
110
+ /**
111
+ * Switch to the next {@link PipelineStepStage|stage} of the pipeline executor.
112
+ *
113
+ * This will fail if either a step change is currently not valid (as not all steps have been executed),
114
+ * or if there is no next stage (i.e., the pipeline is already completed or in the last stage).
115
+ *
116
+ * @see PipelineExecutor
117
+ * @see getCurrentStage
118
+ */
119
+ switchToRequestStage(): void;
120
+ getResults(intermediate?: false): PipelineOutput<P>;
121
+ getResults(intermediate: true): Partial<PipelineOutput<P>>;
122
+ getResults(intermediate: boolean): PipelineOutput<P>;
123
+ /**
124
+ * Returns true only if
125
+ * 1) there are more {@link IPipelineStep|steps} to-do for the current {@link PipelineStepStage|stage} and
126
+ * 2) we have not yet reached the end of the {@link Pipeline|pipeline}.
127
+ */
128
+ hasNextStep(): boolean;
129
+ /**
130
+ * Execute the next {@link IPipelineStep|step} and return the name of the {@link IPipelineStep|step} that was executed,
131
+ * so you can guard if the {@link IPipelineStep|step} differs from what you are interested in.
132
+ * Furthermore, it returns the {@link IPipelineStep|step's} result.
133
+ *
134
+ * @param expectedStepName - A safeguard if you want to retrieve the result.
135
+ * If given, it causes the execution to fail if the next step is not the one you expect.
136
+ *
137
+ * _Without `expectedStepName`, please refrain from accessing the result, as you have no safeguards if the pipeline changes._
138
+ */
139
+ nextStep<PassedName extends PipelineStepName>(expectedStepName?: PassedName): Promise<{
140
+ name: typeof expectedStepName extends undefined ? PipelineStepName : PassedName;
141
+ result: typeof expectedStepName extends undefined ? unknown : PipelineStepOutputWithName<P, PassedName>;
142
+ }>;
143
+ private _doNextStep;
144
+ /**
145
+ * This only makes sense if you have already run a request and want to re-use the per-file results for a new one.
146
+ * (or if for whatever reason, you did not pass information for the pipeline with the constructor).
147
+ *
148
+ * @param newRequestData - Data for the new request
149
+ */
150
+ updateRequest(newRequestData: PipelinePerRequestInput<P>): void;
151
+ allRemainingSteps(canSwitchStage: false): Promise<Partial<PipelineOutput<P>>>;
152
+ allRemainingSteps(canSwitchStage?: true): Promise<PipelineOutput<P>>;
153
+ allRemainingSteps(canSwitchStage: boolean): Promise<PipelineOutput<P>>;
154
+ }