@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
@@ -0,0 +1,132 @@
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.FlowrRMarkdownFile = void 0;
7
+ exports.parseRMarkdownFile = parseRMarkdownFile;
8
+ exports.isRCodeBlock = isRCodeBlock;
9
+ exports.restoreBlocksWithoutMd = restoreBlocksWithoutMd;
10
+ exports.parseCodeBlockOptions = parseCodeBlockOptions;
11
+ const flowr_file_1 = require("../../../context/flowr-file");
12
+ const assert_1 = require("../../../../util/assert");
13
+ const commonmark_1 = require("commonmark");
14
+ const gray_matter_1 = __importDefault(require("gray-matter"));
15
+ /**
16
+ * This decorates a text file and parses its contents as a R Markdown file.
17
+ * Finnaly, it provides access to the single cells, and all cells fused together as one R file.
18
+ */
19
+ class FlowrRMarkdownFile extends flowr_file_1.FlowrFile {
20
+ data;
21
+ wrapped;
22
+ /**
23
+ * Prefer the static {@link FlowrRMarkdownFile.from} method
24
+ * @param file - the file to load as R Markdown
25
+ */
26
+ constructor(file) {
27
+ super(file.path(), flowr_file_1.FileRole.Source);
28
+ this.wrapped = file;
29
+ }
30
+ get rmd() {
31
+ if (!this.data) {
32
+ this.loadContent();
33
+ }
34
+ (0, assert_1.guard)(this.data);
35
+ return this.data;
36
+ }
37
+ /**
38
+ * Loads and parses the content of the wrapped file.
39
+ * @returns RmdInfo
40
+ */
41
+ loadContent() {
42
+ this.data = parseRMarkdownFile(this.wrapped.content());
43
+ return this.data.content;
44
+ }
45
+ static from(file) {
46
+ return file instanceof FlowrRMarkdownFile ? file : new FlowrRMarkdownFile(file);
47
+ }
48
+ }
49
+ exports.FlowrRMarkdownFile = FlowrRMarkdownFile;
50
+ /**
51
+ * Parse the contents of a RMarkdown file into complete code and blocks
52
+ * @param raw - the raw file content
53
+ * @returns Rmd Info
54
+ */
55
+ function parseRMarkdownFile(raw) {
56
+ // Read and Parse Markdown
57
+ const parser = new commonmark_1.Parser();
58
+ const ast = parser.parse(raw);
59
+ // Parse Frontmatter
60
+ const frontmatter = (0, gray_matter_1.default)(raw);
61
+ // Parse Codeblocks
62
+ const walker = ast.walker();
63
+ const blocks = [];
64
+ let e;
65
+ while ((e = walker.next())) {
66
+ const node = e.node;
67
+ if (!isRCodeBlock(node)) {
68
+ continue;
69
+ }
70
+ blocks.push({
71
+ code: node.literal,
72
+ options: parseCodeBlockOptions(node.info, node.literal),
73
+ startpos: { line: node.sourcepos[0][0] + 1, col: 0 }
74
+ });
75
+ }
76
+ return {
77
+ content: restoreBlocksWithoutMd(blocks, countNewlines(raw)),
78
+ // eslint-disable-next-line unused-imports/no-unused-vars
79
+ blocks: blocks.map(({ startpos, ...block }) => block),
80
+ options: frontmatter.data
81
+ };
82
+ }
83
+ const RTagRegex = /{[rR](?:[\s,][^}]*)?}/;
84
+ /**
85
+ * Checks whether a CommonMark node is an R code block
86
+ */
87
+ function isRCodeBlock(node) {
88
+ return node.type === 'code_block' && node.literal !== null && node.info !== null && RTagRegex.test(node.info);
89
+ }
90
+ const LineRegex = /\r\n|\r|\n/;
91
+ function countNewlines(str) {
92
+ return str.split(LineRegex).length - 1;
93
+ }
94
+ /**
95
+ * Restores an Rmd file from code blocks, filling non-code lines with empty lines
96
+ */
97
+ function restoreBlocksWithoutMd(blocks, totalLines) {
98
+ let line = 1;
99
+ let output = '';
100
+ const goToLine = (n) => {
101
+ const diff = n - line;
102
+ (0, assert_1.guard)(diff >= 0);
103
+ line += diff;
104
+ output += '\n'.repeat(diff);
105
+ };
106
+ for (const block of blocks) {
107
+ goToLine(block.startpos.line);
108
+ output += block.code;
109
+ line += countNewlines(block.code);
110
+ }
111
+ // Add remainder of file
112
+ goToLine(totalLines + 1);
113
+ return output;
114
+ }
115
+ /**
116
+ * Parses the options of an R code block from its header and content
117
+ */
118
+ function parseCodeBlockOptions(header, content) {
119
+ let opts = header.length === 3 // '{r}' => header.length=3 (no options in header)
120
+ ? ''
121
+ : header.substring(3, header.length - 1).trim();
122
+ const lines = content.split('\n');
123
+ for (const line of lines) {
124
+ if (!line.trim().startsWith('#|')) {
125
+ break;
126
+ }
127
+ const opt = line.substring(3);
128
+ opts += opts.length === 0 ? opt : `, ${opt}`;
129
+ }
130
+ return opts;
131
+ }
132
+ //# sourceMappingURL=flowr-rmarkdown-file.js.map
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=notebook.js.map
@@ -0,0 +1,5 @@
1
+ import type { FlowrAnalyzerPlugin } from './flowr-analyzer-plugin';
2
+ /**
3
+ * Provides the default set of Flowr Analyzer plugins.
4
+ */
5
+ export declare function FlowrAnalyzerPluginDefaults(): FlowrAnalyzerPlugin[];
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FlowrAnalyzerPluginDefaults = FlowrAnalyzerPluginDefaults;
4
+ const flowr_analyzer_description_file_plugin_1 = require("./file-plugins/flowr-analyzer-description-file-plugin");
5
+ const flowr_analyzer_package_versions_description_file_plugin_1 = require("./package-version-plugins/flowr-analyzer-package-versions-description-file-plugin");
6
+ const flowr_analyzer_loading_order_description_file_plugin_1 = require("./loading-order-plugins/flowr-analyzer-loading-order-description-file-plugin");
7
+ const flowr_analyzer_rmd_file_plugin_1 = require("./file-plugins/notebooks/flowr-analyzer-rmd-file-plugin");
8
+ const flowr_analyzer_qmd_file_plugin_1 = require("./file-plugins/notebooks/flowr-analyzer-qmd-file-plugin");
9
+ const flowr_analyzer_jupyter_file_plugin_1 = require("./file-plugins/notebooks/flowr-analyzer-jupyter-file-plugin");
10
+ /**
11
+ * Provides the default set of Flowr Analyzer plugins.
12
+ */
13
+ function FlowrAnalyzerPluginDefaults() {
14
+ return [
15
+ new flowr_analyzer_description_file_plugin_1.FlowrAnalyzerDescriptionFilePlugin(),
16
+ new flowr_analyzer_package_versions_description_file_plugin_1.FlowrAnalyzerPackageVersionsDescriptionFilePlugin(),
17
+ new flowr_analyzer_loading_order_description_file_plugin_1.FlowrAnalyzerLoadingOrderDescriptionFilePlugin(),
18
+ new flowr_analyzer_rmd_file_plugin_1.FlowrAnalyzerRmdFilePlugin(),
19
+ new flowr_analyzer_qmd_file_plugin_1.FlowrAnalyzerQmdFilePlugin(),
20
+ new flowr_analyzer_jupyter_file_plugin_1.FlowrAnalyzerJupyterFilePlugin(),
21
+ ];
22
+ }
23
+ //# sourceMappingURL=flowr-analyzer-plugin-defaults.js.map
@@ -72,6 +72,8 @@ export interface FlowrAnalyzerPluginInterface<In = unknown, Out = In> {
72
72
  * **Please do not create plugins directly based on this class, but use the classes referenced alongside the {@link PluginType} values!**
73
73
  * For example, if you want to create a plugin that determines the loading order of files, extend {@link FlowrAnalyzerLoadingOrderPlugin} instead.
74
74
  * These classes also provide sensible overrides of {@link FlowrAnalyzerPlugin.defaultPlugin} to be used when no plugin of this type is registered or triggered.
75
+ *
76
+ * For a collection of default plugins, see {@link FlowrAnalyzerPluginDefaults}.
75
77
  */
76
78
  export declare abstract class FlowrAnalyzerPlugin<In = unknown, Out extends AsyncOrSync<unknown> = In> implements FlowrAnalyzerPluginInterface<In, Out> {
77
79
  abstract readonly name: string;
@@ -52,6 +52,8 @@ const generalPluginLog = log_1.log.getSubLogger({ name: 'plugins' });
52
52
  * **Please do not create plugins directly based on this class, but use the classes referenced alongside the {@link PluginType} values!**
53
53
  * For example, if you want to create a plugin that determines the loading order of files, extend {@link FlowrAnalyzerLoadingOrderPlugin} instead.
54
54
  * These classes also provide sensible overrides of {@link FlowrAnalyzerPlugin.defaultPlugin} to be used when no plugin of this type is registered or triggered.
55
+ *
56
+ * For a collection of default plugins, see {@link FlowrAnalyzerPluginDefaults}.
55
57
  */
56
58
  class FlowrAnalyzerPlugin {
57
59
  /**
@@ -15,7 +15,7 @@ class FlowrAnalyzerLoadingOrderDescriptionFilePlugin extends flowr_analyzer_load
15
15
  description = 'This plugin determines loading order based on the Collate field in DESCRIPTION files.';
16
16
  version = new semver_1.SemVer('0.1.0');
17
17
  process(ctx) {
18
- const descFiles = ctx.files.getFilesByRole(flowr_file_1.SpecialFileRole.Description);
18
+ const descFiles = ctx.files.getFilesByRole(flowr_file_1.FileRole.Description);
19
19
  if (descFiles.length !== 1) {
20
20
  flowr_analyzer_description_file_plugin_1.descriptionFileLog.warn(`Supporting only exactly one DESCRIPTION file, found ${descFiles.length}`);
21
21
  return;
@@ -16,7 +16,7 @@ class FlowrAnalyzerPackageVersionsDescriptionFilePlugin extends flowr_analyzer_p
16
16
  description = 'This plugin does...';
17
17
  version = new semver_1.SemVer('0.1.0');
18
18
  process(ctx) {
19
- const descFiles = ctx.files.getFilesByRole(flowr_file_1.SpecialFileRole.Description);
19
+ const descFiles = ctx.files.getFilesByRole(flowr_file_1.FileRole.Description);
20
20
  if (descFiles.length !== 1) {
21
21
  flowr_analyzer_description_file_plugin_1.descriptionFileLog.warn(`Supporting only exactly one DESCRIPTION file, found ${descFiles.length}`);
22
22
  return;
@@ -0,0 +1,34 @@
1
+ import type { FlowrAnalyzerPlugin } from './flowr-analyzer-plugin';
2
+ import { FlowrAnalyzerDescriptionFilePlugin } from './file-plugins/flowr-analyzer-description-file-plugin';
3
+ import { FlowrAnalyzerPackageVersionsDescriptionFilePlugin } from './package-version-plugins/flowr-analyzer-package-versions-description-file-plugin';
4
+ import { FlowrAnalyzerLoadingOrderDescriptionFilePlugin } from './loading-order-plugins/flowr-analyzer-loading-order-description-file-plugin';
5
+ import { FlowrAnalyzerRmdFilePlugin } from './file-plugins/notebooks/flowr-analyzer-rmd-file-plugin';
6
+ import { FlowrAnalyzerQmdFilePlugin } from './file-plugins/notebooks/flowr-analyzer-qmd-file-plugin';
7
+ import { FlowrAnalyzerJupyterFilePlugin } from './file-plugins/notebooks/flowr-analyzer-jupyter-file-plugin';
8
+ /**
9
+ * The built-in Flowr Analyzer plugins that are always available.
10
+ */
11
+ export declare const BuiltInPlugins: [["file:description", typeof FlowrAnalyzerDescriptionFilePlugin], ["versions:description", typeof FlowrAnalyzerPackageVersionsDescriptionFilePlugin], ["loading-order:description", typeof FlowrAnalyzerLoadingOrderDescriptionFilePlugin], ["file:rmd", typeof FlowrAnalyzerRmdFilePlugin], ["file:qmd", typeof FlowrAnalyzerQmdFilePlugin], ["file:ipynb", typeof FlowrAnalyzerJupyterFilePlugin]];
12
+ export type BuiltInFlowrPluginName = typeof BuiltInPlugins[number][0];
13
+ export type BuiltInFlowrPluginArgs<N extends BuiltInFlowrPluginName> = N extends typeof BuiltInPlugins[number][0] ? ConstructorParameters<Extract<typeof BuiltInPlugins[number], [N, PluginProducer]>[1]> : never;
14
+ type PluginProducer = new (...args: never[]) => FlowrAnalyzerPlugin;
15
+ /**
16
+ * Register a new Flowr Analyzer plugin for the registry,
17
+ * to be used by the {@link FlowrAnalyzerBuilder} and {@link FlowrAnalyzer}.
18
+ */
19
+ export declare function registerPluginMaker(plugin: PluginProducer, name?: Exclude<string, BuiltInFlowrPluginName>): void;
20
+ export declare function getPlugin(name: BuiltInFlowrPluginName, args: BuiltInFlowrPluginArgs<typeof name>): FlowrAnalyzerPlugin;
21
+ export declare function getPlugin(name: string, args?: unknown[]): FlowrAnalyzerPlugin | undefined;
22
+ /**
23
+ * The type used to register a plugin with the {@link FlowrAnalyzerBuilder}.
24
+ * @see {@link makePlugin}
25
+ */
26
+ export type PluginToRegister<T extends BuiltInFlowrPluginName | string> = FlowrAnalyzerPlugin | T | string | (T extends BuiltInFlowrPluginName ? [
27
+ T,
28
+ BuiltInFlowrPluginArgs<T>
29
+ ] : [string, unknown[]]);
30
+ /**
31
+ * Create a Flowr Analyzer plugin from a {@link PluginToRegister} specification.
32
+ */
33
+ export declare function makePlugin<T extends BuiltInFlowrPluginName | string>(toRegister: PluginToRegister<T>): FlowrAnalyzerPlugin;
34
+ export {};
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BuiltInPlugins = void 0;
4
+ exports.registerPluginMaker = registerPluginMaker;
5
+ exports.getPlugin = getPlugin;
6
+ exports.makePlugin = makePlugin;
7
+ const flowr_analyzer_description_file_plugin_1 = require("./file-plugins/flowr-analyzer-description-file-plugin");
8
+ const flowr_analyzer_package_versions_description_file_plugin_1 = require("./package-version-plugins/flowr-analyzer-package-versions-description-file-plugin");
9
+ const flowr_analyzer_loading_order_description_file_plugin_1 = require("./loading-order-plugins/flowr-analyzer-loading-order-description-file-plugin");
10
+ const flowr_analyzer_rmd_file_plugin_1 = require("./file-plugins/notebooks/flowr-analyzer-rmd-file-plugin");
11
+ const flowr_analyzer_qmd_file_plugin_1 = require("./file-plugins/notebooks/flowr-analyzer-qmd-file-plugin");
12
+ const assert_1 = require("../../util/assert");
13
+ const flowr_analyzer_jupyter_file_plugin_1 = require("./file-plugins/notebooks/flowr-analyzer-jupyter-file-plugin");
14
+ /**
15
+ * The built-in Flowr Analyzer plugins that are always available.
16
+ */
17
+ exports.BuiltInPlugins = [
18
+ ['file:description', flowr_analyzer_description_file_plugin_1.FlowrAnalyzerDescriptionFilePlugin],
19
+ ['versions:description', flowr_analyzer_package_versions_description_file_plugin_1.FlowrAnalyzerPackageVersionsDescriptionFilePlugin],
20
+ ['loading-order:description', flowr_analyzer_loading_order_description_file_plugin_1.FlowrAnalyzerLoadingOrderDescriptionFilePlugin],
21
+ ['file:rmd', flowr_analyzer_rmd_file_plugin_1.FlowrAnalyzerRmdFilePlugin],
22
+ ['file:qmd', flowr_analyzer_qmd_file_plugin_1.FlowrAnalyzerQmdFilePlugin],
23
+ ['file:ipynb', flowr_analyzer_jupyter_file_plugin_1.FlowrAnalyzerJupyterFilePlugin],
24
+ ];
25
+ /**
26
+ * The registry of built-in and user-registered Flowr Analyzer plugins.
27
+ * Used by the {@link FlowrAnalyzerBuilder} and {@link FlowrAnalyzer} to instantiate plugins by name.
28
+ */
29
+ const PluginRegistry = new Map(exports.BuiltInPlugins);
30
+ /**
31
+ * Register a new Flowr Analyzer plugin for the registry,
32
+ * to be used by the {@link FlowrAnalyzerBuilder} and {@link FlowrAnalyzer}.
33
+ */
34
+ function registerPluginMaker(plugin, name = plugin.name) {
35
+ PluginRegistry.set(name, plugin);
36
+ }
37
+ /**
38
+ * Retrieve a registered Flowr Analyzer plugin by its name.
39
+ * @see {@link PluginToRegister}
40
+ */
41
+ function getPlugin(name, args) {
42
+ const plugin = PluginRegistry.get(name);
43
+ return plugin ? new plugin(...args) : undefined;
44
+ }
45
+ /**
46
+ * Create a Flowr Analyzer plugin from a {@link PluginToRegister} specification.
47
+ */
48
+ function makePlugin(toRegister) {
49
+ if (toRegister instanceof Object && 'process' in toRegister) {
50
+ return toRegister;
51
+ }
52
+ if (Array.isArray(toRegister)) {
53
+ const [name, args] = toRegister;
54
+ const plugin = getPlugin(name, args);
55
+ (0, assert_1.guard)(plugin !== undefined, () => `Unknown Flowr Analyzer plugin: ${name.toString()}`);
56
+ return plugin;
57
+ }
58
+ const plugin = getPlugin(toRegister, []);
59
+ (0, assert_1.guard)(plugin !== undefined, () => `Unknown Flowr Analyzer plugin: ${toRegister.toString()}`);
60
+ return plugin;
61
+ }
62
+ //# sourceMappingURL=plugin-registry.js.map
@@ -19,6 +19,7 @@ class FlowrAnalyzerProjectDiscoveryPlugin extends flowr_analyzer_plugin_1.FlowrA
19
19
  }
20
20
  }
21
21
  exports.FlowrAnalyzerProjectDiscoveryPlugin = FlowrAnalyzerProjectDiscoveryPlugin;
22
+ const discoverRSourcesRegex = /\.(r|rmd|ipynb|qmd)$/i;
22
23
  /**
23
24
  * This is the default dummy implementation of the {@link FlowrAnalyzerProjectDiscoveryPlugin}.
24
25
  * It simply collects all files in the given folder and returns them as either {@link RParseRequest} (for R and Rmd files) or {@link FlowrTextFile} (for all other files).
@@ -27,11 +28,16 @@ class DefaultFlowrAnalyzerProjectDiscoveryPlugin extends FlowrAnalyzerProjectDis
27
28
  name = 'default-project-discovery-plugin';
28
29
  description = 'This is the default project discovery plugin that does nothing.';
29
30
  version = new semver_1.SemVer('0.0.0');
31
+ supportedExtensions;
32
+ constructor(triggerOnExtensions = discoverRSourcesRegex) {
33
+ super();
34
+ this.supportedExtensions = triggerOnExtensions;
35
+ }
30
36
  process(_context, args) {
31
37
  const requests = [];
32
38
  /* the dummy approach of collecting all files, group R and Rmd files, and be done with it */
33
39
  for (const file of (0, files_1.getAllFilesSync)(args.content)) {
34
- if (file.endsWith('.R') || file.endsWith('.r') || file.endsWith('.Rmd') || file.endsWith('.rmd')) {
40
+ if (this.supportedExtensions.test(file)) {
35
41
  requests.push({ content: file, request: 'file' });
36
42
  }
37
43
  else {
@@ -9,6 +9,7 @@ const two_layer_collector_1 = require("../../two-layer-collector");
9
9
  const objects_1 = require("../../../util/objects");
10
10
  const identify_link_to_last_call_relation_1 = require("./identify-link-to-last-call-relation");
11
11
  const cfg_kind_1 = require("../../../project/cfg-kind");
12
+ const extract_cfg_1 = require("../../../control-flow/extract-cfg");
12
13
  /* if the node is effected by nse, we have an ingoing nse edge */
13
14
  function isQuoted(node, graph) {
14
15
  const vertex = graph.ingoingEdges(node);
@@ -191,10 +192,7 @@ async function executeCallContextQueries({ analyzer }, queries) {
191
192
  cfg = await analyzer.controlflow([], cfg_kind_1.CfgKind.WithDataflow);
192
193
  }
193
194
  const queriesWhichWantAliases = promotedQueries.filter(q => q.includeAliases);
194
- for (const [nodeId, info] of dataflow.graph.vertices(true)) {
195
- if (info.tag !== vertex_1.VertexType.FunctionCall) {
196
- continue;
197
- }
195
+ for (const [nodeId, info] of dataflow.graph.verticesOfType(vertex_1.VertexType.FunctionCall)) {
198
196
  /* if we have a vertex, and we check for aliased calls, we want to know if we define this as desired! */
199
197
  if (queriesWhichWantAliases.length > 0) {
200
198
  /*
@@ -211,6 +209,7 @@ async function executeCallContextQueries({ analyzer }, queries) {
211
209
  }
212
210
  }
213
211
  }
212
+ const calls = cfg ? (0, extract_cfg_1.getCallsInCfg)(cfg, dataflow.graph) : undefined;
214
213
  for (const query of promotedQueries.filter(q => !q.includeAliases && (q.callName instanceof RegExp ? q.callName.test(info.name) : q.callName.has(info.name)))) {
215
214
  const file = ast.idMap.get(nodeId)?.info.file;
216
215
  if (!doesFilepathMatch(file, query.fileFilter)) {
@@ -218,7 +217,7 @@ async function executeCallContextQueries({ analyzer }, queries) {
218
217
  }
219
218
  let targets = undefined;
220
219
  if (query.callTargets) {
221
- targets = (0, identify_link_to_last_call_relation_1.satisfiesCallTargets)(nodeId, dataflow.graph, query.callTargets);
220
+ targets = (0, identify_link_to_last_call_relation_1.satisfiesCallTargets)(info, dataflow.graph, query.callTargets);
222
221
  if (targets === 'no') {
223
222
  continue;
224
223
  }
@@ -235,7 +234,7 @@ async function executeCallContextQueries({ analyzer }, queries) {
235
234
  const linked = Array.isArray(query.linkTo) ? query.linkTo : [query.linkTo];
236
235
  for (const link of linked) {
237
236
  /* if we have a linkTo query, we have to find the last call */
238
- const lastCall = (0, identify_link_to_last_call_relation_1.identifyLinkToLastCallRelation)(nodeId, cfg.graph, dataflow.graph, link);
237
+ const lastCall = (0, identify_link_to_last_call_relation_1.identifyLinkToLastCallRelation)(nodeId, cfg.graph, dataflow.graph, link, calls);
239
238
  if (lastCall) {
240
239
  linkedIds ??= new Set();
241
240
  for (const l of lastCall) {
@@ -21,7 +21,7 @@ export declare enum CallTargets {
21
21
  /**
22
22
  * Determines whether the given function call node satisfies the specified call target condition.
23
23
  */
24
- export declare function satisfiesCallTargets(id: NodeId, graph: DataflowGraph, callTarget: CallTargets): NodeId[] | 'no';
24
+ export declare function satisfiesCallTargets(info: DataflowGraphVertexFunctionCall, graph: DataflowGraph, callTarget: CallTargets): NodeId[] | 'no';
25
25
  /**
26
26
  * Gets the value node of the specified argument in the given function call, if it exists and matches the allowed types.
27
27
  */
@@ -33,5 +33,8 @@ export declare function getValueOfArgument<Types extends readonly RType[] = read
33
33
  }) | undefined;
34
34
  /**
35
35
  * Identifies nodes that link to the last call of a specified function from a given starting node in the control flow graph.
36
+ * If you pass on `knownCalls` (e.g., produced by {@link getCallsInCfg}), this will only respect the functions
37
+ * listed there and ignore any other calls. This can be also used to speed up the process if you already have
38
+ * the known calls available.
36
39
  */
37
- export declare function identifyLinkToLastCallRelation(from: NodeId, cfg: ControlFlowGraph, graph: DataflowGraph, { callName, ignoreIf, cascadeIf }: LinkTo<RegExp> | PromotedLinkTo): NodeId[];
40
+ export declare function identifyLinkToLastCallRelation(from: NodeId, cfg: ControlFlowGraph, graph: DataflowGraph, { callName, ignoreIf, cascadeIf }: LinkTo<RegExp> | PromotedLinkTo, knownCalls?: Map<NodeId, Required<DataflowGraphVertexFunctionCall>>): NodeId[];
@@ -31,25 +31,22 @@ var CallTargets;
31
31
  /**
32
32
  * Determines whether the given function call node satisfies the specified call target condition.
33
33
  */
34
- function satisfiesCallTargets(id, graph, callTarget) {
35
- const callVertex = graph.getVertex(id, true);
36
- if (callVertex === undefined || callVertex.tag !== vertex_1.VertexType.FunctionCall) {
37
- return 'no';
38
- }
39
- const outgoing = graph.outgoingEdges(id);
34
+ function satisfiesCallTargets(info, graph, callTarget) {
35
+ const outgoing = graph.outgoingEdges(info.id);
40
36
  if (outgoing === undefined) {
41
37
  return 'no';
42
38
  }
43
- const callTargets = [...outgoing]
39
+ const callTargets = outgoing.entries()
44
40
  .filter(([, { types }]) => (0, edge_1.edgeIncludesType)(types, edge_1.EdgeType.Calls))
45
- .map(([t]) => t);
41
+ .map(([t]) => t)
42
+ .toArray();
46
43
  let builtIn = false;
47
- if (callVertex.environment !== undefined) {
44
+ if (info.environment !== undefined) {
48
45
  /*
49
46
  * for performance and scoping reasons, flowR will not identify the global linkage,
50
47
  * including any potential built-in mapping.
51
48
  */
52
- const reResolved = (0, resolve_by_name_1.resolveByName)(callVertex.name, callVertex.environment, identifier_1.ReferenceType.Unknown);
49
+ const reResolved = (0, resolve_by_name_1.resolveByName)(info.name, info.environment, identifier_1.ReferenceType.Unknown);
53
50
  if (reResolved?.some(t => (0, built_in_1.isBuiltIn)(t.definedAt))) {
54
51
  builtIn = true;
55
52
  }
@@ -115,31 +112,41 @@ function getValueOfArgument(graph, call, argument, additionalAllowedTypes) {
115
112
  }
116
113
  /**
117
114
  * Identifies nodes that link to the last call of a specified function from a given starting node in the control flow graph.
115
+ * If you pass on `knownCalls` (e.g., produced by {@link getCallsInCfg}), this will only respect the functions
116
+ * listed there and ignore any other calls. This can be also used to speed up the process if you already have
117
+ * the known calls available.
118
118
  */
119
- function identifyLinkToLastCallRelation(from, cfg, graph, { callName, ignoreIf, cascadeIf }) {
119
+ function identifyLinkToLastCallRelation(from, cfg, graph, { callName, ignoreIf, cascadeIf }, knownCalls) {
120
120
  if (ignoreIf?.(from, graph)) {
121
121
  return [];
122
122
  }
123
123
  const found = [];
124
+ const cNameCheck = callName instanceof RegExp ? ({ name }) => callName.test(name)
125
+ : ({ name }) => callName.has(name);
126
+ const getVertex = knownCalls ?
127
+ (node) => knownCalls.get(node) :
128
+ (node) => {
129
+ const v = graph.getVertex(node, true);
130
+ return (0, vertex_1.isFunctionCallVertex)(v) ? v : undefined;
131
+ };
124
132
  (0, simple_visitor_1.visitCfgInReverseOrder)(cfg, [from], node => {
125
133
  /* we ignore the start id as it cannot be the last call */
126
134
  if (node === from) {
127
135
  return;
128
136
  }
129
- const vertex = graph.getVertex(node, true);
130
- if (vertex === undefined || vertex.tag !== vertex_1.VertexType.FunctionCall) {
137
+ const vertex = getVertex(node);
138
+ if (vertex === undefined) {
131
139
  return;
132
140
  }
133
- if (callName instanceof RegExp ? callName.test(vertex.name) : callName.has(vertex.name)) {
141
+ if (cNameCheck(vertex)) {
134
142
  const act = cascadeIf ? cascadeIf(vertex, from, graph) : cascade_action_1.CascadeAction.Stop;
135
143
  if (act === cascade_action_1.CascadeAction.Skip) {
136
144
  return;
137
145
  }
138
- const tar = satisfiesCallTargets(vertex.id, graph, CallTargets.MustIncludeGlobal);
139
- if (tar === 'no') {
140
- return act === cascade_action_1.CascadeAction.Stop;
146
+ const tar = satisfiesCallTargets(vertex, graph, CallTargets.MustIncludeGlobal);
147
+ if (tar !== 'no') {
148
+ found.push(node);
141
149
  }
142
- found.push(node);
143
150
  return act === cascade_action_1.CascadeAction.Stop;
144
151
  }
145
152
  });
@@ -15,7 +15,7 @@ export interface DataflowClusterQueryResult extends BaseQueryResult {
15
15
  }
16
16
  export declare const ClusterQueryDefinition: {
17
17
  readonly executor: typeof executeDataflowClusterQuery;
18
- readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => Promise<boolean>;
18
+ readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => Promise<boolean>;
19
19
  readonly schema: Joi.ObjectSchema<any>;
20
20
  readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
21
21
  };
@@ -22,7 +22,7 @@ export interface ControlFlowQueryResult extends BaseQueryResult {
22
22
  }
23
23
  export declare const ControlFlowQueryDefinition: {
24
24
  readonly executor: typeof executeControlFlowQuery;
25
- readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => Promise<boolean>;
25
+ readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => Promise<boolean>;
26
26
  readonly schema: Joi.ObjectSchema<any>;
27
27
  readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
28
28
  };
@@ -26,9 +26,10 @@ exports.ControlFlowQueryDefinition = {
26
26
  }).description('The control flow query provides the control flow graph of the analysis, optionally simplified.'),
27
27
  flattenInvolvedNodes: (queryResults) => {
28
28
  const out = queryResults;
29
- return [...out.controlFlow.graph.vertices(true)]
29
+ return out.controlFlow.graph.vertices(true).entries()
30
30
  .filter(([, v]) => v.type !== control_flow_graph_1.CfgVertexType.Block)
31
- .map(v => v[0]);
31
+ .map(v => v[0])
32
+ .toArray();
32
33
  }
33
34
  };
34
35
  //# sourceMappingURL=control-flow-query-format.js.map
@@ -20,7 +20,7 @@ async function executeDataflowLensQuery({ analyzer }, queries) {
20
20
  nameRegex: '<-|<<-|->|->>|=|+|-|*|/|\\|>|function|repeat|if|next|break',
21
21
  blacklistWithName: true
22
22
  }
23
- });
23
+ }, analyzer.inspectContext().env.makeCleanEnv());
24
24
  const timing = Date.now() - now;
25
25
  return {
26
26
  '.meta': {
@@ -14,7 +14,7 @@ export interface DataflowLensQueryResult extends BaseQueryResult {
14
14
  }
15
15
  export declare const DataflowLensQueryDefinition: {
16
16
  readonly executor: typeof executeDataflowLensQuery;
17
- readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
17
+ readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
18
18
  readonly schema: Joi.ObjectSchema<any>;
19
19
  readonly flattenInvolvedNodes: () => never[];
20
20
  };
@@ -15,7 +15,7 @@ export interface DataflowQueryResult extends BaseQueryResult {
15
15
  }
16
16
  export declare const DataflowQueryDefinition: {
17
17
  readonly executor: typeof executeDataflowQuery;
18
- readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
18
+ readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
19
19
  readonly schema: Joi.ObjectSchema<any>;
20
20
  readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
21
21
  };
@@ -1,6 +1,6 @@
1
1
  import { type DependenciesQuery, type DependenciesQueryResult } from './dependencies-query-format';
2
2
  import type { BasicQueryData } from '../../base-query-format';
3
3
  /**
4
- *
4
+ * Executes a dependencies query.
5
5
  */
6
6
  export declare function executeDependenciesQuery({ analyzer, }: BasicQueryData, queries: readonly DependenciesQuery[]): Promise<DependenciesQueryResult>;
@@ -12,7 +12,7 @@ const identify_link_to_last_call_relation_1 = require("../call-context-query/ide
12
12
  const resolve_argument_1 = require("../../../dataflow/eval/resolve/resolve-argument");
13
13
  const assert_1 = require("../../../util/assert");
14
14
  /**
15
- *
15
+ * Executes a dependencies query.
16
16
  */
17
17
  async function executeDependenciesQuery({ analyzer, }, queries) {
18
18
  if (queries.length !== 1) {
@@ -76,8 +76,8 @@ function getResults(queries, { dataflow, config, normalize }, results, kind, fun
76
76
  return kindEntries.flatMap(([name, results]) => results.flatMap(({ id, linkedIds }) => {
77
77
  const vertex = dataflow.graph.getVertex(id);
78
78
  const info = functionMap.get(name);
79
- const args = (0, resolve_argument_1.getArgumentStringValue)(config.solver.variables, dataflow.graph, vertex, info.argIdx, info.argName, info.resolveValue);
80
- const linkedArgs = collectValuesFromLinks(args, { dataflow, config }, linkedIds);
79
+ const args = (0, resolve_argument_1.getArgumentStringValue)(config.solver.variables, dataflow.graph, vertex, info.argIdx, info.argName, info.resolveValue, data.analyzer.inspectContext());
80
+ const linkedArgs = collectValuesFromLinks(args, { dataflow, config, ctx: data.analyzer.inspectContext() }, linkedIds);
81
81
  const linked = dropInfoOnLinkedIds(linkedIds);
82
82
  const foundValues = linkedArgs ?? args;
83
83
  if (!foundValues) {
@@ -97,7 +97,7 @@ function getResults(queries, { dataflow, config, normalize }, results, kind, fun
97
97
  (0, assert_1.guard)('mode' in (info.additionalArgs ?? {}), 'Need additional argument mode when checking for mode');
98
98
  const margs = info.additionalArgs?.mode;
99
99
  (0, assert_1.guard)(margs, 'Need additional argument mode when checking for mode');
100
- const modeArgs = (0, resolve_argument_1.getArgumentStringValue)(config.solver.variables, dataflow.graph, vertex, margs.argIdx, margs.argName, margs.resolveValue);
100
+ const modeArgs = (0, resolve_argument_1.getArgumentStringValue)(config.solver.variables, dataflow.graph, vertex, margs.argIdx, margs.argName, margs.resolveValue, data?.analyzer.inspectContext());
101
101
  const modeValues = modeArgs?.values().flatMap(v => [...v]) ?? [];
102
102
  if (info.ignoreIf === 'mode-only-read' && modeValues.every(m => m && readOnlyModes.has(m))) {
103
103
  // all modes are read-only, so we can ignore this
@@ -159,7 +159,7 @@ function collectValuesFromLinks(args, data, linkedIds) {
159
159
  if (vertex === undefined || vertex.tag !== vertex_1.VertexType.FunctionCall) {
160
160
  continue;
161
161
  }
162
- const args = (0, resolve_argument_1.getArgumentStringValue)(data.config.solver.variables, data.dataflow.graph, vertex, info.argIdx, info.argName, info.resolveValue);
162
+ const args = (0, resolve_argument_1.getArgumentStringValue)(data.config.solver.variables, data.dataflow.graph, vertex, info.argIdx, info.argName, info.resolveValue, data.ctx);
163
163
  if (args === undefined) {
164
164
  continue;
165
165
  }
@@ -70,7 +70,7 @@ export interface DependencyInfo extends Record<string, unknown> {
70
70
  export declare function getAllCategories(queries: readonly DependenciesQuery[]): Record<DependencyCategoryName, DependencyCategorySettings>;
71
71
  export declare const DependenciesQueryDefinition: {
72
72
  readonly executor: typeof executeDependenciesQuery;
73
- readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[], queries: readonly import("../../query").Query[]) => true;
73
+ readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[], queries: readonly import("../../query").Query[]) => true;
74
74
  readonly schema: Joi.ObjectSchema<any>;
75
75
  readonly flattenInvolvedNodes: (queryResults: BaseQueryResult, query: readonly import("../../query").Query[]) => NodeId[];
76
76
  };
@@ -25,7 +25,7 @@ exports.DefaultDependencyCategories = {
25
25
  /* for libraries, we have to additionally track all uses of `::` and `:::`, for this we currently simply traverse all uses */
26
26
  additionalAnalysis: async (data, ignoreDefault, _functions, _queryResults, result) => {
27
27
  if (!ignoreDefault) {
28
- (0, visitor_1.visitAst)((await data.analyzer.normalize()).ast, n => {
28
+ (0, visitor_1.visitAst)((await data.analyzer.normalize()).ast.files.map(f => f.root), n => {
29
29
  if (n.type === type_1.RType.Symbol && n.namespace) {
30
30
  const dep = data.analyzer.inspectContext().deps.getDependency(n.namespace);
31
31
  /* we should improve the identification of ':::' */
@@ -1,6 +1,6 @@
1
1
  import type { BasicQueryData } from '../../base-query-format';
2
2
  import type { DfShapeQuery, DfShapeQueryResult } from './df-shape-query-format';
3
3
  /**
4
- * Executes the given dataframe shape queries using the provided analyzer.
4
+ * Executes the given data frame shape queries using the provided analyzer.
5
5
  */
6
6
  export declare function executeDfShapeQuery({ analyzer }: BasicQueryData, queries: readonly DfShapeQuery[]): Promise<DfShapeQueryResult>;