@eagleoutice/flowr 1.4.1 → 1.5.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 (300) hide show
  1. package/README.md +3 -3
  2. package/abstract-interpretation/processor.js +9 -3
  3. package/config.d.ts +16 -0
  4. package/config.js +75 -0
  5. package/core/input.d.ts +1 -1
  6. package/core/output.d.ts +1 -2
  7. package/core/print/parse-printer.d.ts +1 -2
  8. package/core/print/parse-printer.js +6 -4
  9. package/core/print/slice-diff-ansi.js +7 -7
  10. package/core/slicer.js +4 -8
  11. package/core/steps.d.ts +355 -31
  12. package/core/steps.js +7 -14
  13. package/dataflow/environments/environment.js +8 -0
  14. package/dataflow/environments/register.js +1 -0
  15. package/dataflow/extractor.d.ts +2 -2
  16. package/dataflow/extractor.js +10 -2
  17. package/dataflow/internal/process/functions/function-call.js +7 -1
  18. package/dataflow/internal/process/functions/source.d.ts +8 -0
  19. package/dataflow/internal/process/functions/source.js +81 -0
  20. package/dataflow/processor.d.ts +10 -1
  21. package/index.d.ts +0 -2
  22. package/index.js +0 -2
  23. package/package.json +75 -202
  24. package/r-bridge/lang-4.x/ast/index.d.ts +1 -0
  25. package/r-bridge/lang-4.x/ast/index.js +3 -0
  26. package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +2 -0
  27. package/r-bridge/lang-4.x/ast/model/processing/decorate.js +6 -1
  28. package/r-bridge/lang-4.x/ast/parser/json/format.d.ts +14 -0
  29. package/r-bridge/lang-4.x/ast/parser/json/format.js +26 -0
  30. package/r-bridge/lang-4.x/ast/parser/json/parser.d.ts +7 -0
  31. package/r-bridge/lang-4.x/ast/parser/json/parser.js +57 -0
  32. package/r-bridge/lang-4.x/ast/parser/xml/data.d.ts +0 -3
  33. package/r-bridge/lang-4.x/ast/parser/xml/index.d.ts +0 -2
  34. package/r-bridge/lang-4.x/ast/parser/xml/index.js +0 -2
  35. package/r-bridge/lang-4.x/ast/parser/xml/input-format.d.ts +5 -1
  36. package/r-bridge/lang-4.x/ast/parser/xml/input-format.js +7 -10
  37. package/r-bridge/lang-4.x/ast/parser/xml/internal/access.js +2 -2
  38. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then-else.js +1 -1
  39. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then.js +2 -2
  40. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.js +4 -4
  41. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/argument.js +2 -2
  42. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/call.js +4 -4
  43. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/definition.js +2 -2
  44. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/parameter.js +2 -2
  45. package/r-bridge/lang-4.x/ast/parser/xml/internal/index.d.ts +0 -1
  46. package/r-bridge/lang-4.x/ast/parser/xml/internal/index.js +0 -1
  47. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/break.js +2 -2
  48. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/for.js +3 -6
  49. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/next.js +2 -2
  50. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/repeat.js +2 -2
  51. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/while.js +2 -2
  52. package/r-bridge/lang-4.x/ast/parser/xml/internal/meta.d.ts +6 -11
  53. package/r-bridge/lang-4.x/ast/parser/xml/internal/meta.js +15 -23
  54. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/binary.js +6 -6
  55. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.js +3 -3
  56. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/comment.js +2 -2
  57. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/line-directive.js +2 -2
  58. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.js +3 -3
  59. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.js +3 -4
  60. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.js +2 -2
  61. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/number.js +2 -2
  62. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/string.js +2 -2
  63. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/symbol.js +4 -4
  64. package/r-bridge/lang-4.x/values.d.ts +0 -1
  65. package/r-bridge/lang-4.x/values.js +14 -6
  66. package/r-bridge/retriever.d.ts +25 -21
  67. package/r-bridge/retriever.js +73 -23
  68. package/r-bridge/shell-executor.d.ts +3 -17
  69. package/r-bridge/shell-executor.js +9 -78
  70. package/r-bridge/shell.d.ts +5 -27
  71. package/r-bridge/shell.js +31 -92
  72. package/{statistics/output → util}/ansi.js +1 -1
  73. package/util/args.d.ts +8 -4
  74. package/util/args.js +11 -4
  75. package/util/cfg/visitor.js +1 -1
  76. package/util/files.d.ts +6 -0
  77. package/util/files.js +11 -1
  78. package/util/log.js +3 -0
  79. package/util/{summarizer/summarizer.d.ts → summarizer.d.ts} +15 -1
  80. package/util/summarizer.js +37 -0
  81. package/util/version.d.ts +2 -0
  82. package/util/version.js +10 -0
  83. package/benchmark/index.d.ts +0 -3
  84. package/benchmark/index.js +0 -20
  85. package/benchmark/slicer.d.ts +0 -101
  86. package/benchmark/slicer.js +0 -225
  87. package/benchmark/stats/index.d.ts +0 -10
  88. package/benchmark/stats/index.js +0 -27
  89. package/benchmark/stats/print.d.ts +0 -7
  90. package/benchmark/stats/print.js +0 -157
  91. package/benchmark/stats/stats.d.ts +0 -41
  92. package/benchmark/stats/stats.js +0 -6
  93. package/benchmark/stopwatch.d.ts +0 -35
  94. package/benchmark/stopwatch.js +0 -79
  95. package/cli/benchmark-app.d.ts +0 -9
  96. package/cli/benchmark-app.js +0 -52
  97. package/cli/benchmark-helper-app.d.ts +0 -7
  98. package/cli/benchmark-helper-app.js +0 -60
  99. package/cli/common/features.d.ts +0 -3
  100. package/cli/common/features.js +0 -30
  101. package/cli/common/index.d.ts +0 -2
  102. package/cli/common/index.js +0 -19
  103. package/cli/common/options.d.ts +0 -20
  104. package/cli/common/options.js +0 -82
  105. package/cli/common/script.d.ts +0 -21
  106. package/cli/common/script.js +0 -61
  107. package/cli/common/scripts-info.d.ts +0 -24
  108. package/cli/common/scripts-info.js +0 -69
  109. package/cli/export-quads-app.d.ts +0 -7
  110. package/cli/export-quads-app.js +0 -46
  111. package/cli/repl/commands/cfg.d.ts +0 -3
  112. package/cli/repl/commands/cfg.js +0 -37
  113. package/cli/repl/commands/commands.d.ts +0 -11
  114. package/cli/repl/commands/commands.js +0 -103
  115. package/cli/repl/commands/dataflow.d.ts +0 -3
  116. package/cli/repl/commands/dataflow.js +0 -34
  117. package/cli/repl/commands/execute.d.ts +0 -4
  118. package/cli/repl/commands/execute.js +0 -27
  119. package/cli/repl/commands/index.d.ts +0 -2
  120. package/cli/repl/commands/index.js +0 -19
  121. package/cli/repl/commands/main.d.ts +0 -39
  122. package/cli/repl/commands/main.js +0 -14
  123. package/cli/repl/commands/normalize.d.ts +0 -3
  124. package/cli/repl/commands/normalize.js +0 -34
  125. package/cli/repl/commands/parse.d.ts +0 -2
  126. package/cli/repl/commands/parse.js +0 -109
  127. package/cli/repl/commands/quit.d.ts +0 -2
  128. package/cli/repl/commands/quit.js +0 -12
  129. package/cli/repl/commands/version.d.ts +0 -16
  130. package/cli/repl/commands/version.js +0 -33
  131. package/cli/repl/core.d.ts +0 -39
  132. package/cli/repl/core.js +0 -116
  133. package/cli/repl/execute.d.ts +0 -28
  134. package/cli/repl/execute.js +0 -79
  135. package/cli/repl/index.d.ts +0 -5
  136. package/cli/repl/index.js +0 -22
  137. package/cli/repl/prompt.d.ts +0 -2
  138. package/cli/repl/prompt.js +0 -9
  139. package/cli/repl/server/connection.d.ts +0 -21
  140. package/cli/repl/server/connection.js +0 -218
  141. package/cli/repl/server/messages/analysis.d.ts +0 -71
  142. package/cli/repl/server/messages/analysis.js +0 -21
  143. package/cli/repl/server/messages/error.d.ts +0 -11
  144. package/cli/repl/server/messages/error.js +0 -3
  145. package/cli/repl/server/messages/hello.d.ts +0 -20
  146. package/cli/repl/server/messages/hello.js +0 -3
  147. package/cli/repl/server/messages/index.d.ts +0 -1
  148. package/cli/repl/server/messages/index.js +0 -3
  149. package/cli/repl/server/messages/messages.d.ts +0 -35
  150. package/cli/repl/server/messages/messages.js +0 -40
  151. package/cli/repl/server/messages/repl.d.ts +0 -33
  152. package/cli/repl/server/messages/repl.js +0 -37
  153. package/cli/repl/server/messages/slice.d.ts +0 -25
  154. package/cli/repl/server/messages/slice.js +0 -37
  155. package/cli/repl/server/net.d.ts +0 -49
  156. package/cli/repl/server/net.js +0 -63
  157. package/cli/repl/server/send.d.ts +0 -4
  158. package/cli/repl/server/send.js +0 -18
  159. package/cli/repl/server/server.d.ts +0 -20
  160. package/cli/repl/server/server.js +0 -66
  161. package/cli/repl/server/validate.d.ts +0 -15
  162. package/cli/repl/server/validate.js +0 -34
  163. package/cli/slicer-app.d.ts +0 -11
  164. package/cli/slicer-app.js +0 -81
  165. package/cli/statistics-app.d.ts +0 -11
  166. package/cli/statistics-app.js +0 -98
  167. package/cli/statistics-helper-app.d.ts +0 -11
  168. package/cli/statistics-helper-app.js +0 -83
  169. package/cli/summarizer-app.d.ts +0 -18
  170. package/cli/summarizer-app.js +0 -67
  171. package/flowr.d.ts +0 -27
  172. package/flowr.js +0 -137
  173. package/r-bridge/lang-4.x/ast/parser/xml/config.d.ts +0 -25
  174. package/r-bridge/lang-4.x/ast/parser/xml/config.js +0 -16
  175. package/r-bridge/lang-4.x/ast/parser/xml/internal/xml-to-json.d.ts +0 -9
  176. package/r-bridge/lang-4.x/ast/parser/xml/internal/xml-to-json.js +0 -51
  177. package/r-bridge/lang-4.x/ast/parser/xml/parser.d.ts +0 -17
  178. package/r-bridge/lang-4.x/ast/parser/xml/parser.js +0 -30
  179. package/statistics/features/common-syntax-probability.d.ts +0 -31
  180. package/statistics/features/common-syntax-probability.js +0 -156
  181. package/statistics/features/feature.d.ts +0 -175
  182. package/statistics/features/feature.js +0 -30
  183. package/statistics/features/index.d.ts +0 -1
  184. package/statistics/features/index.js +0 -18
  185. package/statistics/features/post-processing.d.ts +0 -12
  186. package/statistics/features/post-processing.js +0 -21
  187. package/statistics/features/supported/assignments/assignments.d.ts +0 -11
  188. package/statistics/features/supported/assignments/assignments.js +0 -53
  189. package/statistics/features/supported/assignments/index.d.ts +0 -1
  190. package/statistics/features/supported/assignments/index.js +0 -6
  191. package/statistics/features/supported/assignments/post-process.d.ts +0 -3
  192. package/statistics/features/supported/assignments/post-process.js +0 -125
  193. package/statistics/features/supported/comments/comments.d.ts +0 -18
  194. package/statistics/features/supported/comments/comments.js +0 -133
  195. package/statistics/features/supported/comments/index.d.ts +0 -1
  196. package/statistics/features/supported/comments/index.js +0 -6
  197. package/statistics/features/supported/comments/post-process.d.ts +0 -3
  198. package/statistics/features/supported/comments/post-process.js +0 -50
  199. package/statistics/features/supported/control-flow/control-flow.d.ts +0 -17
  200. package/statistics/features/supported/control-flow/control-flow.js +0 -67
  201. package/statistics/features/supported/control-flow/index.d.ts +0 -1
  202. package/statistics/features/supported/control-flow/index.js +0 -6
  203. package/statistics/features/supported/control-flow/post-process.d.ts +0 -3
  204. package/statistics/features/supported/control-flow/post-process.js +0 -65
  205. package/statistics/features/supported/data-access/data-access.d.ts +0 -15
  206. package/statistics/features/supported/data-access/data-access.js +0 -118
  207. package/statistics/features/supported/data-access/index.d.ts +0 -1
  208. package/statistics/features/supported/data-access/index.js +0 -6
  209. package/statistics/features/supported/data-access/post-process.d.ts +0 -3
  210. package/statistics/features/supported/data-access/post-process.js +0 -107
  211. package/statistics/features/supported/defined-functions/defined-functions.d.ts +0 -35
  212. package/statistics/features/supported/defined-functions/defined-functions.js +0 -139
  213. package/statistics/features/supported/defined-functions/index.d.ts +0 -1
  214. package/statistics/features/supported/defined-functions/index.js +0 -6
  215. package/statistics/features/supported/defined-functions/post-process.d.ts +0 -6
  216. package/statistics/features/supported/defined-functions/post-process.js +0 -177
  217. package/statistics/features/supported/expression-list/expression-list.d.ts +0 -9
  218. package/statistics/features/supported/expression-list/expression-list.js +0 -36
  219. package/statistics/features/supported/expression-list/index.d.ts +0 -1
  220. package/statistics/features/supported/expression-list/index.js +0 -6
  221. package/statistics/features/supported/expression-list/post-process.d.ts +0 -3
  222. package/statistics/features/supported/expression-list/post-process.js +0 -44
  223. package/statistics/features/supported/index.d.ts +0 -10
  224. package/statistics/features/supported/index.js +0 -27
  225. package/statistics/features/supported/loops/index.d.ts +0 -1
  226. package/statistics/features/supported/loops/index.js +0 -6
  227. package/statistics/features/supported/loops/loops.d.ts +0 -20
  228. package/statistics/features/supported/loops/loops.js +0 -79
  229. package/statistics/features/supported/loops/post-process.d.ts +0 -3
  230. package/statistics/features/supported/loops/post-process.js +0 -72
  231. package/statistics/features/supported/used-functions/index.d.ts +0 -1
  232. package/statistics/features/supported/used-functions/index.js +0 -6
  233. package/statistics/features/supported/used-functions/post-process.d.ts +0 -6
  234. package/statistics/features/supported/used-functions/post-process.js +0 -179
  235. package/statistics/features/supported/used-functions/used-functions.d.ts +0 -24
  236. package/statistics/features/supported/used-functions/used-functions.js +0 -95
  237. package/statistics/features/supported/used-packages/index.d.ts +0 -1
  238. package/statistics/features/supported/used-packages/index.js +0 -6
  239. package/statistics/features/supported/used-packages/post-process.d.ts +0 -3
  240. package/statistics/features/supported/used-packages/post-process.js +0 -121
  241. package/statistics/features/supported/used-packages/used-packages.d.ts +0 -16
  242. package/statistics/features/supported/used-packages/used-packages.js +0 -130
  243. package/statistics/features/supported/values/index.d.ts +0 -1
  244. package/statistics/features/supported/values/index.js +0 -6
  245. package/statistics/features/supported/values/post-process.d.ts +0 -3
  246. package/statistics/features/supported/values/post-process.js +0 -72
  247. package/statistics/features/supported/values/values.d.ts +0 -14
  248. package/statistics/features/supported/values/values.js +0 -101
  249. package/statistics/features/supported/variables/index.d.ts +0 -1
  250. package/statistics/features/supported/variables/index.js +0 -6
  251. package/statistics/features/supported/variables/post-process.d.ts +0 -9
  252. package/statistics/features/supported/variables/post-process.js +0 -122
  253. package/statistics/features/supported/variables/variables.d.ts +0 -15
  254. package/statistics/features/supported/variables/variables.js +0 -70
  255. package/statistics/index.d.ts +0 -6
  256. package/statistics/index.js +0 -24
  257. package/statistics/meta-statistics.d.ts +0 -33
  258. package/statistics/meta-statistics.js +0 -17
  259. package/statistics/output/file-provider.d.ts +0 -37
  260. package/statistics/output/file-provider.js +0 -97
  261. package/statistics/output/index.d.ts +0 -4
  262. package/statistics/output/index.js +0 -21
  263. package/statistics/output/print-stats.d.ts +0 -17
  264. package/statistics/output/print-stats.js +0 -69
  265. package/statistics/output/statistics-file.d.ts +0 -37
  266. package/statistics/output/statistics-file.js +0 -69
  267. package/statistics/statistics.d.ts +0 -24
  268. package/statistics/statistics.js +0 -109
  269. package/util/summarizer/auto-detect.d.ts +0 -2
  270. package/util/summarizer/auto-detect.js +0 -32
  271. package/util/summarizer/benchmark/data.d.ts +0 -66
  272. package/util/summarizer/benchmark/data.js +0 -13
  273. package/util/summarizer/benchmark/first-phase/input.d.ts +0 -2
  274. package/util/summarizer/benchmark/first-phase/input.js +0 -59
  275. package/util/summarizer/benchmark/first-phase/process.d.ts +0 -10
  276. package/util/summarizer/benchmark/first-phase/process.js +0 -208
  277. package/util/summarizer/benchmark/second-phase/graph.d.ts +0 -2
  278. package/util/summarizer/benchmark/second-phase/graph.js +0 -54
  279. package/util/summarizer/benchmark/second-phase/process.d.ts +0 -4
  280. package/util/summarizer/benchmark/second-phase/process.js +0 -89
  281. package/util/summarizer/benchmark/summarizer.d.ts +0 -35
  282. package/util/summarizer/benchmark/summarizer.js +0 -49
  283. package/util/summarizer/statistics/first-phase/process.d.ts +0 -6
  284. package/util/summarizer/statistics/first-phase/process.js +0 -81
  285. package/util/summarizer/statistics/post-process/clusterer.d.ts +0 -26
  286. package/util/summarizer/statistics/post-process/clusterer.js +0 -43
  287. package/util/summarizer/statistics/post-process/file-based-count.d.ts +0 -17
  288. package/util/summarizer/statistics/post-process/file-based-count.js +0 -49
  289. package/util/summarizer/statistics/post-process/histogram.d.ts +0 -59
  290. package/util/summarizer/statistics/post-process/histogram.js +0 -128
  291. package/util/summarizer/statistics/post-process/index.d.ts +0 -4
  292. package/util/summarizer/statistics/post-process/index.js +0 -21
  293. package/util/summarizer/statistics/post-process/post-process-output.d.ts +0 -16
  294. package/util/summarizer/statistics/post-process/post-process-output.js +0 -104
  295. package/util/summarizer/statistics/second-phase/process.d.ts +0 -11
  296. package/util/summarizer/statistics/second-phase/process.js +0 -117
  297. package/util/summarizer/statistics/summarizer.d.ts +0 -35
  298. package/util/summarizer/statistics/summarizer.js +0 -135
  299. package/util/summarizer/summarizer.js +0 -13
  300. /package/{statistics/output → util}/ansi.d.ts +0 -0
package/README.md CHANGED
@@ -1,12 +1,12 @@
1
1
  [![flowR logo](https://raw.githubusercontent.com/wiki/Code-Inspect/flowr/img/flowR.png)](https://github.com/Code-Inspect/flowr/wiki)\
2
- [![QA (and potentially deploy)](https://github.com/Code-Inspect/flowr/actions/workflows/qa.yaml/badge.svg)](https://github.com/Code-Inspect/flowr/actions/workflows/qa.yaml) [![codecov](https://codecov.io/gh/Code-Inspect/flowr/graph/badge.svg)](https://codecov.io/gh/Code-Inspect/flowr) [![Docker Image Version (latest semver)](https://img.shields.io/docker/v/eagleoutice/flowr?logo=docker&logoColor=white&label=dockerhub)](https://hub.docker.com/r/eagleoutice/flowr) [![latest tag](https://badgen.net/github/tag/Code-Inspect/flowr?label=latest&color=purple)](https://github.com/Code-Inspect/flowr/releases/latest)
2
+ [![QA (and potentially deploy)](https://github.com/Code-Inspect/flowr/actions/workflows/qa.yaml/badge.svg)](https://github.com/Code-Inspect/flowr/actions/workflows/qa.yaml) [![codecov](https://codecov.io/gh/Code-Inspect/flowr/graph/badge.svg)](https://codecov.io/gh/Code-Inspect/flowr) [![Docker Image Version (latest semver)](https://img.shields.io/docker/v/eagleoutice/flowr?logo=docker&logoColor=white&label=dockerhub)](https://hub.docker.com/r/eagleoutice/flowr) [![latest tag](https://badgen.net/github/tag/Code-Inspect/flowr?label=latest&color=purple)](https://github.com/Code-Inspect/flowr/releases/latest) [![Marketplace](https://badgen.net/vs-marketplace/v/code-inspect.vscode-flowr)](https://marketplace.visualstudio.com/items?itemName=code-inspect.vscode-flowr)
3
3
 
4
4
 
5
- *flowR* is a static [dataflow analyzer](https://en.wikipedia.org/wiki/Data-flow_analysis) and [program slicer](https://github.com/Code-Inspect/flowr/wiki/Terminology#program-slice) for the [*R*](https://www.r-project.org/) programming language (currently tested for versions `4.x`).
5
+ *flowR* is a static [dataflow analyzer](https://en.wikipedia.org/wiki/Data-flow_analysis) and [program slicer](https://github.com/Code-Inspect/flowr/wiki/Terminology#program-slice) for the [*R*](https://www.r-project.org/) programming language (currently tested for versions `4.x`). It is available as a [Visual Studio Code extension](https://marketplace.visualstudio.com/items?itemName=code-inspect.vscode-flowr) and as a [docker image](https://hub.docker.com/r/eagleoutice/flowr).
6
6
 
7
7
  ## ⭐ Getting Started
8
8
 
9
- To get started with _flowR_, please check out the [Overview](https://github.com/Code-Inspect/flowr/wiki/Overview). The [Setup](https://github.com/Code-Inspect/flowr/wiki/Setup) wiki page explains how you can download and setup _flowR_ on your system. With docker 🐳️, the following line should be enough (and drop you directly into the REPL):
9
+ To get started with _flowR_, please check out the [Overview](https://github.com/Code-Inspect/flowr/wiki/Overview). The [Setup](https://github.com/Code-Inspect/flowr/wiki/Setup) wiki page explains how you can download and setup _flowR_ on your system. For Visual Studio Code, please see the [marketplace entry](https://marketplace.visualstudio.com/items?itemName=code-inspect.vscode-flowr). With docker 🐳️, the following line should be enough (and drop you directly into the REPL):
10
10
 
11
11
  ```shell
12
12
  docker run -it --rm eagleoutice/flowr
@@ -11,9 +11,15 @@ const log_1 = require("../util/log");
11
11
  exports.aiLogger = log_1.log.getSubLogger({ name: 'abstract-interpretation' });
12
12
  class Stack {
13
13
  backingStore = [];
14
- size() { return this.backingStore.length; }
15
- peek() { return this.backingStore[this.size() - 1]; }
16
- pop() { return this.backingStore.pop(); }
14
+ size() {
15
+ return this.backingStore.length;
16
+ }
17
+ peek() {
18
+ return this.backingStore[this.size() - 1];
19
+ }
20
+ pop() {
21
+ return this.backingStore.pop();
22
+ }
17
23
  push(item) {
18
24
  this.backingStore.push(item);
19
25
  return item;
package/config.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ import type { MergeableRecord } from './util/objects';
2
+ export interface FlowrConfigOptions extends MergeableRecord {
3
+ /**
4
+ * Whether source calls should be ignored, causing {@link processSourceCall}'s behavior to be skipped
5
+ */
6
+ ignoreSourceCalls: boolean;
7
+ /**
8
+ * The path to the R executable to use. If this is undefined, {@link DEFAULT_R_PATH} will be used.
9
+ */
10
+ rPath: string | undefined;
11
+ }
12
+ export declare const defaultConfigOptions: FlowrConfigOptions;
13
+ export declare const defaultConfigFile = "flowr.json";
14
+ export declare function setConfigFile(workingDirectory?: string, file?: string, forceLoad?: boolean): void;
15
+ export declare function setConfig(config: FlowrConfigOptions): void;
16
+ export declare function getConfig(): FlowrConfigOptions;
package/config.js ADDED
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getConfig = exports.setConfig = exports.setConfigFile = exports.defaultConfigFile = exports.defaultConfigOptions = void 0;
7
+ const objects_1 = require("./util/objects");
8
+ const path_1 = __importDefault(require("path"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const log_1 = require("./util/log");
11
+ const files_1 = require("./util/files");
12
+ const joi_1 = __importDefault(require("joi"));
13
+ exports.defaultConfigOptions = {
14
+ ignoreSourceCalls: false,
15
+ rPath: undefined
16
+ };
17
+ exports.defaultConfigFile = 'flowr.json';
18
+ const schema = joi_1.default.object({
19
+ ignoreSourceCalls: joi_1.default.boolean().optional()
20
+ });
21
+ let configWorkingDirectory = process.cwd();
22
+ let configFile = exports.defaultConfigFile;
23
+ let currentConfig;
24
+ function setConfigFile(workingDirectory = process.cwd(), file = exports.defaultConfigFile, forceLoad = false) {
25
+ configWorkingDirectory = workingDirectory;
26
+ configFile = file;
27
+ // reset the config so it gets reloaded
28
+ currentConfig = undefined;
29
+ if (forceLoad) {
30
+ getConfig();
31
+ }
32
+ }
33
+ exports.setConfigFile = setConfigFile;
34
+ function setConfig(config) {
35
+ currentConfig = config;
36
+ }
37
+ exports.setConfig = setConfig;
38
+ function getConfig() {
39
+ // lazy-load the config based on the current settings
40
+ if (currentConfig === undefined) {
41
+ setConfig(parseConfigOptions(configWorkingDirectory, configFile));
42
+ }
43
+ return currentConfig;
44
+ }
45
+ exports.getConfig = getConfig;
46
+ function parseConfigOptions(workingDirectory, configFile) {
47
+ let searchPath = path_1.default.resolve(workingDirectory);
48
+ do {
49
+ const configPath = path_1.default.join(searchPath, configFile);
50
+ if (fs_1.default.existsSync(configPath)) {
51
+ try {
52
+ const text = fs_1.default.readFileSync(configPath, { encoding: 'utf-8' });
53
+ const parsed = JSON.parse(text);
54
+ const validate = schema.validate(parsed);
55
+ if (!validate.error) {
56
+ // assign default values to all config options except for the specified ones
57
+ const ret = (0, objects_1.deepMergeObject)(exports.defaultConfigOptions, parsed);
58
+ log_1.log.info(`Using config ${JSON.stringify(ret)} from ${configPath}`);
59
+ return ret;
60
+ }
61
+ else {
62
+ log_1.log.error(`Failed to validate config file at ${configPath}: ${validate.error.message}`);
63
+ }
64
+ }
65
+ catch (e) {
66
+ log_1.log.error(`Failed to parse config file at ${configPath}: ${e.message}`);
67
+ }
68
+ }
69
+ // move up to parent directory
70
+ searchPath = (0, files_1.getParentDirectory)(searchPath);
71
+ } while (fs_1.default.existsSync(searchPath));
72
+ log_1.log.info(`Using default config ${JSON.stringify(exports.defaultConfigOptions)}`);
73
+ return exports.defaultConfigOptions;
74
+ }
75
+ //# sourceMappingURL=config.js.map
package/core/input.d.ts CHANGED
@@ -27,7 +27,7 @@ interface BaseSteppingSlicerInput<InterestedIn extends StepName | undefined> ext
27
27
  /** If you want to auto-select something in the reconstruction add it here, otherwise, it will use the default defined alongside {@link reconstructToCode}*/
28
28
  autoSelectIf?: AutoSelectPredicate;
29
29
  }
30
- interface NormalizeSteppingSlicerInput<InterestedIn extends 'ai' | 'dataflow' | 'normalize'> extends BaseSteppingSlicerInput<InterestedIn> {
30
+ interface NormalizeSteppingSlicerInput<InterestedIn extends 'dataflow' | 'normalize'> extends BaseSteppingSlicerInput<InterestedIn> {
31
31
  stepOfInterest: InterestedIn;
32
32
  }
33
33
  interface SliceSteppingSlicerInput<InterestedIn extends 'reconstruct' | 'slice' | undefined> extends BaseSteppingSlicerInput<InterestedIn> {
package/core/output.d.ts CHANGED
@@ -9,8 +9,7 @@ type StepResultsHelper<InterestedIn extends StepName> = {
9
9
  'parse': Out<'parse'>;
10
10
  'normalize': StepResultsHelper<'parse'> & Out<'normalize'>;
11
11
  'dataflow': StepResultsHelper<'normalize'> & Out<'dataflow'>;
12
- 'ai': StepResultsHelper<'dataflow'> & Out<'ai'>;
13
- 'slice': StepResultsHelper<'ai'> & Out<'slice'>;
12
+ 'slice': StepResultsHelper<'dataflow'> & Out<'slice'>;
14
13
  'reconstruct': StepResultsHelper<'slice'> & Out<'reconstruct'>;
15
14
  }[InterestedIn];
16
15
  export {};
@@ -1,3 +1,2 @@
1
1
  import type { QuadSerializationConfiguration } from '../../util/quads';
2
- import type { XmlParserConfig } from '../../r-bridge';
3
- export declare function parseToQuads(code: string, config: QuadSerializationConfiguration, parseConfig: XmlParserConfig): Promise<string>;
2
+ export declare function parseToQuads(code: string, config: QuadSerializationConfiguration): string;
@@ -2,7 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseToQuads = void 0;
4
4
  const quads_1 = require("../../util/quads");
5
- const internal_1 = require("../../r-bridge/lang-4.x/ast/parser/xml/internal");
5
+ const r_bridge_1 = require("../../r-bridge");
6
+ const format_1 = require("../../r-bridge/lang-4.x/ast/parser/json/format");
7
+ const parser_1 = require("../../r-bridge/lang-4.x/ast/parser/json/parser");
6
8
  function filterObject(obj, keys) {
7
9
  if (typeof obj !== 'object') {
8
10
  return obj;
@@ -20,10 +22,10 @@ function filterObject(obj, keys) {
20
22
  .map(([k, v]) => [k, filterObject(v, keys)]));
21
23
  }
22
24
  }
23
- async function parseToQuads(code, config, parseConfig) {
24
- const obj = await (0, internal_1.xlm2jsonObject)(parseConfig, code);
25
+ function parseToQuads(code, config) {
26
+ const obj = (0, parser_1.convertPreparedParsedData)((0, format_1.prepareParsedData)(code));
25
27
  // recursively filter so that if the object contains one of the keys 'a', 'b' or 'c', all other keys are ignored
26
- return (0, quads_1.serialize2quads)(filterObject(obj, new Set([parseConfig.attributeName, parseConfig.childrenName, parseConfig.contentName])), config);
28
+ return (0, quads_1.serialize2quads)(filterObject(obj, new Set([r_bridge_1.attributesKey, r_bridge_1.childrenKey, r_bridge_1.contentKey])), config);
27
29
  }
28
30
  exports.parseToQuads = parseToQuads;
29
31
  //# sourceMappingURL=parse-printer.js.map
@@ -3,9 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.sliceDiffAnsi = void 0;
4
4
  const range_1 = require("../../util/range");
5
5
  const assert_1 = require("../../util/assert");
6
- const statistics_1 = require("../../statistics");
6
+ const ansi_1 = require("../../../src/util/ansi");
7
7
  function grayOut() {
8
- return statistics_1.ansiFormatter.getFormatString({ color: 7 /* Colors.White */, effect: statistics_1.ColorEffect.Foreground, style: 2 /* FontStyles.Faint */ });
8
+ return ansi_1.ansiFormatter.getFormatString({ color: 7 /* Colors.White */, effect: ansi_1.ColorEffect.Foreground, style: 2 /* FontStyles.Faint */ });
9
9
  }
10
10
  function mergeJointRangesInSorted(loc) {
11
11
  return loc.reduce((acc, curr) => {
@@ -23,15 +23,15 @@ function mergeJointRangesInSorted(loc) {
23
23
  }, [loc[0]]);
24
24
  }
25
25
  function highlight(s, selected) {
26
- const primary = statistics_1.ansiFormatter.format(s, { color: 3 /* Colors.Yellow */, effect: statistics_1.ColorEffect.Foreground, style: 1 /* FontStyles.Bold */ });
27
- return selected ? statistics_1.ansiFormatter.format(primary, { style: 4 /* FontStyles.Underline */ }) : primary;
26
+ const primary = ansi_1.ansiFormatter.format(s, { color: 3 /* Colors.Yellow */, effect: ansi_1.ColorEffect.Foreground, style: 1 /* FontStyles.Bold */ });
27
+ return selected ? ansi_1.ansiFormatter.format(primary, { style: 4 /* FontStyles.Underline */ }) : primary;
28
28
  }
29
29
  function sliceDiffAnsi(slice, normalized, criteriaIds, originalCode) {
30
30
  let importantLocations = Array.from(normalized.idMap.entries())
31
31
  .filter(([id, { location }]) => slice.has(id) && (0, assert_1.isNotUndefined)(location))
32
32
  .map(([id, { location }]) => ({ selected: criteriaIds.has(id), location: location }));
33
33
  if (importantLocations.length === 0) {
34
- return `${grayOut()}${originalCode}${statistics_1.ansiFormatter.reset()}`;
34
+ return `${grayOut()}${originalCode}${ansi_1.ansiFormatter.reset()}`;
35
35
  }
36
36
  // we sort all locations from back to front so that replacements do not screw up the indices
37
37
  importantLocations.sort((a, b) => -(0, range_1.rangeCompare)(a.location, b.location));
@@ -41,9 +41,9 @@ function sliceDiffAnsi(slice, normalized, criteriaIds, originalCode) {
41
41
  for (const { selected, location } of importantLocations) {
42
42
  const { start, end } = location;
43
43
  const line = lines[start.line - 1];
44
- lines[start.line - 1] = `${line.substring(0, start.column - 1)}${statistics_1.ansiFormatter.reset()}${highlight(line.substring(start.column - 1, end.column), selected)}${grayOut()}${line.substring(end.column)}`;
44
+ lines[start.line - 1] = `${line.substring(0, start.column - 1)}${ansi_1.ansiFormatter.reset()}${highlight(line.substring(start.column - 1, end.column), selected)}${grayOut()}${line.substring(end.column)}`;
45
45
  }
46
- return `${grayOut()}${lines.join('\n')}${statistics_1.ansiFormatter.reset()}`;
46
+ return `${grayOut()}${lines.join('\n')}${ansi_1.ansiFormatter.reset()}`;
47
47
  }
48
48
  exports.sliceDiffAnsi = sliceDiffAnsi;
49
49
  //# sourceMappingURL=slice-diff-ansi.js.map
package/core/slicer.js CHANGED
@@ -162,22 +162,18 @@ class SteppingSlicer {
162
162
  break;
163
163
  case 1:
164
164
  step = guardStep('normalize');
165
- result = await (0, steps_1.executeSingleSubStep)(step, this.results.parse, await this.shell.tokenMap(), this.hooks, this.getId);
165
+ result = (0, steps_1.executeSingleSubStep)(step, this.results.parse, this.hooks, this.getId);
166
166
  break;
167
167
  case 2:
168
168
  step = guardStep('dataflow');
169
- result = (0, steps_1.executeSingleSubStep)(step, this.results.normalize);
169
+ result = (0, steps_1.executeSingleSubStep)(step, this.request, this.results.normalize);
170
170
  break;
171
171
  case 3:
172
- step = guardStep('ai');
173
- result = (0, steps_1.executeSingleSubStep)(step, this.results.normalize, this.results.dataflow);
174
- break;
175
- case 4:
176
172
  (0, assert_1.guard)(this.criterion !== undefined, 'Cannot decode criteria without a criterion');
177
173
  step = guardStep('slice');
178
- result = (0, steps_1.executeSingleSubStep)(step, this.results.ai.graph, this.results.normalize, this.criterion);
174
+ result = (0, steps_1.executeSingleSubStep)(step, this.results.dataflow.graph, this.results.normalize, this.criterion);
179
175
  break;
180
- case 5:
176
+ case 4:
181
177
  step = guardStep('reconstruct');
182
178
  result = (0, steps_1.executeSingleSubStep)(step, this.results.normalize, this.results.slice.result);
183
179
  break;