@eagleoutice/flowr 2.6.2 → 2.6.3

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 (349) hide show
  1. package/README.md +36 -34
  2. package/abstract-interpretation/data-frame/absint-visitor.js +3 -3
  3. package/abstract-interpretation/data-frame/mappers/function-mapper.d.ts +7 -7
  4. package/abstract-interpretation/data-frame/mappers/function-mapper.js +20 -16
  5. package/abstract-interpretation/data-frame/semantics.js +8 -0
  6. package/abstract-interpretation/data-frame/shape-inference.d.ts +3 -3
  7. package/abstract-interpretation/data-frame/shape-inference.js +3 -3
  8. package/abstract-interpretation/normalized-ast-fold.d.ts +1 -1
  9. package/benchmark/slicer.d.ts +1 -0
  10. package/benchmark/slicer.js +13 -12
  11. package/benchmark/summarizer/first-phase/process.js +1 -1
  12. package/benchmark/summarizer/second-phase/graph.d.ts +3 -1
  13. package/benchmark/summarizer/second-phase/graph.js +3 -1
  14. package/cli/export-quads-app.js +1 -1
  15. package/cli/repl/commands/repl-dataflow.js +2 -1
  16. package/cli/repl/commands/repl-parse.js +16 -4
  17. package/cli/repl/commands/repl-query.js +1 -1
  18. package/cli/repl/core.js +16 -13
  19. package/cli/repl/server/connection.js +2 -1
  20. package/cli/script-core/statistics-helper-core.js +2 -1
  21. package/cli/slicer-app.js +3 -4
  22. package/cli/wiki.d.ts +4 -0
  23. package/cli/wiki.js +165 -0
  24. package/config.d.ts +4 -0
  25. package/config.js +6 -0
  26. package/control-flow/cfg-dead-code.js +13 -3
  27. package/control-flow/cfg-simplification.d.ts +5 -2
  28. package/control-flow/cfg-simplification.js +3 -0
  29. package/control-flow/extract-cfg.d.ts +9 -3
  30. package/control-flow/extract-cfg.js +44 -4
  31. package/control-flow/semantic-cfg-guided-visitor.d.ts +2 -2
  32. package/control-flow/simple-visitor.js +2 -2
  33. package/control-flow/useless-loop.d.ts +3 -3
  34. package/control-flow/useless-loop.js +14 -5
  35. package/core/pipeline-executor.d.ts +3 -6
  36. package/core/pipeline-executor.js +4 -7
  37. package/core/print/normalize-printer.d.ts +1 -1
  38. package/core/print/normalize-printer.js +2 -2
  39. package/core/steps/all/core/00-parse.d.ts +1 -1
  40. package/core/steps/all/core/00-parse.js +1 -1
  41. package/core/steps/all/core/10-normalize.d.ts +3 -9
  42. package/core/steps/all/core/10-normalize.js +1 -16
  43. package/core/steps/all/core/11-normalize-tree-sitter.d.ts +2 -3
  44. package/core/steps/all/core/11-normalize-tree-sitter.js +2 -3
  45. package/core/steps/all/core/20-dataflow.d.ts +3 -4
  46. package/core/steps/all/core/20-dataflow.js +2 -2
  47. package/core/steps/all/static-slicing/00-slice.d.ts +1 -2
  48. package/core/steps/all/static-slicing/00-slice.js +1 -1
  49. package/core/steps/all/static-slicing/10-reconstruct.d.ts +8 -0
  50. package/core/steps/all/static-slicing/10-reconstruct.js +4 -1
  51. package/core/steps/pipeline/default-pipelines.d.ts +55 -56
  52. package/core/steps/pipeline/default-pipelines.js +8 -8
  53. package/dataflow/environments/clone.d.ts +0 -1
  54. package/dataflow/environments/clone.js +12 -2
  55. package/dataflow/environments/diff.js +2 -2
  56. package/dataflow/environments/overwrite.d.ts +1 -5
  57. package/dataflow/environments/overwrite.js +3 -19
  58. package/dataflow/environments/scoping.d.ts +6 -2
  59. package/dataflow/environments/scoping.js +6 -2
  60. package/dataflow/eval/resolve/resolve-argument.js +2 -2
  61. package/dataflow/eval/values/string/string-constants.d.ts +9 -3
  62. package/dataflow/eval/values/string/string-constants.js +9 -3
  63. package/dataflow/extractor.d.ts +2 -3
  64. package/dataflow/extractor.js +25 -22
  65. package/dataflow/graph/graph.d.ts +3 -9
  66. package/dataflow/graph/graph.js +0 -13
  67. package/dataflow/graph/unknown-replacement.d.ts +4 -2
  68. package/dataflow/graph/unknown-replacement.js +4 -2
  69. package/dataflow/info.d.ts +7 -0
  70. package/dataflow/info.js +21 -0
  71. package/dataflow/internal/linker.js +7 -4
  72. package/dataflow/internal/process/functions/call/argument/make-argument.d.ts +2 -2
  73. package/dataflow/internal/process/functions/call/argument/make-argument.js +2 -3
  74. package/dataflow/internal/process/functions/call/built-in/built-in-access.d.ts +1 -1
  75. package/dataflow/internal/process/functions/call/built-in/built-in-access.js +4 -4
  76. package/dataflow/internal/process/functions/call/built-in/built-in-apply.js +1 -1
  77. package/dataflow/internal/process/functions/call/built-in/built-in-assignment.js +4 -4
  78. package/dataflow/internal/process/functions/call/built-in/built-in-eval.js +6 -6
  79. package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.js +1 -1
  80. package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.js +1 -1
  81. package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.js +1 -1
  82. package/dataflow/internal/process/functions/call/built-in/built-in-get.d.ts +1 -1
  83. package/dataflow/internal/process/functions/call/built-in/built-in-get.js +1 -1
  84. package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.js +1 -1
  85. package/dataflow/internal/process/functions/call/built-in/built-in-list.js +2 -2
  86. package/dataflow/internal/process/functions/call/built-in/built-in-pipe.js +3 -3
  87. package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.d.ts +6 -1
  88. package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.js +6 -1
  89. package/dataflow/internal/process/functions/call/built-in/built-in-replacement.js +2 -2
  90. package/dataflow/internal/process/functions/call/built-in/built-in-source.d.ts +15 -10
  91. package/dataflow/internal/process/functions/call/built-in/built-in-source.js +78 -75
  92. package/dataflow/internal/process/functions/call/built-in/built-in-special-bin-op.d.ts +3 -1
  93. package/dataflow/internal/process/functions/call/built-in/built-in-special-bin-op.js +3 -1
  94. package/dataflow/internal/process/functions/call/built-in/built-in-vector.js +2 -2
  95. package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.js +1 -1
  96. package/dataflow/internal/process/functions/call/common.d.ts +1 -1
  97. package/dataflow/internal/process/functions/call/common.js +4 -4
  98. package/dataflow/internal/process/functions/call/default-call-handling.d.ts +3 -1
  99. package/dataflow/internal/process/functions/call/default-call-handling.js +3 -1
  100. package/dataflow/internal/process/functions/call/known-call-handling.js +3 -3
  101. package/dataflow/internal/process/functions/call/named-call-handling.js +4 -4
  102. package/dataflow/internal/process/functions/process-parameter.js +4 -4
  103. package/dataflow/origin/dfg-get-symbol-refs.d.ts +1 -1
  104. package/dataflow/origin/dfg-get-symbol-refs.js +1 -1
  105. package/dataflow/processor.d.ts +6 -11
  106. package/documentation/data/dfg/doc-data-dfg-util.d.ts +0 -2
  107. package/documentation/data/faq/faqs.js +27 -18
  108. package/documentation/data/faq/recommended-configs.d.ts +36 -0
  109. package/documentation/data/faq/recommended-configs.js +40 -0
  110. package/documentation/data/faq/wiki-faq-store.d.ts +1 -0
  111. package/documentation/data/faq/wiki-faq-store.js +10 -2
  112. package/documentation/data/server/doc-data-server-messages.js +1 -1
  113. package/documentation/doc-capabilities.d.ts +9 -0
  114. package/documentation/{print-capabilities-markdown.js → doc-capabilities.js} +18 -21
  115. package/documentation/doc-readme.d.ts +9 -0
  116. package/documentation/{print-readme.js → doc-readme.js} +31 -35
  117. package/documentation/doc-util/doc-benchmarks.d.ts +6 -4
  118. package/documentation/doc-util/doc-benchmarks.js +6 -4
  119. package/documentation/doc-util/doc-cfg.js +5 -8
  120. package/documentation/doc-util/doc-dfg.d.ts +7 -7
  121. package/documentation/doc-util/doc-dfg.js +13 -13
  122. package/documentation/doc-util/doc-escape.d.ts +6 -0
  123. package/documentation/doc-util/doc-escape.js +11 -0
  124. package/documentation/doc-util/doc-general.d.ts +22 -2
  125. package/documentation/doc-util/doc-general.js +22 -2
  126. package/documentation/doc-util/doc-normalized-ast.d.ts +10 -5
  127. package/documentation/doc-util/doc-normalized-ast.js +12 -9
  128. package/documentation/doc-util/doc-query.d.ts +12 -4
  129. package/documentation/doc-util/doc-query.js +18 -11
  130. package/documentation/doc-util/doc-search.d.ts +0 -30
  131. package/documentation/doc-util/doc-search.js +2 -73
  132. package/documentation/doc-util/doc-server-message.d.ts +5 -5
  133. package/documentation/doc-util/doc-server-message.js +4 -4
  134. package/documentation/doc-util/doc-types.d.ts +69 -32
  135. package/documentation/doc-util/doc-types.js +108 -61
  136. package/documentation/index.d.ts +9 -9
  137. package/documentation/index.js +9 -9
  138. package/documentation/issue-linting-rule.d.ts +9 -0
  139. package/documentation/{print-linter-issue.js → issue-linting-rule.js} +20 -23
  140. package/documentation/wiki-analyzer.d.ts +9 -0
  141. package/documentation/wiki-analyzer.js +412 -0
  142. package/documentation/wiki-cfg.d.ts +9 -0
  143. package/documentation/{print-cfg-wiki.js → wiki-cfg.js} +144 -160
  144. package/documentation/wiki-core.d.ts +14 -0
  145. package/documentation/{print-core-wiki.js → wiki-core.js} +164 -175
  146. package/documentation/wiki-dataflow-graph.d.ts +9 -0
  147. package/documentation/{print-dataflow-graph-wiki.js → wiki-dataflow-graph.js} +142 -172
  148. package/documentation/wiki-engine.d.ts +9 -0
  149. package/documentation/{print-engines-wiki.js → wiki-engine.js} +27 -42
  150. package/documentation/wiki-faq.d.ts +8 -0
  151. package/documentation/wiki-faq.js +22 -0
  152. package/documentation/wiki-interface.d.ts +9 -0
  153. package/documentation/{print-interface-wiki.js → wiki-interface.js} +59 -56
  154. package/documentation/wiki-linter.d.ts +9 -0
  155. package/documentation/{print-linter-wiki.js → wiki-linter.js} +52 -48
  156. package/documentation/wiki-linting-and-testing.d.ts +9 -0
  157. package/documentation/{print-linting-and-testing-wiki.js → wiki-linting-and-testing.js} +25 -32
  158. package/documentation/wiki-mk/doc-context.d.ts +186 -0
  159. package/documentation/wiki-mk/doc-context.js +84 -0
  160. package/documentation/wiki-mk/doc-maker.d.ts +95 -0
  161. package/documentation/wiki-mk/doc-maker.js +133 -0
  162. package/documentation/wiki-normalized-ast.d.ts +9 -0
  163. package/documentation/{print-normalized-ast-wiki.js → wiki-normalized-ast.js} +64 -47
  164. package/documentation/wiki-onboarding.d.ts +8 -0
  165. package/documentation/{print-onboarding-wiki.js → wiki-onboarding.js} +18 -15
  166. package/documentation/wiki-query.d.ts +9 -0
  167. package/documentation/{print-query-wiki.js → wiki-query.js} +62 -47
  168. package/documentation/wiki-search.d.ts +9 -0
  169. package/documentation/wiki-search.js +61 -0
  170. package/linter/linter-executor.js +3 -2
  171. package/linter/linter-format.d.ts +2 -2
  172. package/linter/linter-rules.d.ts +13 -17
  173. package/linter/rules/absolute-path.d.ts +1 -2
  174. package/linter/rules/absolute-path.js +2 -2
  175. package/linter/rules/dataframe-access-validation.d.ts +1 -1
  176. package/linter/rules/dataframe-access-validation.js +12 -8
  177. package/linter/rules/dead-code.d.ts +1 -1
  178. package/linter/rules/deprecated-functions.d.ts +1 -5
  179. package/linter/rules/file-path-validity.d.ts +1 -1
  180. package/linter/rules/file-path-validity.js +4 -4
  181. package/linter/rules/function-finder-util.d.ts +1 -5
  182. package/linter/rules/naming-convention.d.ts +2 -2
  183. package/linter/rules/naming-convention.js +1 -1
  184. package/linter/rules/network-functions.d.ts +1 -1
  185. package/linter/rules/network-functions.js +1 -1
  186. package/linter/rules/seeded-randomness.d.ts +3 -2
  187. package/linter/rules/seeded-randomness.js +33 -13
  188. package/linter/rules/unused-definition.d.ts +1 -1
  189. package/linter/rules/useless-loop.d.ts +2 -2
  190. package/linter/rules/useless-loop.js +2 -2
  191. package/package.json +6 -17
  192. package/project/cache/flowr-analyzer-cache.d.ts +7 -10
  193. package/project/cache/flowr-analyzer-cache.js +17 -38
  194. package/project/cache/flowr-analyzer-controlflow-cache.d.ts +34 -0
  195. package/project/cache/flowr-analyzer-controlflow-cache.js +79 -0
  196. package/project/context/flowr-analyzer-context.d.ts +30 -5
  197. package/project/context/flowr-analyzer-context.js +48 -4
  198. package/project/context/flowr-analyzer-files-context.d.ts +63 -13
  199. package/project/context/flowr-analyzer-files-context.js +110 -39
  200. package/project/context/flowr-file.d.ts +32 -10
  201. package/project/context/flowr-file.js +30 -9
  202. package/project/flowr-analyzer-builder.d.ts +22 -28
  203. package/project/flowr-analyzer-builder.js +32 -70
  204. package/project/flowr-analyzer.d.ts +55 -14
  205. package/project/flowr-analyzer.js +53 -8
  206. package/project/plugins/file-plugins/flowr-analyzer-description-file-plugin.d.ts +7 -1
  207. package/project/plugins/file-plugins/flowr-analyzer-description-file-plugin.js +13 -5
  208. package/project/plugins/file-plugins/flowr-analyzer-file-plugin.d.ts +3 -3
  209. package/project/plugins/file-plugins/flowr-analyzer-file-plugin.js +11 -5
  210. package/project/plugins/file-plugins/flowr-description-file.d.ts +3 -3
  211. package/project/plugins/file-plugins/notebooks/flowr-analyzer-jupyter-file-plugin.d.ts +22 -0
  212. package/project/plugins/file-plugins/notebooks/flowr-analyzer-jupyter-file-plugin.js +33 -0
  213. package/project/plugins/file-plugins/notebooks/flowr-analyzer-qmd-file-plugin.d.ts +22 -0
  214. package/project/plugins/file-plugins/notebooks/flowr-analyzer-qmd-file-plugin.js +33 -0
  215. package/project/plugins/file-plugins/notebooks/flowr-analyzer-rmd-file-plugin.d.ts +22 -0
  216. package/project/plugins/file-plugins/notebooks/flowr-analyzer-rmd-file-plugin.js +33 -0
  217. package/project/plugins/file-plugins/notebooks/flowr-jupyter-file.d.ts +20 -0
  218. package/project/plugins/file-plugins/notebooks/flowr-jupyter-file.js +42 -0
  219. package/project/plugins/file-plugins/notebooks/flowr-rmarkdown-file.d.ts +59 -0
  220. package/project/plugins/file-plugins/notebooks/flowr-rmarkdown-file.js +132 -0
  221. package/project/plugins/file-plugins/notebooks/notebook.d.ts +0 -0
  222. package/project/plugins/file-plugins/notebooks/notebook.js +2 -0
  223. package/project/plugins/flowr-analyzer-plugin-defaults.d.ts +5 -0
  224. package/project/plugins/flowr-analyzer-plugin-defaults.js +23 -0
  225. package/project/plugins/flowr-analyzer-plugin.d.ts +2 -0
  226. package/project/plugins/flowr-analyzer-plugin.js +2 -0
  227. package/project/plugins/loading-order-plugins/flowr-analyzer-loading-order-description-file-plugin.js +1 -1
  228. package/project/plugins/package-version-plugins/flowr-analyzer-package-versions-description-file-plugin.js +1 -1
  229. package/project/plugins/plugin-registry.d.ts +34 -0
  230. package/project/plugins/plugin-registry.js +62 -0
  231. package/project/plugins/project-discovery/flowr-analyzer-project-discovery-plugin.js +7 -1
  232. package/queries/catalog/call-context-query/call-context-query-executor.js +4 -2
  233. package/queries/catalog/call-context-query/identify-link-to-last-call-relation.d.ts +5 -2
  234. package/queries/catalog/call-context-query/identify-link-to-last-call-relation.js +25 -18
  235. package/queries/catalog/cluster-query/cluster-query-format.d.ts +1 -1
  236. package/queries/catalog/control-flow-query/control-flow-query-format.d.ts +1 -1
  237. package/queries/catalog/dataflow-lens-query/dataflow-lens-query-format.d.ts +1 -1
  238. package/queries/catalog/dataflow-query/dataflow-query-format.d.ts +1 -1
  239. package/queries/catalog/dependencies-query/dependencies-query-executor.d.ts +1 -1
  240. package/queries/catalog/dependencies-query/dependencies-query-executor.js +1 -1
  241. package/queries/catalog/dependencies-query/dependencies-query-format.d.ts +1 -1
  242. package/queries/catalog/dependencies-query/dependencies-query-format.js +1 -1
  243. package/queries/catalog/df-shape-query/df-shape-query-executor.js +1 -1
  244. package/queries/catalog/df-shape-query/df-shape-query-format.d.ts +2 -2
  245. package/queries/catalog/df-shape-query/df-shape-query-format.js +6 -5
  246. package/queries/catalog/happens-before-query/happens-before-query-executor.d.ts +2 -1
  247. package/queries/catalog/happens-before-query/happens-before-query-executor.js +2 -1
  248. package/queries/catalog/happens-before-query/happens-before-query-format.d.ts +1 -1
  249. package/queries/catalog/id-map-query/id-map-query-format.d.ts +1 -1
  250. package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-executor.d.ts +1 -1
  251. package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-executor.js +1 -1
  252. package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-format.d.ts +1 -1
  253. package/queries/catalog/linter-query/linter-query-format.d.ts +1 -1
  254. package/queries/catalog/linter-query/linter-query-format.js +13 -2
  255. package/queries/catalog/location-map-query/location-map-query-executor.js +2 -1
  256. package/queries/catalog/location-map-query/location-map-query-format.d.ts +1 -1
  257. package/queries/catalog/location-map-query/location-map-query-format.js +1 -1
  258. package/queries/catalog/normalized-ast-query/normalized-ast-query-format.d.ts +1 -1
  259. package/queries/catalog/origin-query/origin-query-format.d.ts +1 -1
  260. package/queries/catalog/project-query/project-query-executor.js +3 -1
  261. package/queries/catalog/project-query/project-query-format.d.ts +1 -1
  262. package/queries/catalog/resolve-value-query/resolve-value-query-executor.d.ts +2 -2
  263. package/queries/catalog/resolve-value-query/resolve-value-query-executor.js +2 -2
  264. package/queries/catalog/resolve-value-query/resolve-value-query-format.d.ts +1 -1
  265. package/queries/catalog/search-query/search-query-format.d.ts +1 -1
  266. package/queries/catalog/static-slice-query/static-slice-query-executor.js +1 -1
  267. package/queries/catalog/static-slice-query/static-slice-query-format.d.ts +1 -1
  268. package/queries/catalog/static-slice-query/static-slice-query-format.js +13 -1
  269. package/queries/query.d.ts +26 -18
  270. package/queries/query.js +21 -1
  271. package/r-bridge/lang-4.x/ast/model/collect.d.ts +2 -1
  272. package/r-bridge/lang-4.x/ast/model/collect.js +4 -0
  273. package/r-bridge/lang-4.x/ast/model/nodes/r-project.d.ts +29 -0
  274. package/r-bridge/lang-4.x/ast/model/nodes/r-project.js +15 -0
  275. package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +5 -7
  276. package/r-bridge/lang-4.x/ast/model/processing/decorate.js +24 -11
  277. package/r-bridge/lang-4.x/ast/model/type.d.ts +2 -0
  278. package/r-bridge/lang-4.x/ast/model/type.js +2 -0
  279. package/r-bridge/lang-4.x/ast/parser/json/format.js +1 -1
  280. package/r-bridge/lang-4.x/ast/parser/json/parser.d.ts +9 -8
  281. package/r-bridge/lang-4.x/ast/parser/json/parser.js +11 -10
  282. package/r-bridge/lang-4.x/ast/parser/main/internal/structure/normalize-root.d.ts +4 -3
  283. package/r-bridge/lang-4.x/ast/parser/main/internal/structure/normalize-root.js +20 -11
  284. package/r-bridge/lang-4.x/tree-sitter/tree-sitter-executor.d.ts +3 -3
  285. package/r-bridge/lang-4.x/tree-sitter/tree-sitter-executor.js +5 -4
  286. package/r-bridge/lang-4.x/tree-sitter/tree-sitter-normalize.d.ts +3 -2
  287. package/r-bridge/lang-4.x/tree-sitter/tree-sitter-normalize.js +14 -5
  288. package/r-bridge/parser.d.ts +15 -5
  289. package/r-bridge/parser.js +27 -13
  290. package/r-bridge/retriever.d.ts +9 -15
  291. package/r-bridge/retriever.js +14 -5
  292. package/r-bridge/shell.d.ts +1 -1
  293. package/r-bridge/shell.js +1 -1
  294. package/reconstruct/auto-select/auto-select-defaults.d.ts +0 -1
  295. package/reconstruct/auto-select/magic-comments.js +1 -1
  296. package/reconstruct/reconstruct.d.ts +17 -9
  297. package/reconstruct/reconstruct.js +19 -8
  298. package/search/flowr-search.d.ts +12 -0
  299. package/search/search-executor/search-enrichers.d.ts +9 -2
  300. package/search/search-executor/search-enrichers.js +1 -3
  301. package/search/search-executor/search-generators.d.ts +1 -1
  302. package/search/search-executor/search-generators.js +9 -4
  303. package/slicing/criterion/collect-all.d.ts +3 -2
  304. package/slicing/criterion/collect-all.js +1 -1
  305. package/slicing/criterion/parse.js +4 -4
  306. package/statistics/features/supported/assignments/assignments.js +1 -1
  307. package/statistics/features/supported/control-flow/control-flow.js +1 -1
  308. package/statistics/features/supported/data-access/data-access.js +1 -1
  309. package/statistics/features/supported/defined-functions/defined-functions.js +1 -1
  310. package/statistics/features/supported/expression-list/statistics-expression-list.js +1 -1
  311. package/statistics/features/supported/loops/loops.js +1 -1
  312. package/statistics/features/supported/used-functions/used-functions.js +1 -1
  313. package/statistics/features/supported/variables/variables.js +1 -1
  314. package/statistics/statistics.js +3 -2
  315. package/util/assert.d.ts +4 -0
  316. package/util/assert.js +4 -0
  317. package/util/files.d.ts +1 -1
  318. package/util/files.js +1 -1
  319. package/util/mermaid/ast.d.ts +4 -3
  320. package/util/mermaid/ast.js +36 -8
  321. package/util/mermaid/cfg.js +1 -1
  322. package/util/version.js +1 -1
  323. package/documentation/print-analyzer-wiki.d.ts +0 -1
  324. package/documentation/print-analyzer-wiki.js +0 -141
  325. package/documentation/print-capabilities-markdown.d.ts +0 -1
  326. package/documentation/print-cfg-wiki.d.ts +0 -1
  327. package/documentation/print-core-wiki.d.ts +0 -5
  328. package/documentation/print-dataflow-graph-wiki.d.ts +0 -1
  329. package/documentation/print-engines-wiki.d.ts +0 -1
  330. package/documentation/print-faq-wiki.d.ts +0 -1
  331. package/documentation/print-faq-wiki.js +0 -18
  332. package/documentation/print-interface-wiki.d.ts +0 -1
  333. package/documentation/print-linter-issue.d.ts +0 -1
  334. package/documentation/print-linter-wiki.d.ts +0 -1
  335. package/documentation/print-linting-and-testing-wiki.d.ts +0 -1
  336. package/documentation/print-normalized-ast-wiki.d.ts +0 -1
  337. package/documentation/print-onboarding-wiki.d.ts +0 -1
  338. package/documentation/print-query-wiki.d.ts +0 -1
  339. package/documentation/print-readme.d.ts +0 -1
  340. package/documentation/print-search-wiki.d.ts +0 -1
  341. package/documentation/print-search-wiki.js +0 -74
  342. package/util/formats/adapter-format.d.ts +0 -6
  343. package/util/formats/adapter-format.js +0 -3
  344. package/util/formats/adapter.d.ts +0 -27
  345. package/util/formats/adapter.js +0 -58
  346. package/util/formats/adapters/r-adapter.d.ts +0 -4
  347. package/util/formats/adapters/r-adapter.js +0 -7
  348. package/util/formats/adapters/rmd-adapter.d.ts +0 -35
  349. package/util/formats/adapters/rmd-adapter.js +0 -100
@@ -26,11 +26,7 @@ export interface FunctionsToDetectConfig extends MergeableRecord {
26
26
  */
27
27
  export declare const functionFinderUtil: {
28
28
  createSearch: (functions: readonly string[]) => import("../../search/flowr-search-builder").FlowrSearchBuilder<"all", ["with", "filter"], ParentInformation, Promise<FlowrSearchElements<ParentInformation, [] | FlowrSearchElement<ParentInformation>[]>>>;
29
- processSearchResult: <T extends FlowrSearchElement<ParentInformation>[]>(elements: FlowrSearchElements<ParentInformation, T>, _config: FunctionsToDetectConfig, _data: {
30
- normalize: NormalizedAst;
31
- dataflow: DataflowInformation;
32
- config: FlowrConfigOptions;
33
- }, refineSearch?: (elements: T) => T) => {
29
+ processSearchResult: <T extends FlowrSearchElement<ParentInformation>[]>(elements: FlowrSearchElements<ParentInformation, T>, _config: unknown, _data: unknown, refineSearch?: (elements: T) => T) => {
34
30
  results: {
35
31
  certainty: LintingResultCertainty;
36
32
  function: Identifier;
@@ -57,7 +57,7 @@ export declare const NAMING_CONVENTION: {
57
57
  normalize: import("../../r-bridge/lang-4.x/ast/model/processing/decorate").NormalizedAst;
58
58
  dataflow: import("../../dataflow/info").DataflowInformation;
59
59
  cfg: import("../../control-flow/control-flow-graph").ControlFlowInformation;
60
- config: import("../../config").FlowrConfigOptions;
60
+ analyzer: import("../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider;
61
61
  }) => {
62
62
  results: {
63
63
  quickFix: LintQuickFixReplacement[] | undefined;
@@ -78,7 +78,7 @@ export declare const NAMING_CONVENTION: {
78
78
  readonly info: {
79
79
  readonly name: "Naming Convention";
80
80
  readonly certainty: LintingRuleCertainty.OverApproximative;
81
- readonly description: "Checks wether the symbols conform to a certain naming convention";
81
+ readonly description: "Checks whether the symbols conform to a certain naming convention";
82
82
  readonly tags: readonly [LintingRuleTag.Style, LintingRuleTag.QuickFix];
83
83
  readonly defaultConfig: {
84
84
  readonly caseing: "auto";
@@ -187,7 +187,7 @@ exports.NAMING_CONVENTION = {
187
187
  name: 'Naming Convention',
188
188
  // detects casing heuristically so correctness is not ensured using default config, but checks all identifiers in the code for naming convention match
189
189
  certainty: linter_format_1.LintingRuleCertainty.OverApproximative,
190
- description: 'Checks wether the symbols conform to a certain naming convention',
190
+ description: 'Checks whether the symbols conform to a certain naming convention',
191
191
  tags: [linter_tags_1.LintingRuleTag.Style, linter_tags_1.LintingRuleTag.QuickFix],
192
192
  defaultConfig: {
193
193
  caseing: 'auto',
@@ -14,7 +14,7 @@ export declare const NETWORK_FUNCTIONS: {
14
14
  normalize: import("../../r-bridge/lang-4.x/ast/model/processing/decorate").NormalizedAst;
15
15
  dataflow: import("../../dataflow/info").DataflowInformation;
16
16
  cfg: import("../../control-flow/control-flow-graph").ControlFlowInformation;
17
- config: import("../../config").FlowrConfigOptions;
17
+ analyzer: import("../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider;
18
18
  }) => {
19
19
  results: {
20
20
  certainty: import("../linter-format").LintingResultCertainty;
@@ -7,7 +7,7 @@ const linter_tags_1 = require("../linter-tags");
7
7
  const read_functions_1 = require("../../queries/catalog/dependencies-query/function-info/read-functions");
8
8
  exports.NETWORK_FUNCTIONS = {
9
9
  createSearch: (config) => function_finder_util_1.functionFinderUtil.createSearch(config.fns),
10
- processSearchResult: (e, c, d) => function_finder_util_1.functionFinderUtil.processSearchResult(e, c, d, es => es.filter(e => function_finder_util_1.functionFinderUtil.requireArgumentValue(e, read_functions_1.ReadFunctions, d, c.onlyTriggerWithArgument))),
10
+ processSearchResult: (e, c, d) => function_finder_util_1.functionFinderUtil.processSearchResult(e, c, d, es => es.filter(e => function_finder_util_1.functionFinderUtil.requireArgumentValue(e, read_functions_1.ReadFunctions, { config: d.analyzer.flowrConfig, dataflow: d.dataflow, normalize: d.normalize }, c.onlyTriggerWithArgument))),
11
11
  prettyPrint: function_finder_util_1.functionFinderUtil.prettyPrint('network operations'),
12
12
  info: {
13
13
  name: 'Network Functions',
@@ -27,6 +27,7 @@ export interface SeededRandomnessMeta extends MergeableRecord {
27
27
  callsWithFunctionProducers: number;
28
28
  callsWithAssignmentProducers: number;
29
29
  callsWithNonConstantProducers: number;
30
+ callsWithOtherBranchProducers: number;
30
31
  }
31
32
  export declare const SEEDED_RANDOMNESS: {
32
33
  readonly createSearch: (config: SeededRandomnessConfig) => import("../../search/flowr-search-builder").FlowrSearchBuilder<"all", ["with", "filter", "with"], import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation, Promise<import("../../search/flowr-search").FlowrSearchElements<import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation, import("../../search/flowr-search").FlowrSearchElement<import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation>[]>>>;
@@ -34,10 +35,10 @@ export declare const SEEDED_RANDOMNESS: {
34
35
  normalize: import("../../r-bridge/lang-4.x/ast/model/processing/decorate").NormalizedAst;
35
36
  dataflow: import("../../dataflow/info").DataflowInformation;
36
37
  cfg: import("../../control-flow/control-flow-graph").ControlFlowInformation;
37
- config: import("../../config").FlowrConfigOptions;
38
+ analyzer: import("../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider;
38
39
  }) => {
39
40
  results: {
40
- certainty: LintingResultCertainty.Certain;
41
+ certainty: LintingResultCertainty;
41
42
  function: Identifier;
42
43
  range: SourceRange;
43
44
  }[];
@@ -16,6 +16,7 @@ const general_1 = require("../../dataflow/eval/values/general");
16
16
  const config_1 = require("../../config");
17
17
  const r_function_call_1 = require("../../r-bridge/lang-4.x/ast/model/nodes/r-function-call");
18
18
  const r_value_1 = require("../../dataflow/eval/values/r-value");
19
+ const info_1 = require("../../dataflow/info");
19
20
  exports.SEEDED_RANDOMNESS = {
20
21
  createSearch: (config) => flowr_search_builder_1.Q.all()
21
22
  .with(search_enrichers_1.Enrichment.CallTargets, { onlyBuiltin: true })
@@ -37,7 +38,8 @@ exports.SEEDED_RANDOMNESS = {
37
38
  consumerCalls: 0,
38
39
  callsWithFunctionProducers: 0,
39
40
  callsWithAssignmentProducers: 0,
40
- callsWithNonConstantProducers: 0
41
+ callsWithNonConstantProducers: 0,
42
+ callsWithOtherBranchProducers: 0
41
43
  };
42
44
  return {
43
45
  results: elements.getElements()
@@ -51,16 +53,25 @@ exports.SEEDED_RANDOMNESS = {
51
53
  };
52
54
  }))
53
55
  // filter by calls that aren't preceded by a randomness producer
54
- .filter(element => {
56
+ .flatMap(element => {
57
+ const dfgElement = dataflow.graph.getVertex(element.searchElement.node.info.id);
58
+ const cds = dfgElement ? new Set(dfgElement.cds) : new Set();
55
59
  const producers = (0, search_enrichers_1.enrichmentContent)(element.searchElement, search_enrichers_1.Enrichment.LastCall).linkedIds
56
60
  .map(e => dataflow.graph.getVertex(e.node.info.id));
57
61
  const { assignment, func } = Object.groupBy(producers, f => assignmentArgIndexes.has(f.name) ? 'assignment' : 'func');
58
62
  let nonConstant = false;
63
+ let otherBranch = false;
59
64
  // function calls are already taken care of through the LastCall enrichment itself
60
65
  for (const f of func ?? []) {
61
66
  if (isConstantArgument(dataflow.graph, f, 0)) {
62
- metadata.callsWithFunctionProducers++;
63
- return false;
67
+ const fCds = new Set(f.cds).difference(cds);
68
+ if (fCds.size <= 0 || (0, info_1.happensInEveryBranchSet)(fCds)) {
69
+ metadata.callsWithFunctionProducers++;
70
+ return [];
71
+ }
72
+ else {
73
+ otherBranch = true;
74
+ }
64
75
  }
65
76
  else {
66
77
  nonConstant = true;
@@ -71,9 +82,16 @@ exports.SEEDED_RANDOMNESS = {
71
82
  const argIdx = assignmentArgIndexes.get(a.name);
72
83
  const dest = (0, graph_1.getReferenceOfArgument)(a.args[argIdx]);
73
84
  if (dest !== undefined && assignmentProducers.has((0, node_id_1.recoverName)(dest, dataflow.graph.idMap))) {
85
+ // we either have arg index 0 or 1 for the assignmentProducers destination, so we select the assignment value as 1-argIdx here
74
86
  if (isConstantArgument(dataflow.graph, a, 1 - argIdx)) {
75
- metadata.callsWithAssignmentProducers++;
76
- return false;
87
+ const aCds = new Set(a.cds).difference(cds);
88
+ if (aCds.size <= 0 || (0, info_1.happensInEveryBranchSet)(aCds)) {
89
+ metadata.callsWithAssignmentProducers++;
90
+ return [];
91
+ }
92
+ else {
93
+ otherBranch = true;
94
+ }
77
95
  }
78
96
  else {
79
97
  nonConstant = true;
@@ -83,13 +101,15 @@ exports.SEEDED_RANDOMNESS = {
83
101
  if (nonConstant) {
84
102
  metadata.callsWithNonConstantProducers++;
85
103
  }
86
- return true;
87
- })
88
- .map(element => ({
89
- certainty: linter_format_1.LintingResultCertainty.Certain,
90
- function: element.target,
91
- range: element.range
92
- })),
104
+ if (otherBranch) {
105
+ metadata.callsWithOtherBranchProducers++;
106
+ }
107
+ return [{
108
+ certainty: otherBranch ? linter_format_1.LintingResultCertainty.Uncertain : linter_format_1.LintingResultCertainty.Certain,
109
+ function: element.target,
110
+ range: element.range
111
+ }];
112
+ }),
93
113
  '.meta': metadata
94
114
  };
95
115
  },
@@ -22,7 +22,7 @@ export declare const UNUSED_DEFINITION: {
22
22
  normalize: NormalizedAst;
23
23
  dataflow: import("../../dataflow/info").DataflowInformation;
24
24
  cfg: import("../../control-flow/control-flow-graph").ControlFlowInformation;
25
- config: import("../../config").FlowrConfigOptions;
25
+ analyzer: import("../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider;
26
26
  }) => {
27
27
  results: UnusedDefinitionResult[];
28
28
  ".meta": UnusedDefinitionMetadata;
@@ -16,11 +16,11 @@ export interface UselessLoopMetadata extends MergeableRecord {
16
16
  }
17
17
  export declare const USELESS_LOOP: {
18
18
  readonly createSearch: () => import("../../search/flowr-search-builder").FlowrSearchBuilder<"all", ["filter"], import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation, Promise<import("../../search/flowr-search").FlowrSearchElements<import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation, [] | import("../../search/flowr-search").FlowrSearchElement<import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation>[]>>>;
19
- readonly processSearchResult: (elements: import("../../search/flowr-search").FlowrSearchElements<import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation, import("../../search/flowr-search").FlowrSearchElement<import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation>[]>, useLessLoopConfig: UselessLoopConfig, { config, dataflow, normalize, cfg }: {
19
+ readonly processSearchResult: (elements: import("../../search/flowr-search").FlowrSearchElements<import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation, import("../../search/flowr-search").FlowrSearchElement<import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation>[]>, useLessLoopConfig: UselessLoopConfig, { analyzer, dataflow, normalize, cfg }: {
20
20
  normalize: import("../../r-bridge/lang-4.x/ast/model/processing/decorate").NormalizedAst;
21
21
  dataflow: import("../../dataflow/info").DataflowInformation;
22
22
  cfg: import("../../control-flow/control-flow-graph").ControlFlowInformation;
23
- config: import("../../config").FlowrConfigOptions;
23
+ analyzer: import("../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider;
24
24
  }) => {
25
25
  results: {
26
26
  certainty: LintingResultCertainty.Certain;
@@ -9,14 +9,14 @@ const linter_format_1 = require("../linter-format");
9
9
  const linter_tags_1 = require("../linter-tags");
10
10
  exports.USELESS_LOOP = {
11
11
  createSearch: () => flowr_search_builder_1.Q.all().filter(vertex_1.VertexType.FunctionCall),
12
- processSearchResult: (elements, useLessLoopConfig, { config, dataflow, normalize, cfg }) => {
12
+ processSearchResult: (elements, useLessLoopConfig, { analyzer, dataflow, normalize, cfg }) => {
13
13
  const results = elements.getElements().filter(e => {
14
14
  const vertex = dataflow.graph.getVertex(e.node.info.id);
15
15
  return vertex
16
16
  && (0, vertex_1.isFunctionCallVertex)(vertex)
17
17
  && vertex.origin !== 'unnamed'
18
18
  && useLessLoopConfig.loopyFunctions.has(vertex.origin[0]);
19
- }).filter(loop => (0, useless_loop_1.onlyLoopsOnce)(loop.node.info.id, dataflow.graph, cfg, normalize, config)).map(res => ({
19
+ }).filter(loop => (0, useless_loop_1.onlyLoopsOnce)(loop.node.info.id, dataflow.graph, cfg, normalize, analyzer.inspectContext())).map(res => ({
20
20
  certainty: linter_format_1.LintingResultCertainty.Certain,
21
21
  name: res.node.lexeme,
22
22
  range: res.node.info.fullRange
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eagleoutice/flowr",
3
- "version": "2.6.2",
3
+ "version": "2.6.3",
4
4
  "description": "Static Dataflow Analyzer and Program Slicer for the R Programming Language",
5
5
  "types": "dist/src/index.d.ts",
6
6
  "repository": {
@@ -25,22 +25,10 @@
25
25
  "benchmark": "npm run build-dev && node dist/src/cli/benchmark-app.js",
26
26
  "summarizer": "ts-node src/cli/summarizer-app.ts",
27
27
  "export-quads": "ts-node src/cli/export-quads-app.ts",
28
- "capabilities-markdown": "ts-node src/documentation/print-capabilities-markdown.ts",
29
- "wiki:df-graph": "ts-node src/documentation/print-dataflow-graph-wiki.ts",
30
- "wiki:normalized-ast": "ts-node src/documentation/print-normalized-ast-wiki.ts",
31
- "wiki:query-api": "ts-node src/documentation/print-query-wiki.ts",
32
- "wiki:core": "ts-node src/documentation/print-core-wiki.ts",
33
- "wiki:analyzer": "ts-node src/documentation/print-analyzer-wiki.ts",
34
- "wiki:engines": "ts-node src/documentation/print-engines-wiki.ts",
35
- "wiki:search-api": "ts-node src/documentation/print-search-wiki.ts",
36
- "wiki:linting-and-testing": "ts-node src/documentation/print-linting-and-testing-wiki.ts",
37
- "wiki:interface": "ts-node src/documentation/print-interface-wiki.ts",
38
- "wiki:onboarding": "ts-node src/documentation/print-onboarding-wiki.ts",
39
- "wiki:faq": "ts-node src/documentation/print-faq-wiki.ts",
40
- "wiki:cfg": "ts-node src/documentation/print-cfg-wiki.ts",
41
- "wiki:linter": "ts-node src/documentation/print-linter-wiki.ts",
42
- "gen:readme": "ts-node src/documentation/print-readme.ts",
43
- "gen:linter-issue": "ts-node src/documentation/print-linter-issue.ts",
28
+ "capabilities-markdown": "ts-node src/documentation/doc-capabilities.ts",
29
+ "wiki": "ts-node src/cli/wiki.ts",
30
+ "wiki:watch": "ts-node-dev src/cli/wiki.ts -- --keep-alive",
31
+ "wiki:linter": "ts-node src/documentation/wiki-linter.ts",
44
32
  "build": "tsc --project .",
45
33
  "build-dev": "npm run build && npm run build:copy-wasm",
46
34
  "build:bundle-flowr": "npm run build && esbuild --bundle dist/src/cli/flowr.js --platform=node --tree-shaking=true --bundle --minify --external:clipboardy --target=node22 --outfile=dist/src/cli/flowr.min.js && npm run build:copy-wasm",
@@ -210,6 +198,7 @@
210
198
  },
211
199
  "dependencies": {
212
200
  "@eagleoutice/tree-sitter-r": "^1.1.2",
201
+ "@jupyterlab/nbformat": "^4.5.0",
213
202
  "@xmldom/xmldom": "^0.9.7",
214
203
  "clipboardy": "^4.0.0",
215
204
  "command-line-args": "^6.0.1",
@@ -1,21 +1,18 @@
1
1
  import type { KnownParser } from '../../r-bridge/parser';
2
2
  import { type CacheInvalidationEvent, FlowrCache } from './flowr-cache';
3
3
  import { type DEFAULT_DATAFLOW_PIPELINE, type TREE_SITTER_DATAFLOW_PIPELINE } from '../../core/steps/pipeline/default-pipelines';
4
- import type { FlowrConfigOptions } from '../../config';
5
- import type { RParseRequests } from '../../r-bridge/retriever';
6
4
  import type { IdGenerator } from '../../r-bridge/lang-4.x/ast/model/processing/decorate';
7
5
  import type { NoInfo } from '../../r-bridge/lang-4.x/ast/model/model';
8
6
  import type { TreeSitterExecutor } from '../../r-bridge/lang-4.x/tree-sitter/tree-sitter-executor';
9
7
  import type { PipelineOutput } from '../../core/steps/pipeline/pipeline';
10
8
  import type { CfgSimplificationPassName } from '../../control-flow/cfg-simplification';
11
9
  import type { ControlFlowInformation } from '../../control-flow/control-flow-graph';
12
- import { CfgKind } from '../cfg-kind';
10
+ import type { CfgKind } from '../cfg-kind';
11
+ import type { FlowrAnalyzerContext } from '../context/flowr-analyzer-context';
13
12
  interface FlowrAnalyzerCacheOptions<Parser extends KnownParser> {
14
13
  parser: Parser;
15
- config: FlowrConfigOptions;
16
- request: RParseRequests;
14
+ context: FlowrAnalyzerContext;
17
15
  getId?: IdGenerator<NoInfo>;
18
- overwriteFilePath?: string;
19
16
  }
20
17
  export type AnalyzerCacheType<Parser extends KnownParser> = Parser extends TreeSitterExecutor ? Partial<PipelineOutput<typeof TREE_SITTER_DATAFLOW_PIPELINE>> : Partial<PipelineOutput<typeof DEFAULT_DATAFLOW_PIPELINE>>;
21
18
  /**
@@ -71,14 +68,14 @@ export declare class FlowrAnalyzerCache<Parser extends KnownParser> extends Flow
71
68
  peekDataflow(): NonNullable<AnalyzerCacheType<Parser>['dataflow']> | undefined;
72
69
  /**
73
70
  * Get the control flow graph (CFG) for the request, computing if necessary.
74
- * @param force - Do not use the cache, instead force new analyses.
75
- * @param kind - The kind of CFG that is requested.
71
+ * @param force - Do not use the cache, instead force new analyses.
72
+ * @param kind - The kind of CFG that is requested.
76
73
  * @param simplifications - Simplification passes to be applied to the CFG.
77
74
  */
78
- controlflow(force: boolean | undefined, kind: CfgKind, simplifications: readonly CfgSimplificationPassName[] | undefined): Promise<ControlFlowInformation>;
75
+ controlflow(force: boolean | undefined, kind: CfgKind, simplifications?: readonly CfgSimplificationPassName[]): Promise<ControlFlowInformation>;
79
76
  /**
80
77
  * Get the control flow graph (CFG) for the request if already available, otherwise return `undefined`.
81
- * @param kind - The kind of CFG that is requested.
78
+ * @param kind - The kind of CFG that is requested.
82
79
  * @param simplifications - Simplification passes to be applied to the CFG.
83
80
  * @see {@link FlowrAnalyzerCache#controlflow} - to get the control flow graph, computing if necessary.
84
81
  */
@@ -4,9 +4,7 @@ exports.FlowrAnalyzerCache = void 0;
4
4
  const flowr_cache_1 = require("./flowr-cache");
5
5
  const default_pipelines_1 = require("../../core/steps/pipeline/default-pipelines");
6
6
  const assert_1 = require("../../util/assert");
7
- const objectmap_1 = require("../../util/collections/objectmap");
8
- const extract_cfg_1 = require("../../control-flow/extract-cfg");
9
- const cfg_kind_1 = require("../cfg-kind");
7
+ const flowr_analyzer_controlflow_cache_1 = require("./flowr-analyzer-controlflow-cache");
10
8
  /**
11
9
  * This provides the full analyzer caching layer, please avoid using this directly
12
10
  * and prefer the {@link FlowrAnalyzer}.
@@ -22,13 +20,10 @@ class FlowrAnalyzerCache extends flowr_cache_1.FlowrCache {
22
20
  }
23
21
  initCacheProviders() {
24
22
  this.pipeline = (0, default_pipelines_1.createDataflowPipeline)(this.args.parser, {
25
- request: this.args.request,
26
- getId: this.args.getId,
27
- overwriteFilePath: this.args.overwriteFilePath
28
- }, this.args.config);
29
- this.controlFlowCache = {
30
- simplified: new objectmap_1.ObjectMap(),
31
- };
23
+ context: this.args.context,
24
+ getId: this.args.getId
25
+ });
26
+ this.controlFlowCache = new flowr_analyzer_controlflow_cache_1.FlowrAnalyzerControlFlowCache();
32
27
  }
33
28
  static create(data) {
34
29
  return new FlowrAnalyzerCache(data);
@@ -51,7 +46,7 @@ class FlowrAnalyzerCache extends flowr_cache_1.FlowrCache {
51
46
  this.receive({ type: "full" /* CacheInvalidationEventType.Full */ });
52
47
  }
53
48
  async runTapeUntil(force, until) {
54
- (0, assert_1.guard)(this.args.request && (Array.isArray(this.args.request) ? this.args.request.length > 0 : true), 'At least one request must be set to run the analysis pipeline');
49
+ (0, assert_1.guard)(this.args.context.files.loadingOrder.getUnorderedRequests().length > 0, 'At least one request must be set to run the analysis pipeline');
55
50
  if (force) {
56
51
  this.reset();
57
52
  }
@@ -115,43 +110,27 @@ class FlowrAnalyzerCache extends flowr_cache_1.FlowrCache {
115
110
  }
116
111
  /**
117
112
  * Get the control flow graph (CFG) for the request, computing if necessary.
118
- * @param force - Do not use the cache, instead force new analyses.
119
- * @param kind - The kind of CFG that is requested.
113
+ * @param force - Do not use the cache, instead force new analyses.
114
+ * @param kind - The kind of CFG that is requested.
120
115
  * @param simplifications - Simplification passes to be applied to the CFG.
121
116
  */
122
117
  async controlflow(force, kind, simplifications) {
123
- (0, assert_1.guard)(kind === cfg_kind_1.CfgKind.Quick ? simplifications === undefined : true, 'Cannot apply simplifications to quick CFG');
124
- simplifications ??= [];
125
- if (!force) {
126
- const value = this.controlFlowCache.simplified.get([simplifications, kind]);
127
- if (value !== undefined) {
128
- return value;
129
- }
130
- }
131
- const normalized = await this.normalize(force);
132
- let result;
133
- switch (kind) {
134
- case cfg_kind_1.CfgKind.WithDataflow:
135
- result = (0, extract_cfg_1.extractCfg)(normalized, this.args.config, (await this.dataflow()).graph, simplifications);
136
- break;
137
- case cfg_kind_1.CfgKind.NoDataflow:
138
- result = (0, extract_cfg_1.extractCfg)(normalized, this.args.config, undefined, simplifications);
139
- break;
140
- case cfg_kind_1.CfgKind.Quick:
141
- result = this.peekDataflow()?.cfgQuick ?? (0, extract_cfg_1.extractCfgQuick)(normalized);
142
- break;
143
- }
144
- this.controlFlowCache.simplified.set([simplifications, kind], result);
145
- return result;
118
+ const cfgInfo = {
119
+ ctx: this.args.context,
120
+ cfgQuick: this.peekDataflow()?.cfgQuick,
121
+ ast: async () => await this.normalize(),
122
+ dfg: async () => await this.dataflow()
123
+ };
124
+ return this.controlFlowCache.get(force, kind, cfgInfo, simplifications);
146
125
  }
147
126
  /**
148
127
  * Get the control flow graph (CFG) for the request if already available, otherwise return `undefined`.
149
- * @param kind - The kind of CFG that is requested.
128
+ * @param kind - The kind of CFG that is requested.
150
129
  * @param simplifications - Simplification passes to be applied to the CFG.
151
130
  * @see {@link FlowrAnalyzerCache#controlflow} - to get the control flow graph, computing if necessary.
152
131
  */
153
132
  peekControlflow(kind, simplifications) {
154
- return this.controlFlowCache.simplified.get([simplifications ?? [], kind]);
133
+ return this.controlFlowCache.peek(kind, simplifications);
155
134
  }
156
135
  }
157
136
  exports.FlowrAnalyzerCache = FlowrAnalyzerCache;
@@ -0,0 +1,34 @@
1
+ import type { CfgSimplificationPassName } from '../../control-flow/cfg-simplification';
2
+ import { CfgKind } from '../cfg-kind';
3
+ import type { ControlFlowInformation } from '../../control-flow/control-flow-graph';
4
+ import type { NormalizedAst } from '../../r-bridge/lang-4.x/ast/model/processing/decorate';
5
+ import type { DataflowInformation } from '../../dataflow/info';
6
+ import type { FlowrAnalyzerContext } from '../context/flowr-analyzer-context';
7
+ interface CfgInfo {
8
+ ctx: FlowrAnalyzerContext;
9
+ cfgQuick: ControlFlowInformation | undefined;
10
+ dfg: () => Promise<DataflowInformation>;
11
+ ast: () => Promise<NormalizedAst>;
12
+ }
13
+ export declare class FlowrAnalyzerControlFlowCache {
14
+ private readonly cache;
15
+ peek(kind: CfgKind, simplifications: readonly CfgSimplificationPassName[] | undefined): ControlFlowInformation | undefined;
16
+ get(force: boolean | undefined, kind: CfgKind, cfgCacheInfo: CfgInfo, simplifications?: readonly CfgSimplificationPassName[]): Promise<ControlFlowInformation>;
17
+ /**
18
+ * Create and cache the base CFG without simplifications.
19
+ */
20
+ private createAndCacheBaseCfg;
21
+ /**
22
+ * Try to get a cached CFG with some of the requested simplifications already applied.
23
+ * Matches the longest prefix of simplifications available.
24
+ * @returns The cached CFG and the missing simplifications to be applied, or `undefined` if no cached CFG is available.
25
+ */
26
+ private tryGetCachedCfg;
27
+ /**
28
+ * Normalize the order of simplification passes.
29
+ * Is currently an identity function, but may be extended in the future to enforce a specific order using heuristics.
30
+ * @param simplifications - the requested simplification passes.
31
+ */
32
+ private normalizeSimplificationOrder;
33
+ }
34
+ export {};
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FlowrAnalyzerControlFlowCache = void 0;
4
+ const objectmap_1 = require("../../util/collections/objectmap");
5
+ const cfg_simplification_1 = require("../../control-flow/cfg-simplification");
6
+ const cfg_kind_1 = require("../cfg-kind");
7
+ const assert_1 = require("../../util/assert");
8
+ const extract_cfg_1 = require("../../control-flow/extract-cfg");
9
+ class FlowrAnalyzerControlFlowCache {
10
+ cache = new objectmap_1.ObjectMap();
11
+ peek(kind, simplifications) {
12
+ return this.cache.get([simplifications ?? [], kind]);
13
+ }
14
+ async get(force, kind, cfgCacheInfo, simplifications) {
15
+ (0, assert_1.guard)(kind === cfg_kind_1.CfgKind.Quick ? simplifications === undefined : true, 'Cannot apply simplifications to quick CFG');
16
+ simplifications ??= [];
17
+ const orderedSimplifications = this.normalizeSimplificationOrder(simplifications);
18
+ const cached = force ?
19
+ { cfg: undefined, missingSimplifications: orderedSimplifications }
20
+ : this.tryGetCachedCfg(orderedSimplifications, kind);
21
+ let cfg = cached.cfg;
22
+ if (!cfg) {
23
+ cfg = await this.createAndCacheBaseCfg(kind, cfgCacheInfo);
24
+ }
25
+ if (cached.missingSimplifications.length > 0) {
26
+ const cfgPassInfo = { dfg: (await cfgCacheInfo.dfg()).graph, ctx: cfgCacheInfo.ctx, ast: await cfgCacheInfo.ast() };
27
+ cfg = (0, cfg_simplification_1.simplifyControlFlowInformation)(cfg, cfgPassInfo, cached.missingSimplifications);
28
+ }
29
+ this.cache.set([orderedSimplifications, kind], cfg);
30
+ return cfg;
31
+ }
32
+ /**
33
+ * Create and cache the base CFG without simplifications.
34
+ */
35
+ async createAndCacheBaseCfg(kind, { cfgQuick, dfg, ctx, ast }) {
36
+ let result;
37
+ switch (kind) {
38
+ case cfg_kind_1.CfgKind.WithDataflow:
39
+ result = (0, extract_cfg_1.extractCfg)(await ast(), ctx, (await dfg()).graph);
40
+ break;
41
+ case cfg_kind_1.CfgKind.NoDataflow:
42
+ result = (0, extract_cfg_1.extractCfg)(await ast(), ctx);
43
+ break;
44
+ case cfg_kind_1.CfgKind.Quick:
45
+ result = cfgQuick ?? (0, extract_cfg_1.extractCfgQuick)(await ast());
46
+ break;
47
+ }
48
+ this.cache.set([[], kind], result);
49
+ return result;
50
+ }
51
+ /**
52
+ * Try to get a cached CFG with some of the requested simplifications already applied.
53
+ * Matches the longest prefix of simplifications available.
54
+ * @returns The cached CFG and the missing simplifications to be applied, or `undefined` if no cached CFG is available.
55
+ */
56
+ tryGetCachedCfg(simplifications, kind) {
57
+ for (let prefixLen = simplifications.length; prefixLen >= 0; prefixLen--) {
58
+ const prefix = simplifications.slice(0, prefixLen);
59
+ const cached = this.cache.get([prefix, kind]);
60
+ if (cached !== undefined) {
61
+ return {
62
+ cfg: cached,
63
+ missingSimplifications: simplifications.slice(prefixLen)
64
+ };
65
+ }
66
+ }
67
+ return { cfg: undefined, missingSimplifications: simplifications };
68
+ }
69
+ /**
70
+ * Normalize the order of simplification passes.
71
+ * Is currently an identity function, but may be extended in the future to enforce a specific order using heuristics.
72
+ * @param simplifications - the requested simplification passes.
73
+ */
74
+ normalizeSimplificationOrder(simplifications) {
75
+ return simplifications;
76
+ }
77
+ }
78
+ exports.FlowrAnalyzerControlFlowCache = FlowrAnalyzerControlFlowCache;
79
+ //# sourceMappingURL=flowr-analyzer-controlflow-cache.js.map
@@ -1,6 +1,9 @@
1
- import { type RAnalysisRequest, type ReadOnlyFlowrAnalyzerFilesContext, FlowrAnalyzerFilesContext } from './flowr-analyzer-files-context';
2
- import { type ReadOnlyFlowrAnalyzerDependenciesContext, FlowrAnalyzerDependenciesContext } from './flowr-analyzer-dependencies-context';
1
+ import { FlowrAnalyzerFilesContext, type RAnalysisRequest, type ReadOnlyFlowrAnalyzerFilesContext } from './flowr-analyzer-files-context';
2
+ import { FlowrAnalyzerDependenciesContext, type ReadOnlyFlowrAnalyzerDependenciesContext } from './flowr-analyzer-dependencies-context';
3
3
  import { type FlowrAnalyzerPlugin, PluginType } from '../plugins/flowr-analyzer-plugin';
4
+ import type { fileProtocol, RParseRequestFromFile, RParseRequests } from '../../r-bridge/retriever';
5
+ import type { FlowrConfigOptions } from '../../config';
6
+ import type { FlowrFileProvider } from './flowr-file';
4
7
  /**
5
8
  * This is a read-only interface to the {@link FlowrAnalyzerContext}.
6
9
  * It prevents you from modifying the context, but allows you to inspect it (which is probably what you want when using the {@link FlowrAnalyzer}).
@@ -15,6 +18,10 @@ export interface ReadOnlyFlowrAnalyzerContext {
15
18
  * The dependencies context provides access to the identified dependencies and their versions.
16
19
  */
17
20
  readonly deps: ReadOnlyFlowrAnalyzerDependenciesContext;
21
+ /**
22
+ * The configuration options used by the analyzer.
23
+ */
24
+ readonly config: FlowrConfigOptions;
18
25
  }
19
26
  /**
20
27
  * This summarizes the other context layers used by the {@link FlowrAnalyzer}.
@@ -31,11 +38,12 @@ export interface ReadOnlyFlowrAnalyzerContext {
31
38
  export declare class FlowrAnalyzerContext implements ReadOnlyFlowrAnalyzerContext {
32
39
  readonly files: FlowrAnalyzerFilesContext;
33
40
  readonly deps: FlowrAnalyzerDependenciesContext;
34
- constructor(plugins: ReadonlyMap<PluginType, readonly FlowrAnalyzerPlugin[]>);
41
+ readonly config: FlowrConfigOptions;
42
+ constructor(config: FlowrConfigOptions, plugins: ReadonlyMap<PluginType, readonly FlowrAnalyzerPlugin[]>);
35
43
  /** delegate request addition */
36
44
  addRequests(requests: readonly RAnalysisRequest[]): void;
37
- /** delegate request addition */
38
- addRequest(request: RAnalysisRequest): void;
45
+ addFile(f: string | FlowrFileProvider | RParseRequestFromFile): void;
46
+ addFiles(f: (string | FlowrFileProvider | RParseRequestFromFile)[]): void;
39
47
  /** this conducts all the step that can be done before the main analysis run */
40
48
  resolvePreAnalysis(): void;
41
49
  /**
@@ -49,3 +57,20 @@ export declare class FlowrAnalyzerContext implements ReadOnlyFlowrAnalyzerContex
49
57
  */
50
58
  reset(): void;
51
59
  }
60
+ /**
61
+ * Lifting {@link requestFromInput} to create a full {@link FlowrAnalyzerContext} from input requests.
62
+ * Please use this only for a "quick" setup, or to have compatibility with the pre-project flowR era.
63
+ * Otherwise, refer to a {@link FlowrAnalyzerBuilder} to create a fully customized {@link FlowrAnalyzer} instance.
64
+ * @see {@link requestFromInput} - for details on how inputs are processed into requests.
65
+ * @see {@link contextFromSources} - to create a context from source code strings directly.
66
+ */
67
+ export declare function contextFromInput(input: `${typeof fileProtocol}${string}` | string | readonly string[] | RParseRequests, config?: FlowrConfigOptions, plugins?: FlowrAnalyzerPlugin[]): FlowrAnalyzerContext;
68
+ /**
69
+ * Create a {@link FlowrAnalyzerContext} from a set of source code strings.
70
+ * @param sources - A record mapping file paths to their source code content.
71
+ * @param config - Configuration options for the analyzer.
72
+ * @param plugins - Optional plugins to extend the analyzer's functionality.
73
+ * @see {@link contextFromInput} - to create a context from input requests.
74
+ * @see {@link FlowrInlineTextFile} - to create inline text files for the sources.
75
+ */
76
+ export declare function contextFromSources(sources: Record<string, string>, config?: FlowrConfigOptions, plugins?: FlowrAnalyzerPlugin[]): FlowrAnalyzerContext;