@eagleoutice/flowr 1.5.1 → 2.0.0

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 +52 -47
  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
@@ -6,9 +6,10 @@
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
8
  exports.reconstructToCode = exports.autoSelectLibrary = exports.doNotAutoSelect = exports.reconstructLogger = void 0;
9
- const r_bridge_1 = require("../r-bridge");
10
9
  const log_1 = require("../util/log");
11
10
  const assert_1 = require("../util/assert");
11
+ const r_function_call_1 = require("../r-bridge/lang-4.x/ast/model/nodes/r-function-call");
12
+ const stateful_fold_1 = require("../r-bridge/lang-4.x/ast/model/processing/stateful-fold");
12
13
  function plain(text) {
13
14
  return [{ line: text, indent: 0 }];
14
15
  }
@@ -16,35 +17,42 @@ exports.reconstructLogger = log_1.log.getSubLogger({ name: 'reconstruct' });
16
17
  const getLexeme = (n) => n.info.fullLexeme ?? n.lexeme ?? '';
17
18
  const reconstructAsLeaf = (leaf, configuration) => {
18
19
  const selectionHasLeaf = configuration.selection.has(leaf.info.id) || configuration.autoSelectIf(leaf);
19
- if (selectionHasLeaf) {
20
- return foldToConst(leaf);
21
- }
22
- else {
23
- return [];
24
- }
25
- // reconstructLogger.trace(`reconstructAsLeaf: ${leaf.info.id} (${selectionHasLeaf ? 'y' : 'n'}): ${JSON.stringify(wouldBe)}`)
26
- // return selectionHasLeaf ? wouldBe : []
20
+ return selectionHasLeaf ? foldToConst(leaf) : [];
27
21
  };
28
22
  const foldToConst = (n) => plain(getLexeme(n));
29
23
  function indentBy(lines, indent) {
30
24
  return lines.map(({ line, indent: i }) => ({ line, indent: i + indent }));
31
25
  }
32
- function reconstructExpressionList(exprList, expressions, configuration) {
33
- if (isSelected(configuration, exprList)) {
34
- return plain(getLexeme(exprList));
35
- }
26
+ function reconstructExpressionList(exprList, _grouping, expressions, config) {
36
27
  const subExpressions = expressions.filter(e => e.length > 0);
37
28
  if (subExpressions.length === 0) {
38
- return [];
29
+ if (isSelected(config, exprList)) {
30
+ return plain('{}');
31
+ }
32
+ else {
33
+ return [];
34
+ }
39
35
  }
40
36
  else if (subExpressions.length === 1) {
41
- return subExpressions[0];
37
+ if (!isSelected(config, exprList)) {
38
+ return subExpressions[0];
39
+ }
40
+ const [fst] = subExpressions;
41
+ const g = exprList.grouping;
42
+ if (g && fst.length > 0) {
43
+ const start = g[0].content;
44
+ const end = g[1].content;
45
+ fst[0].line = `${start}${start === '{' ? ' ' : ''}${fst[0].line}`;
46
+ fst[fst.length - 1].line = `${fst[fst.length - 1].line}${end === '}' ? ' ' : ''}${end}`;
47
+ }
48
+ return fst;
42
49
  }
43
50
  else {
51
+ const g = exprList.grouping;
44
52
  return [
45
- { line: '{', indent: 0 },
53
+ ...(g ? plain(g[0].content) : plain('{')),
46
54
  ...indentBy(subExpressions.flat(), 1),
47
- { line: '}', indent: 0 }
55
+ ...(g ? plain(g[1].content) : plain('}'))
48
56
  ];
49
57
  }
50
58
  }
@@ -69,153 +77,161 @@ function reconstructUnaryOp(leaf, operand, configuration) {
69
77
  return foldToConst(leaf);
70
78
  }
71
79
  }
72
- function reconstructBinaryOp(n, lhs, rhs, configuration) {
73
- if (isSelected(configuration, n)) {
74
- return plain(getLexeme(n));
75
- }
80
+ function reconstructBinaryOp(n, lhs, rhs, config) {
76
81
  if (lhs.length === 0 && rhs.length === 0) {
77
- return [];
82
+ if (isSelected(config, n)) {
83
+ return plain(getLexeme(n));
84
+ }
85
+ else {
86
+ return [];
87
+ }
78
88
  }
79
- if (lhs.length === 0) { // if we have no lhs, only return rhs
89
+ else if (lhs.length === 0) { // if we have no lhs, only return rhs
80
90
  return rhs;
81
91
  }
82
- if (rhs.length === 0) { // if we have no rhs we have to keep everything to get the rhs
83
- return plain(getLexeme(n));
92
+ else if (rhs.length === 0) {
93
+ if (isSelected(config, n)) {
94
+ return plain(getLexeme(n));
95
+ }
96
+ else {
97
+ return lhs;
98
+ }
84
99
  }
85
100
  return reconstructRawBinaryOperator(lhs, n.type === "RPipe" /* RType.Pipe */ ? '|>' : n.operator, rhs);
86
101
  }
87
- function reconstructForLoop(loop, variable, vector, body, configuration) {
88
- if (isSelected(configuration, loop)) {
89
- return plain(getLexeme(loop));
102
+ function reconstructForLoop(loop, variable, vector, body, config) {
103
+ if (!isSelected(config, loop) && variable.length === 0 && vector.length === 0) {
104
+ return body;
90
105
  }
91
- if (body.length === 0 && variable.length === 0 && vector.length === 0) {
106
+ else if (body.length === 0 && variable.length === 0 && vector.length === 0) {
92
107
  return [];
93
108
  }
109
+ else if (body.length <= 1) {
110
+ // 'inline'
111
+ return [{
112
+ line: `for(${getLexeme(loop.variable)} in ${getLexeme(loop.vector)}) ${body.length === 0 ? '{}' : body[0].line}`,
113
+ indent: 0
114
+ }];
115
+ }
116
+ else if (body[0].line === '{' && body[body.length - 1].line === '}') {
117
+ // 'block'
118
+ return [
119
+ { line: `for(${getLexeme(loop.variable)} in ${getLexeme(loop.vector)}) {`, indent: 0 },
120
+ ...body.slice(1, body.length - 1),
121
+ { line: '}', indent: 0 }
122
+ ];
123
+ }
94
124
  else {
95
- if (body.length <= 1) {
96
- // 'inline'
97
- return [{ line: `for(${getLexeme(loop.variable)} in ${getLexeme(loop.vector)}) ${body.length === 0 ? '{}' : body[0].line}`, indent: 0 }];
98
- }
99
- else if (body[0].line === '{' && body[body.length - 1].line === '}') {
100
- // 'block'
101
- return [
102
- { line: `for(${getLexeme(loop.variable)} in ${getLexeme(loop.vector)}) {`, indent: 0 },
103
- ...body.slice(1, body.length - 1),
104
- { line: '}', indent: 0 }
105
- ];
106
- }
107
- else {
108
- // unknown
109
- return [
110
- { line: `for(${getLexeme(loop.variable)} in ${getLexeme(loop.vector)})`, indent: 0 },
111
- ...indentBy(body, 1)
112
- ];
113
- }
125
+ // unknown
126
+ return [
127
+ { line: `for(${getLexeme(loop.variable)} in ${getLexeme(loop.vector)})`, indent: 0 },
128
+ ...indentBy(body, 1)
129
+ ];
114
130
  }
115
131
  }
116
132
  function reconstructRepeatLoop(loop, body, configuration) {
117
- if (isSelected(configuration, loop)) {
118
- return plain(getLexeme(loop));
133
+ const sel = isSelected(configuration, loop);
134
+ if (!sel) {
135
+ return body;
119
136
  }
120
- else if (body.length === 0) {
121
- return [];
137
+ else if (body.length <= 1) {
138
+ // 'inline'
139
+ return [{ line: `repeat ${body.length === 0 ? '{}' : body[0].line}`, indent: 0 }];
140
+ }
141
+ else if (body[0].line === '{' && body[body.length - 1].line === '}') {
142
+ // 'block'
143
+ return [
144
+ { line: 'repeat {', indent: 0 },
145
+ ...body.slice(1, body.length - 1),
146
+ { line: '}', indent: 0 }
147
+ ];
122
148
  }
123
149
  else {
124
- if (body.length <= 1) {
125
- // 'inline'
126
- return [{ line: `repeat ${body.length === 0 ? '{}' : body[0].line}`, indent: 0 }];
150
+ // unknown
151
+ return [
152
+ { line: 'repeat', indent: 0 },
153
+ ...indentBy(body, 1)
154
+ ];
155
+ }
156
+ }
157
+ function reconstructIfThenElse(ifThenElse, condition, then, otherwise, config) {
158
+ otherwise ??= [];
159
+ if (then.length === 0 && otherwise.length === 0) {
160
+ if (isSelected(config, ifThenElse)) {
161
+ return [{ line: `if(${getLexeme(ifThenElse.condition)}) { }`, indent: 0 }];
127
162
  }
128
- else if (body[0].line === '{' && body[body.length - 1].line === '}') {
129
- // 'block'
163
+ else if (condition.length > 0) {
164
+ return condition;
165
+ }
166
+ else {
167
+ return [];
168
+ }
169
+ }
170
+ else if (otherwise.length === 0) {
171
+ if (isSelected(config, ifThenElse)) {
130
172
  return [
131
- { line: 'repeat {', indent: 0 },
132
- ...body.slice(1, body.length - 1),
133
- { line: '}', indent: 0 }
173
+ { line: `if(${getLexeme(ifThenElse.condition)}) ${then[0].line}`, indent: 0 },
174
+ ...indentBy(then.splice(1), 1)
134
175
  ];
135
176
  }
136
177
  else {
137
- // unknown
178
+ return then;
179
+ }
180
+ }
181
+ else if (then.length === 0) {
182
+ if (isSelected(config, ifThenElse)) {
138
183
  return [
139
- { line: 'repeat', indent: 0 },
140
- ...indentBy(body, 1)
184
+ { line: `if(${getLexeme(ifThenElse.condition)}) { } else ${otherwise[0].line}`, indent: 0 },
185
+ ...indentBy(otherwise.splice(1), 1)
141
186
  ];
142
187
  }
143
- }
144
- }
145
- function removeExpressionListWrap(code) {
146
- if (code.length > 0 && code[0].line === '{' && code[code.length - 1].line === '}') {
147
- return indentBy(code.slice(1, code.length - 1), -1);
188
+ else {
189
+ return otherwise;
190
+ }
148
191
  }
149
192
  else {
150
- return code;
193
+ const thenRemainder = indentBy(then.slice(1), 1);
194
+ if (thenRemainder.length > 0) {
195
+ if (!thenRemainder[thenRemainder.length - 1].line.trim().endsWith('else')) {
196
+ thenRemainder[thenRemainder.length - 1].line += ' else ';
197
+ }
198
+ }
199
+ return [
200
+ { line: `if(${getLexeme(ifThenElse.condition)}) ${then[0].line} ${then.length === 1 ? 'else' : ''}`, indent: 0 },
201
+ ...thenRemainder,
202
+ { line: `${otherwise[0].line}`, indent: 0 },
203
+ ...indentBy(otherwise.splice(1), 1)
204
+ ];
151
205
  }
152
206
  }
153
- function reconstructIfThenElse(ifThenElse, condition, when, otherwise, configuration) {
154
- if (isSelected(configuration, ifThenElse)) {
155
- return plain(getLexeme(ifThenElse));
207
+ function reconstructWhileLoop(loop, condition, body, configuration) {
208
+ const sel = isSelected(configuration, loop);
209
+ if (!sel && condition.length === 0) {
210
+ return body;
156
211
  }
157
- otherwise ??= [];
158
- if (condition.length === 0 && when.length === 0 && otherwise.length === 0) {
212
+ else if (body.length === 0 && condition.length === 0) {
159
213
  return [];
160
214
  }
161
- if (otherwise.length === 0 && when.length === 0) {
162
- return [
163
- { line: `if(${getLexeme(ifThenElse.condition)}) { }`, indent: 0 }
164
- ];
165
- }
166
- else if (otherwise.length === 0) {
167
- return [
168
- { line: `if(${getLexeme(ifThenElse.condition)}) {`, indent: 0 },
169
- ...indentBy(removeExpressionListWrap(when), 1),
170
- { line: '}', indent: 0 }
171
- ];
215
+ else if (body.length <= 1) {
216
+ // 'inline'
217
+ return [{ line: `while(${getLexeme(loop.condition)}) ${body.length === 0 ? '{}' : body[0].line}`, indent: 0 }];
172
218
  }
173
- else if (when.length === 0) {
219
+ else if (body[0].line === '{' && body[body.length - 1].line === '}') {
220
+ // 'block'
174
221
  return [
175
- { line: `if(${getLexeme(ifThenElse.condition)}) { } else {`, indent: 0 },
176
- ...indentBy(removeExpressionListWrap(otherwise), 1),
222
+ { line: `while(${getLexeme(loop.condition)}) {`, indent: 0 },
223
+ ...body.slice(1, body.length - 1),
177
224
  { line: '}', indent: 0 }
178
225
  ];
179
226
  }
180
227
  else {
228
+ // unknown
181
229
  return [
182
- { line: `if(${getLexeme(ifThenElse.condition)}) {`, indent: 0 },
183
- ...indentBy(removeExpressionListWrap(when), 1),
184
- { line: '} else {', indent: 0 },
185
- ...indentBy(removeExpressionListWrap(otherwise), 1),
186
- { line: '}', indent: 0 }
230
+ { line: `while(${getLexeme(loop.condition)})`, indent: 0 },
231
+ ...indentBy(body, 1)
187
232
  ];
188
233
  }
189
234
  }
190
- function reconstructWhileLoop(loop, condition, body, configuration) {
191
- if (isSelected(configuration, loop)) {
192
- return plain(getLexeme(loop));
193
- }
194
- if (body.length === 0 && condition.length === 0) {
195
- return [];
196
- }
197
- else {
198
- if (body.length <= 1) {
199
- // 'inline'
200
- return [{ line: `while(${getLexeme(loop.condition)}) ${body.length === 0 ? '{}' : body[0].line}`, indent: 0 }];
201
- }
202
- else if (body[0].line === '{' && body[body.length - 1].line === '}') {
203
- // 'block'
204
- return [
205
- { line: `while(${getLexeme(loop.condition)}) {`, indent: 0 },
206
- ...body.slice(1, body.length - 1),
207
- { line: '}', indent: 0 }
208
- ];
209
- }
210
- else {
211
- // unknown
212
- return [
213
- { line: `while(${getLexeme(loop.condition)})`, indent: 0 },
214
- ...indentBy(body, 1)
215
- ];
216
- }
217
- }
218
- }
219
235
  function reconstructParameters(parameters) {
220
236
  // const baseParameters = parameters.flatMap(p => plain(getLexeme(p)))
221
237
  return parameters.map(p => {
@@ -227,24 +243,19 @@ function reconstructParameters(parameters) {
227
243
  }
228
244
  });
229
245
  }
230
- function reconstructFoldAccess(node, accessed, access, configuration) {
231
- if (isSelected(configuration, node)) {
232
- return plain(getLexeme(node));
233
- }
246
+ function isNotEmptyArgument(a) {
247
+ return a !== r_function_call_1.EmptyArgument;
248
+ }
249
+ function reconstructFoldAccess(node, accessed, access) {
234
250
  if (accessed.length === 0) {
235
- if (typeof access === 'string') {
236
- return [];
237
- }
238
- else {
239
- return access.filter(assert_1.isNotNull).flat();
240
- }
251
+ return access.filter(isNotEmptyArgument).flat();
252
+ }
253
+ else if (access.every(a => a === r_function_call_1.EmptyArgument || a.length === 0)) {
254
+ return accessed;
241
255
  }
242
256
  return plain(getLexeme(node));
243
257
  }
244
- function reconstructArgument(argument, name, value, configuration) {
245
- if (isSelected(configuration, argument)) {
246
- return plain(getLexeme(argument));
247
- }
258
+ function reconstructArgument(argument, name, value) {
248
259
  if (argument.name !== undefined && name !== undefined && name.length > 0) {
249
260
  return plain(`${getLexeme(argument.name)}=${argument.value ? getLexeme(argument.value) : ''}`);
250
261
  }
@@ -252,9 +263,9 @@ function reconstructArgument(argument, name, value, configuration) {
252
263
  return value ?? [];
253
264
  }
254
265
  }
255
- function reconstructParameter(parameter, name, value, configuration) {
256
- if (isSelected(configuration, parameter)) {
257
- return plain(getLexeme(parameter));
266
+ function reconstructParameter(parameter, name, defaultValue, configuration) {
267
+ if (!isSelected(configuration, parameter)) {
268
+ return [];
258
269
  }
259
270
  if (parameter.defaultValue !== undefined && name.length > 0) {
260
271
  return plain(`${getLexeme(parameter.name)}=${getLexeme(parameter.defaultValue)}`);
@@ -266,48 +277,45 @@ function reconstructParameter(parameter, name, value, configuration) {
266
277
  return name;
267
278
  }
268
279
  }
269
- function reconstructFunctionDefinition(definition, functionParameters, body, configuration) {
280
+ function reconstructFunctionDefinition(definition, functionParameters, body, config) {
270
281
  // if a definition is not selected, we only use the body - slicing will always select the definition
271
- if (!isSelected(configuration, definition) && functionParameters.every(p => p.length === 0)) {
272
- return body;
282
+ if (functionParameters.every(p => p.length === 0)) {
283
+ const empty = body === undefined || body.length === 0;
284
+ const selected = isSelected(config, definition);
285
+ if (empty && selected) { // give function stub
286
+ return plain(`function(${reconstructParameters(definition.parameters).join(', ')}) { }`);
287
+ }
288
+ else if (!selected) { // do not require function
289
+ return body;
290
+ }
273
291
  }
274
292
  const parameters = reconstructParameters(definition.parameters).join(', ');
275
293
  if (body.length <= 1) {
276
294
  // 'inline'
277
- const bodyStr = body.length === 0 ? '' : `${body[0].line} `; /* add suffix space */
295
+ const bodyStr = body.length === 0 ? '{ }' : `${body[0].line}`;
278
296
  // we keep the braces in every case because I do not like no-brace functions
279
- return [{ line: `function(${parameters}) { ${bodyStr}}`, indent: 0 }];
280
- }
281
- else if (body[0].line === '{' && body[body.length - 1].line === '}') {
282
- // 'block'
283
- return [
284
- { line: `function(${parameters}) {`, indent: 0 },
285
- ...body.slice(1, body.length - 1),
286
- { line: '}', indent: 0 }
287
- ];
297
+ return [{ line: `function(${parameters}) ${bodyStr}`, indent: 0 }];
288
298
  }
289
299
  else {
290
- // unknown -> we add the braces just to be sure
300
+ // 'block'
291
301
  return [
292
- { line: `function(${parameters}) {`, indent: 0 },
293
- ...indentBy(body, 1),
294
- { line: '}', indent: 0 }
302
+ { line: `function(${parameters}) ${body[0].line}`, indent: 0 },
303
+ ...body.slice(1),
295
304
  ];
296
305
  }
297
306
  }
298
307
  function reconstructSpecialInfixFunctionCall(args, call) {
299
308
  (0, assert_1.guard)(args.length === 2, () => `infix special call must have exactly two arguments, got: ${args.length} (${JSON.stringify(args)})`);
300
309
  (0, assert_1.guard)(call.flavor === 'named', `infix special call must be named, got: ${call.flavor}`);
301
- const lhs = args[0];
302
- const rhs = args[1];
310
+ const [lhs, rhs] = args;
303
311
  if ((lhs === undefined || lhs.length === 0) && (rhs === undefined || rhs.length === 0)) {
304
312
  return [];
305
313
  }
306
314
  // else if (rhs === undefined || rhs.length === 0) {
307
315
  // if rhs is undefined we still have to keep both now, but reconstruct manually :/
308
- if (lhs !== undefined && lhs.length > 0) {
316
+ if (lhs !== r_function_call_1.EmptyArgument && lhs.length > 0) {
309
317
  const lhsText = lhs.map(l => `${getIndentString(l.indent)}${l.line}`).join('\n');
310
- if (rhs !== undefined && rhs.length > 0) {
318
+ if (rhs !== r_function_call_1.EmptyArgument && rhs.length > 0) {
311
319
  const rhsText = rhs.map(l => `${getIndentString(l.indent)}${l.line}`).join('\n');
312
320
  return plain(`${lhsText} ${call.functionName.content} ${rhsText}`);
313
321
  }
@@ -318,10 +326,20 @@ function reconstructSpecialInfixFunctionCall(args, call) {
318
326
  return plain(`${getLexeme(call.arguments[0])} ${call.functionName.content} ${getLexeme(call.arguments[1])}`);
319
327
  }
320
328
  function reconstructFunctionCall(call, functionName, args, configuration) {
329
+ const selected = isSelected(configuration, call);
330
+ if (!selected) {
331
+ const f = args.filter(a => a !== r_function_call_1.EmptyArgument && a.length !== 0);
332
+ if (f.length === 0) {
333
+ return [];
334
+ }
335
+ else if (f.length === 1) {
336
+ return f[0];
337
+ }
338
+ }
321
339
  if (call.infixSpecial === true) {
322
340
  return reconstructSpecialInfixFunctionCall(args, call);
323
341
  }
324
- if (call.flavor === 'named' && isSelected(configuration, call)) {
342
+ if (call.flavor === 'named' && selected) {
325
343
  return plain(getLexeme(call));
326
344
  }
327
345
  const filteredArgs = args.filter(a => a !== undefined && a.length > 0);
@@ -329,15 +347,17 @@ function reconstructFunctionCall(call, functionName, args, configuration) {
329
347
  return [];
330
348
  }
331
349
  if (args.length === 0) {
332
- (0, assert_1.guard)(functionName.length === 1, `without args, we need the function name to be present! got: ${JSON.stringify(functionName)}`);
333
- if (call.flavor === 'unnamed' && !functionName[0].line.endsWith(')')) {
334
- functionName[0].line = `(${functionName[0].line})`;
350
+ (0, assert_1.guard)(functionName.length > 0, `without args, we need the function name to be present! got: ${JSON.stringify(functionName)}`);
351
+ const last = functionName[functionName.length - 1];
352
+ if (call.flavor === 'unnamed' && !last.line.endsWith(')')) {
353
+ functionName[0].line = `(${functionName[0].line}`;
354
+ last.line += ')';
335
355
  }
336
- if (!functionName[0].line.endsWith('()')) {
356
+ if (!last.line.endsWith('()')) {
337
357
  // add empty call braces if not present
338
- functionName[0].line += '()';
358
+ last.line += '()';
339
359
  }
340
- return [{ line: functionName[0].line, indent: functionName[0].indent }];
360
+ return functionName;
341
361
  }
342
362
  else {
343
363
  return plain(getLexeme(call));
@@ -367,19 +387,9 @@ const reconstructAstFolds = {
367
387
  foldLogical: reconstructAsLeaf,
368
388
  foldSymbol: reconstructAsLeaf,
369
389
  foldAccess: reconstructFoldAccess,
370
- binaryOp: {
371
- foldLogicalOp: reconstructBinaryOp,
372
- foldArithmeticOp: reconstructBinaryOp,
373
- foldComparisonOp: reconstructBinaryOp,
374
- foldAssignment: reconstructBinaryOp,
375
- foldPipe: reconstructBinaryOp,
376
- foldModelFormula: reconstructBinaryOp
377
- },
378
- unaryOp: {
379
- foldArithmeticOp: reconstructUnaryOp,
380
- foldLogicalOp: reconstructUnaryOp,
381
- foldModelFormula: reconstructUnaryOp
382
- },
390
+ foldBinaryOp: reconstructBinaryOp,
391
+ foldPipe: reconstructBinaryOp,
392
+ foldUnaryOp: reconstructUnaryOp,
383
393
  other: {
384
394
  foldComment: reconstructAsLeaf,
385
395
  foldLineDirective: reconstructAsLeaf
@@ -425,7 +435,7 @@ function removeOuterExpressionListIfApplicable(result, autoSelected) {
425
435
  * @returns The number of times `autoSelectIf` triggered, as well as the reconstructed code itself.
426
436
  */
427
437
  function reconstructToCode(ast, selection, autoSelectIf = autoSelectLibrary) {
428
- if (exports.reconstructLogger.settings.minLevel >= 1 /* LogLevel.Trace */) {
438
+ if (exports.reconstructLogger.settings.minLevel <= 1 /* LogLevel.Trace */) {
429
439
  exports.reconstructLogger.trace(`reconstruct ast with ids: ${JSON.stringify([...selection])}`);
430
440
  }
431
441
  // we use a wrapper to count the number of times the autoSelectIf predicate triggered
@@ -438,10 +448,8 @@ function reconstructToCode(ast, selection, autoSelectIf = autoSelectLibrary) {
438
448
  return result;
439
449
  };
440
450
  // fold of the normalized ast
441
- const result = (0, r_bridge_1.foldAstStateful)(ast.ast, { selection, autoSelectIf: autoSelectIfWrapper }, reconstructAstFolds);
442
- if (exports.reconstructLogger.settings.minLevel >= 1 /* LogLevel.Trace */) {
443
- exports.reconstructLogger.trace('reconstructed ast before string conversion: ', JSON.stringify(result));
444
- }
451
+ const result = (0, stateful_fold_1.foldAstStateful)(ast.ast, { selection, autoSelectIf: autoSelectIfWrapper }, reconstructAstFolds);
452
+ (0, log_1.expensiveTrace)(exports.reconstructLogger, () => `reconstructed ast before string conversion: ${JSON.stringify(result)}`);
445
453
  return removeOuterExpressionListIfApplicable(result, autoSelected);
446
454
  }
447
455
  exports.reconstructToCode = reconstructToCode;
@@ -4,8 +4,9 @@
4
4
  * @module
5
5
  */
6
6
  import type { MergeableRecord } from '../../util/objects';
7
- import type { NodeId, RNodeWithParent } from '../../r-bridge';
8
7
  import type { SlicingCriteria } from './parse';
8
+ import type { RNodeWithParent } from '../../r-bridge/lang-4.x/ast/model/processing/decorate';
9
+ import type { NodeId } from '../../r-bridge/lang-4.x/ast/model/processing/node-id';
9
10
  /**
10
11
  * Defines the filter for collecting all possible slicing criteria.
11
12
  * @see DefaultAllVariablesFilter
@@ -13,12 +14,12 @@ import type { SlicingCriteria } from './parse';
13
14
  export interface SlicingCriteriaFilter extends MergeableRecord {
14
15
  /**
15
16
  * Inclusive minimum size of the slicing criteria (number of included slice points).
16
- * Should be at least `1` to make sense (and of course at most {@link SlicingCriteriaFilter#maximumSize | maximum size}).
17
+ * Should be at least `1` to make sense (and of course at most {@link SlicingCriteriaFilter#maximumSize|maximum size}).
17
18
  */
18
19
  minimumSize: number;
19
20
  /**
20
21
  * Inclusive maximum size of the slicing criteria (number of included slice points).
21
- * Should be at least `1` to make sense (and of course at least {@link SlicingCriteriaFilter#minimumSize | minimum size}).
22
+ * Should be at least `1` to make sense (and of course at least {@link SlicingCriteriaFilter#minimumSize|minimum size}).
22
23
  * <p>
23
24
  * Be really careful with this one, as the number of possible slicing criteria can grow exponentially with the maximum size.
24
25
  */
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.collectAllSlicingCriteria = void 0;
4
4
  const assert_1 = require("../../util/assert");
5
5
  const arrays_1 = require("../../util/arrays");
6
+ const r_function_call_1 = require("../../r-bridge/lang-4.x/ast/model/nodes/r-function-call");
6
7
  /**
7
8
  * Will create all possible slicing criteria for the given ast, based on the {@link SlicingCriteriaFilter}.
8
9
  * The slicing criteria will be *ordered* (i.e., it will not return `[1:2,3:4]` and `[3:4,1:2]` if `maximumSize` \> 1).
@@ -16,7 +17,10 @@ function* collectAllSlicingCriteria(ast, filter) {
16
17
  return;
17
18
  }
18
19
  for (const combination of (0, arrays_1.getUniqueCombinationsOfSize)(potentialSlicingNodes, filter.minimumSize, filter.maximumSize)) {
19
- yield combination.map(n => `$${n}`);
20
+ const c = combination.filter(n => n !== undefined && n !== r_function_call_1.EmptyArgument);
21
+ if (c.length > 0) {
22
+ yield c.map(n => `$${n}`);
23
+ }
20
24
  }
21
25
  }
22
26
  exports.collectAllSlicingCriteria = collectAllSlicingCriteria;
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DefaultAllVariablesFilter = void 0;
4
- const r_bridge_1 = require("../../../r-bridge");
5
4
  const assert_1 = require("../../../util/assert");
5
+ const fold_1 = require("../../../r-bridge/lang-4.x/ast/model/processing/fold");
6
+ const r_symbol_1 = require("../../../r-bridge/lang-4.x/ast/model/nodes/r-symbol");
7
+ const r_function_call_1 = require("../../../r-bridge/lang-4.x/ast/model/nodes/r-function-call");
6
8
  exports.DefaultAllVariablesFilter = {
7
9
  minimumSize: 1,
8
10
  maximumSize: 1,
@@ -14,21 +16,11 @@ const defaultAllVariablesCollectorFolds = {
14
16
  foldNumber: onLeaf,
15
17
  foldString: onLeaf,
16
18
  foldLogical: onLeaf,
17
- foldSymbol: (symbol) => (0, r_bridge_1.isSpecialSymbol)(symbol) ? [] : [symbol.info.id],
18
- foldAccess: (_, name, access) => Array.isArray(access) ? [...name, ...access.filter(assert_1.isNotNull).flat()] : name,
19
- binaryOp: {
20
- foldLogicalOp: onBinary,
21
- foldArithmeticOp: onBinary,
22
- foldComparisonOp: onBinary,
23
- foldAssignment: onBinary,
24
- foldPipe: onBinary,
25
- foldModelFormula: onBinary
26
- },
27
- unaryOp: {
28
- foldLogicalOp: (_, operator) => operator,
29
- foldArithmeticOp: (_, operator) => operator,
30
- foldModelFormula: (_, operator) => operator
31
- },
19
+ foldSymbol: (symbol) => (0, r_symbol_1.isSpecialSymbol)(symbol) ? [] : [symbol.info.id],
20
+ foldAccess: (_, name, access) => [...name, ...access.filter(assert_1.isNotNull).flat()],
21
+ foldBinaryOp: onBinary,
22
+ foldPipe: onBinary,
23
+ foldUnaryOp: (_, operator) => operator,
32
24
  loop: {
33
25
  foldFor: (_, a, b, c) => [...a, ...b, ...c],
34
26
  foldWhile: (_, a, b) => [...a, ...b],
@@ -41,23 +33,23 @@ const defaultAllVariablesCollectorFolds = {
41
33
  foldLineDirective: onLeaf
42
34
  },
43
35
  foldIfThenElse: (_, a, b, c) => [...a, ...b, ...(c ?? [])],
44
- foldExprList: (_, a) => a.flat(),
36
+ foldExprList: (_, _grouping, a) => a.flat(),
45
37
  functions: {
46
38
  foldFunctionDefinition: (_, a, b) => [...a.flat(), ...b],
47
39
  foldFunctionCall: (c, a, b) => {
48
- const args = b.flatMap(b => b !== undefined ? b.flat() : []);
40
+ const args = b.flatMap(b => b !== r_function_call_1.EmptyArgument ? b.flat() : []);
49
41
  if (c.flavor === 'named') {
50
42
  return c.functionName.content === 'library' ? args.slice(1) : args;
51
43
  }
52
44
  else {
53
- return [...a, ...args];
45
+ return [...a.filter(x => x !== r_function_call_1.EmptyArgument), ...args];
54
46
  }
55
47
  },
56
- foldArgument: (_, a, b) => b ?? [],
57
- foldParameter: (_, a, b) => b ?? []
48
+ foldArgument: (_, _a, b) => b ?? [],
49
+ foldParameter: (_, _a, b) => b ?? []
58
50
  }
59
51
  };
60
52
  function defaultAllVariablesCollector(ast) {
61
- return (0, r_bridge_1.foldAst)(ast, defaultAllVariablesCollectorFolds);
53
+ return (0, fold_1.foldAst)(ast, defaultAllVariablesCollectorFolds);
62
54
  }
63
55
  //# sourceMappingURL=all-variables.js.map