@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
@@ -1,6 +1,11 @@
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';
7
+ import type { ReadOnlyFlowrAnalyzerEnvironmentContext } from './flowr-analyzer-environment-context';
8
+ import { FlowrAnalyzerEnvironmentContext } from './flowr-analyzer-environment-context';
4
9
  /**
5
10
  * This is a read-only interface to the {@link FlowrAnalyzerContext}.
6
11
  * 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 +20,14 @@ export interface ReadOnlyFlowrAnalyzerContext {
15
20
  * The dependencies context provides access to the identified dependencies and their versions.
16
21
  */
17
22
  readonly deps: ReadOnlyFlowrAnalyzerDependenciesContext;
23
+ /**
24
+ * The environment context provides access to the environment information used during analysis.
25
+ */
26
+ readonly env: ReadOnlyFlowrAnalyzerEnvironmentContext;
27
+ /**
28
+ * The configuration options used by the analyzer.
29
+ */
30
+ readonly config: FlowrConfigOptions;
18
31
  }
19
32
  /**
20
33
  * This summarizes the other context layers used by the {@link FlowrAnalyzer}.
@@ -31,11 +44,13 @@ export interface ReadOnlyFlowrAnalyzerContext {
31
44
  export declare class FlowrAnalyzerContext implements ReadOnlyFlowrAnalyzerContext {
32
45
  readonly files: FlowrAnalyzerFilesContext;
33
46
  readonly deps: FlowrAnalyzerDependenciesContext;
34
- constructor(plugins: ReadonlyMap<PluginType, readonly FlowrAnalyzerPlugin[]>);
47
+ readonly env: FlowrAnalyzerEnvironmentContext;
48
+ readonly config: FlowrConfigOptions;
49
+ constructor(config: FlowrConfigOptions, plugins: ReadonlyMap<PluginType, readonly FlowrAnalyzerPlugin[]>);
35
50
  /** delegate request addition */
36
51
  addRequests(requests: readonly RAnalysisRequest[]): void;
37
- /** delegate request addition */
38
- addRequest(request: RAnalysisRequest): void;
52
+ addFile(f: string | FlowrFileProvider | RParseRequestFromFile): void;
53
+ addFiles(f: (string | FlowrFileProvider | RParseRequestFromFile)[]): void;
39
54
  /** this conducts all the step that can be done before the main analysis run */
40
55
  resolvePreAnalysis(): void;
41
56
  /**
@@ -49,3 +64,20 @@ export declare class FlowrAnalyzerContext implements ReadOnlyFlowrAnalyzerContex
49
64
  */
50
65
  reset(): void;
51
66
  }
67
+ /**
68
+ * Lifting {@link requestFromInput} to create a full {@link FlowrAnalyzerContext} from input requests.
69
+ * Please use this only for a "quick" setup, or to have compatibility with the pre-project flowR era.
70
+ * Otherwise, refer to a {@link FlowrAnalyzerBuilder} to create a fully customized {@link FlowrAnalyzer} instance.
71
+ * @see {@link requestFromInput} - for details on how inputs are processed into requests.
72
+ * @see {@link contextFromSources} - to create a context from source code strings directly.
73
+ */
74
+ export declare function contextFromInput(input: `${typeof fileProtocol}${string}` | string | readonly string[] | RParseRequests, config?: FlowrConfigOptions, plugins?: FlowrAnalyzerPlugin[]): FlowrAnalyzerContext;
75
+ /**
76
+ * Create a {@link FlowrAnalyzerContext} from a set of source code strings.
77
+ * @param sources - A record mapping file paths to their source code content.
78
+ * @param config - Configuration options for the analyzer.
79
+ * @param plugins - Optional plugins to extend the analyzer's functionality.
80
+ * @see {@link contextFromInput} - to create a context from input requests.
81
+ * @see {@link FlowrInlineTextFile} - to create inline text files for the sources.
82
+ */
83
+ export declare function contextFromSources(sources: Record<string, string>, config?: FlowrConfigOptions, plugins?: FlowrAnalyzerPlugin[]): FlowrAnalyzerContext;
@@ -1,10 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FlowrAnalyzerContext = void 0;
4
+ exports.contextFromInput = contextFromInput;
5
+ exports.contextFromSources = contextFromSources;
4
6
  const flowr_analyzer_files_context_1 = require("./flowr-analyzer-files-context");
5
7
  const flowr_analyzer_dependencies_context_1 = require("./flowr-analyzer-dependencies-context");
6
8
  const flowr_analyzer_plugin_1 = require("../plugins/flowr-analyzer-plugin");
7
9
  const flowr_analyzer_loading_order_context_1 = require("./flowr-analyzer-loading-order-context");
10
+ const arrays_1 = require("../../util/collections/arrays");
11
+ const retriever_1 = require("../../r-bridge/retriever");
12
+ const config_1 = require("../../config");
13
+ const flowr_file_1 = require("./flowr-file");
14
+ const flowr_analyzer_environment_context_1 = require("./flowr-analyzer-environment-context");
8
15
  /**
9
16
  * This summarizes the other context layers used by the {@link FlowrAnalyzer}.
10
17
  * Have a look at the attributes and layers listed below (e.g., {@link files} and {@link deps})
@@ -20,18 +27,24 @@ const flowr_analyzer_loading_order_context_1 = require("./flowr-analyzer-loading
20
27
  class FlowrAnalyzerContext {
21
28
  files;
22
29
  deps;
23
- constructor(plugins) {
30
+ env;
31
+ config;
32
+ constructor(config, plugins) {
33
+ this.config = config;
24
34
  const loadingOrder = new flowr_analyzer_loading_order_context_1.FlowrAnalyzerLoadingOrderContext(this, plugins.get(flowr_analyzer_plugin_1.PluginType.LoadingOrder));
25
35
  this.files = new flowr_analyzer_files_context_1.FlowrAnalyzerFilesContext(loadingOrder, (plugins.get(flowr_analyzer_plugin_1.PluginType.ProjectDiscovery) ?? []), (plugins.get(flowr_analyzer_plugin_1.PluginType.FileLoad) ?? []));
26
36
  this.deps = new flowr_analyzer_dependencies_context_1.FlowrAnalyzerDependenciesContext(this, (plugins.get(flowr_analyzer_plugin_1.PluginType.DependencyIdentification) ?? []));
37
+ this.env = new flowr_analyzer_environment_context_1.FlowrAnalyzerEnvironmentContext(this);
27
38
  }
28
39
  /** delegate request addition */
29
40
  addRequests(requests) {
30
41
  this.files.addRequests(requests);
31
42
  }
32
- /** delegate request addition */
33
- addRequest(request) {
34
- this.files.addRequest(request);
43
+ addFile(f) {
44
+ this.files.addFile(f);
45
+ }
46
+ addFiles(f) {
47
+ this.files.addFiles(f);
35
48
  }
36
49
  /** this conducts all the step that can be done before the main analysis run */
37
50
  resolvePreAnalysis() {
@@ -55,4 +68,38 @@ class FlowrAnalyzerContext {
55
68
  }
56
69
  }
57
70
  exports.FlowrAnalyzerContext = FlowrAnalyzerContext;
71
+ /**
72
+ * Lifting {@link requestFromInput} to create a full {@link FlowrAnalyzerContext} from input requests.
73
+ * Please use this only for a "quick" setup, or to have compatibility with the pre-project flowR era.
74
+ * Otherwise, refer to a {@link FlowrAnalyzerBuilder} to create a fully customized {@link FlowrAnalyzer} instance.
75
+ * @see {@link requestFromInput} - for details on how inputs are processed into requests.
76
+ * @see {@link contextFromSources} - to create a context from source code strings directly.
77
+ */
78
+ function contextFromInput(input, config = config_1.defaultConfigOptions, plugins) {
79
+ const context = new FlowrAnalyzerContext(config, (0, arrays_1.arraysGroupBy)(plugins ?? [], (p) => p.type));
80
+ if (typeof input === 'string' || Array.isArray(input) && input.every(i => typeof i === 'string')) {
81
+ const requests = (0, retriever_1.requestFromInput)(input);
82
+ context.addRequests(Array.isArray(requests) ? requests : [requests]);
83
+ }
84
+ else {
85
+ const requests = Array.isArray(input) ? input : [input];
86
+ context.addRequests(requests);
87
+ }
88
+ return context;
89
+ }
90
+ /**
91
+ * Create a {@link FlowrAnalyzerContext} from a set of source code strings.
92
+ * @param sources - A record mapping file paths to their source code content.
93
+ * @param config - Configuration options for the analyzer.
94
+ * @param plugins - Optional plugins to extend the analyzer's functionality.
95
+ * @see {@link contextFromInput} - to create a context from input requests.
96
+ * @see {@link FlowrInlineTextFile} - to create inline text files for the sources.
97
+ */
98
+ function contextFromSources(sources, config = config_1.defaultConfigOptions, plugins) {
99
+ const context = new FlowrAnalyzerContext(config, (0, arrays_1.arraysGroupBy)(plugins ?? [], (p) => p.type));
100
+ for (const [p, c] of Object.entries(sources)) {
101
+ context.addFile(new flowr_file_1.FlowrInlineTextFile(p, c));
102
+ }
103
+ return context;
104
+ }
58
105
  //# sourceMappingURL=flowr-analyzer-context.js.map
@@ -0,0 +1,47 @@
1
+ import type { FlowrAnalyzerContext } from './flowr-analyzer-context';
2
+ import type { IEnvironment, REnvironmentInformation } from '../../dataflow/environments/environment';
3
+ import type { DeepReadonly } from 'ts-essentials';
4
+ import type { Fingerprint } from '../../slicing/static/fingerprint';
5
+ /**
6
+ * This is the read-only interface to the {@link FlowrAnalyzerEnvironmentContext},
7
+ * which provides access to the built-in environment used during analysis.
8
+ */
9
+ export interface ReadOnlyFlowrAnalyzerEnvironmentContext {
10
+ /**
11
+ * Get the built-in environment used during analysis.
12
+ */
13
+ get builtInEnvironment(): DeepReadonly<IEnvironment>;
14
+ /**
15
+ * Get the empty built-in environment used during analysis.
16
+ * The empty built-in environment only contains primitive definitions.
17
+ */
18
+ get emptyBuiltInEnvironment(): DeepReadonly<IEnvironment>;
19
+ /**
20
+ * Create a new {@link REnvironmentInformation|environment} with the configured built-in environment as base.
21
+ */
22
+ makeCleanEnv(): REnvironmentInformation;
23
+ /**
24
+ * Get the fingerprint of the clean environment with the configured built-in environment as base.
25
+ */
26
+ getCleanEnvFingerprint(): Fingerprint;
27
+ /**
28
+ * Create a new {@link REnvironmentInformation|environment} with an empty built-in environment as base.
29
+ */
30
+ makeCleanEnvWithEmptyBuiltIns(): REnvironmentInformation;
31
+ }
32
+ /**
33
+ * This context is responsible for providing the built-in environment.
34
+ * It creates the built-in environment based on the configuration provided in the {@link FlowrAnalyzerContext}.
35
+ */
36
+ export declare class FlowrAnalyzerEnvironmentContext implements ReadOnlyFlowrAnalyzerEnvironmentContext {
37
+ readonly name = "flowr-analyzer-environment-context";
38
+ private readonly builtInEnv;
39
+ private readonly emptyBuiltInEnv;
40
+ private builtInEnvFingerprint;
41
+ constructor(ctx: FlowrAnalyzerContext);
42
+ get builtInEnvironment(): DeepReadonly<IEnvironment>;
43
+ get emptyBuiltInEnvironment(): DeepReadonly<IEnvironment>;
44
+ makeCleanEnv(): REnvironmentInformation;
45
+ getCleanEnvFingerprint(): Fingerprint;
46
+ makeCleanEnvWithEmptyBuiltIns(): REnvironmentInformation;
47
+ }
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FlowrAnalyzerEnvironmentContext = void 0;
4
+ const environment_1 = require("../../dataflow/environments/environment");
5
+ const built_in_config_1 = require("../../dataflow/environments/built-in-config");
6
+ const fingerprint_1 = require("../../slicing/static/fingerprint");
7
+ /**
8
+ * This context is responsible for providing the built-in environment.
9
+ * It creates the built-in environment based on the configuration provided in the {@link FlowrAnalyzerContext}.
10
+ */
11
+ class FlowrAnalyzerEnvironmentContext {
12
+ name = 'flowr-analyzer-environment-context';
13
+ builtInEnv;
14
+ emptyBuiltInEnv;
15
+ builtInEnvFingerprint;
16
+ constructor(ctx) {
17
+ const builtInsConfig = ctx.config.semantics.environment.overwriteBuiltIns;
18
+ const builtIns = (0, built_in_config_1.getBuiltInDefinitions)(builtInsConfig.definitions, builtInsConfig.loadDefaults);
19
+ this.builtInEnv = new environment_1.Environment(undefined, true);
20
+ this.builtInEnv.memory = builtIns.builtInMemory;
21
+ this.emptyBuiltInEnv = new environment_1.Environment(undefined, true);
22
+ this.emptyBuiltInEnv.memory = builtIns.emptyBuiltInMemory;
23
+ }
24
+ get builtInEnvironment() {
25
+ return this.builtInEnv;
26
+ }
27
+ get emptyBuiltInEnvironment() {
28
+ return this.emptyBuiltInEnv;
29
+ }
30
+ makeCleanEnv() {
31
+ return {
32
+ current: new environment_1.Environment(this.builtInEnv),
33
+ level: 0
34
+ };
35
+ }
36
+ getCleanEnvFingerprint() {
37
+ if (!this.builtInEnvFingerprint) {
38
+ this.builtInEnvFingerprint = (0, fingerprint_1.envFingerprint)(this.makeCleanEnv());
39
+ }
40
+ return this.builtInEnvFingerprint;
41
+ }
42
+ makeCleanEnvWithEmptyBuiltIns() {
43
+ return {
44
+ current: new environment_1.Environment(this.emptyBuiltInEnv),
45
+ level: 0
46
+ };
47
+ }
48
+ }
49
+ exports.FlowrAnalyzerEnvironmentContext = FlowrAnalyzerEnvironmentContext;
50
+ //# sourceMappingURL=flowr-analyzer-environment-context.js.map
@@ -1,9 +1,9 @@
1
1
  import { AbstractFlowrAnalyzerContext } from './abstract-flowr-analyzer-context';
2
- import { type RParseRequest, type RParseRequestFromFile } from '../../r-bridge/retriever';
2
+ import type { RParseRequestFromText, RParseRequest, RParseRequestFromFile } from '../../r-bridge/retriever';
3
3
  import type { FlowrAnalyzerLoadingOrderContext, ReadOnlyFlowrAnalyzerLoadingOrderContext } from './flowr-analyzer-loading-order-context';
4
4
  import { FlowrAnalyzerProjectDiscoveryPlugin } from '../plugins/project-discovery/flowr-analyzer-project-discovery-plugin';
5
5
  import { FlowrAnalyzerFilePlugin } from '../plugins/file-plugins/flowr-analyzer-file-plugin';
6
- import { type FlowrFile, type FlowrFileProvider, SpecialFileRole } from './flowr-file';
6
+ import { FlowrFile, type FlowrFileProvider, FileRole } from './flowr-file';
7
7
  import type { FlowrDescriptionFile } from '../plugins/file-plugins/flowr-description-file';
8
8
  /**
9
9
  * This is a request to process a folder as a project, which will be expanded by the registered {@link FlowrAnalyzerProjectDiscoveryPlugin}s.
@@ -16,11 +16,12 @@ export interface RProjectAnalysisRequest {
16
16
  readonly content: string;
17
17
  }
18
18
  export type RAnalysisRequest = RParseRequest | RProjectAnalysisRequest;
19
- export type SpecialFiles = {
20
- [SpecialFileRole.Description]: FlowrDescriptionFile[];
21
- [SpecialFileRole.Namespace]: FlowrFileProvider[];
22
- [SpecialFileRole.Data]: FlowrFileProvider[];
23
- [SpecialFileRole.Other]: FlowrFileProvider[];
19
+ export type RoleBasedFiles = {
20
+ [FileRole.Description]: FlowrDescriptionFile[];
21
+ [FileRole.Namespace]: FlowrFileProvider[];
22
+ [FileRole.Source]: FlowrFileProvider[];
23
+ [FileRole.Data]: FlowrFileProvider[];
24
+ [FileRole.Other]: FlowrFileProvider[];
24
25
  };
25
26
  /**
26
27
  * This is the read-only interface for the files context, which is used to manage all files known to the {@link FlowrAnalyzer}.
@@ -43,7 +44,37 @@ export interface ReadOnlyFlowrAnalyzerFilesContext {
43
44
  * getFilesByRole(SpecialFileRole.Description)
44
45
  * ```
45
46
  */
46
- getFilesByRole<Role extends SpecialFileRole>(role: Role): SpecialFiles[Role];
47
+ getFilesByRole<Role extends FileRole>(role: Role): RoleBasedFiles[Role];
48
+ /**
49
+ * Check if the context has a file with the given path.
50
+ * Please note, that this may also check the file system, depending on the configuration
51
+ * (see {@link FlowrConfigOptions.project.resolveUnknownPathsOnDisk}).
52
+ * @param path - The path to the file.
53
+ *
54
+ * If you do not know the exact path or, e.g., casing of the file, use {@link exists} instead.
55
+ */
56
+ hasFile(path: string): boolean;
57
+ /**
58
+ * Check if a file exists at the given path, optionally ignoring case.
59
+ * @param path - The path to the file.
60
+ * @param ignoreCase - Whether to ignore case when checking for the file.
61
+ *
62
+ * Please note that this method checks the file system based on the configuration (see {@link FlowrConfigOptions.project.resolveUnknownPathsOnDisk}).
63
+ * @returns The actual path of the file if it exists, otherwise `undefined`.
64
+ */
65
+ exists(path: string, ignoreCase: boolean): string | undefined;
66
+ /**
67
+ * Until parsers support multiple request types from the virtual context system,
68
+ * we resolve their contents.
69
+ */
70
+ resolveRequest(r: RParseRequest): {
71
+ r: RParseRequestFromText;
72
+ path?: string;
73
+ };
74
+ /**
75
+ * Get all files that have been considered during dataflow analysis.
76
+ */
77
+ consideredFilesList(): readonly string[];
47
78
  }
48
79
  /**
49
80
  * This is the analyzer file context to be modified by all plugins that affect the files.
@@ -54,10 +85,21 @@ export declare class FlowrAnalyzerFilesContext extends AbstractFlowrAnalyzerCont
54
85
  readonly name = "flowr-analyzer-files-context";
55
86
  readonly loadingOrder: FlowrAnalyzerLoadingOrderContext;
56
87
  private files;
88
+ private inlineFiles;
57
89
  private readonly fileLoaders;
58
- private specialFiles;
90
+ /** these are all the paths of files that have been considered by the dataflow graph (even if not added) */
91
+ private readonly consideredFiles;
92
+ private byRole;
59
93
  constructor(loadingOrder: FlowrAnalyzerLoadingOrderContext, plugins: readonly FlowrAnalyzerProjectDiscoveryPlugin[], fileLoaders: readonly FlowrAnalyzerFilePlugin[]);
60
94
  reset(): void;
95
+ /**
96
+ * Record that a file has been considered during dataflow analysis.
97
+ */
98
+ addConsideredFile(path: string): void;
99
+ /**
100
+ * Get all files that have been considered during dataflow analysis.
101
+ */
102
+ consideredFilesList(): readonly string[];
61
103
  /**
62
104
  * Add multiple requests to the context. This is just a convenience method that calls {@link addRequest} for each request.
63
105
  */
@@ -65,21 +107,29 @@ export declare class FlowrAnalyzerFilesContext extends AbstractFlowrAnalyzerCont
65
107
  /**
66
108
  * Add a request to the context. If the request is of type `project`, it will be expanded using the registered {@link FlowrAnalyzerProjectDiscoveryPlugin}s.
67
109
  */
68
- addRequest(request: RAnalysisRequest): void;
110
+ private addRequest;
69
111
  /**
70
112
  * Add multiple files to the context. This is just a convenience method that calls {@link addFile} for each file.
71
113
  */
72
- addFiles(...files: (string | FlowrFileProvider<string> | RParseRequestFromFile)[]): void;
114
+ addFiles(files: (string | FlowrFileProvider | RParseRequestFromFile)[]): void;
73
115
  /**
74
116
  * Add a file to the context. If the file has a special role, it will be added to the corresponding list of special files.
75
117
  * This method also applies any registered {@link FlowrAnalyzerFilePlugin}s to the file before adding it to the context.
76
118
  */
77
- addFile(file: string | FlowrFileProvider<string> | RParseRequestFromFile, role?: SpecialFileRole): void;
119
+ addFile(file: string | FlowrFileProvider | RParseRequestFromFile, role?: FileRole): FlowrFileProvider<{
120
+ toString(): string;
121
+ }>;
122
+ hasFile(path: string): boolean;
123
+ exists(p: string, ignoreCase: boolean): string | undefined;
78
124
  private fileLoadPlugins;
125
+ resolveRequest(r: RParseRequest): {
126
+ r: RParseRequestFromText;
127
+ path?: string;
128
+ };
79
129
  /**
80
130
  * Get all requests that have been added to this context.
81
131
  * This is a convenience method that calls {@link FlowrAnalyzerLoadingOrderContext.getLoadingOrder}.
82
132
  */
83
133
  computeLoadingOrder(): readonly RParseRequest[];
84
- getFilesByRole<Role extends SpecialFileRole>(role: Role): SpecialFiles[Role];
134
+ getFilesByRole<Role extends FileRole>(role: Role): RoleBasedFiles[Role];
85
135
  }
@@ -1,4 +1,7 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.FlowrAnalyzerFilesContext = void 0;
4
7
  const abstract_flowr_analyzer_context_1 = require("./abstract-flowr-analyzer-context");
@@ -8,23 +11,19 @@ const flowr_analyzer_project_discovery_plugin_1 = require("../plugins/project-di
8
11
  const flowr_analyzer_file_plugin_1 = require("../plugins/file-plugins/flowr-analyzer-file-plugin");
9
12
  const flowr_file_1 = require("./flowr-file");
10
13
  const log_1 = require("../../util/log");
14
+ const fs_1 = __importDefault(require("fs"));
15
+ const path_1 = __importDefault(require("path"));
11
16
  const fileLog = log_1.log.getSubLogger({ name: 'flowr-analyzer-files-context' });
12
- function obtainFileAndPath(file, role) {
13
- let f;
14
- let p;
17
+ function wrapFile(file, role) {
15
18
  if (typeof file === 'string') {
16
- f = new flowr_file_1.FlowrTextFile(file, role);
17
- p = file;
19
+ return new flowr_file_1.FlowrTextFile(file, role);
18
20
  }
19
21
  else if ('request' in file) {
20
- f = file;
21
- p = file.content;
22
+ return flowr_file_1.FlowrFile.fromRequest(file);
22
23
  }
23
24
  else {
24
- f = file;
25
- p = file.path().toString();
25
+ return file;
26
26
  }
27
- return { f, p };
28
27
  }
29
28
  /**
30
29
  * This is the analyzer file context to be modified by all plugins that affect the files.
@@ -34,15 +33,19 @@ function obtainFileAndPath(file, role) {
34
33
  class FlowrAnalyzerFilesContext extends abstract_flowr_analyzer_context_1.AbstractFlowrAnalyzerContext {
35
34
  name = 'flowr-analyzer-files-context';
36
35
  loadingOrder;
37
- /* all project files etc., this contains *all* files, loading orders etc. are to be handled by plugins */
36
+ /* all project files etc., this contains *all* (non-inline) files, loading orders etc. are to be handled by plugins */
38
37
  files = new Map();
38
+ inlineFiles = [];
39
39
  fileLoaders;
40
+ /** these are all the paths of files that have been considered by the dataflow graph (even if not added) */
41
+ consideredFiles = [];
40
42
  /* files that are part of the analysis, e.g. source files */
41
- specialFiles = {
42
- [flowr_file_1.SpecialFileRole.Description]: [],
43
- [flowr_file_1.SpecialFileRole.Namespace]: [],
44
- [flowr_file_1.SpecialFileRole.Data]: [],
45
- [flowr_file_1.SpecialFileRole.Other]: []
43
+ byRole = {
44
+ [flowr_file_1.FileRole.Description]: [],
45
+ [flowr_file_1.FileRole.Namespace]: [],
46
+ [flowr_file_1.FileRole.Source]: [],
47
+ [flowr_file_1.FileRole.Data]: [],
48
+ [flowr_file_1.FileRole.Other]: []
46
49
  };
47
50
  constructor(loadingOrder, plugins, fileLoaders) {
48
51
  super(loadingOrder.getAttachedContext(), flowr_analyzer_project_discovery_plugin_1.FlowrAnalyzerProjectDiscoveryPlugin.defaultPlugin(), plugins);
@@ -53,6 +56,18 @@ class FlowrAnalyzerFilesContext extends abstract_flowr_analyzer_context_1.Abstra
53
56
  this.loadingOrder.reset();
54
57
  this.files = new Map();
55
58
  }
59
+ /**
60
+ * Record that a file has been considered during dataflow analysis.
61
+ */
62
+ addConsideredFile(path) {
63
+ this.consideredFiles.push(path);
64
+ }
65
+ /**
66
+ * Get all files that have been considered during dataflow analysis.
67
+ */
68
+ consideredFilesList() {
69
+ return this.consideredFiles;
70
+ }
56
71
  /**
57
72
  * Add multiple requests to the context. This is just a convenience method that calls {@link addRequest} for each request.
58
73
  */
@@ -67,9 +82,6 @@ class FlowrAnalyzerFilesContext extends abstract_flowr_analyzer_context_1.Abstra
67
82
  addRequest(request) {
68
83
  if (request.request !== 'project') {
69
84
  this.loadingOrder.addRequest(request);
70
- if (request.request === 'file') {
71
- this.files.set(request.content, request);
72
- }
73
85
  return;
74
86
  }
75
87
  const expandedRequests = this.applyPlugins(request).flat();
@@ -85,7 +97,7 @@ class FlowrAnalyzerFilesContext extends abstract_flowr_analyzer_context_1.Abstra
85
97
  /**
86
98
  * Add multiple files to the context. This is just a convenience method that calls {@link addFile} for each file.
87
99
  */
88
- addFiles(...files) {
100
+ addFiles(files) {
89
101
  for (const file of files) {
90
102
  this.addFile(file);
91
103
  }
@@ -95,29 +107,88 @@ class FlowrAnalyzerFilesContext extends abstract_flowr_analyzer_context_1.Abstra
95
107
  * This method also applies any registered {@link FlowrAnalyzerFilePlugin}s to the file before adding it to the context.
96
108
  */
97
109
  addFile(file, role) {
98
- const { f, p } = obtainFileAndPath(file, role);
99
- const { f: fA, p: pA } = this.fileLoadPlugins(f, p);
100
- const exist = this.files.get(pA);
101
- (0, assert_1.guard)(exist === undefined || exist === fA, `File ${pA} already added to the context.`);
102
- this.files.set(pA, fA);
103
- if (!(0, retriever_1.isParseRequest)(fA) && fA.role) {
104
- this.specialFiles[fA.role].push(fA);
110
+ const f = this.fileLoadPlugins(wrapFile(file, role));
111
+ if (f.path() === flowr_file_1.FlowrFile.INLINE_PATH) {
112
+ this.inlineFiles.push(f);
113
+ }
114
+ else {
115
+ const exist = this.files.get(f.path());
116
+ (0, assert_1.guard)(exist === undefined || exist === f, `File ${f.path()} already added to the context.`);
117
+ this.files.set(f.path(), f);
118
+ }
119
+ if (f.role) {
120
+ this.byRole[f.role].push(f);
121
+ }
122
+ return f;
123
+ }
124
+ hasFile(path) {
125
+ return this.files.has(path)
126
+ || (this.ctx.config.project.resolveUnknownPathsOnDisk && fs_1.default.existsSync(path));
127
+ }
128
+ exists(p, ignoreCase) {
129
+ try {
130
+ if (!ignoreCase) {
131
+ return this.hasFile(p) ? p : undefined;
132
+ }
133
+ // walk the directory and find the first match
134
+ const dir = path_1.default.dirname(p);
135
+ const file = path_1.default.basename(p);
136
+ // try to find in local known files first
137
+ const localFound = Array.from(this.files.keys()).find(f => {
138
+ return path_1.default.dirname(f) === dir && path_1.default.basename(f).toLowerCase() === file.toLowerCase();
139
+ });
140
+ if (localFound) {
141
+ return localFound;
142
+ }
143
+ if (this.ctx.config.project.resolveUnknownPathsOnDisk) {
144
+ const files = fs_1.default.readdirSync(dir);
145
+ const found = files.find(f => f.toLowerCase() === file.toLowerCase());
146
+ return found ? path_1.default.join(dir, found) : undefined;
147
+ }
148
+ return undefined;
149
+ }
150
+ catch {
151
+ return undefined;
105
152
  }
106
153
  }
107
- fileLoadPlugins(f, p) {
154
+ fileLoadPlugins(f) {
108
155
  let fFinal = f;
109
- let pFinal = p;
110
- if (!(0, retriever_1.isParseRequest)(f)) { // we have to change the types when we integrate the adapters
111
- for (const loader of this.fileLoaders) {
112
- if (loader.applies(p)) {
113
- fileLog.debug(`Applying file loader ${loader.name} to file ${p}`);
114
- fFinal = loader.processor(this.ctx, f);
115
- pFinal = f.path().toString();
116
- break;
117
- }
156
+ for (const loader of this.fileLoaders) {
157
+ if (loader.applies(f.path())) {
158
+ fileLog.debug(`Applying file loader ${loader.name} to file ${f.path()}`);
159
+ fFinal = loader.processor(this.ctx, f);
160
+ break;
161
+ }
162
+ }
163
+ return fFinal;
164
+ }
165
+ resolveRequest(r) {
166
+ if (r.request === 'text') {
167
+ return { r };
168
+ }
169
+ const file = this.files.get(r.content);
170
+ if (file === undefined && this.ctx.config.project.resolveUnknownPathsOnDisk) {
171
+ fileLog.debug(`File ${r.content} not found in context, trying to load from disk.`);
172
+ if (fs_1.default.existsSync(r.content)) {
173
+ const loadedFile = this.addFile(new flowr_file_1.FlowrTextFile(r.content));
174
+ return {
175
+ r: {
176
+ request: 'text',
177
+ content: loadedFile.content().toString(),
178
+ },
179
+ path: loadedFile.path()
180
+ };
118
181
  }
119
182
  }
120
- return { f: fFinal, p: pFinal };
183
+ (0, assert_1.guard)(file !== undefined && file !== null, `File ${r.content} not found in context.`);
184
+ const content = file.content();
185
+ return {
186
+ r: {
187
+ request: 'text',
188
+ content: typeof content === 'string' ? content : '',
189
+ },
190
+ path: file.path()
191
+ };
121
192
  }
122
193
  /**
123
194
  * Get all requests that have been added to this context.
@@ -127,7 +198,7 @@ class FlowrAnalyzerFilesContext extends abstract_flowr_analyzer_context_1.Abstra
127
198
  return this.loadingOrder.getLoadingOrder();
128
199
  }
129
200
  getFilesByRole(role) {
130
- return this.specialFiles[role];
201
+ return this.byRole[role];
131
202
  }
132
203
  }
133
204
  exports.FlowrAnalyzerFilesContext = FlowrAnalyzerFilesContext;