@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
package/queries/query.js CHANGED
@@ -10,6 +10,7 @@ exports.SupportedQueriesSchema = SupportedQueriesSchema;
10
10
  exports.VirtualQuerySchema = VirtualQuerySchema;
11
11
  exports.AnyQuerySchema = AnyQuerySchema;
12
12
  exports.QueriesSchema = QueriesSchema;
13
+ exports.genericWrapReplFailIfNoRequest = genericWrapReplFailIfNoRequest;
13
14
  const call_context_query_format_1 = require("./catalog/call-context-query/call-context-query-format");
14
15
  const assert_1 = require("../util/assert");
15
16
  const virtual_queries_1 = require("./virtual-query/virtual-queries");
@@ -19,6 +20,7 @@ const normalized_ast_query_format_1 = require("./catalog/normalized-ast-query/no
19
20
  const static_slice_query_format_1 = require("./catalog/static-slice-query/static-slice-query-format");
20
21
  const cluster_query_format_1 = require("./catalog/cluster-query/cluster-query-format");
21
22
  const dependencies_query_format_1 = require("./catalog/dependencies-query/dependencies-query-format");
23
+ const ansi_1 = require("../util/text/ansi");
22
24
  const joi_1 = __importDefault(require("joi"));
23
25
  const location_map_query_format_1 = require("./catalog/location-map-query/location-map-query-format");
24
26
  const config_query_format_1 = require("./catalog/config-query/config-query-format");
@@ -105,7 +107,7 @@ async function executeQueries(data, queries) {
105
107
  results.push([type, result]);
106
108
  }
107
109
  catch (e) {
108
- log_1.log.error(e);
110
+ log_1.log.warn(e);
109
111
  results.push([type, undefined]);
110
112
  }
111
113
  }
@@ -145,4 +147,22 @@ function AnyQuerySchema() {
145
147
  function QueriesSchema() {
146
148
  return joi_1.default.array().items(AnyQuerySchema()).description('Queries to run on the file analysis information (in the form of an array)');
147
149
  }
150
+ /**
151
+ * Wraps a function that executes a REPL query and, if it fails, checks whether there were any requests to analyze.
152
+ */
153
+ async function genericWrapReplFailIfNoRequest(fn, output, analyzer) {
154
+ try {
155
+ return await fn();
156
+ }
157
+ catch (e) {
158
+ if (analyzer.inspectContext().files.loadingOrder.getUnorderedRequests().length === 0) {
159
+ output.stderr(output.formatter.format('No requests to analyze were found.', { color: 1 /* Colors.Red */, style: 1 /* FontStyles.Bold */, effect: ansi_1.ColorEffect.Foreground })
160
+ + '\nIf you consider this an error, please report a bug: '
161
+ + (0, assert_1.getGuardIssueUrl)('analyzer found no requests to analyze'));
162
+ }
163
+ else {
164
+ throw e;
165
+ }
166
+ }
167
+ }
148
168
  //# sourceMappingURL=query.js.map
@@ -1,9 +1,10 @@
1
1
  import type { RNode } from './model';
2
2
  import type { NodeId } from './processing/node-id';
3
3
  import type { ParentInformation } from './processing/decorate';
4
+ import type { RProject } from './nodes/r-project';
4
5
  /**
5
6
  * Collects all node ids within a tree given by a respective root node
6
7
  * @param nodes - The root id nodes to start collecting from
7
8
  * @param stop - A function that determines whether to stop collecting at a given node, does not stop by default
8
9
  */
9
- export declare function collectAllIds<OtherInfo>(nodes: RNode<OtherInfo & ParentInformation> | (RNode<OtherInfo & ParentInformation> | null | undefined)[] | undefined, stop?: (node: RNode<OtherInfo & ParentInformation>) => boolean): Set<NodeId>;
10
+ export declare function collectAllIds<OtherInfo>(nodes: RProject<OtherInfo & ParentInformation> | RNode<OtherInfo & ParentInformation> | (RNode<OtherInfo & ParentInformation> | null | undefined)[] | undefined, stop?: (node: RNode<OtherInfo & ParentInformation>) => boolean): Set<NodeId>;
@@ -2,12 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.collectAllIds = collectAllIds;
4
4
  const visitor_1 = require("./processing/visitor");
5
+ const type_1 = require("./type");
5
6
  /**
6
7
  * Collects all node ids within a tree given by a respective root node
7
8
  * @param nodes - The root id nodes to start collecting from
8
9
  * @param stop - A function that determines whether to stop collecting at a given node, does not stop by default
9
10
  */
10
11
  function collectAllIds(nodes, stop = () => false) {
12
+ if (nodes && 'type' in nodes && nodes.type === type_1.RType.Project) {
13
+ nodes = nodes.files.map(f => f.root);
14
+ }
11
15
  const ids = new Set();
12
16
  (0, visitor_1.visitAst)(nodes, (node) => {
13
17
  if (stop(node)) {
@@ -0,0 +1,29 @@
1
+ import type { NoInfo } from '../model';
2
+ import { RType } from '../type';
3
+ import type { RExpressionList } from './r-expression-list';
4
+ import type { NodeId } from '../processing/node-id';
5
+ /**
6
+ * Holds a single R file starting with an expression list.
7
+ */
8
+ export interface RProjectFile<Info = NoInfo> {
9
+ readonly filePath?: string;
10
+ readonly root: RExpressionList<Info>;
11
+ }
12
+ /**
13
+ * Holds a collection of files (started with the expression list)
14
+ * @see {@link RExpressionList} - for the root of each file
15
+ * @see {@link mergeProjects} - to merge multiple projects into a single one
16
+ * @see {@link RProjectFile} - for each file in the project
17
+ */
18
+ export interface RProject<Info = NoInfo> {
19
+ readonly type: RType.Project;
20
+ readonly files: RProjectFile<Info>[];
21
+ readonly info?: {
22
+ id: NodeId;
23
+ };
24
+ }
25
+ /**
26
+ * Merge multiple projects into a single one by concatenating their files.
27
+ * This will remove the `info` property of the resulting project.
28
+ */
29
+ export declare function mergeProjects<Info = NoInfo>(projects: RProject<Info>[]): RProject<Info>;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mergeProjects = mergeProjects;
4
+ const type_1 = require("../type");
5
+ /**
6
+ * Merge multiple projects into a single one by concatenating their files.
7
+ * This will remove the `info` property of the resulting project.
8
+ */
9
+ function mergeProjects(projects) {
10
+ return {
11
+ type: type_1.RType.Project,
12
+ files: projects.flatMap(p => p.files)
13
+ };
14
+ }
15
+ //# sourceMappingURL=r-project.js.map
@@ -14,12 +14,13 @@ import type { MergeableRecord } from '../../../../../util/objects';
14
14
  import { RoleInParent } from './role';
15
15
  import type { NodeId } from './node-id';
16
16
  import type { RDelimiter } from '../nodes/info/r-delimiter';
17
+ import type { RProject } from '../nodes/r-project';
17
18
  /**
18
19
  * A function that given an RNode returns a (guaranteed) unique id for it
19
20
  * @param data - the node to generate an id for
20
21
  * @returns a unique id for the given node
21
22
  */
22
- export type IdGenerator<OtherInfo> = (data: RNode<OtherInfo>) => NodeId;
23
+ export type IdGenerator<OtherInfo> = (data: RProject<OtherInfo> | RNode<OtherInfo>) => NodeId;
23
24
  /**
24
25
  * The simplest id generator which just increments a number on each call.
25
26
  */
@@ -71,7 +72,7 @@ export type AstIdMap<OtherInfo = NoInfo> = BiMap<NodeId, RNodeWithParent<OtherIn
71
72
  * Contains the normalized AST as a doubly linked tree
72
73
  * and a map from ids to nodes so that parent links can be chased easily.
73
74
  */
74
- export interface NormalizedAst<OtherInfo = ParentInformation, Node = RNode<OtherInfo & ParentInformation>> {
75
+ export interface NormalizedAst<OtherInfo = ParentInformation, Node = RProject<OtherInfo & ParentInformation>> {
75
76
  /** Bidirectional mapping of ids to the corresponding nodes and the other way */
76
77
  idMap: AstIdMap<OtherInfo>;
77
78
  /** The root of the AST with parent information */
@@ -82,15 +83,12 @@ export interface NormalizedAst<OtherInfo = ParentInformation, Node = RNode<Other
82
83
  export interface NormalizedAstDecorationConfiguration<OtherInfo> {
83
84
  /** The id generator: must generate a unique id für each passed node */
84
85
  getId?: IdGenerator<OtherInfo>;
85
- /** the path to the file this AST was extracted from will be added to the nodes */
86
- file?: string;
87
86
  }
88
87
  /**
89
88
  * Covert the given AST into a doubly linked tree while assigning ids (so it stays serializable).
90
- * @param ast - The root of the AST to convert
89
+ * @param project - The AST to decorate
91
90
  * @param getId - The id generator: must generate a unique id für each passed node
92
- * @param file - the path to the file this AST was extracted from will be added to the nodes
93
91
  * @typeParam OtherInfo - The original decoration of the ast nodes (probably is nothing as the id decoration is most likely the first step to be performed after extraction)
94
92
  * @returns A decorated AST based on the input and the id provider.
95
93
  */
96
- export declare function decorateAst<OtherInfo = NoInfo>(ast: RNode<OtherInfo>, { getId, file }: NormalizedAstDecorationConfiguration<OtherInfo>): NormalizedAst<OtherInfo & ParentInformation>;
94
+ export declare function decorateAst<OtherInfo = NoInfo>(project: RProject<OtherInfo>, { getId }: NormalizedAstDecorationConfiguration<OtherInfo>): NormalizedAst<OtherInfo & ParentInformation>;
@@ -58,7 +58,7 @@ function nodeToLocationId(data) {
58
58
  */
59
59
  function deterministicLocationIdGenerator(start = 0) {
60
60
  let id = start;
61
- return (data) => data.location !== undefined ? nodeToLocationId(data) : `${id++}`;
61
+ return (data) => 'location' in data && data.location !== undefined ? nodeToLocationId(data) : `${id++}`;
62
62
  }
63
63
  const defaultParentContext = {
64
64
  role: "root" /* RoleInParent.Root */,
@@ -69,21 +69,19 @@ const nestForElement = new Set([
69
69
  ]);
70
70
  /**
71
71
  * Covert the given AST into a doubly linked tree while assigning ids (so it stays serializable).
72
- * @param ast - The root of the AST to convert
72
+ * @param project - The AST to decorate
73
73
  * @param getId - The id generator: must generate a unique id für each passed node
74
- * @param file - the path to the file this AST was extracted from will be added to the nodes
75
74
  * @typeParam OtherInfo - The original decoration of the ast nodes (probably is nothing as the id decoration is most likely the first step to be performed after extraction)
76
75
  * @returns A decorated AST based on the input and the id provider.
77
76
  */
78
- function decorateAst(ast, { getId = deterministicCountingIdGenerator(0), file }) {
77
+ function decorateAst(project, { getId = deterministicCountingIdGenerator(0) }) {
79
78
  const idMap = new bimap_1.BiMap();
80
- const info = { idMap, getId, file };
79
+ const info = { idMap, getId, file: undefined };
81
80
  /* Please note, that all fold processors do not re-create copies in higher-folding steps so that the idMap stays intact. */
82
81
  const foldLeaf = createFoldForLeaf(info);
83
82
  const foldBinaryOp = createFoldForBinaryOp(info);
84
83
  const unaryOp = createFoldForUnaryOp(info);
85
- /* we pass down the nesting depth */
86
- const decoratedAst = (0, stateful_fold_1.foldAstStateful)(ast, 0, {
84
+ const folds = {
87
85
  down: (n, nesting) => {
88
86
  if (nestForElement.has(n.type)) {
89
87
  return nesting + 1;
@@ -119,11 +117,26 @@ function decorateAst(ast, { getId = deterministicCountingIdGenerator(0), file })
119
117
  foldArgument: createFoldForFunctionArgument(info),
120
118
  foldParameter: createFoldForFunctionParameter(info)
121
119
  }
122
- });
123
- decoratedAst.info.role = "root" /* RoleInParent.Root */;
124
- decoratedAst.info.index = 0;
120
+ };
121
+ // we return the project by mapping over the files
122
+ const decoratedProject = {
123
+ ...project,
124
+ files: project.files.map(file => {
125
+ info.file = file.filePath;
126
+ const decoratedAst = (0, stateful_fold_1.foldAstStateful)(file.root, 0, folds);
127
+ decoratedAst.info.role = "root" /* RoleInParent.Root */;
128
+ decoratedAst.info.index = 0;
129
+ return {
130
+ root: decoratedAst,
131
+ filePath: file.filePath
132
+ };
133
+ }),
134
+ info: {
135
+ id: getId(project)
136
+ }
137
+ };
125
138
  return {
126
- ast: decoratedAst,
139
+ ast: decoratedProject,
127
140
  idMap
128
141
  };
129
142
  }
@@ -197,6 +197,8 @@ export declare enum RType {
197
197
  String = "RString",
198
198
  /** {@link RSymbol} */
199
199
  Symbol = "RSymbol",
200
+ /** {@link RProject} */
201
+ Project = "RProject",
200
202
  /**
201
203
  * {@link RDelimiter}.
202
204
  * Is not part of the normalized AST but can be found in
@@ -204,6 +204,8 @@ var RType;
204
204
  /** {@link RSymbol} */
205
205
  RType["Symbol"] = "RSymbol";
206
206
  /* ------ special types ------ */
207
+ /** {@link RProject} */
208
+ RType["Project"] = "RProject";
207
209
  /**
208
210
  * {@link RDelimiter}.
209
211
  * Is not part of the normalized AST but can be found in
@@ -61,7 +61,7 @@ function convertPreparedParsedData(roots) {
61
61
  };
62
62
  }
63
63
  // Locate start, end of a source file (order children in advance).
64
- const rootEntries = [...roots].sort(orderOf);
64
+ const rootEntries = roots.slice().sort(orderOf);
65
65
  const start = rootEntries[0];
66
66
  const end = rootEntries[rootEntries.length - 1];
67
67
  // Construct CsvEntry for the root, handling empty input.
@@ -1,21 +1,22 @@
1
1
  import { type IdGenerator, type NormalizedAst } from '../../model/processing/decorate';
2
- import type { NoInfo, RNode } from '../../model/model';
3
- import type { ParseStepOutput } from '../../../../parser';
2
+ import type { NoInfo } from '../../model/model';
3
+ import type { ParseStepOutput, ParseStepOutputSingleFile } from '../../../../parser';
4
4
  import { type FlowrConfigOptions } from '../../../../../config';
5
5
  import type { Tree } from 'web-tree-sitter';
6
+ import type { RProject } from '../../model/nodes/r-project';
6
7
  export declare const parseLog: import("tslog").Logger<import("tslog").ILogObj>;
7
8
  /**
8
9
  * Take the output as produced by the parse step and normalize the AST from the R parser.
9
- * @see {@link normalizeButNotDecorated} for a version that does not decorate the AST
10
- * @see {@link normalizeTreeSitter} for a version that normalizes the AST from the TreeSitter parser
10
+ * @see {@link normalizeButNotDecorated} - for a version that does not decorate the AST
11
+ * @see {@link normalizeTreeSitter} - for a version that normalizes the AST from the TreeSitter parser
11
12
  */
12
- export declare function normalize(parsed: ParseStepOutput<string>, getId?: IdGenerator<NoInfo>, file?: string): NormalizedAst;
13
+ export declare function normalize(parsed: ParseStepOutput<string>, getId?: IdGenerator<NoInfo>): NormalizedAst;
13
14
  /**
14
15
  * Take the output as produced by the parse step and normalize the AST from the R parser.
15
- * For additional decoration with ${@link decorateAst} use {@link normalize}.
16
+ * For additional decoration with {@link decorateAst} use {@link normalize}.
16
17
  */
17
- export declare function normalizeButNotDecorated({ parsed }: ParseStepOutput<string>): RNode;
18
+ export declare function normalizeButNotDecorated({ parsed, filePath }: ParseStepOutputSingleFile<string>): RProject;
18
19
  /**
19
20
  * Tree-Sitter pendant to {@link normalize}.
20
21
  */
21
- export declare function normalizeTreeSitter({ parsed }: ParseStepOutput<Tree>, getId: IdGenerator<NoInfo> | undefined, config: FlowrConfigOptions, file?: string): NormalizedAst;
22
+ export declare function normalizeTreeSitter(parsed: ParseStepOutput<Tree>, getId: IdGenerator<NoInfo> | undefined, config: FlowrConfigOptions): NormalizedAst;
@@ -10,31 +10,32 @@ const decorate_1 = require("../../model/processing/decorate");
10
10
  const normalize_root_1 = require("../main/internal/structure/normalize-root");
11
11
  const tree_sitter_normalize_1 = require("../../../tree-sitter/tree-sitter-normalize");
12
12
  const config_1 = require("../../../../../config");
13
+ const r_project_1 = require("../../model/nodes/r-project");
13
14
  exports.parseLog = log_1.log.getSubLogger({ name: 'ast-parser' });
14
15
  /**
15
16
  * Take the output as produced by the parse step and normalize the AST from the R parser.
16
- * @see {@link normalizeButNotDecorated} for a version that does not decorate the AST
17
- * @see {@link normalizeTreeSitter} for a version that normalizes the AST from the TreeSitter parser
17
+ * @see {@link normalizeButNotDecorated} - for a version that does not decorate the AST
18
+ * @see {@link normalizeTreeSitter} - for a version that normalizes the AST from the TreeSitter parser
18
19
  */
19
- function normalize(parsed, getId = (0, decorate_1.deterministicCountingIdGenerator)(0), file) {
20
- return (0, decorate_1.decorateAst)(normalizeButNotDecorated(parsed), { getId, file });
20
+ function normalize(parsed, getId = (0, decorate_1.deterministicCountingIdGenerator)(0)) {
21
+ return (0, decorate_1.decorateAst)((0, r_project_1.mergeProjects)(parsed.files.map(normalizeButNotDecorated)), { getId });
21
22
  }
22
23
  /**
23
24
  * Take the output as produced by the parse step and normalize the AST from the R parser.
24
- * For additional decoration with ${@link decorateAst} use {@link normalize}.
25
+ * For additional decoration with {@link decorateAst} use {@link normalize}.
25
26
  */
26
- function normalizeButNotDecorated({ parsed }) {
27
+ function normalizeButNotDecorated({ parsed, filePath }) {
27
28
  const data = { currentRange: undefined, currentLexeme: undefined };
28
29
  const object = (0, format_1.convertPreparedParsedData)((0, format_1.prepareParsedData)(parsed));
29
- return (0, normalize_root_1.normalizeRootObjToAst)(data, object);
30
+ return (0, normalize_root_1.normalizeRootObjToAst)(data, object, filePath);
30
31
  }
31
32
  /**
32
33
  * Tree-Sitter pendant to {@link normalize}.
33
34
  */
34
- function normalizeTreeSitter({ parsed }, getId = (0, decorate_1.deterministicCountingIdGenerator)(0), config, file) {
35
+ function normalizeTreeSitter(parsed, getId = (0, decorate_1.deterministicCountingIdGenerator)(0), config) {
35
36
  const lax = (0, config_1.getEngineConfig)(config, 'tree-sitter')?.lax;
36
- const result = (0, decorate_1.decorateAst)((0, tree_sitter_normalize_1.normalizeTreeSitterTreeToAst)(parsed, lax), { getId, file });
37
- result.hasError = parsed.rootNode.hasError;
37
+ const result = (0, decorate_1.decorateAst)((0, tree_sitter_normalize_1.normalizeTreeSitterTreeToAst)(parsed.files, lax), { getId });
38
+ result.hasError = parsed.files.some(p => p.parsed.rootNode.hasError);
38
39
  return result;
39
40
  }
40
41
  //# sourceMappingURL=parser.js.map
@@ -1,7 +1,8 @@
1
1
  import type { NormalizerData } from '../../normalizer-data';
2
- import type { RExpressionList } from '../../../../model/nodes/r-expression-list';
3
2
  import type { JsonEntry } from '../../../json/format';
3
+ import type { RProject } from '../../../../model/nodes/r-project';
4
4
  /**
5
- * Takes the parse dta as object and produces an undecorated, normalized AST.
5
+ * Takes the parse data as object and produces an undecorated, normalized AST.
6
+ * @see {@link normalize} - for a version that also decorates the AST
6
7
  */
7
- export declare function normalizeRootObjToAst(data: NormalizerData, obj: JsonEntry): RExpressionList;
8
+ export declare function normalizeRootObjToAst(data: NormalizerData, obj: JsonEntry, filePath?: string): RProject;
@@ -7,9 +7,10 @@ const log_1 = require("../../../../../../../util/log");
7
7
  const arrays_1 = require("../../../../../../../util/collections/arrays");
8
8
  const type_1 = require("../../../../model/type");
9
9
  /**
10
- * Takes the parse dta as object and produces an undecorated, normalized AST.
10
+ * Takes the parse data as object and produces an undecorated, normalized AST.
11
+ * @see {@link normalize} - for a version that also decorates the AST
11
12
  */
12
- function normalizeRootObjToAst(data, obj) {
13
+ function normalizeRootObjToAst(data, obj, filePath) {
13
14
  const exprContent = obj.token;
14
15
  (0, normalize_meta_1.assureTokenType)(exprContent, type_1.RawRType.ExpressionList);
15
16
  let parsedChildren = [];
@@ -22,15 +23,23 @@ function normalizeRootObjToAst(data, obj) {
22
23
  }
23
24
  const [delimiters, nodes] = (0, arrays_1.partition)(parsedChildren, x => x.type === type_1.RType.Delimiter || x.type === type_1.RType.Comment);
24
25
  return {
25
- type: type_1.RType.ExpressionList,
26
- children: nodes,
27
- grouping: undefined,
28
- lexeme: undefined,
29
- info: {
30
- fullRange: data.currentRange,
31
- additionalTokens: delimiters,
32
- fullLexeme: data.currentLexeme
33
- }
26
+ type: type_1.RType.Project,
27
+ files: [
28
+ {
29
+ filePath,
30
+ root: {
31
+ type: type_1.RType.ExpressionList,
32
+ children: nodes,
33
+ grouping: undefined,
34
+ lexeme: undefined,
35
+ info: {
36
+ fullRange: data.currentRange,
37
+ additionalTokens: delimiters,
38
+ fullLexeme: data.currentLexeme
39
+ }
40
+ }
41
+ }
42
+ ]
34
43
  };
35
44
  }
36
45
  //# sourceMappingURL=normalize-root.js.map
@@ -3,7 +3,7 @@ import type { Query, QueryCapture } from 'web-tree-sitter';
3
3
  import type { RParseRequest } from '../../retriever';
4
4
  import type { SyncParser, TreeSitterInformation } from '../../parser';
5
5
  import type { TreeSitterEngineConfig } from '../../../config';
6
- import type { FlowrAnalysisProvider } from '../../../project/flowr-analyzer';
6
+ import type { ReadonlyFlowrAnalysisProvider } from '../../../project/flowr-analyzer';
7
7
  export declare const DEFAULT_TREE_SITTER_R_WASM_PATH = "./node_modules/@eagleoutice/tree-sitter-r/tree-sitter-r.wasm";
8
8
  export declare const DEFAULT_TREE_SITTER_WASM_PATH = "./node_modules/web-tree-sitter/tree-sitter.wasm";
9
9
  /**
@@ -22,10 +22,10 @@ export declare class TreeSitterExecutor implements SyncParser<Parser.Tree> {
22
22
  static initTreeSitter(config?: TreeSitterEngineConfig, overrideWasmPath?: string, overrideTreeSitterWasmPath?: string): Promise<void>;
23
23
  constructor();
24
24
  rVersion(): Promise<string | 'unknown' | 'none'>;
25
- information(analyzer: FlowrAnalysisProvider): TreeSitterInformation;
25
+ information(analyzer: ReadonlyFlowrAnalysisProvider): TreeSitterInformation;
26
26
  treeSitterVersion(): number;
27
27
  parse(request: RParseRequest): Parser.Tree;
28
28
  createQuery(source: string): Query;
29
- query(source: Query | string, tree: Parser.Tree): QueryCapture[];
29
+ query(source: Query | string, ...tree: Parser.Tree[]): QueryCapture[];
30
30
  close(): void;
31
31
  }
@@ -53,7 +53,7 @@ class TreeSitterExecutor {
53
53
  name: 'tree-sitter',
54
54
  grammarVersion: this.treeSitterVersion(),
55
55
  treeSitterQuery: async (source, force) => {
56
- return this.query(source, (await analyzer.parse(force)).parsed);
56
+ return this.query(source, ...(await analyzer.parse(force)).files.map(p => p.parsed));
57
57
  }
58
58
  };
59
59
  }
@@ -73,10 +73,11 @@ class TreeSitterExecutor {
73
73
  createQuery(source) {
74
74
  return this.parser.getLanguage().query(source);
75
75
  }
76
- query(source, tree) {
76
+ query(source, ...tree) {
77
77
  const query = typeof source === 'string' ? this.createQuery(source) : source;
78
- const matches = query.matches(tree.rootNode);
79
- return matches.flatMap(m => m.captures);
78
+ return tree
79
+ .flatMap(t => query.matches(t.rootNode))
80
+ .flatMap(m => m.captures);
80
81
  }
81
82
  close() {
82
83
  this.parser.delete();
@@ -1,5 +1,6 @@
1
- import type { RExpressionList } from '../ast/model/nodes/r-expression-list';
2
1
  import type { Tree } from 'web-tree-sitter';
2
+ import type { RProject } from '../ast/model/nodes/r-project';
3
+ import type { ParseStepOutputSingleFile } from '../../parser';
3
4
  export interface TreeSitterInfo {
4
5
  treeSitterId: number;
5
6
  }
@@ -7,7 +8,7 @@ export interface TreeSitterInfo {
7
8
  * @param tree - The tree to normalize
8
9
  * @param lax - Whether to use lax parsing (i.e., ignore errors) or strict parsing (i.e., fail on errors)
9
10
  */
10
- export declare function normalizeTreeSitterTreeToAst(tree: Tree, lax?: boolean): RExpressionList<TreeSitterInfo>;
11
+ export declare function normalizeTreeSitterTreeToAst(tree: ParseStepOutputSingleFile<Tree>[], lax?: boolean): RProject<TreeSitterInfo>;
11
12
  /**
12
13
  * Globally switch to lax parsing mode for tree-sitter normalization
13
14
  * @see {@link makeTreeSitterStrict}
@@ -24,11 +24,20 @@ function normalizeTreeSitterTreeToAst(tree, lax) {
24
24
  else {
25
25
  makeTreeSitterStrict();
26
26
  }
27
- const root = convertTreeNode(tree.rootNode);
28
- if (root.type !== type_1.RType.ExpressionList) {
29
- throw new normalizer_data_1.ParseError(`expected root to resolve to an expression list, got a ${root.type}`);
30
- }
31
- return root;
27
+ const files = tree.map(t => {
28
+ const root = convertTreeNode(t.parsed.rootNode);
29
+ if (root.type !== type_1.RType.ExpressionList) {
30
+ throw new normalizer_data_1.ParseError(`expected root to resolve to an expression list, got a ${root.type}`);
31
+ }
32
+ return {
33
+ filePath: t.filePath,
34
+ root: root
35
+ };
36
+ });
37
+ return {
38
+ type: type_1.RType.Project,
39
+ files
40
+ };
32
41
  }
33
42
  function nonErrorChildrenStrict(node) {
34
43
  return node.hasError ? [] : node.children;
@@ -1,13 +1,14 @@
1
- import type { RParseRequest, RParseRequests } from './retriever';
1
+ import type { RParseRequestFromText } from './retriever';
2
2
  import type { OutputCollectorConfiguration, RShell } from './shell';
3
3
  import type { RShellExecutor } from './shell-executor';
4
4
  import type { TreeSitterExecutor } from './lang-4.x/tree-sitter/tree-sitter-executor';
5
5
  import type { Query, QueryCapture } from 'web-tree-sitter';
6
6
  import type { FlowrAnalysisProvider } from '../project/flowr-analyzer';
7
+ import type { FlowrAnalyzerContext } from '../project/context/flowr-analyzer-context';
7
8
  interface ParserContent<T> {
8
9
  readonly name: string;
9
10
  information(analyzer: FlowrAnalysisProvider): BaseParserInformation;
10
- parse(request: RParseRequest): T;
11
+ parse(request: RParseRequestFromText): T;
11
12
  close(): void;
12
13
  }
13
14
  export interface BaseParserInformation {
@@ -49,22 +50,31 @@ export type KnownParserName = KnownParser['name'];
49
50
  export interface ParseRequiredInput<T> {
50
51
  /** This is the {@link RShell}, {@link RShellExecutor} or {@link TreeSitterExecutor} connection to be used to obtain the original parses AST of the R code */
51
52
  readonly parser: Parser<T>;
52
- /** The request which essentially indicates the input to extract the AST from */
53
- readonly request: RParseRequests;
53
+ /**
54
+ * The context from which to derive the requests from,
55
+ * please either relay on the {@link FlowrAnalyzer}
56
+ * or construct one with {@link contextFromInput}
57
+ */
58
+ readonly context: FlowrAnalyzerContext;
54
59
  }
55
- export interface ParseStepOutput<T> {
60
+ export interface ParseStepOutputSingleFile<T> {
56
61
  /** The parsed AST of the R code as given by the R parse side */
57
62
  readonly parsed: T;
63
+ readonly filePath: string | undefined;
58
64
  /** Additional meta information about the parse */
59
65
  readonly '.parse-meta'?: {
60
66
  /** The number of tokens in the AST */
61
67
  readonly tokenCount: number;
62
68
  };
63
69
  }
70
+ export interface ParseStepOutput<T> {
71
+ readonly files: ParseStepOutputSingleFile<T>[];
72
+ }
64
73
  /**
65
74
  * Takes an input program and parses it using the given parser.
66
75
  * @param _results - just a proxy for the pipeline, signifies that this function does not need prior knowledge of the pipeline
67
76
  * @param input - the input to the parse step
77
+ * @returns The parsed AST per request in the loading order obtained from the {@link FlowrAnalyzerFilesContext|files context} of the given {@link FlowrAnalyzerContext}.
68
78
  */
69
79
  export declare function parseRequests<T extends KnownParserType>(_results: unknown, input: Partial<ParseRequiredInput<T>>): Promise<ParseStepOutput<T>>;
70
80
  export {};
@@ -12,26 +12,40 @@ function countChildren(node) {
12
12
  * Takes an input program and parses it using the given parser.
13
13
  * @param _results - just a proxy for the pipeline, signifies that this function does not need prior knowledge of the pipeline
14
14
  * @param input - the input to the parse step
15
+ * @returns The parsed AST per request in the loading order obtained from the {@link FlowrAnalyzerFilesContext|files context} of the given {@link FlowrAnalyzerContext}.
15
16
  */
16
17
  async function parseRequests(_results, input) {
18
+ const loadingOrder = input.context.files.loadingOrder.getLoadingOrder();
17
19
  /* in the future, we want to expose all cases */
18
- const request = (Array.isArray(input.request) ? input.request[0] : input.request);
20
+ const translatedRequests = loadingOrder.map(r => input.context.files.resolveRequest(r));
19
21
  if (input.parser?.async) {
20
- const parsed = await input.parser.parse(request);
21
- return {
22
- parsed,
23
- '.parse-meta': typeof parsed === 'object' && 'rootNode' in parsed ? {
24
- tokenCount: countChildren(parsed.rootNode),
25
- } : undefined
26
- };
22
+ /* sadly we cannot Promise.all with the Rshell as it has to process commands in order and is not thread safe */
23
+ const files = [];
24
+ for (const req of translatedRequests) {
25
+ const parsed = await (input.parser).parse(req.r);
26
+ files.push({
27
+ parsed,
28
+ filePath: req.path,
29
+ '.parse-meta': typeof parsed === 'object' && 'rootNode' in parsed ? {
30
+ tokenCount: countChildren(parsed.rootNode),
31
+ } : undefined
32
+ });
33
+ }
34
+ return { files };
27
35
  }
28
36
  else {
29
- const parsed = input.parser.parse(request);
37
+ const p = input.parser;
30
38
  return {
31
- parsed,
32
- '.parse-meta': typeof parsed === 'object' && 'rootNode' in parsed ? {
33
- tokenCount: countChildren(parsed.rootNode),
34
- } : undefined
39
+ files: translatedRequests.map(r => {
40
+ const parsed = p.parse(r.r);
41
+ return {
42
+ parsed,
43
+ filePath: r.path,
44
+ '.parse-meta': typeof parsed === 'object' && 'rootNode' in parsed ? {
45
+ tokenCount: countChildren(parsed.rootNode),
46
+ } : undefined
47
+ };
48
+ })
35
49
  };
36
50
  }
37
51
  }