@eagleoutice/flowr 2.6.2 → 2.7.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 (435) hide show
  1. package/README.md +36 -34
  2. package/abstract-interpretation/data-frame/absint-visitor.d.ts +1 -1
  3. package/abstract-interpretation/data-frame/absint-visitor.js +6 -6
  4. package/abstract-interpretation/data-frame/dataframe-domain.d.ts +4 -7
  5. package/abstract-interpretation/data-frame/dataframe-domain.js +5 -11
  6. package/abstract-interpretation/data-frame/mappers/access-mapper.d.ts +3 -1
  7. package/abstract-interpretation/data-frame/mappers/access-mapper.js +3 -2
  8. package/abstract-interpretation/data-frame/mappers/arguments.js +2 -2
  9. package/abstract-interpretation/data-frame/mappers/assignment-mapper.d.ts +3 -1
  10. package/abstract-interpretation/data-frame/mappers/assignment-mapper.js +3 -2
  11. package/abstract-interpretation/data-frame/mappers/function-mapper.d.ts +7 -7
  12. package/abstract-interpretation/data-frame/mappers/function-mapper.js +28 -24
  13. package/abstract-interpretation/data-frame/mappers/replacement-mapper.d.ts +3 -1
  14. package/abstract-interpretation/data-frame/mappers/replacement-mapper.js +3 -2
  15. package/abstract-interpretation/data-frame/semantics.js +54 -41
  16. package/abstract-interpretation/data-frame/shape-inference.d.ts +3 -3
  17. package/abstract-interpretation/data-frame/shape-inference.js +3 -3
  18. package/abstract-interpretation/domains/abstract-domain.d.ts +1 -0
  19. package/abstract-interpretation/domains/abstract-domain.js +3 -2
  20. package/abstract-interpretation/domains/bounded-set-domain.js +1 -1
  21. package/abstract-interpretation/domains/interval-domain.d.ts +2 -2
  22. package/abstract-interpretation/domains/interval-domain.js +3 -6
  23. package/abstract-interpretation/domains/lattice.d.ts +2 -0
  24. package/abstract-interpretation/domains/lattice.js +3 -1
  25. package/abstract-interpretation/domains/positive-interval-domain.d.ts +1 -1
  26. package/abstract-interpretation/domains/positive-interval-domain.js +1 -1
  27. package/abstract-interpretation/domains/satisfiable-domain.d.ts +2 -2
  28. package/abstract-interpretation/domains/satisfiable-domain.js +2 -2
  29. package/abstract-interpretation/domains/set-range-domain.d.ts +98 -0
  30. package/abstract-interpretation/domains/set-range-domain.js +400 -0
  31. package/abstract-interpretation/domains/set-upper-bound-domain.js +2 -2
  32. package/abstract-interpretation/domains/singleton-domain.js +2 -2
  33. package/abstract-interpretation/normalized-ast-fold.d.ts +1 -1
  34. package/benchmark/slicer.d.ts +3 -1
  35. package/benchmark/slicer.js +50 -27
  36. package/benchmark/stats/print.js +8 -5
  37. package/benchmark/stats/stats.d.ts +3 -2
  38. package/benchmark/summarizer/data.d.ts +11 -8
  39. package/benchmark/summarizer/first-phase/process.js +12 -9
  40. package/benchmark/summarizer/second-phase/graph.d.ts +3 -1
  41. package/benchmark/summarizer/second-phase/graph.js +3 -1
  42. package/benchmark/summarizer/second-phase/process.js +24 -18
  43. package/cli/export-quads-app.js +1 -1
  44. package/cli/repl/commands/repl-dataflow.js +2 -1
  45. package/cli/repl/commands/repl-parse.js +16 -4
  46. package/cli/repl/commands/repl-query.js +1 -1
  47. package/cli/repl/core.js +16 -13
  48. package/cli/repl/server/connection.js +2 -1
  49. package/cli/script-core/statistics-helper-core.js +2 -1
  50. package/cli/slicer-app.js +3 -4
  51. package/cli/wiki.d.ts +4 -0
  52. package/cli/wiki.js +165 -0
  53. package/config.d.ts +4 -0
  54. package/config.js +6 -0
  55. package/control-flow/cfg-dead-code.js +14 -3
  56. package/control-flow/cfg-simplification.d.ts +5 -2
  57. package/control-flow/cfg-simplification.js +3 -0
  58. package/control-flow/extract-cfg.d.ts +9 -3
  59. package/control-flow/extract-cfg.js +44 -4
  60. package/control-flow/semantic-cfg-guided-visitor.d.ts +2 -2
  61. package/control-flow/simple-visitor.js +2 -2
  62. package/control-flow/useless-loop.d.ts +3 -3
  63. package/control-flow/useless-loop.js +16 -5
  64. package/core/pipeline-executor.d.ts +3 -6
  65. package/core/pipeline-executor.js +4 -7
  66. package/core/print/normalize-printer.d.ts +1 -1
  67. package/core/print/normalize-printer.js +2 -2
  68. package/core/steps/all/core/00-parse.d.ts +1 -1
  69. package/core/steps/all/core/00-parse.js +1 -1
  70. package/core/steps/all/core/10-normalize.d.ts +3 -9
  71. package/core/steps/all/core/10-normalize.js +1 -16
  72. package/core/steps/all/core/11-normalize-tree-sitter.d.ts +2 -3
  73. package/core/steps/all/core/11-normalize-tree-sitter.js +2 -3
  74. package/core/steps/all/core/20-dataflow.d.ts +3 -4
  75. package/core/steps/all/core/20-dataflow.js +2 -2
  76. package/core/steps/all/static-slicing/00-slice.d.ts +4 -2
  77. package/core/steps/all/static-slicing/00-slice.js +3 -2
  78. package/core/steps/all/static-slicing/10-reconstruct.d.ts +8 -0
  79. package/core/steps/all/static-slicing/10-reconstruct.js +4 -1
  80. package/core/steps/pipeline/default-pipelines.d.ts +94 -95
  81. package/core/steps/pipeline/default-pipelines.js +8 -8
  82. package/dataflow/cluster.js +2 -2
  83. package/dataflow/environments/append.d.ts +5 -0
  84. package/dataflow/environments/append.js +6 -20
  85. package/dataflow/environments/built-in.d.ts +2 -1
  86. package/dataflow/environments/clone.d.ts +1 -2
  87. package/dataflow/environments/clone.js +3 -17
  88. package/dataflow/environments/define.d.ts +7 -3
  89. package/dataflow/environments/define.js +9 -56
  90. package/dataflow/environments/diff.js +3 -3
  91. package/dataflow/environments/environment.d.ts +48 -28
  92. package/dataflow/environments/environment.js +187 -62
  93. package/dataflow/environments/overwrite.d.ts +1 -5
  94. package/dataflow/environments/overwrite.js +2 -61
  95. package/dataflow/environments/reference-to-maybe.d.ts +13 -0
  96. package/dataflow/environments/reference-to-maybe.js +54 -0
  97. package/dataflow/environments/resolve-by-name.d.ts +6 -1
  98. package/dataflow/environments/resolve-by-name.js +56 -4
  99. package/dataflow/environments/scoping.d.ts +8 -4
  100. package/dataflow/environments/scoping.js +13 -9
  101. package/dataflow/eval/resolve/alias-tracking.d.ts +10 -4
  102. package/dataflow/eval/resolve/alias-tracking.js +15 -13
  103. package/dataflow/eval/resolve/resolve-argument.d.ts +2 -1
  104. package/dataflow/eval/resolve/resolve-argument.js +10 -10
  105. package/dataflow/eval/resolve/resolve.d.ts +13 -11
  106. package/dataflow/eval/resolve/resolve.js +16 -15
  107. package/dataflow/eval/values/string/string-constants.d.ts +9 -3
  108. package/dataflow/eval/values/string/string-constants.js +9 -3
  109. package/dataflow/extractor.d.ts +2 -3
  110. package/dataflow/extractor.js +25 -28
  111. package/dataflow/fn/higher-order-function.d.ts +2 -1
  112. package/dataflow/fn/higher-order-function.js +4 -4
  113. package/dataflow/graph/dataflowgraph-builder.d.ts +9 -5
  114. package/dataflow/graph/dataflowgraph-builder.js +21 -11
  115. package/dataflow/graph/diff-dataflow-graph.js +2 -2
  116. package/dataflow/graph/graph.d.ts +13 -11
  117. package/dataflow/graph/graph.js +40 -24
  118. package/dataflow/graph/invert-dfg.d.ts +3 -2
  119. package/dataflow/graph/invert-dfg.js +3 -3
  120. package/dataflow/graph/resolve-graph.d.ts +2 -1
  121. package/dataflow/graph/resolve-graph.js +2 -2
  122. package/dataflow/graph/unknown-replacement.d.ts +4 -2
  123. package/dataflow/graph/unknown-replacement.js +4 -2
  124. package/dataflow/graph/vertex.d.ts +3 -3
  125. package/dataflow/graph/vertex.js +3 -3
  126. package/dataflow/info.d.ts +8 -1
  127. package/dataflow/info.js +21 -0
  128. package/dataflow/internal/linker.js +10 -11
  129. package/dataflow/internal/process/functions/call/argument/make-argument.d.ts +2 -2
  130. package/dataflow/internal/process/functions/call/argument/make-argument.js +2 -3
  131. package/dataflow/internal/process/functions/call/argument/unpack-argument.d.ts +7 -1
  132. package/dataflow/internal/process/functions/call/argument/unpack-argument.js +12 -3
  133. package/dataflow/internal/process/functions/call/built-in/built-in-access.d.ts +1 -1
  134. package/dataflow/internal/process/functions/call/built-in/built-in-access.js +7 -7
  135. package/dataflow/internal/process/functions/call/built-in/built-in-apply.js +2 -2
  136. package/dataflow/internal/process/functions/call/built-in/built-in-assignment.d.ts +3 -1
  137. package/dataflow/internal/process/functions/call/built-in/built-in-assignment.js +6 -6
  138. package/dataflow/internal/process/functions/call/built-in/built-in-eval.js +14 -14
  139. package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.js +10 -8
  140. package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.js +4 -4
  141. package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.d.ts +2 -1
  142. package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.js +10 -14
  143. package/dataflow/internal/process/functions/call/built-in/built-in-get.d.ts +1 -1
  144. package/dataflow/internal/process/functions/call/built-in/built-in-get.js +2 -2
  145. package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.d.ts +3 -1
  146. package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.js +8 -6
  147. package/dataflow/internal/process/functions/call/built-in/built-in-library.js +1 -1
  148. package/dataflow/internal/process/functions/call/built-in/built-in-list.js +2 -2
  149. package/dataflow/internal/process/functions/call/built-in/built-in-pipe.js +4 -4
  150. package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.d.ts +6 -1
  151. package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.js +7 -2
  152. package/dataflow/internal/process/functions/call/built-in/built-in-replacement.js +5 -5
  153. package/dataflow/internal/process/functions/call/built-in/built-in-rm.js +6 -4
  154. package/dataflow/internal/process/functions/call/built-in/built-in-source.d.ts +15 -10
  155. package/dataflow/internal/process/functions/call/built-in/built-in-source.js +78 -75
  156. package/dataflow/internal/process/functions/call/built-in/built-in-special-bin-op.d.ts +3 -1
  157. package/dataflow/internal/process/functions/call/built-in/built-in-special-bin-op.js +3 -1
  158. package/dataflow/internal/process/functions/call/built-in/built-in-vector.js +2 -2
  159. package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.js +5 -5
  160. package/dataflow/internal/process/functions/call/common.d.ts +1 -1
  161. package/dataflow/internal/process/functions/call/common.js +6 -7
  162. package/dataflow/internal/process/functions/call/default-call-handling.d.ts +3 -1
  163. package/dataflow/internal/process/functions/call/default-call-handling.js +3 -1
  164. package/dataflow/internal/process/functions/call/known-call-handling.js +4 -4
  165. package/dataflow/internal/process/functions/call/named-call-handling.js +4 -4
  166. package/dataflow/internal/process/functions/call/unnamed-call-handling.js +1 -1
  167. package/dataflow/internal/process/functions/process-argument.js +1 -1
  168. package/dataflow/internal/process/functions/process-parameter.js +4 -4
  169. package/dataflow/internal/process/process-symbol.js +1 -1
  170. package/dataflow/internal/process/process-value.d.ts +1 -1
  171. package/dataflow/internal/process/process-value.js +7 -7
  172. package/dataflow/origin/dfg-get-symbol-refs.d.ts +1 -1
  173. package/dataflow/origin/dfg-get-symbol-refs.js +1 -1
  174. package/dataflow/processor.d.ts +7 -16
  175. package/documentation/data/dfg/doc-data-dfg-util.d.ts +0 -2
  176. package/documentation/data/faq/faqs.js +27 -18
  177. package/documentation/data/faq/recommended-configs.d.ts +36 -0
  178. package/documentation/data/faq/recommended-configs.js +40 -0
  179. package/documentation/data/faq/wiki-faq-store.d.ts +1 -0
  180. package/documentation/data/faq/wiki-faq-store.js +10 -2
  181. package/documentation/data/server/doc-data-server-messages.js +1 -1
  182. package/documentation/doc-capabilities.d.ts +9 -0
  183. package/documentation/{print-capabilities-markdown.js → doc-capabilities.js} +18 -21
  184. package/documentation/doc-readme.d.ts +9 -0
  185. package/documentation/{print-readme.js → doc-readme.js} +31 -35
  186. package/documentation/doc-util/doc-benchmarks.d.ts +6 -4
  187. package/documentation/doc-util/doc-benchmarks.js +6 -4
  188. package/documentation/doc-util/doc-cfg.js +5 -8
  189. package/documentation/doc-util/doc-dfg.d.ts +7 -7
  190. package/documentation/doc-util/doc-dfg.js +15 -14
  191. package/documentation/doc-util/doc-escape.d.ts +6 -0
  192. package/documentation/doc-util/doc-escape.js +11 -0
  193. package/documentation/doc-util/doc-general.d.ts +22 -2
  194. package/documentation/doc-util/doc-general.js +22 -2
  195. package/documentation/doc-util/doc-normalized-ast.d.ts +10 -5
  196. package/documentation/doc-util/doc-normalized-ast.js +14 -10
  197. package/documentation/doc-util/doc-query.d.ts +12 -4
  198. package/documentation/doc-util/doc-query.js +18 -11
  199. package/documentation/doc-util/doc-search.d.ts +0 -30
  200. package/documentation/doc-util/doc-search.js +2 -73
  201. package/documentation/doc-util/doc-server-message.d.ts +5 -5
  202. package/documentation/doc-util/doc-server-message.js +4 -4
  203. package/documentation/doc-util/doc-types.d.ts +69 -32
  204. package/documentation/doc-util/doc-types.js +109 -62
  205. package/documentation/index.d.ts +9 -9
  206. package/documentation/index.js +9 -9
  207. package/documentation/issue-linting-rule.d.ts +9 -0
  208. package/documentation/{print-linter-issue.js → issue-linting-rule.js} +20 -23
  209. package/documentation/wiki-analyzer.d.ts +9 -0
  210. package/documentation/wiki-analyzer.js +425 -0
  211. package/documentation/wiki-cfg.d.ts +9 -0
  212. package/documentation/{print-cfg-wiki.js → wiki-cfg.js} +144 -160
  213. package/documentation/wiki-core.d.ts +14 -0
  214. package/documentation/{print-core-wiki.js → wiki-core.js} +164 -175
  215. package/documentation/wiki-dataflow-graph.d.ts +9 -0
  216. package/documentation/{print-dataflow-graph-wiki.js → wiki-dataflow-graph.js} +146 -177
  217. package/documentation/wiki-engine.d.ts +9 -0
  218. package/documentation/{print-engines-wiki.js → wiki-engine.js} +27 -42
  219. package/documentation/wiki-faq.d.ts +8 -0
  220. package/documentation/wiki-faq.js +21 -0
  221. package/documentation/wiki-interface.d.ts +9 -0
  222. package/documentation/{print-interface-wiki.js → wiki-interface.js} +59 -56
  223. package/documentation/wiki-linter.d.ts +9 -0
  224. package/documentation/{print-linter-wiki.js → wiki-linter.js} +52 -48
  225. package/documentation/wiki-linting-and-testing.d.ts +9 -0
  226. package/documentation/{print-linting-and-testing-wiki.js → wiki-linting-and-testing.js} +25 -32
  227. package/documentation/wiki-mk/doc-context.d.ts +186 -0
  228. package/documentation/wiki-mk/doc-context.js +84 -0
  229. package/documentation/wiki-mk/doc-maker.d.ts +95 -0
  230. package/documentation/wiki-mk/doc-maker.js +134 -0
  231. package/documentation/wiki-normalized-ast.d.ts +9 -0
  232. package/documentation/{print-normalized-ast-wiki.js → wiki-normalized-ast.js} +64 -47
  233. package/documentation/wiki-onboarding.d.ts +8 -0
  234. package/documentation/{print-onboarding-wiki.js → wiki-onboarding.js} +18 -15
  235. package/documentation/wiki-query.d.ts +9 -0
  236. package/documentation/{print-query-wiki.js → wiki-query.js} +62 -47
  237. package/documentation/wiki-search.d.ts +9 -0
  238. package/documentation/wiki-search.js +61 -0
  239. package/linter/linter-executor.js +3 -2
  240. package/linter/linter-format.d.ts +2 -2
  241. package/linter/linter-rules.d.ts +15 -19
  242. package/linter/rules/absolute-path.d.ts +1 -2
  243. package/linter/rules/absolute-path.js +5 -5
  244. package/linter/rules/dataframe-access-validation.d.ts +2 -2
  245. package/linter/rules/dataframe-access-validation.js +13 -9
  246. package/linter/rules/dead-code.d.ts +1 -1
  247. package/linter/rules/deprecated-functions.d.ts +1 -5
  248. package/linter/rules/file-path-validity.d.ts +1 -1
  249. package/linter/rules/file-path-validity.js +4 -4
  250. package/linter/rules/function-finder-util.d.ts +3 -7
  251. package/linter/rules/function-finder-util.js +1 -1
  252. package/linter/rules/naming-convention.d.ts +2 -2
  253. package/linter/rules/naming-convention.js +1 -1
  254. package/linter/rules/network-functions.d.ts +1 -1
  255. package/linter/rules/network-functions.js +1 -1
  256. package/linter/rules/seeded-randomness.d.ts +4 -3
  257. package/linter/rules/seeded-randomness.js +38 -18
  258. package/linter/rules/unused-definition.d.ts +1 -1
  259. package/linter/rules/useless-loop.d.ts +2 -2
  260. package/linter/rules/useless-loop.js +2 -2
  261. package/package.json +5 -17
  262. package/project/cache/flowr-analyzer-cache.d.ts +7 -10
  263. package/project/cache/flowr-analyzer-cache.js +17 -38
  264. package/project/cache/flowr-analyzer-controlflow-cache.d.ts +34 -0
  265. package/project/cache/flowr-analyzer-controlflow-cache.js +79 -0
  266. package/project/context/flowr-analyzer-context.d.ts +37 -5
  267. package/project/context/flowr-analyzer-context.js +51 -4
  268. package/project/context/flowr-analyzer-environment-context.d.ts +47 -0
  269. package/project/context/flowr-analyzer-environment-context.js +50 -0
  270. package/project/context/flowr-analyzer-files-context.d.ts +63 -13
  271. package/project/context/flowr-analyzer-files-context.js +110 -39
  272. package/project/context/flowr-file.d.ts +32 -10
  273. package/project/context/flowr-file.js +30 -9
  274. package/project/flowr-analyzer-builder.d.ts +22 -28
  275. package/project/flowr-analyzer-builder.js +32 -70
  276. package/project/flowr-analyzer.d.ts +55 -14
  277. package/project/flowr-analyzer.js +53 -8
  278. package/project/plugins/file-plugins/flowr-analyzer-description-file-plugin.d.ts +7 -1
  279. package/project/plugins/file-plugins/flowr-analyzer-description-file-plugin.js +13 -5
  280. package/project/plugins/file-plugins/flowr-analyzer-file-plugin.d.ts +3 -3
  281. package/project/plugins/file-plugins/flowr-analyzer-file-plugin.js +11 -5
  282. package/project/plugins/file-plugins/flowr-description-file.d.ts +3 -3
  283. package/project/plugins/file-plugins/notebooks/flowr-analyzer-jupyter-file-plugin.d.ts +22 -0
  284. package/project/plugins/file-plugins/notebooks/flowr-analyzer-jupyter-file-plugin.js +33 -0
  285. package/project/plugins/file-plugins/notebooks/flowr-analyzer-qmd-file-plugin.d.ts +22 -0
  286. package/project/plugins/file-plugins/notebooks/flowr-analyzer-qmd-file-plugin.js +33 -0
  287. package/project/plugins/file-plugins/notebooks/flowr-analyzer-rmd-file-plugin.d.ts +22 -0
  288. package/project/plugins/file-plugins/notebooks/flowr-analyzer-rmd-file-plugin.js +33 -0
  289. package/project/plugins/file-plugins/notebooks/flowr-jupyter-file.d.ts +20 -0
  290. package/project/plugins/file-plugins/notebooks/flowr-jupyter-file.js +42 -0
  291. package/project/plugins/file-plugins/notebooks/flowr-rmarkdown-file.d.ts +59 -0
  292. package/project/plugins/file-plugins/notebooks/flowr-rmarkdown-file.js +132 -0
  293. package/project/plugins/file-plugins/notebooks/notebook.d.ts +0 -0
  294. package/project/plugins/file-plugins/notebooks/notebook.js +2 -0
  295. package/project/plugins/flowr-analyzer-plugin-defaults.d.ts +5 -0
  296. package/project/plugins/flowr-analyzer-plugin-defaults.js +23 -0
  297. package/project/plugins/flowr-analyzer-plugin.d.ts +2 -0
  298. package/project/plugins/flowr-analyzer-plugin.js +2 -0
  299. package/project/plugins/loading-order-plugins/flowr-analyzer-loading-order-description-file-plugin.js +1 -1
  300. package/project/plugins/package-version-plugins/flowr-analyzer-package-versions-description-file-plugin.js +1 -1
  301. package/project/plugins/plugin-registry.d.ts +34 -0
  302. package/project/plugins/plugin-registry.js +62 -0
  303. package/project/plugins/project-discovery/flowr-analyzer-project-discovery-plugin.js +7 -1
  304. package/queries/catalog/call-context-query/call-context-query-executor.js +5 -6
  305. package/queries/catalog/call-context-query/identify-link-to-last-call-relation.d.ts +5 -2
  306. package/queries/catalog/call-context-query/identify-link-to-last-call-relation.js +25 -18
  307. package/queries/catalog/cluster-query/cluster-query-format.d.ts +1 -1
  308. package/queries/catalog/control-flow-query/control-flow-query-format.d.ts +1 -1
  309. package/queries/catalog/control-flow-query/control-flow-query-format.js +3 -2
  310. package/queries/catalog/dataflow-lens-query/dataflow-lens-query-executor.js +1 -1
  311. package/queries/catalog/dataflow-lens-query/dataflow-lens-query-format.d.ts +1 -1
  312. package/queries/catalog/dataflow-query/dataflow-query-format.d.ts +1 -1
  313. package/queries/catalog/dependencies-query/dependencies-query-executor.d.ts +1 -1
  314. package/queries/catalog/dependencies-query/dependencies-query-executor.js +5 -5
  315. package/queries/catalog/dependencies-query/dependencies-query-format.d.ts +1 -1
  316. package/queries/catalog/dependencies-query/dependencies-query-format.js +1 -1
  317. package/queries/catalog/df-shape-query/df-shape-query-executor.d.ts +1 -1
  318. package/queries/catalog/df-shape-query/df-shape-query-executor.js +2 -2
  319. package/queries/catalog/df-shape-query/df-shape-query-format.d.ts +6 -6
  320. package/queries/catalog/df-shape-query/df-shape-query-format.js +8 -7
  321. package/queries/catalog/happens-before-query/happens-before-query-executor.d.ts +2 -1
  322. package/queries/catalog/happens-before-query/happens-before-query-executor.js +2 -1
  323. package/queries/catalog/happens-before-query/happens-before-query-format.d.ts +1 -1
  324. package/queries/catalog/id-map-query/id-map-query-format.d.ts +1 -1
  325. package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-executor.d.ts +1 -1
  326. package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-executor.js +4 -4
  327. package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-format.d.ts +1 -1
  328. package/queries/catalog/linter-query/linter-query-format.d.ts +1 -1
  329. package/queries/catalog/linter-query/linter-query-format.js +13 -2
  330. package/queries/catalog/location-map-query/location-map-query-executor.js +2 -1
  331. package/queries/catalog/location-map-query/location-map-query-format.d.ts +1 -1
  332. package/queries/catalog/location-map-query/location-map-query-format.js +1 -1
  333. package/queries/catalog/normalized-ast-query/normalized-ast-query-format.d.ts +1 -1
  334. package/queries/catalog/origin-query/origin-query-format.d.ts +1 -1
  335. package/queries/catalog/project-query/project-query-executor.js +3 -1
  336. package/queries/catalog/project-query/project-query-format.d.ts +1 -1
  337. package/queries/catalog/resolve-value-query/resolve-value-query-executor.d.ts +2 -2
  338. package/queries/catalog/resolve-value-query/resolve-value-query-executor.js +3 -3
  339. package/queries/catalog/resolve-value-query/resolve-value-query-format.d.ts +1 -1
  340. package/queries/catalog/search-query/search-query-format.d.ts +1 -1
  341. package/queries/catalog/static-slice-query/static-slice-query-executor.js +2 -2
  342. package/queries/catalog/static-slice-query/static-slice-query-format.d.ts +1 -1
  343. package/queries/catalog/static-slice-query/static-slice-query-format.js +13 -1
  344. package/queries/query.d.ts +26 -18
  345. package/queries/query.js +21 -1
  346. package/r-bridge/lang-4.x/ast/model/collect.d.ts +2 -1
  347. package/r-bridge/lang-4.x/ast/model/collect.js +4 -0
  348. package/r-bridge/lang-4.x/ast/model/nodes/r-project.d.ts +29 -0
  349. package/r-bridge/lang-4.x/ast/model/nodes/r-project.js +15 -0
  350. package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +5 -7
  351. package/r-bridge/lang-4.x/ast/model/processing/decorate.js +24 -11
  352. package/r-bridge/lang-4.x/ast/model/type.d.ts +2 -0
  353. package/r-bridge/lang-4.x/ast/model/type.js +2 -0
  354. package/r-bridge/lang-4.x/ast/parser/json/format.js +1 -1
  355. package/r-bridge/lang-4.x/ast/parser/json/parser.d.ts +9 -8
  356. package/r-bridge/lang-4.x/ast/parser/json/parser.js +11 -10
  357. package/r-bridge/lang-4.x/ast/parser/main/internal/structure/normalize-root.d.ts +4 -3
  358. package/r-bridge/lang-4.x/ast/parser/main/internal/structure/normalize-root.js +20 -11
  359. package/r-bridge/lang-4.x/tree-sitter/tree-sitter-executor.d.ts +3 -3
  360. package/r-bridge/lang-4.x/tree-sitter/tree-sitter-executor.js +5 -4
  361. package/r-bridge/lang-4.x/tree-sitter/tree-sitter-normalize.d.ts +3 -2
  362. package/r-bridge/lang-4.x/tree-sitter/tree-sitter-normalize.js +14 -5
  363. package/r-bridge/parser.d.ts +15 -5
  364. package/r-bridge/parser.js +27 -13
  365. package/r-bridge/retriever.d.ts +9 -15
  366. package/r-bridge/retriever.js +14 -5
  367. package/r-bridge/shell.d.ts +1 -1
  368. package/r-bridge/shell.js +1 -1
  369. package/reconstruct/auto-select/auto-select-defaults.d.ts +0 -1
  370. package/reconstruct/auto-select/magic-comments.js +1 -1
  371. package/reconstruct/reconstruct.d.ts +17 -9
  372. package/reconstruct/reconstruct.js +19 -8
  373. package/search/flowr-search.d.ts +12 -0
  374. package/search/search-executor/search-enrichers.d.ts +9 -2
  375. package/search/search-executor/search-enrichers.js +1 -3
  376. package/search/search-executor/search-generators.d.ts +1 -1
  377. package/search/search-executor/search-generators.js +9 -4
  378. package/slicing/criterion/collect-all.d.ts +3 -2
  379. package/slicing/criterion/collect-all.js +1 -1
  380. package/slicing/criterion/parse.js +4 -4
  381. package/slicing/static/slice-call.d.ts +3 -2
  382. package/slicing/static/slice-call.js +4 -4
  383. package/slicing/static/static-slicer.d.ts +3 -1
  384. package/slicing/static/static-slicer.js +6 -7
  385. package/statistics/features/supported/assignments/assignments.js +1 -1
  386. package/statistics/features/supported/control-flow/control-flow.js +2 -2
  387. package/statistics/features/supported/data-access/data-access.js +1 -1
  388. package/statistics/features/supported/defined-functions/defined-functions.js +1 -1
  389. package/statistics/features/supported/expression-list/statistics-expression-list.js +1 -1
  390. package/statistics/features/supported/loops/loops.js +1 -1
  391. package/statistics/features/supported/used-functions/used-functions.js +2 -2
  392. package/statistics/features/supported/variables/variables.js +3 -2
  393. package/statistics/statistics.js +3 -2
  394. package/util/assert.d.ts +4 -0
  395. package/util/assert.js +4 -0
  396. package/util/containers.js +1 -1
  397. package/util/files.d.ts +1 -1
  398. package/util/files.js +1 -1
  399. package/util/mermaid/ast.d.ts +4 -3
  400. package/util/mermaid/ast.js +36 -8
  401. package/util/mermaid/cfg.js +1 -1
  402. package/util/mermaid/dfg.d.ts +1 -0
  403. package/util/mermaid/dfg.js +3 -3
  404. package/util/simple-df/dfg-view.d.ts +2 -1
  405. package/util/simple-df/dfg-view.js +2 -2
  406. package/util/version.js +1 -1
  407. package/dataflow/environments/remove.d.ts +0 -12
  408. package/dataflow/environments/remove.js +0 -52
  409. package/documentation/print-analyzer-wiki.d.ts +0 -1
  410. package/documentation/print-analyzer-wiki.js +0 -141
  411. package/documentation/print-capabilities-markdown.d.ts +0 -1
  412. package/documentation/print-cfg-wiki.d.ts +0 -1
  413. package/documentation/print-core-wiki.d.ts +0 -5
  414. package/documentation/print-dataflow-graph-wiki.d.ts +0 -1
  415. package/documentation/print-engines-wiki.d.ts +0 -1
  416. package/documentation/print-faq-wiki.d.ts +0 -1
  417. package/documentation/print-faq-wiki.js +0 -18
  418. package/documentation/print-interface-wiki.d.ts +0 -1
  419. package/documentation/print-linter-issue.d.ts +0 -1
  420. package/documentation/print-linter-wiki.d.ts +0 -1
  421. package/documentation/print-linting-and-testing-wiki.d.ts +0 -1
  422. package/documentation/print-normalized-ast-wiki.d.ts +0 -1
  423. package/documentation/print-onboarding-wiki.d.ts +0 -1
  424. package/documentation/print-query-wiki.d.ts +0 -1
  425. package/documentation/print-readme.d.ts +0 -1
  426. package/documentation/print-search-wiki.d.ts +0 -1
  427. package/documentation/print-search-wiki.js +0 -74
  428. package/util/formats/adapter-format.d.ts +0 -6
  429. package/util/formats/adapter-format.js +0 -3
  430. package/util/formats/adapter.d.ts +0 -27
  431. package/util/formats/adapter.js +0 -58
  432. package/util/formats/adapters/r-adapter.d.ts +0 -4
  433. package/util/formats/adapters/r-adapter.js +0 -7
  434. package/util/formats/adapters/rmd-adapter.d.ts +0 -35
  435. package/util/formats/adapters/rmd-adapter.js +0 -100
@@ -8,10 +8,12 @@ export type ReplacementOperatorHandlerArgs = {
8
8
  };
9
9
  export type ReplacementOperatorHandler = (args: ReplacementOperatorHandlerArgs) => void;
10
10
  /**
11
- *
11
+ * Register a new (global) handler for replacement operators.
12
+ * @see {@link handleReplacementOperator}
12
13
  */
13
14
  export declare function onReplacementOperator(handler: ReplacementOperatorHandler): void;
14
15
  /**
15
- *
16
+ * Handle a replacement operator by calling all registered handlers.
17
+ * @see {@link onReplacementOperator}
16
18
  */
17
19
  export declare function handleReplacementOperator(args: ReplacementOperatorHandlerArgs): void;
@@ -4,13 +4,15 @@ exports.onReplacementOperator = onReplacementOperator;
4
4
  exports.handleReplacementOperator = handleReplacementOperator;
5
5
  const handlers = [];
6
6
  /**
7
- *
7
+ * Register a new (global) handler for replacement operators.
8
+ * @see {@link handleReplacementOperator}
8
9
  */
9
10
  function onReplacementOperator(handler) {
10
11
  handlers.push(handler);
11
12
  }
12
13
  /**
13
- *
14
+ * Handle a replacement operator by calling all registered handlers.
15
+ * @see {@link onReplacementOperator}
14
16
  */
15
17
  function handleReplacementOperator(args) {
16
18
  handlers.forEach(handler => handler(args));
@@ -7,9 +7,9 @@ import type { BuiltInMappingName } from '../environments/built-in';
7
7
  export declare enum VertexType {
8
8
  Value = "value",
9
9
  Use = "use",
10
- FunctionCall = "function-call",
11
- VariableDefinition = "variable-definition",
12
- FunctionDefinition = "function-definition"
10
+ FunctionCall = "fcall",
11
+ VariableDefinition = "vdef",
12
+ FunctionDefinition = "fdef"
13
13
  }
14
14
  export declare const ValidVertexTypes: Set<string>;
15
15
  export declare const ValidVertexTypeReverse: {
@@ -14,9 +14,9 @@ var VertexType;
14
14
  (function (VertexType) {
15
15
  VertexType["Value"] = "value";
16
16
  VertexType["Use"] = "use";
17
- VertexType["FunctionCall"] = "function-call";
18
- VertexType["VariableDefinition"] = "variable-definition";
19
- VertexType["FunctionDefinition"] = "function-definition";
17
+ VertexType["FunctionCall"] = "fcall";
18
+ VertexType["VariableDefinition"] = "vdef";
19
+ VertexType["FunctionDefinition"] = "fdef";
20
20
  })(VertexType || (exports.VertexType = VertexType = {}));
21
21
  exports.ValidVertexTypes = new Set(Object.values(VertexType));
22
22
  exports.ValidVertexTypeReverse = Object.fromEntries(Object.entries(VertexType).map(([k, v]) => [v, k]));
@@ -102,12 +102,19 @@ export interface DataflowInformation extends DataflowCfgInformation {
102
102
  * This is to be used as a "starting point" when processing leaf nodes during the dataflow extraction.
103
103
  * @see {@link DataflowInformation}
104
104
  */
105
- export declare function initializeCleanDataflowInformation<T>(entryPoint: NodeId, data: Pick<DataflowProcessorInformation<T>, 'environment' | 'builtInEnvironment' | 'completeAst'>): DataflowInformation;
105
+ export declare function initializeCleanDataflowInformation<T>(entryPoint: NodeId, data: Pick<DataflowProcessorInformation<T>, 'environment' | 'completeAst'>): DataflowInformation;
106
106
  /**
107
107
  * Checks whether the given control dependencies are exhaustive (i.e. if for every control dependency on a boolean,
108
108
  * the list contains a dependency on the `true` and on the `false` case).
109
+ * @see {@link happensInEveryBranchSet} - for the set-based version
109
110
  */
110
111
  export declare function happensInEveryBranch(controlDependencies: readonly ControlDependency[] | undefined): boolean;
112
+ /**
113
+ * Checks whether the given control dependencies are exhaustive (i.e. if for every control dependency on a boolean,
114
+ * the list contains a dependency on the `true` and on the `false` case).
115
+ * @see {@link happensInEveryBranch} - for the array-based version
116
+ */
117
+ export declare function happensInEveryBranchSet(controlDependencies: ReadonlySet<ControlDependency> | undefined): boolean;
111
118
  /**
112
119
  * Checks whether the given dataflow information always exits (i.e., if there is a non-default exit point in every branch).
113
120
  * @see {@link ExitPoint} - for the different types of exit points
package/dataflow/info.js CHANGED
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addNonDefaultExitPoints = addNonDefaultExitPoints;
4
4
  exports.initializeCleanDataflowInformation = initializeCleanDataflowInformation;
5
5
  exports.happensInEveryBranch = happensInEveryBranch;
6
+ exports.happensInEveryBranchSet = happensInEveryBranchSet;
6
7
  exports.alwaysExits = alwaysExits;
7
8
  exports.filterOutLoopExitPoints = filterOutLoopExitPoints;
8
9
  exports.diffControlDependency = diffControlDependency;
@@ -33,6 +34,7 @@ function initializeCleanDataflowInformation(entryPoint, data) {
33
34
  /**
34
35
  * Checks whether the given control dependencies are exhaustive (i.e. if for every control dependency on a boolean,
35
36
  * the list contains a dependency on the `true` and on the `false` case).
37
+ * @see {@link happensInEveryBranchSet} - for the set-based version
36
38
  */
37
39
  function happensInEveryBranch(controlDependencies) {
38
40
  if (controlDependencies === undefined) {
@@ -43,6 +45,9 @@ function happensInEveryBranch(controlDependencies) {
43
45
  /* this happens only when we have no idea and require more analysis */
44
46
  return false;
45
47
  }
48
+ return coversSet(controlDependencies);
49
+ }
50
+ function coversSet(controlDependencies) {
46
51
  const trues = [];
47
52
  const falseSet = new Set();
48
53
  for (const { id, when } of controlDependencies) {
@@ -55,6 +60,22 @@ function happensInEveryBranch(controlDependencies) {
55
60
  }
56
61
  return trues.every(id => falseSet.has(id));
57
62
  }
63
+ /**
64
+ * Checks whether the given control dependencies are exhaustive (i.e. if for every control dependency on a boolean,
65
+ * the list contains a dependency on the `true` and on the `false` case).
66
+ * @see {@link happensInEveryBranch} - for the array-based version
67
+ */
68
+ function happensInEveryBranchSet(controlDependencies) {
69
+ if (controlDependencies === undefined) {
70
+ /* the cds are unconstrained */
71
+ return true;
72
+ }
73
+ else if (controlDependencies.size === 0) {
74
+ /* this happens only when we have no idea and require more analysis */
75
+ return false;
76
+ }
77
+ return coversSet(controlDependencies);
78
+ }
58
79
  /**
59
80
  * Checks whether the given dataflow information always exits (i.e., if there is a non-default exit point in every branch).
60
81
  * @see {@link ExitPoint} - for the different types of exit points
@@ -29,9 +29,7 @@ const prefix_1 = require("../../util/prefix");
29
29
  */
30
30
  function findNonLocalReads(graph, ignore) {
31
31
  const ignores = new Set(ignore.map(i => i.nodeId));
32
- const ids = new Set(graph.vertices(true)
33
- .filter(([_, info]) => info.tag === vertex_1.VertexType.Use || info.tag === vertex_1.VertexType.FunctionCall)
34
- .map(([id, _]) => id));
32
+ const ids = new Set(graph.vertexIdsOfType(vertex_1.VertexType.Use).concat(graph.vertexIdsOfType(vertex_1.VertexType.FunctionCall)));
35
33
  /* find all variable use ids which do not link to a given id */
36
34
  const nonLocalReads = [];
37
35
  for (const id of ids) {
@@ -202,10 +200,8 @@ function linkFunctionCall(graph, id, info, idMap, thisGraph, calledFunctionDefin
202
200
  */
203
201
  function linkFunctionCalls(graph, idMap, thisGraph) {
204
202
  const calledFunctionDefinitions = [];
205
- for (const [id, info] of thisGraph.vertices(true)) {
206
- if (info.tag === vertex_1.VertexType.FunctionCall) {
207
- linkFunctionCall(graph, id, info, idMap, thisGraph, calledFunctionDefinitions);
208
- }
203
+ for (const [id, info] of thisGraph.verticesOfType(vertex_1.VertexType.FunctionCall)) {
204
+ linkFunctionCall(graph, id, info, idMap, thisGraph, calledFunctionDefinitions);
209
205
  }
210
206
  return calledFunctionDefinitions;
211
207
  }
@@ -241,7 +237,7 @@ function getAllFunctionCallTargets(call, graph, environment) {
241
237
  * Finds all linked function definitions starting from the given set of read ids.
242
238
  */
243
239
  function getAllLinkedFunctionDefinitions(functionDefinitionReadIds, dataflowGraph) {
244
- let potential = [...functionDefinitionReadIds];
240
+ let potential = functionDefinitionReadIds.values().toArray();
245
241
  const visited = new Set();
246
242
  const result = new Set();
247
243
  const builtIns = new Set();
@@ -257,8 +253,9 @@ function getAllLinkedFunctionDefinitions(functionDefinitionReadIds, dataflowGrap
257
253
  continue;
258
254
  }
259
255
  visited.add(currentId);
260
- const outgoingEdges = [...currentInfo[1]];
261
- const returnEdges = outgoingEdges.filter(([_, e]) => (0, edge_1.edgeIncludesType)(e.types, edge_1.EdgeType.Returns));
256
+ const outgoingEdges = currentInfo[1].entries().toArray();
257
+ const returnEdges = outgoingEdges
258
+ .filter(([_, e]) => (0, edge_1.edgeIncludesType)(e.types, edge_1.EdgeType.Returns));
262
259
  if (returnEdges.length > 0) {
263
260
  // only traverse return edges and do not follow `calls` etc. as this indicates that we have a function call which returns a result, and not the function calls itself
264
261
  potential = potential.concat(returnEdges.map(([target]) => target).filter(id => !visited.has(id)));
@@ -270,7 +267,9 @@ function getAllLinkedFunctionDefinitions(functionDefinitionReadIds, dataflowGrap
270
267
  result.add(currentInfo[0]);
271
268
  }
272
269
  // trace all joined reads
273
- potential = potential.concat(followEdges.map(([target]) => target).filter(id => !visited.has(id)));
270
+ potential = potential.concat(followEdges
271
+ .map(([target]) => target)
272
+ .filter(id => !visited.has(id)));
274
273
  }
275
274
  return [result, builtIns];
276
275
  }
@@ -3,10 +3,10 @@ import type { AstIdMap, ParentInformation } from '../../../../../../r-bridge/lan
3
3
  import { EmptyArgument } from '../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-function-call';
4
4
  import type { RUnnamedArgument } from '../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-argument';
5
5
  /**
6
- *
6
+ * Converts a normalized node into an unnamed argument (wraps it with an argument node).
7
7
  */
8
8
  export declare function toUnnamedArgument<OtherInfo>(node: RNode<OtherInfo & ParentInformation> | undefined, idMap: AstIdMap<OtherInfo>): RUnnamedArgument<OtherInfo & ParentInformation> | typeof EmptyArgument;
9
9
  /**
10
- *
10
+ * Wraps the given nodes as unnamed arguments where necessary.
11
11
  */
12
12
  export declare function wrapArgumentsUnnamed<OtherInfo>(nodes: readonly (RNode<OtherInfo & ParentInformation> | typeof EmptyArgument | undefined)[], idMap: AstIdMap<OtherInfo>): ("<>" | import("../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-argument").RArgument<OtherInfo & ParentInformation>)[];
@@ -7,7 +7,7 @@ const r_function_call_1 = require("../../../../../../r-bridge/lang-4.x/ast/model
7
7
  const type_1 = require("../../../../../../r-bridge/lang-4.x/ast/model/type");
8
8
  const voidRange = (0, range_1.rangeFrom)(-1, -1, -1, -1);
9
9
  /**
10
- *
10
+ * Converts a normalized node into an unnamed argument (wraps it with an argument node).
11
11
  */
12
12
  function toUnnamedArgument(node, idMap) {
13
13
  if (node === undefined) {
@@ -16,7 +16,6 @@ function toUnnamedArgument(node, idMap) {
16
16
  const arg = {
17
17
  type: type_1.RType.Argument,
18
18
  lexeme: node.lexeme ?? '',
19
- // is this correct?
20
19
  location: node.location ?? voidRange,
21
20
  info: {
22
21
  ...node.info,
@@ -29,7 +28,7 @@ function toUnnamedArgument(node, idMap) {
29
28
  return arg;
30
29
  }
31
30
  /**
32
- *
31
+ * Wraps the given nodes as unnamed arguments where necessary.
33
32
  */
34
33
  function wrapArgumentsUnnamed(nodes, idMap) {
35
34
  return nodes.map(n => n === r_function_call_1.EmptyArgument || n?.type === type_1.RType.Argument ? n : toUnnamedArgument(n, idMap));
@@ -2,5 +2,11 @@ import { type RFunctionArgument } from '../../../../../../r-bridge/lang-4.x/ast/
2
2
  import type { RNode } from '../../../../../../r-bridge/lang-4.x/ast/model/model';
3
3
  /**
4
4
  * Retrieve the value from an argument, if it is not empty.
5
+ * @see {@link unpackArg} - to specifically retrieve non-named arguments
5
6
  */
6
- export declare function unpackArgument<OtherInfo>(arg: RFunctionArgument<OtherInfo> | undefined, noNameOnly?: boolean): RNode<OtherInfo> | undefined;
7
+ export declare function unpackNonameArg<OtherInfo>(arg: RFunctionArgument<OtherInfo> | undefined): RNode<OtherInfo> | undefined;
8
+ /**
9
+ * Retrieve the value from a non-named argument, if it is not empty.
10
+ * @see {@link unpackNonameArg} - to specifically retrieve non-named arguments
11
+ */
12
+ export declare function unpackArg<OtherInfo>(arg: RFunctionArgument<OtherInfo> | undefined): RNode<OtherInfo> | undefined;
@@ -1,11 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.unpackArgument = unpackArgument;
3
+ exports.unpackNonameArg = unpackNonameArg;
4
+ exports.unpackArg = unpackArg;
4
5
  const r_function_call_1 = require("../../../../../../r-bridge/lang-4.x/ast/model/nodes/r-function-call");
5
6
  /**
6
7
  * Retrieve the value from an argument, if it is not empty.
8
+ * @see {@link unpackArg} - to specifically retrieve non-named arguments
7
9
  */
8
- function unpackArgument(arg, noNameOnly = true) {
9
- return arg === undefined || arg === r_function_call_1.EmptyArgument || (noNameOnly && arg.name) ? undefined : arg.value;
10
+ function unpackNonameArg(arg) {
11
+ return arg === r_function_call_1.EmptyArgument || arg?.name !== undefined ? undefined : arg?.value;
12
+ }
13
+ /**
14
+ * Retrieve the value from a non-named argument, if it is not empty.
15
+ * @see {@link unpackNonameArg} - to specifically retrieve non-named arguments
16
+ */
17
+ function unpackArg(arg) {
18
+ return arg === r_function_call_1.EmptyArgument ? undefined : arg?.value;
10
19
  }
11
20
  //# sourceMappingURL=unpack-argument.js.map
@@ -20,6 +20,6 @@ export declare function processAccess<OtherInfo>(name: RSymbol<OtherInfo & Paren
20
20
  treatIndicesAsString: boolean;
21
21
  } & ForceArguments): DataflowInformation;
22
22
  /**
23
- *
23
+ * Converts symbol arguments to string arguments within the specified range.
24
24
  */
25
25
  export declare function symbolArgumentsToStrings<OtherInfo>(args: readonly RFunctionArgument<OtherInfo & ParentInformation>[], firstIndexInclusive?: number, lastIndexInclusive?: number): RFunctionArgument<OtherInfo & ParentInformation>[];
@@ -7,12 +7,12 @@ const r_function_call_1 = require("../../../../../../r-bridge/lang-4.x/ast/model
7
7
  const logger_1 = require("../../../../../logger");
8
8
  const type_1 = require("../../../../../../r-bridge/lang-4.x/ast/model/type");
9
9
  const edge_1 = require("../../../../../graph/edge");
10
- const environment_1 = require("../../../../../environments/environment");
11
10
  const built_in_1 = require("../../../../../environments/built-in");
12
11
  const built_in_assignment_1 = require("./built-in-assignment");
13
12
  const identifier_1 = require("../../../../../environments/identifier");
14
13
  const vertex_1 = require("../../../../../graph/vertex");
15
14
  const containers_1 = require("../../../../../../util/containers");
15
+ const reference_to_maybe_1 = require("../../../../../environments/reference-to-maybe");
16
16
  function tableAssignmentProcessor(name, args, rootId, data, outInfo) {
17
17
  outInfo.definitionRootNodes.push(rootId);
18
18
  return (0, known_call_handling_1.processKnownFunctionCall)({ name, args, rootId, data, origin: 'table:assign' }).information;
@@ -71,12 +71,12 @@ function processAccess(name, args, rootId, data, config) {
71
71
  * ```
72
72
  * the read for a will use both accesses as potential definitions and not just the last one!
73
73
  */
74
- unknownReferences: (0, environment_1.makeAllMaybe)(info.unknownReferences, info.graph, info.environment, false),
74
+ unknownReferences: (0, reference_to_maybe_1.makeAllMaybe)(info.unknownReferences, info.graph, info.environment, false),
75
75
  entryPoint: rootId,
76
76
  /** it is, to be precise, the accessed element we want to map to maybe */
77
77
  in: head === r_function_call_1.EmptyArgument ? info.in : info.in.map(ref => {
78
78
  if (ref.nodeId === head.value?.info.id) {
79
- return (0, environment_1.makeReferenceMaybe)(ref, info.graph, info.environment, false);
79
+ return (0, reference_to_maybe_1.makeReferenceMaybe)(ref, info.graph, info.environment, false);
80
80
  }
81
81
  else {
82
82
  return ref;
@@ -114,16 +114,16 @@ function processNumberBasedAccess(data, name, args, rootId, config, head) {
114
114
  if (head.value && outInfo.definitionRootNodes.length > 0) {
115
115
  (0, built_in_assignment_1.markAsAssignment)(fnCall.information, { type: identifier_1.ReferenceType.Variable, name: head.value.lexeme ?? '', nodeId: head.value.info.id, definedAt: rootId, controlDependencies: [] }, outInfo.definitionRootNodes, rootId, data);
116
116
  }
117
- if (data.flowrConfig.solver.pointerTracking) {
117
+ if (data.ctx.config.solver.pointerTracking) {
118
118
  referenceAccessedIndices(args, data, fnCall, rootId, true);
119
119
  }
120
120
  return fnCall;
121
121
  }
122
122
  /**
123
- *
123
+ * Converts symbol arguments to string arguments within the specified range.
124
124
  */
125
125
  function symbolArgumentsToStrings(args, firstIndexInclusive = 1, lastIndexInclusive = args.length - 1) {
126
- const newArgs = [...args];
126
+ const newArgs = args.slice();
127
127
  // if the argument is a symbol, we convert it to a string for this perspective
128
128
  for (let i = firstIndexInclusive; i <= lastIndexInclusive; i++) {
129
129
  const arg = newArgs[i];
@@ -159,7 +159,7 @@ function processStringBasedAccess(args, data, name, rootId, config) {
159
159
  const fnCall = (0, known_call_handling_1.processKnownFunctionCall)({ name, args: newArgs, rootId, data, forceArgs: config.forceArgs,
160
160
  origin: 'builtin:access'
161
161
  });
162
- if (data.flowrConfig.solver.pointerTracking) {
162
+ if (data.ctx.config.solver.pointerTracking) {
163
163
  referenceAccessedIndices(newArgs, data, fnCall, rootId, false);
164
164
  }
165
165
  return fnCall;
@@ -60,7 +60,7 @@ function processApply(name, args, rootId, data, config) {
60
60
  else if (val.type === type_1.RType.Symbol) {
61
61
  functionId = val.info.id;
62
62
  if (resolveValue) {
63
- const resolved = (0, general_1.valueSetGuard)((0, alias_tracking_1.resolveIdToValue)(val.info.id, { environment: data.environment, idMap: data.completeAst.idMap, resolve: data.flowrConfig.solver.variables }));
63
+ const resolved = (0, general_1.valueSetGuard)((0, alias_tracking_1.resolveIdToValue)(val.info.id, { environment: data.environment, idMap: data.completeAst.idMap, resolve: data.ctx.config.solver.variables, ctx: data.ctx }));
64
64
  if (resolved?.elements.length === 1 && resolved.elements[0].type === 'string') {
65
65
  functionName = (0, r_value_1.isValue)(resolved.elements[0].value) ? resolved.elements[0].value.str : undefined;
66
66
  }
@@ -105,7 +105,7 @@ function processApply(name, args, rootId, data, config) {
105
105
  cds: data.controlDependencies,
106
106
  args: allOtherArguments, // same reference
107
107
  origin: ['function']
108
- });
108
+ }, data.ctx.env.makeCleanEnv());
109
109
  information.graph.addEdge(rootId, rootFnId, edge_1.EdgeType.Calls | edge_1.EdgeType.Reads);
110
110
  information.graph.addEdge(rootId, functionId, edge_1.EdgeType.Calls | edge_1.EdgeType.Argument);
111
111
  information = {
@@ -51,4 +51,6 @@ export interface AssignmentToSymbolParameters<OtherInfo> extends AssignmentConfi
51
51
  export declare function markAsAssignment<OtherInfo>(information: {
52
52
  environment: REnvironmentInformation;
53
53
  graph: DataflowGraph;
54
- }, nodeToDefine: InGraphIdentifierDefinition, sourceIds: readonly NodeId[], rootIdOfAssignment: NodeId, data: DataflowProcessorInformation<OtherInfo>, assignmentConfig?: AssignmentConfiguration): void;
54
+ }, nodeToDefine: InGraphIdentifierDefinition & {
55
+ name: string;
56
+ }, sourceIds: readonly NodeId[], rootIdOfAssignment: NodeId, data: DataflowProcessorInformation<OtherInfo>, assignmentConfig?: AssignmentConfiguration): void;
@@ -112,7 +112,7 @@ args, rootId, data, config) {
112
112
  }
113
113
  else {
114
114
  // try to resolve the variable first
115
- const n = (0, alias_tracking_1.resolveIdToValue)(target.info.id, { environment: data.environment, resolve: data.flowrConfig.solver.variables, idMap: data.completeAst.idMap, full: true });
115
+ const n = (0, alias_tracking_1.resolveIdToValue)(target.info.id, { environment: data.environment, resolve: data.ctx.config.solver.variables, idMap: data.completeAst.idMap, full: true, ctx: data.ctx });
116
116
  if (n.type === 'set' && n.elements.length === 1 && n.elements[0].type === 'string') {
117
117
  const val = n.elements[0].value;
118
118
  if ((0, r_value_1.isValue)(val)) {
@@ -187,8 +187,8 @@ args, rootId, data, config) {
187
187
  return info;
188
188
  }
189
189
  function extractSourceAndTarget(args) {
190
- const source = (0, unpack_argument_1.unpackArgument)(args[1], false);
191
- const target = (0, unpack_argument_1.unpackArgument)(args[0], false);
190
+ const source = (0, unpack_argument_1.unpackArg)(args[1]);
191
+ const target = (0, unpack_argument_1.unpackArg)(args[0]);
192
192
  return { source, target };
193
193
  }
194
194
  /**
@@ -259,7 +259,7 @@ function checkTargetReferenceType(source, sourceInfo) {
259
259
  * @param assignmentConfig - configuration for the assignment processing
260
260
  */
261
261
  function markAsAssignment(information, nodeToDefine, sourceIds, rootIdOfAssignment, data, assignmentConfig) {
262
- if (data.flowrConfig.solver.pointerTracking) {
262
+ if (data.ctx.config.solver.pointerTracking) {
263
263
  let indicesCollection = undefined;
264
264
  if (sourceIds.length === 1) {
265
265
  // support for tracking indices.
@@ -288,7 +288,7 @@ function markAsAssignment(information, nodeToDefine, sourceIds, rootIdOfAssignme
288
288
  }
289
289
  nodeToDefine.indicesCollection ??= indicesCollection;
290
290
  }
291
- information.environment = (0, define_1.define)(nodeToDefine, assignmentConfig?.superAssignment, information.environment, data.flowrConfig);
291
+ information.environment = (0, define_1.define)(nodeToDefine, assignmentConfig?.superAssignment, information.environment, data.ctx.config);
292
292
  information.graph.setDefinitionOfVertex(nodeToDefine);
293
293
  if (!assignmentConfig?.quoteSource) {
294
294
  for (const sourceId of sourceIds) {
@@ -343,7 +343,7 @@ function processAssignmentToSymbol(config) {
343
343
  unknownReferences: [],
344
344
  entryPoint: rootId,
345
345
  in: readTargets,
346
- out: [...writeNodes, ...readFromSourceWritten]
346
+ out: writeNodes.concat(readFromSourceWritten),
347
347
  };
348
348
  }
349
349
  //# sourceMappingURL=built-in-assignment.js.map
@@ -33,12 +33,12 @@ function processEvalCall(name, args, rootId, data, config) {
33
33
  if (config.includeFunctionCall) {
34
34
  information.graph.addEdge(rootId, args[0].value.info.id, edge_1.EdgeType.Returns);
35
35
  }
36
- if (!data.flowrConfig.solver.evalStrings) {
36
+ if (!data.ctx.config.solver.evalStrings) {
37
37
  (0, log_1.expensiveTrace)(logger_1.dataflowLogger, () => `Skipping eval call ${JSON.stringify(evalArgument)} (disabled in config file)`);
38
38
  (0, unknown_side_effect_1.handleUnknownSideEffect)(information.graph, information.environment, rootId);
39
39
  return information;
40
40
  }
41
- const code = resolveEvalToCode(evalArgument.value, data.environment, data.completeAst.idMap, data.flowrConfig);
41
+ const code = resolveEvalToCode(evalArgument.value, data.environment, data.completeAst.idMap, data.ctx);
42
42
  if (code) {
43
43
  const idGenerator = (0, decorate_1.sourcedDeterministicCountingIdGenerator)(name.lexeme + '::' + rootId, name.location);
44
44
  data = {
@@ -60,17 +60,17 @@ function processEvalCall(name, args, rootId, data, config) {
60
60
  graph: result.reduce((acc, r) => acc.mergeWith(r.graph), information.graph),
61
61
  environment: result.reduce((acc, r) => (0, append_1.appendEnvironment)(acc, r.environment), information.environment),
62
62
  entryPoint: rootId,
63
- out: [...information.out, ...result.flatMap(r => r.out)],
64
- in: [...information.in, ...result.flatMap(r => r.in)],
65
- unknownReferences: [...information.unknownReferences, ...result.flatMap(r => r.unknownReferences)],
66
- exitPoints: [...information.exitPoints, ...result.flatMap(r => r.exitPoints)],
63
+ out: information.out.concat(result.flatMap(r => r.out)),
64
+ in: information.in.concat(result.flatMap(r => r.in)),
65
+ unknownReferences: information.unknownReferences.concat(result.flatMap(r => r.unknownReferences)),
66
+ exitPoints: information.exitPoints.concat(result.flatMap(r => r.exitPoints)),
67
67
  };
68
68
  }
69
69
  (0, log_1.expensiveTrace)(logger_1.dataflowLogger, () => `Non-constant argument ${JSON.stringify(args)} for eval is currently not supported, skipping`);
70
70
  (0, unknown_side_effect_1.handleUnknownSideEffect)(information.graph, information.environment, rootId);
71
71
  return information;
72
72
  }
73
- function resolveEvalToCode(evalArgument, env, idMap, config) {
73
+ function resolveEvalToCode(evalArgument, env, idMap, ctx) {
74
74
  const val = evalArgument;
75
75
  if (val.type === type_1.RType.FunctionCall && val.named && val.functionName.content === 'parse') {
76
76
  const arg = val.arguments.find(v => v !== r_function_call_1.EmptyArgument && v.name?.content === 'text');
@@ -82,13 +82,13 @@ function resolveEvalToCode(evalArgument, env, idMap, config) {
82
82
  return [arg.value.content.str];
83
83
  }
84
84
  else if (arg.value?.type === type_1.RType.Symbol) {
85
- const resolved = (0, general_1.valueSetGuard)((0, alias_tracking_1.resolveIdToValue)(arg.value.info.id, { environment: env, idMap: idMap, resolve: config.solver.variables }));
85
+ const resolved = (0, general_1.valueSetGuard)((0, alias_tracking_1.resolveIdToValue)(arg.value.info.id, { environment: env, idMap: idMap, resolve: ctx.config.solver.variables, ctx }));
86
86
  if (resolved) {
87
87
  return (0, string_constants_1.collectStrings)(resolved.elements);
88
88
  }
89
89
  }
90
90
  else if (arg.value?.type === type_1.RType.FunctionCall && arg.value.named && ['paste', 'paste0'].includes(arg.value.functionName.content)) {
91
- return handlePaste(config, arg.value.arguments, env, idMap, arg.value.functionName.content === 'paste' ? [' '] : ['']);
91
+ return handlePaste(ctx.config, arg.value.arguments, env, idMap, arg.value.functionName.content === 'paste' ? [' '] : [''], ctx);
92
92
  }
93
93
  return undefined;
94
94
  }
@@ -101,7 +101,7 @@ function resolveEvalToCode(evalArgument, env, idMap, config) {
101
101
  return undefined;
102
102
  }
103
103
  }
104
- function getAsString(config, val, env, idMap) {
104
+ function getAsString(config, val, env, idMap, ctx) {
105
105
  if (!val) {
106
106
  return undefined;
107
107
  }
@@ -109,17 +109,17 @@ function getAsString(config, val, env, idMap) {
109
109
  return [val.content.str];
110
110
  }
111
111
  else if (val.type === type_1.RType.Symbol) {
112
- const resolved = (0, general_1.valueSetGuard)((0, alias_tracking_1.resolveIdToValue)(val.info.id, { environment: env, idMap: idMap, resolve: config.solver.variables }));
112
+ const resolved = (0, general_1.valueSetGuard)((0, alias_tracking_1.resolveIdToValue)(val.info.id, { environment: env, idMap: idMap, resolve: config.solver.variables, ctx }));
113
113
  if (resolved) {
114
114
  return (0, string_constants_1.collectStrings)(resolved.elements);
115
115
  }
116
116
  }
117
117
  return undefined;
118
118
  }
119
- function handlePaste(config, args, env, idMap, sepDefault) {
119
+ function handlePaste(config, args, env, idMap, sepDefault, ctx) {
120
120
  const sepArg = args.find(v => v !== r_function_call_1.EmptyArgument && v.name?.content === 'sep');
121
121
  if (sepArg) {
122
- const res = sepArg !== r_function_call_1.EmptyArgument && sepArg.value ? getAsString(config, sepArg.value, env, idMap) : undefined;
122
+ const res = sepArg !== r_function_call_1.EmptyArgument && sepArg.value ? getAsString(config, sepArg.value, env, idMap, ctx) : undefined;
123
123
  if (!res) {
124
124
  // sep not resolvable clearly / unknown
125
125
  return undefined;
@@ -128,7 +128,7 @@ function handlePaste(config, args, env, idMap, sepDefault) {
128
128
  }
129
129
  const allArgs = args
130
130
  .filter(v => v !== r_function_call_1.EmptyArgument && v.name?.content !== 'sep' && v.value)
131
- .map(v => getAsString(config, v.value, env, idMap));
131
+ .map(v => getAsString(config, v.value, env, idMap, ctx));
132
132
  if (allArgs.some(assert_1.isUndefined)) {
133
133
  return undefined;
134
134
  }
@@ -7,7 +7,6 @@ const linker_1 = require("../../../../linker");
7
7
  const assert_1 = require("../../../../../../util/assert");
8
8
  const unpack_argument_1 = require("../argument/unpack-argument");
9
9
  const common_1 = require("../common");
10
- const environment_1 = require("../../../../../environments/environment");
11
10
  const graph_1 = require("../../../../../graph/graph");
12
11
  const identifier_1 = require("../../../../../environments/identifier");
13
12
  const resolve_by_name_1 = require("../../../../../environments/resolve-by-name");
@@ -18,7 +17,7 @@ const built_in_1 = require("../../../../../environments/built-in");
18
17
  const overwrite_1 = require("../../../../../environments/overwrite");
19
18
  const logger_1 = require("../../../../../logger");
20
19
  const log_1 = require("../../../../../../util/log");
21
- const remove_1 = require("../../../../../environments/remove");
20
+ const reference_to_maybe_1 = require("../../../../../environments/reference-to-maybe");
22
21
  const dotDotDotAccess = /^\.\.\d+$/;
23
22
  function linkReadNameToWriteIfPossible(read, environments, listEnvironments, remainingRead, nextGraph) {
24
23
  const readName = read.name && dotDotDotAccess.test(read.name) ? '...' : read.name;
@@ -82,7 +81,10 @@ function updateSideEffectsForCalledFunctions(calledEnvs, inputEnvironment, nextG
82
81
  // we update all definitions to be linked with the corresponding function call
83
82
  // we, however, have to ignore expression-local writes!
84
83
  if (localDefs.length > 0) {
85
- environment = (0, remove_1.removeAll)(localDefs, environment);
84
+ environment = {
85
+ current: environment.current.removeAll(localDefs.filter(d => (0, assert_1.isNotUndefined)(d.name))),
86
+ level: environment.level
87
+ };
86
88
  }
87
89
  if (callDependencies === null) {
88
90
  callDependencies = nextGraph.getVertex(functionCall, true)?.cds;
@@ -97,7 +99,7 @@ function updateSideEffectsForCalledFunctions(calledEnvs, inputEnvironment, nextG
97
99
  *
98
100
  */
99
101
  function processExpressionList(name, args, rootId, data) {
100
- const expressions = args.map(e => (0, unpack_argument_1.unpackArgument)(e));
102
+ const expressions = args.map(unpack_argument_1.unpackNonameArg);
101
103
  (0, log_1.expensiveTrace)(logger_1.dataflowLogger, () => `[expr list] with ${expressions.length} expressions`);
102
104
  let { environment } = data;
103
105
  // used to detect if a "write" happens within the same expression list
@@ -124,9 +126,9 @@ function processExpressionList(name, args, rootId, data) {
124
126
  // if the expression contained next or break anywhere before the next loop, the "overwrite" should be an "append", because we do not know if the rest is executed
125
127
  // update the environments for the next iteration with the previous writes
126
128
  if (exitPoints.length > 0) {
127
- processed.out = (0, environment_1.makeAllMaybe)(processed.out, nextGraph, processed.environment, true);
128
- processed.in = (0, environment_1.makeAllMaybe)(processed.in, nextGraph, processed.environment, false);
129
- processed.unknownReferences = (0, environment_1.makeAllMaybe)(processed.unknownReferences, nextGraph, processed.environment, false);
129
+ processed.out = (0, reference_to_maybe_1.makeAllMaybe)(processed.out, nextGraph, processed.environment, true);
130
+ processed.in = (0, reference_to_maybe_1.makeAllMaybe)(processed.in, nextGraph, processed.environment, false);
131
+ processed.unknownReferences = (0, reference_to_maybe_1.makeAllMaybe)(processed.unknownReferences, nextGraph, processed.environment, false);
130
132
  }
131
133
  (0, info_1.addNonDefaultExitPoints)(exitPoints, processed.exitPoints);
132
134
  out = out.concat(processed.out);
@@ -153,7 +155,7 @@ function processExpressionList(name, args, rootId, data) {
153
155
  controlDependencies: data.controlDependencies
154
156
  });
155
157
  }
156
- const ingoing = [...remainingRead.values()].flat();
158
+ const ingoing = remainingRead.values().toArray().flat();
157
159
  const rootNode = data.completeAst.idMap.get(rootId);
158
160
  const withGroup = rootNode?.grouping;
159
161
  if (withGroup) {
@@ -12,9 +12,9 @@ const logger_1 = require("../../../../../logger");
12
12
  const overwrite_1 = require("../../../../../environments/overwrite");
13
13
  const define_1 = require("../../../../../environments/define");
14
14
  const append_1 = require("../../../../../environments/append");
15
- const environment_1 = require("../../../../../environments/environment");
16
15
  const edge_1 = require("../../../../../graph/edge");
17
16
  const identifier_1 = require("../../../../../environments/identifier");
17
+ const reference_to_maybe_1 = require("../../../../../environments/reference-to-maybe");
18
18
  /**
19
19
  *
20
20
  */
@@ -23,7 +23,7 @@ function processForLoop(name, args, rootId, data) {
23
23
  logger_1.dataflowLogger.warn(`For-Loop ${name.content} does not have three arguments, skipping`);
24
24
  return (0, known_call_handling_1.processKnownFunctionCall)({ name, args, rootId, data, origin: 'default' }).information;
25
25
  }
26
- const [variableArg, vectorArg, bodyArg] = args.map(e => (0, unpack_argument_1.unpackArgument)(e));
26
+ const [variableArg, vectorArg, bodyArg] = args.map(e => (0, unpack_argument_1.unpackNonameArg)(e));
27
27
  (0, assert_1.guard)(variableArg !== undefined && vectorArg !== undefined && bodyArg !== undefined, () => `For-Loop ${JSON.stringify(args)} has missing arguments! Bad!`);
28
28
  const vector = (0, processor_1.processDataflowFor)(vectorArg, data);
29
29
  if ((0, info_1.alwaysExits)(vector)) {
@@ -37,7 +37,7 @@ function processForLoop(name, args, rootId, data) {
37
37
  const headGraph = variable.graph.mergeWith(vector.graph);
38
38
  const writtenVariable = variable.unknownReferences.concat(variable.in);
39
39
  for (const write of writtenVariable) {
40
- headEnvironments = (0, define_1.define)({ ...write, definedAt: name.info.id, type: identifier_1.ReferenceType.Variable }, false, headEnvironments, data.flowrConfig);
40
+ headEnvironments = (0, define_1.define)({ ...write, definedAt: name.info.id, type: identifier_1.ReferenceType.Variable }, false, headEnvironments, data.ctx.config);
41
41
  }
42
42
  data = { ...data, controlDependencies: [...data.controlDependencies ?? [], { id: name.info.id, when: true }], environment: headEnvironments };
43
43
  const body = (0, processor_1.processDataflowFor)(bodyArg, data);
@@ -50,7 +50,7 @@ function processForLoop(name, args, rootId, data) {
50
50
  nextGraph.addEdge(write.nodeId, vector.entryPoint, edge_1.EdgeType.DefinedBy);
51
51
  nextGraph.setDefinitionOfVertex(write);
52
52
  }
53
- const outgoing = variable.out.concat(writtenVariable, (0, environment_1.makeAllMaybe)(body.out, nextGraph, outEnvironment, true));
53
+ const outgoing = variable.out.concat(writtenVariable, (0, reference_to_maybe_1.makeAllMaybe)(body.out, nextGraph, outEnvironment, true));
54
54
  (0, linker_1.linkCircularRedefinitionsWithinALoop)(nextGraph, nameIdShares, body.out);
55
55
  (0, linker_1.reapplyLoopExitPoints)(body.exitPoints, body.in.concat(body.out, body.unknownReferences));
56
56
  (0, common_1.patchFunctionCall)({
@@ -6,6 +6,7 @@ import { type RFunctionArgument } from '../../../../../../r-bridge/lang-4.x/ast/
6
6
  import type { NodeId } from '../../../../../../r-bridge/lang-4.x/ast/model/processing/node-id';
7
7
  import { DataflowGraph } from '../../../../../graph/graph';
8
8
  import { type REnvironmentInformation } from '../../../../../environments/environment';
9
+ import type { ReadOnlyFlowrAnalyzerContext } from '../../../../../../project/context/flowr-analyzer-context';
9
10
  /**
10
11
  * Process a function definition, i.e., `function(a, b) { ... }`
11
12
  */
@@ -13,7 +14,7 @@ export declare function processFunctionDefinition<OtherInfo>(name: RSymbol<Other
13
14
  /**
14
15
  *
15
16
  */
16
- export declare function retrieveActiveEnvironment(callerEnvironment: REnvironmentInformation | undefined, baseEnvironment: REnvironmentInformation): REnvironmentInformation;
17
+ export declare function retrieveActiveEnvironment(callerEnvironment: REnvironmentInformation | undefined, baseEnvironment: REnvironmentInformation, ctx: ReadOnlyFlowrAnalyzerContext): REnvironmentInformation;
17
18
  /**
18
19
  * Update the closure links of all nested function definitions
19
20
  * @param graph - dataflow graph to collect the function definitions from and to update the closure links for