@eagleoutice/flowr 2.6.2 → 2.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (349) hide show
  1. package/README.md +36 -34
  2. package/abstract-interpretation/data-frame/absint-visitor.js +3 -3
  3. package/abstract-interpretation/data-frame/mappers/function-mapper.d.ts +7 -7
  4. package/abstract-interpretation/data-frame/mappers/function-mapper.js +20 -16
  5. package/abstract-interpretation/data-frame/semantics.js +8 -0
  6. package/abstract-interpretation/data-frame/shape-inference.d.ts +3 -3
  7. package/abstract-interpretation/data-frame/shape-inference.js +3 -3
  8. package/abstract-interpretation/normalized-ast-fold.d.ts +1 -1
  9. package/benchmark/slicer.d.ts +1 -0
  10. package/benchmark/slicer.js +13 -12
  11. package/benchmark/summarizer/first-phase/process.js +1 -1
  12. package/benchmark/summarizer/second-phase/graph.d.ts +3 -1
  13. package/benchmark/summarizer/second-phase/graph.js +3 -1
  14. package/cli/export-quads-app.js +1 -1
  15. package/cli/repl/commands/repl-dataflow.js +2 -1
  16. package/cli/repl/commands/repl-parse.js +16 -4
  17. package/cli/repl/commands/repl-query.js +1 -1
  18. package/cli/repl/core.js +16 -13
  19. package/cli/repl/server/connection.js +2 -1
  20. package/cli/script-core/statistics-helper-core.js +2 -1
  21. package/cli/slicer-app.js +3 -4
  22. package/cli/wiki.d.ts +4 -0
  23. package/cli/wiki.js +165 -0
  24. package/config.d.ts +4 -0
  25. package/config.js +6 -0
  26. package/control-flow/cfg-dead-code.js +13 -3
  27. package/control-flow/cfg-simplification.d.ts +5 -2
  28. package/control-flow/cfg-simplification.js +3 -0
  29. package/control-flow/extract-cfg.d.ts +9 -3
  30. package/control-flow/extract-cfg.js +44 -4
  31. package/control-flow/semantic-cfg-guided-visitor.d.ts +2 -2
  32. package/control-flow/simple-visitor.js +2 -2
  33. package/control-flow/useless-loop.d.ts +3 -3
  34. package/control-flow/useless-loop.js +14 -5
  35. package/core/pipeline-executor.d.ts +3 -6
  36. package/core/pipeline-executor.js +4 -7
  37. package/core/print/normalize-printer.d.ts +1 -1
  38. package/core/print/normalize-printer.js +2 -2
  39. package/core/steps/all/core/00-parse.d.ts +1 -1
  40. package/core/steps/all/core/00-parse.js +1 -1
  41. package/core/steps/all/core/10-normalize.d.ts +3 -9
  42. package/core/steps/all/core/10-normalize.js +1 -16
  43. package/core/steps/all/core/11-normalize-tree-sitter.d.ts +2 -3
  44. package/core/steps/all/core/11-normalize-tree-sitter.js +2 -3
  45. package/core/steps/all/core/20-dataflow.d.ts +3 -4
  46. package/core/steps/all/core/20-dataflow.js +2 -2
  47. package/core/steps/all/static-slicing/00-slice.d.ts +1 -2
  48. package/core/steps/all/static-slicing/00-slice.js +1 -1
  49. package/core/steps/all/static-slicing/10-reconstruct.d.ts +8 -0
  50. package/core/steps/all/static-slicing/10-reconstruct.js +4 -1
  51. package/core/steps/pipeline/default-pipelines.d.ts +55 -56
  52. package/core/steps/pipeline/default-pipelines.js +8 -8
  53. package/dataflow/environments/clone.d.ts +0 -1
  54. package/dataflow/environments/clone.js +12 -2
  55. package/dataflow/environments/diff.js +2 -2
  56. package/dataflow/environments/overwrite.d.ts +1 -5
  57. package/dataflow/environments/overwrite.js +3 -19
  58. package/dataflow/environments/scoping.d.ts +6 -2
  59. package/dataflow/environments/scoping.js +6 -2
  60. package/dataflow/eval/resolve/resolve-argument.js +2 -2
  61. package/dataflow/eval/values/string/string-constants.d.ts +9 -3
  62. package/dataflow/eval/values/string/string-constants.js +9 -3
  63. package/dataflow/extractor.d.ts +2 -3
  64. package/dataflow/extractor.js +25 -22
  65. package/dataflow/graph/graph.d.ts +3 -9
  66. package/dataflow/graph/graph.js +0 -13
  67. package/dataflow/graph/unknown-replacement.d.ts +4 -2
  68. package/dataflow/graph/unknown-replacement.js +4 -2
  69. package/dataflow/info.d.ts +7 -0
  70. package/dataflow/info.js +21 -0
  71. package/dataflow/internal/linker.js +7 -4
  72. package/dataflow/internal/process/functions/call/argument/make-argument.d.ts +2 -2
  73. package/dataflow/internal/process/functions/call/argument/make-argument.js +2 -3
  74. package/dataflow/internal/process/functions/call/built-in/built-in-access.d.ts +1 -1
  75. package/dataflow/internal/process/functions/call/built-in/built-in-access.js +4 -4
  76. package/dataflow/internal/process/functions/call/built-in/built-in-apply.js +1 -1
  77. package/dataflow/internal/process/functions/call/built-in/built-in-assignment.js +4 -4
  78. package/dataflow/internal/process/functions/call/built-in/built-in-eval.js +6 -6
  79. package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.js +1 -1
  80. package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.js +1 -1
  81. package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.js +1 -1
  82. package/dataflow/internal/process/functions/call/built-in/built-in-get.d.ts +1 -1
  83. package/dataflow/internal/process/functions/call/built-in/built-in-get.js +1 -1
  84. package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.js +1 -1
  85. package/dataflow/internal/process/functions/call/built-in/built-in-list.js +2 -2
  86. package/dataflow/internal/process/functions/call/built-in/built-in-pipe.js +3 -3
  87. package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.d.ts +6 -1
  88. package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.js +6 -1
  89. package/dataflow/internal/process/functions/call/built-in/built-in-replacement.js +2 -2
  90. package/dataflow/internal/process/functions/call/built-in/built-in-source.d.ts +15 -10
  91. package/dataflow/internal/process/functions/call/built-in/built-in-source.js +78 -75
  92. package/dataflow/internal/process/functions/call/built-in/built-in-special-bin-op.d.ts +3 -1
  93. package/dataflow/internal/process/functions/call/built-in/built-in-special-bin-op.js +3 -1
  94. package/dataflow/internal/process/functions/call/built-in/built-in-vector.js +2 -2
  95. package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.js +1 -1
  96. package/dataflow/internal/process/functions/call/common.d.ts +1 -1
  97. package/dataflow/internal/process/functions/call/common.js +4 -4
  98. package/dataflow/internal/process/functions/call/default-call-handling.d.ts +3 -1
  99. package/dataflow/internal/process/functions/call/default-call-handling.js +3 -1
  100. package/dataflow/internal/process/functions/call/known-call-handling.js +3 -3
  101. package/dataflow/internal/process/functions/call/named-call-handling.js +4 -4
  102. package/dataflow/internal/process/functions/process-parameter.js +4 -4
  103. package/dataflow/origin/dfg-get-symbol-refs.d.ts +1 -1
  104. package/dataflow/origin/dfg-get-symbol-refs.js +1 -1
  105. package/dataflow/processor.d.ts +6 -11
  106. package/documentation/data/dfg/doc-data-dfg-util.d.ts +0 -2
  107. package/documentation/data/faq/faqs.js +27 -18
  108. package/documentation/data/faq/recommended-configs.d.ts +36 -0
  109. package/documentation/data/faq/recommended-configs.js +40 -0
  110. package/documentation/data/faq/wiki-faq-store.d.ts +1 -0
  111. package/documentation/data/faq/wiki-faq-store.js +10 -2
  112. package/documentation/data/server/doc-data-server-messages.js +1 -1
  113. package/documentation/doc-capabilities.d.ts +9 -0
  114. package/documentation/{print-capabilities-markdown.js → doc-capabilities.js} +18 -21
  115. package/documentation/doc-readme.d.ts +9 -0
  116. package/documentation/{print-readme.js → doc-readme.js} +31 -35
  117. package/documentation/doc-util/doc-benchmarks.d.ts +6 -4
  118. package/documentation/doc-util/doc-benchmarks.js +6 -4
  119. package/documentation/doc-util/doc-cfg.js +5 -8
  120. package/documentation/doc-util/doc-dfg.d.ts +7 -7
  121. package/documentation/doc-util/doc-dfg.js +13 -13
  122. package/documentation/doc-util/doc-escape.d.ts +6 -0
  123. package/documentation/doc-util/doc-escape.js +11 -0
  124. package/documentation/doc-util/doc-general.d.ts +22 -2
  125. package/documentation/doc-util/doc-general.js +22 -2
  126. package/documentation/doc-util/doc-normalized-ast.d.ts +10 -5
  127. package/documentation/doc-util/doc-normalized-ast.js +12 -9
  128. package/documentation/doc-util/doc-query.d.ts +12 -4
  129. package/documentation/doc-util/doc-query.js +18 -11
  130. package/documentation/doc-util/doc-search.d.ts +0 -30
  131. package/documentation/doc-util/doc-search.js +2 -73
  132. package/documentation/doc-util/doc-server-message.d.ts +5 -5
  133. package/documentation/doc-util/doc-server-message.js +4 -4
  134. package/documentation/doc-util/doc-types.d.ts +69 -32
  135. package/documentation/doc-util/doc-types.js +108 -61
  136. package/documentation/index.d.ts +9 -9
  137. package/documentation/index.js +9 -9
  138. package/documentation/issue-linting-rule.d.ts +9 -0
  139. package/documentation/{print-linter-issue.js → issue-linting-rule.js} +20 -23
  140. package/documentation/wiki-analyzer.d.ts +9 -0
  141. package/documentation/wiki-analyzer.js +412 -0
  142. package/documentation/wiki-cfg.d.ts +9 -0
  143. package/documentation/{print-cfg-wiki.js → wiki-cfg.js} +144 -160
  144. package/documentation/wiki-core.d.ts +14 -0
  145. package/documentation/{print-core-wiki.js → wiki-core.js} +164 -175
  146. package/documentation/wiki-dataflow-graph.d.ts +9 -0
  147. package/documentation/{print-dataflow-graph-wiki.js → wiki-dataflow-graph.js} +142 -172
  148. package/documentation/wiki-engine.d.ts +9 -0
  149. package/documentation/{print-engines-wiki.js → wiki-engine.js} +27 -42
  150. package/documentation/wiki-faq.d.ts +8 -0
  151. package/documentation/wiki-faq.js +22 -0
  152. package/documentation/wiki-interface.d.ts +9 -0
  153. package/documentation/{print-interface-wiki.js → wiki-interface.js} +59 -56
  154. package/documentation/wiki-linter.d.ts +9 -0
  155. package/documentation/{print-linter-wiki.js → wiki-linter.js} +52 -48
  156. package/documentation/wiki-linting-and-testing.d.ts +9 -0
  157. package/documentation/{print-linting-and-testing-wiki.js → wiki-linting-and-testing.js} +25 -32
  158. package/documentation/wiki-mk/doc-context.d.ts +186 -0
  159. package/documentation/wiki-mk/doc-context.js +84 -0
  160. package/documentation/wiki-mk/doc-maker.d.ts +95 -0
  161. package/documentation/wiki-mk/doc-maker.js +133 -0
  162. package/documentation/wiki-normalized-ast.d.ts +9 -0
  163. package/documentation/{print-normalized-ast-wiki.js → wiki-normalized-ast.js} +64 -47
  164. package/documentation/wiki-onboarding.d.ts +8 -0
  165. package/documentation/{print-onboarding-wiki.js → wiki-onboarding.js} +18 -15
  166. package/documentation/wiki-query.d.ts +9 -0
  167. package/documentation/{print-query-wiki.js → wiki-query.js} +62 -47
  168. package/documentation/wiki-search.d.ts +9 -0
  169. package/documentation/wiki-search.js +61 -0
  170. package/linter/linter-executor.js +3 -2
  171. package/linter/linter-format.d.ts +2 -2
  172. package/linter/linter-rules.d.ts +13 -17
  173. package/linter/rules/absolute-path.d.ts +1 -2
  174. package/linter/rules/absolute-path.js +2 -2
  175. package/linter/rules/dataframe-access-validation.d.ts +1 -1
  176. package/linter/rules/dataframe-access-validation.js +12 -8
  177. package/linter/rules/dead-code.d.ts +1 -1
  178. package/linter/rules/deprecated-functions.d.ts +1 -5
  179. package/linter/rules/file-path-validity.d.ts +1 -1
  180. package/linter/rules/file-path-validity.js +4 -4
  181. package/linter/rules/function-finder-util.d.ts +1 -5
  182. package/linter/rules/naming-convention.d.ts +2 -2
  183. package/linter/rules/naming-convention.js +1 -1
  184. package/linter/rules/network-functions.d.ts +1 -1
  185. package/linter/rules/network-functions.js +1 -1
  186. package/linter/rules/seeded-randomness.d.ts +3 -2
  187. package/linter/rules/seeded-randomness.js +33 -13
  188. package/linter/rules/unused-definition.d.ts +1 -1
  189. package/linter/rules/useless-loop.d.ts +2 -2
  190. package/linter/rules/useless-loop.js +2 -2
  191. package/package.json +6 -17
  192. package/project/cache/flowr-analyzer-cache.d.ts +7 -10
  193. package/project/cache/flowr-analyzer-cache.js +17 -38
  194. package/project/cache/flowr-analyzer-controlflow-cache.d.ts +34 -0
  195. package/project/cache/flowr-analyzer-controlflow-cache.js +79 -0
  196. package/project/context/flowr-analyzer-context.d.ts +30 -5
  197. package/project/context/flowr-analyzer-context.js +48 -4
  198. package/project/context/flowr-analyzer-files-context.d.ts +63 -13
  199. package/project/context/flowr-analyzer-files-context.js +110 -39
  200. package/project/context/flowr-file.d.ts +32 -10
  201. package/project/context/flowr-file.js +30 -9
  202. package/project/flowr-analyzer-builder.d.ts +22 -28
  203. package/project/flowr-analyzer-builder.js +32 -70
  204. package/project/flowr-analyzer.d.ts +55 -14
  205. package/project/flowr-analyzer.js +53 -8
  206. package/project/plugins/file-plugins/flowr-analyzer-description-file-plugin.d.ts +7 -1
  207. package/project/plugins/file-plugins/flowr-analyzer-description-file-plugin.js +13 -5
  208. package/project/plugins/file-plugins/flowr-analyzer-file-plugin.d.ts +3 -3
  209. package/project/plugins/file-plugins/flowr-analyzer-file-plugin.js +11 -5
  210. package/project/plugins/file-plugins/flowr-description-file.d.ts +3 -3
  211. package/project/plugins/file-plugins/notebooks/flowr-analyzer-jupyter-file-plugin.d.ts +22 -0
  212. package/project/plugins/file-plugins/notebooks/flowr-analyzer-jupyter-file-plugin.js +33 -0
  213. package/project/plugins/file-plugins/notebooks/flowr-analyzer-qmd-file-plugin.d.ts +22 -0
  214. package/project/plugins/file-plugins/notebooks/flowr-analyzer-qmd-file-plugin.js +33 -0
  215. package/project/plugins/file-plugins/notebooks/flowr-analyzer-rmd-file-plugin.d.ts +22 -0
  216. package/project/plugins/file-plugins/notebooks/flowr-analyzer-rmd-file-plugin.js +33 -0
  217. package/project/plugins/file-plugins/notebooks/flowr-jupyter-file.d.ts +20 -0
  218. package/project/plugins/file-plugins/notebooks/flowr-jupyter-file.js +42 -0
  219. package/project/plugins/file-plugins/notebooks/flowr-rmarkdown-file.d.ts +59 -0
  220. package/project/plugins/file-plugins/notebooks/flowr-rmarkdown-file.js +132 -0
  221. package/project/plugins/file-plugins/notebooks/notebook.d.ts +0 -0
  222. package/project/plugins/file-plugins/notebooks/notebook.js +2 -0
  223. package/project/plugins/flowr-analyzer-plugin-defaults.d.ts +5 -0
  224. package/project/plugins/flowr-analyzer-plugin-defaults.js +23 -0
  225. package/project/plugins/flowr-analyzer-plugin.d.ts +2 -0
  226. package/project/plugins/flowr-analyzer-plugin.js +2 -0
  227. package/project/plugins/loading-order-plugins/flowr-analyzer-loading-order-description-file-plugin.js +1 -1
  228. package/project/plugins/package-version-plugins/flowr-analyzer-package-versions-description-file-plugin.js +1 -1
  229. package/project/plugins/plugin-registry.d.ts +34 -0
  230. package/project/plugins/plugin-registry.js +62 -0
  231. package/project/plugins/project-discovery/flowr-analyzer-project-discovery-plugin.js +7 -1
  232. package/queries/catalog/call-context-query/call-context-query-executor.js +4 -2
  233. package/queries/catalog/call-context-query/identify-link-to-last-call-relation.d.ts +5 -2
  234. package/queries/catalog/call-context-query/identify-link-to-last-call-relation.js +25 -18
  235. package/queries/catalog/cluster-query/cluster-query-format.d.ts +1 -1
  236. package/queries/catalog/control-flow-query/control-flow-query-format.d.ts +1 -1
  237. package/queries/catalog/dataflow-lens-query/dataflow-lens-query-format.d.ts +1 -1
  238. package/queries/catalog/dataflow-query/dataflow-query-format.d.ts +1 -1
  239. package/queries/catalog/dependencies-query/dependencies-query-executor.d.ts +1 -1
  240. package/queries/catalog/dependencies-query/dependencies-query-executor.js +1 -1
  241. package/queries/catalog/dependencies-query/dependencies-query-format.d.ts +1 -1
  242. package/queries/catalog/dependencies-query/dependencies-query-format.js +1 -1
  243. package/queries/catalog/df-shape-query/df-shape-query-executor.js +1 -1
  244. package/queries/catalog/df-shape-query/df-shape-query-format.d.ts +2 -2
  245. package/queries/catalog/df-shape-query/df-shape-query-format.js +6 -5
  246. package/queries/catalog/happens-before-query/happens-before-query-executor.d.ts +2 -1
  247. package/queries/catalog/happens-before-query/happens-before-query-executor.js +2 -1
  248. package/queries/catalog/happens-before-query/happens-before-query-format.d.ts +1 -1
  249. package/queries/catalog/id-map-query/id-map-query-format.d.ts +1 -1
  250. package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-executor.d.ts +1 -1
  251. package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-executor.js +1 -1
  252. package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-format.d.ts +1 -1
  253. package/queries/catalog/linter-query/linter-query-format.d.ts +1 -1
  254. package/queries/catalog/linter-query/linter-query-format.js +13 -2
  255. package/queries/catalog/location-map-query/location-map-query-executor.js +2 -1
  256. package/queries/catalog/location-map-query/location-map-query-format.d.ts +1 -1
  257. package/queries/catalog/location-map-query/location-map-query-format.js +1 -1
  258. package/queries/catalog/normalized-ast-query/normalized-ast-query-format.d.ts +1 -1
  259. package/queries/catalog/origin-query/origin-query-format.d.ts +1 -1
  260. package/queries/catalog/project-query/project-query-executor.js +3 -1
  261. package/queries/catalog/project-query/project-query-format.d.ts +1 -1
  262. package/queries/catalog/resolve-value-query/resolve-value-query-executor.d.ts +2 -2
  263. package/queries/catalog/resolve-value-query/resolve-value-query-executor.js +2 -2
  264. package/queries/catalog/resolve-value-query/resolve-value-query-format.d.ts +1 -1
  265. package/queries/catalog/search-query/search-query-format.d.ts +1 -1
  266. package/queries/catalog/static-slice-query/static-slice-query-executor.js +1 -1
  267. package/queries/catalog/static-slice-query/static-slice-query-format.d.ts +1 -1
  268. package/queries/catalog/static-slice-query/static-slice-query-format.js +13 -1
  269. package/queries/query.d.ts +26 -18
  270. package/queries/query.js +21 -1
  271. package/r-bridge/lang-4.x/ast/model/collect.d.ts +2 -1
  272. package/r-bridge/lang-4.x/ast/model/collect.js +4 -0
  273. package/r-bridge/lang-4.x/ast/model/nodes/r-project.d.ts +29 -0
  274. package/r-bridge/lang-4.x/ast/model/nodes/r-project.js +15 -0
  275. package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +5 -7
  276. package/r-bridge/lang-4.x/ast/model/processing/decorate.js +24 -11
  277. package/r-bridge/lang-4.x/ast/model/type.d.ts +2 -0
  278. package/r-bridge/lang-4.x/ast/model/type.js +2 -0
  279. package/r-bridge/lang-4.x/ast/parser/json/format.js +1 -1
  280. package/r-bridge/lang-4.x/ast/parser/json/parser.d.ts +9 -8
  281. package/r-bridge/lang-4.x/ast/parser/json/parser.js +11 -10
  282. package/r-bridge/lang-4.x/ast/parser/main/internal/structure/normalize-root.d.ts +4 -3
  283. package/r-bridge/lang-4.x/ast/parser/main/internal/structure/normalize-root.js +20 -11
  284. package/r-bridge/lang-4.x/tree-sitter/tree-sitter-executor.d.ts +3 -3
  285. package/r-bridge/lang-4.x/tree-sitter/tree-sitter-executor.js +5 -4
  286. package/r-bridge/lang-4.x/tree-sitter/tree-sitter-normalize.d.ts +3 -2
  287. package/r-bridge/lang-4.x/tree-sitter/tree-sitter-normalize.js +14 -5
  288. package/r-bridge/parser.d.ts +15 -5
  289. package/r-bridge/parser.js +27 -13
  290. package/r-bridge/retriever.d.ts +9 -15
  291. package/r-bridge/retriever.js +14 -5
  292. package/r-bridge/shell.d.ts +1 -1
  293. package/r-bridge/shell.js +1 -1
  294. package/reconstruct/auto-select/auto-select-defaults.d.ts +0 -1
  295. package/reconstruct/auto-select/magic-comments.js +1 -1
  296. package/reconstruct/reconstruct.d.ts +17 -9
  297. package/reconstruct/reconstruct.js +19 -8
  298. package/search/flowr-search.d.ts +12 -0
  299. package/search/search-executor/search-enrichers.d.ts +9 -2
  300. package/search/search-executor/search-enrichers.js +1 -3
  301. package/search/search-executor/search-generators.d.ts +1 -1
  302. package/search/search-executor/search-generators.js +9 -4
  303. package/slicing/criterion/collect-all.d.ts +3 -2
  304. package/slicing/criterion/collect-all.js +1 -1
  305. package/slicing/criterion/parse.js +4 -4
  306. package/statistics/features/supported/assignments/assignments.js +1 -1
  307. package/statistics/features/supported/control-flow/control-flow.js +1 -1
  308. package/statistics/features/supported/data-access/data-access.js +1 -1
  309. package/statistics/features/supported/defined-functions/defined-functions.js +1 -1
  310. package/statistics/features/supported/expression-list/statistics-expression-list.js +1 -1
  311. package/statistics/features/supported/loops/loops.js +1 -1
  312. package/statistics/features/supported/used-functions/used-functions.js +1 -1
  313. package/statistics/features/supported/variables/variables.js +1 -1
  314. package/statistics/statistics.js +3 -2
  315. package/util/assert.d.ts +4 -0
  316. package/util/assert.js +4 -0
  317. package/util/files.d.ts +1 -1
  318. package/util/files.js +1 -1
  319. package/util/mermaid/ast.d.ts +4 -3
  320. package/util/mermaid/ast.js +36 -8
  321. package/util/mermaid/cfg.js +1 -1
  322. package/util/version.js +1 -1
  323. package/documentation/print-analyzer-wiki.d.ts +0 -1
  324. package/documentation/print-analyzer-wiki.js +0 -141
  325. package/documentation/print-capabilities-markdown.d.ts +0 -1
  326. package/documentation/print-cfg-wiki.d.ts +0 -1
  327. package/documentation/print-core-wiki.d.ts +0 -5
  328. package/documentation/print-dataflow-graph-wiki.d.ts +0 -1
  329. package/documentation/print-engines-wiki.d.ts +0 -1
  330. package/documentation/print-faq-wiki.d.ts +0 -1
  331. package/documentation/print-faq-wiki.js +0 -18
  332. package/documentation/print-interface-wiki.d.ts +0 -1
  333. package/documentation/print-linter-issue.d.ts +0 -1
  334. package/documentation/print-linter-wiki.d.ts +0 -1
  335. package/documentation/print-linting-and-testing-wiki.d.ts +0 -1
  336. package/documentation/print-normalized-ast-wiki.d.ts +0 -1
  337. package/documentation/print-onboarding-wiki.d.ts +0 -1
  338. package/documentation/print-query-wiki.d.ts +0 -1
  339. package/documentation/print-readme.d.ts +0 -1
  340. package/documentation/print-search-wiki.d.ts +0 -1
  341. package/documentation/print-search-wiki.js +0 -74
  342. package/util/formats/adapter-format.d.ts +0 -6
  343. package/util/formats/adapter-format.js +0 -3
  344. package/util/formats/adapter.d.ts +0 -27
  345. package/util/formats/adapter.js +0 -58
  346. package/util/formats/adapters/r-adapter.d.ts +0 -4
  347. package/util/formats/adapters/r-adapter.js +0 -7
  348. package/util/formats/adapters/rmd-adapter.d.ts +0 -35
  349. package/util/formats/adapters/rmd-adapter.js +0 -100
@@ -15,7 +15,7 @@ export interface SearchQueryResult extends BaseQueryResult {
15
15
  }
16
16
  export declare const SearchQueryDefinition: {
17
17
  readonly executor: typeof executeSearch;
18
- readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
18
+ readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
19
19
  readonly schema: Joi.ObjectSchema<any>;
20
20
  readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
21
21
  };
@@ -37,7 +37,7 @@ async function executeStaticSliceQuery({ analyzer }, queries) {
37
37
  }
38
38
  else {
39
39
  const reconstructStart = Date.now();
40
- const reconstruct = (0, reconstruct_1.reconstructToCode)(await analyzer.normalize(), slice.result, noMagicComments ? auto_select_defaults_1.doNotAutoSelect : (0, magic_comments_1.makeMagicCommentHandler)(auto_select_defaults_1.doNotAutoSelect));
40
+ const reconstruct = (0, reconstruct_1.reconstructToCode)(await analyzer.normalize(), { nodes: slice.result }, noMagicComments ? auto_select_defaults_1.doNotAutoSelect : (0, magic_comments_1.makeMagicCommentHandler)(auto_select_defaults_1.doNotAutoSelect));
41
41
  const reconstructEnd = Date.now();
42
42
  results[key] = {
43
43
  slice: { ...slice, '.meta': { timing: sliceEnd - sliceStart } },
@@ -34,7 +34,7 @@ export interface StaticSliceQueryResult extends BaseQueryResult {
34
34
  declare function sliceQueryLineParser(output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions): ParsedQueryLine<'static-slice'>;
35
35
  export declare const StaticSliceQueryDefinition: {
36
36
  readonly executor: typeof executeStaticSliceQuery;
37
- readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
37
+ readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
38
38
  readonly fromLine: typeof sliceQueryLineParser;
39
39
  readonly schema: Joi.ObjectSchema<any>;
40
40
  readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
@@ -30,6 +30,17 @@ exports.StaticSliceQueryDefinition = {
30
30
  executor: static_slice_query_executor_1.executeStaticSliceQuery,
31
31
  asciiSummarizer: (formatter, _analyzer, queryResults, result) => {
32
32
  const out = queryResults;
33
+ if (Object.keys(out.results).length === 1) {
34
+ // just print the single result without fingerprint
35
+ const [, obj] = Object.entries(out.results)[0];
36
+ if ('reconstruct' in obj) {
37
+ const code = Array.isArray(obj.reconstruct.code) ? obj.reconstruct.code : [obj.reconstruct.code];
38
+ if (code.length === 1) {
39
+ result.push(code[0]);
40
+ return true;
41
+ }
42
+ }
43
+ }
33
44
  result.push(`Query: ${(0, ansi_1.bold)('static-slice', formatter)} (${(0, time_1.printAsMs)(out['.meta'].timing, 0)})`);
34
45
  for (const [fingerprint, obj] of Object.entries(out.results)) {
35
46
  const { criteria, noMagicComments, noReconstruction } = JSON.parse(fingerprint);
@@ -42,7 +53,8 @@ exports.StaticSliceQueryDefinition = {
42
53
  }
43
54
  result.push(` ╰ Slice for {${criteria.join(', ')}} ${addons.join(', ')}`);
44
55
  if ('reconstruct' in obj) {
45
- result.push(' ╰ Code (newline as <code>&#92;n</code>): <code>' + obj.reconstruct.code.split('\n').join('\\n') + '</code>');
56
+ const code = Array.isArray(obj.reconstruct.code) ? obj.reconstruct.code : [obj.reconstruct.code];
57
+ result.push(' ╰ Code (newline as <code>&#92;n</code>): <code>' + code.flatMap(c => c.split('\n')).join('\\n') + '</code>');
46
58
  }
47
59
  else {
48
60
  result.push(` ╰ Id List: {${(0, query_print_1.summarizeIdsIfTooLong)(formatter, [...obj.slice.result])}}`);
@@ -51,6 +51,10 @@ export interface SupportedQuery<QueryType extends BaseQueryFormat['type'] = Base
51
51
  completer?: (splitLine: readonly string[], startingNewArg: boolean, config: FlowrConfigOptions) => CommandCompletions;
52
52
  /** optional query construction from an, e.g., repl line */
53
53
  fromLine?: (output: ReplOutput, splitLine: readonly string[], config: FlowrConfigOptions) => ParsedQueryLine<QueryType>;
54
+ /**
55
+ * Generates an ASCII summary of the query result to be printed in, e.g., the REPL.
56
+ * @returns whether a summary was produced (`true` if so, `false` if not, in this case a default/generic summary will be created)
57
+ */
54
58
  asciiSummarizer: (formatter: OutputFormatter, analyzer: ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, resultStrings: string[], query: readonly Query[]) => AsyncOrSync<boolean>;
55
59
  jsonFormatter?: (queryResults: BaseQueryResult) => object;
56
60
  schema: Joi.ObjectSchema;
@@ -77,109 +81,109 @@ export declare const SupportedQueries: {
77
81
  };
78
82
  readonly 'control-flow': {
79
83
  readonly executor: typeof import("./catalog/control-flow-query/control-flow-query-executor").executeControlFlowQuery;
80
- readonly asciiSummarizer: (formatter: OutputFormatter, analyzer: ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => Promise<boolean>;
84
+ readonly asciiSummarizer: (formatter: OutputFormatter, analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => Promise<boolean>;
81
85
  readonly schema: Joi.ObjectSchema<any>;
82
86
  readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
83
87
  };
84
88
  readonly dataflow: {
85
89
  readonly executor: typeof import("./catalog/dataflow-query/dataflow-query-executor").executeDataflowQuery;
86
- readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
90
+ readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
87
91
  readonly schema: Joi.ObjectSchema<any>;
88
92
  readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
89
93
  };
90
94
  readonly 'dataflow-lens': {
91
95
  readonly executor: typeof import("./catalog/dataflow-lens-query/dataflow-lens-query-executor").executeDataflowLensQuery;
92
- readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
96
+ readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
93
97
  readonly schema: Joi.ObjectSchema<any>;
94
98
  readonly flattenInvolvedNodes: () => never[];
95
99
  };
96
100
  readonly 'df-shape': {
97
101
  readonly executor: typeof import("./catalog/df-shape-query/df-shape-query-executor").executeDfShapeQuery;
98
- readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
102
+ readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
99
103
  readonly jsonFormatter: (queryResults: BaseQueryResult) => object;
100
- readonly fromLine: (output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions) => ParsedQueryLine<"df-shape">;
104
+ readonly fromLine: (_output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions) => ParsedQueryLine<"df-shape">;
101
105
  readonly schema: Joi.ObjectSchema<any>;
102
106
  readonly flattenInvolvedNodes: () => never[];
103
107
  };
104
108
  readonly 'id-map': {
105
109
  readonly executor: typeof import("./catalog/id-map-query/id-map-query-executor").executeIdMapQuery;
106
- readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
110
+ readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
107
111
  readonly schema: Joi.ObjectSchema<any>;
108
112
  readonly flattenInvolvedNodes: () => never[];
109
113
  };
110
114
  readonly 'normalized-ast': {
111
115
  readonly executor: typeof import("./catalog/normalized-ast-query/normalized-ast-query-executor").executeNormalizedAstQuery;
112
- readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
116
+ readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
113
117
  readonly schema: Joi.ObjectSchema<any>;
114
118
  readonly flattenInvolvedNodes: () => never[];
115
119
  };
116
120
  readonly 'dataflow-cluster': {
117
121
  readonly executor: typeof import("./catalog/cluster-query/cluster-query-executor").executeDataflowClusterQuery;
118
- readonly asciiSummarizer: (formatter: OutputFormatter, analyzer: ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => Promise<boolean>;
122
+ readonly asciiSummarizer: (formatter: OutputFormatter, analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => Promise<boolean>;
119
123
  readonly schema: Joi.ObjectSchema<any>;
120
124
  readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
121
125
  };
122
126
  readonly 'static-slice': {
123
127
  readonly executor: typeof import("./catalog/static-slice-query/static-slice-query-executor").executeStaticSliceQuery;
124
- readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
128
+ readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
125
129
  readonly fromLine: (output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions) => ParsedQueryLine<"static-slice">;
126
130
  readonly schema: Joi.ObjectSchema<any>;
127
131
  readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
128
132
  };
129
133
  readonly dependencies: {
130
134
  readonly executor: typeof import("./catalog/dependencies-query/dependencies-query-executor").executeDependenciesQuery;
131
- readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[], queries: readonly Query[]) => true;
135
+ readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[], queries: readonly Query[]) => true;
132
136
  readonly schema: Joi.ObjectSchema<any>;
133
137
  readonly flattenInvolvedNodes: (queryResults: BaseQueryResult, query: readonly Query[]) => NodeId[];
134
138
  };
135
139
  readonly 'location-map': {
136
140
  readonly executor: typeof import("./catalog/location-map-query/location-map-query-executor").executeLocationMapQuery;
137
141
  readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: unknown, queryResults: BaseQueryResult, result: string[]) => true;
138
- readonly fromLine: (output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions) => ParsedQueryLine<"location-map">;
142
+ readonly fromLine: (_output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions) => ParsedQueryLine<"location-map">;
139
143
  readonly schema: Joi.ObjectSchema<any>;
140
144
  readonly flattenInvolvedNodes: () => never[];
141
145
  };
142
146
  readonly search: {
143
147
  readonly executor: typeof import("./catalog/search-query/search-query-executor").executeSearch;
144
- readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
148
+ readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
145
149
  readonly schema: Joi.ObjectSchema<any>;
146
150
  readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
147
151
  };
148
152
  readonly 'happens-before': {
149
153
  readonly executor: typeof import("./catalog/happens-before-query/happens-before-query-executor").executeHappensBefore;
150
- readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
154
+ readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
151
155
  readonly schema: Joi.ObjectSchema<any>;
152
156
  readonly flattenInvolvedNodes: () => never[];
153
157
  };
154
158
  readonly 'inspect-higher-order': {
155
159
  readonly executor: typeof import("./catalog/inspect-higher-order-query/inspect-higher-order-query-executor").executeHigherOrderQuery;
156
- readonly asciiSummarizer: (formatter: OutputFormatter, processed: ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => Promise<boolean>;
160
+ readonly asciiSummarizer: (formatter: OutputFormatter, processed: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => Promise<boolean>;
157
161
  readonly schema: Joi.ObjectSchema<any>;
158
162
  readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
159
163
  };
160
164
  readonly 'resolve-value': {
161
165
  readonly executor: typeof import("./catalog/resolve-value-query/resolve-value-query-executor").executeResolveValueQuery;
162
- readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
166
+ readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
163
167
  readonly fromLine: (output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions) => ParsedQueryLine<"resolve-value">;
164
168
  readonly schema: Joi.ObjectSchema<any>;
165
169
  readonly flattenInvolvedNodes: () => never[];
166
170
  };
167
171
  readonly project: {
168
172
  readonly executor: typeof import("./catalog/project-query/project-query-executor").executeProjectQuery;
169
- readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
173
+ readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
170
174
  readonly schema: Joi.ObjectSchema<any>;
171
175
  readonly flattenInvolvedNodes: () => never[];
172
176
  };
173
177
  readonly origin: {
174
178
  readonly executor: typeof import("./catalog/origin-query/origin-query-executor").executeResolveValueQuery;
175
- readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
179
+ readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
176
180
  readonly fromLine: (output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions) => ParsedQueryLine<"origin">;
177
181
  readonly schema: Joi.ObjectSchema<any>;
178
182
  readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
179
183
  };
180
184
  readonly linter: {
181
185
  readonly executor: typeof import("./catalog/linter-query/linter-query-executor").executeLinterQuery;
182
- readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
186
+ readonly asciiSummarizer: (formatter: OutputFormatter, analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
183
187
  readonly completer: (line: readonly string[], startingNewArg: boolean, _config: FlowrConfigOptions) => CommandCompletions;
184
188
  readonly fromLine: (output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions) => ParsedQueryLine<"linter">;
185
189
  readonly schema: Joi.ObjectSchema<any>;
@@ -224,4 +228,8 @@ export declare function AnyQuerySchema(): Joi.AlternativesSchema<any>;
224
228
  * Produces a Joi schema representing an array of supported queries.
225
229
  */
226
230
  export declare function QueriesSchema(): Joi.ArraySchema<any[]>;
231
+ /**
232
+ * Wraps a function that executes a REPL query and, if it fails, checks whether there were any requests to analyze.
233
+ */
234
+ export declare function genericWrapReplFailIfNoRequest<T>(fn: () => Promise<T>, output: ReplOutput, analyzer: ReadonlyFlowrAnalysisProvider): Promise<T | undefined>;
227
235
  export {};
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