@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
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BuiltInPlugins = void 0;
4
+ exports.registerPluginMaker = registerPluginMaker;
5
+ exports.getPlugin = getPlugin;
6
+ exports.makePlugin = makePlugin;
7
+ const flowr_analyzer_description_file_plugin_1 = require("./file-plugins/flowr-analyzer-description-file-plugin");
8
+ const flowr_analyzer_package_versions_description_file_plugin_1 = require("./package-version-plugins/flowr-analyzer-package-versions-description-file-plugin");
9
+ const flowr_analyzer_loading_order_description_file_plugin_1 = require("./loading-order-plugins/flowr-analyzer-loading-order-description-file-plugin");
10
+ const flowr_analyzer_rmd_file_plugin_1 = require("./file-plugins/notebooks/flowr-analyzer-rmd-file-plugin");
11
+ const flowr_analyzer_qmd_file_plugin_1 = require("./file-plugins/notebooks/flowr-analyzer-qmd-file-plugin");
12
+ const assert_1 = require("../../util/assert");
13
+ const flowr_analyzer_jupyter_file_plugin_1 = require("./file-plugins/notebooks/flowr-analyzer-jupyter-file-plugin");
14
+ /**
15
+ * The built-in Flowr Analyzer plugins that are always available.
16
+ */
17
+ exports.BuiltInPlugins = [
18
+ ['file:description', flowr_analyzer_description_file_plugin_1.FlowrAnalyzerDescriptionFilePlugin],
19
+ ['versions:description', flowr_analyzer_package_versions_description_file_plugin_1.FlowrAnalyzerPackageVersionsDescriptionFilePlugin],
20
+ ['loading-order:description', flowr_analyzer_loading_order_description_file_plugin_1.FlowrAnalyzerLoadingOrderDescriptionFilePlugin],
21
+ ['file:rmd', flowr_analyzer_rmd_file_plugin_1.FlowrAnalyzerRmdFilePlugin],
22
+ ['file:qmd', flowr_analyzer_qmd_file_plugin_1.FlowrAnalyzerQmdFilePlugin],
23
+ ['file:ipynb', flowr_analyzer_jupyter_file_plugin_1.FlowrAnalyzerJupyterFilePlugin],
24
+ ];
25
+ /**
26
+ * The registry of built-in and user-registered Flowr Analyzer plugins.
27
+ * Used by the {@link FlowrAnalyzerBuilder} and {@link FlowrAnalyzer} to instantiate plugins by name.
28
+ */
29
+ const PluginRegistry = new Map(exports.BuiltInPlugins);
30
+ /**
31
+ * Register a new Flowr Analyzer plugin for the registry,
32
+ * to be used by the {@link FlowrAnalyzerBuilder} and {@link FlowrAnalyzer}.
33
+ */
34
+ function registerPluginMaker(plugin, name = plugin.name) {
35
+ PluginRegistry.set(name, plugin);
36
+ }
37
+ /**
38
+ * Retrieve a registered Flowr Analyzer plugin by its name.
39
+ * @see {@link PluginToRegister}
40
+ */
41
+ function getPlugin(name, args) {
42
+ const plugin = PluginRegistry.get(name);
43
+ return plugin ? new plugin(...args) : undefined;
44
+ }
45
+ /**
46
+ * Create a Flowr Analyzer plugin from a {@link PluginToRegister} specification.
47
+ */
48
+ function makePlugin(toRegister) {
49
+ if (toRegister instanceof Object && 'process' in toRegister) {
50
+ return toRegister;
51
+ }
52
+ if (Array.isArray(toRegister)) {
53
+ const [name, args] = toRegister;
54
+ const plugin = getPlugin(name, args);
55
+ (0, assert_1.guard)(plugin !== undefined, () => `Unknown Flowr Analyzer plugin: ${name.toString()}`);
56
+ return plugin;
57
+ }
58
+ const plugin = getPlugin(toRegister, []);
59
+ (0, assert_1.guard)(plugin !== undefined, () => `Unknown Flowr Analyzer plugin: ${toRegister.toString()}`);
60
+ return plugin;
61
+ }
62
+ //# sourceMappingURL=plugin-registry.js.map
@@ -19,6 +19,7 @@ class FlowrAnalyzerProjectDiscoveryPlugin extends flowr_analyzer_plugin_1.FlowrA
19
19
  }
20
20
  }
21
21
  exports.FlowrAnalyzerProjectDiscoveryPlugin = FlowrAnalyzerProjectDiscoveryPlugin;
22
+ const discoverRSourcesRegex = /\.(r|rmd|ipynb|qmd)$/i;
22
23
  /**
23
24
  * This is the default dummy implementation of the {@link FlowrAnalyzerProjectDiscoveryPlugin}.
24
25
  * It simply collects all files in the given folder and returns them as either {@link RParseRequest} (for R and Rmd files) or {@link FlowrTextFile} (for all other files).
@@ -27,11 +28,16 @@ class DefaultFlowrAnalyzerProjectDiscoveryPlugin extends FlowrAnalyzerProjectDis
27
28
  name = 'default-project-discovery-plugin';
28
29
  description = 'This is the default project discovery plugin that does nothing.';
29
30
  version = new semver_1.SemVer('0.0.0');
31
+ supportedExtensions;
32
+ constructor(triggerOnExtensions = discoverRSourcesRegex) {
33
+ super();
34
+ this.supportedExtensions = triggerOnExtensions;
35
+ }
30
36
  process(_context, args) {
31
37
  const requests = [];
32
38
  /* the dummy approach of collecting all files, group R and Rmd files, and be done with it */
33
39
  for (const file of (0, files_1.getAllFilesSync)(args.content)) {
34
- if (file.endsWith('.R') || file.endsWith('.r') || file.endsWith('.Rmd') || file.endsWith('.rmd')) {
40
+ if (this.supportedExtensions.test(file)) {
35
41
  requests.push({ content: file, request: 'file' });
36
42
  }
37
43
  else {
@@ -9,6 +9,7 @@ const two_layer_collector_1 = require("../../two-layer-collector");
9
9
  const objects_1 = require("../../../util/objects");
10
10
  const identify_link_to_last_call_relation_1 = require("./identify-link-to-last-call-relation");
11
11
  const cfg_kind_1 = require("../../../project/cfg-kind");
12
+ const extract_cfg_1 = require("../../../control-flow/extract-cfg");
12
13
  /* if the node is effected by nse, we have an ingoing nse edge */
13
14
  function isQuoted(node, graph) {
14
15
  const vertex = graph.ingoingEdges(node);
@@ -211,6 +212,7 @@ async function executeCallContextQueries({ analyzer }, queries) {
211
212
  }
212
213
  }
213
214
  }
215
+ const calls = cfg ? (0, extract_cfg_1.getCallsInCfg)(cfg, dataflow.graph) : undefined;
214
216
  for (const query of promotedQueries.filter(q => !q.includeAliases && (q.callName instanceof RegExp ? q.callName.test(info.name) : q.callName.has(info.name)))) {
215
217
  const file = ast.idMap.get(nodeId)?.info.file;
216
218
  if (!doesFilepathMatch(file, query.fileFilter)) {
@@ -218,7 +220,7 @@ async function executeCallContextQueries({ analyzer }, queries) {
218
220
  }
219
221
  let targets = undefined;
220
222
  if (query.callTargets) {
221
- targets = (0, identify_link_to_last_call_relation_1.satisfiesCallTargets)(nodeId, dataflow.graph, query.callTargets);
223
+ targets = (0, identify_link_to_last_call_relation_1.satisfiesCallTargets)(info, dataflow.graph, query.callTargets);
222
224
  if (targets === 'no') {
223
225
  continue;
224
226
  }
@@ -235,7 +237,7 @@ async function executeCallContextQueries({ analyzer }, queries) {
235
237
  const linked = Array.isArray(query.linkTo) ? query.linkTo : [query.linkTo];
236
238
  for (const link of linked) {
237
239
  /* if we have a linkTo query, we have to find the last call */
238
- const lastCall = (0, identify_link_to_last_call_relation_1.identifyLinkToLastCallRelation)(nodeId, cfg.graph, dataflow.graph, link);
240
+ const lastCall = (0, identify_link_to_last_call_relation_1.identifyLinkToLastCallRelation)(nodeId, cfg.graph, dataflow.graph, link, calls);
239
241
  if (lastCall) {
240
242
  linkedIds ??= new Set();
241
243
  for (const l of lastCall) {
@@ -21,7 +21,7 @@ export declare enum CallTargets {
21
21
  /**
22
22
  * Determines whether the given function call node satisfies the specified call target condition.
23
23
  */
24
- export declare function satisfiesCallTargets(id: NodeId, graph: DataflowGraph, callTarget: CallTargets): NodeId[] | 'no';
24
+ export declare function satisfiesCallTargets(info: DataflowGraphVertexFunctionCall, graph: DataflowGraph, callTarget: CallTargets): NodeId[] | 'no';
25
25
  /**
26
26
  * Gets the value node of the specified argument in the given function call, if it exists and matches the allowed types.
27
27
  */
@@ -33,5 +33,8 @@ export declare function getValueOfArgument<Types extends readonly RType[] = read
33
33
  }) | undefined;
34
34
  /**
35
35
  * Identifies nodes that link to the last call of a specified function from a given starting node in the control flow graph.
36
+ * If you pass on `knownCalls` (e.g., produced by {@link getCallsInCfg}), this will only respect the functions
37
+ * listed there and ignore any other calls. This can be also used to speed up the process if you already have
38
+ * the known calls available.
36
39
  */
37
- export declare function identifyLinkToLastCallRelation(from: NodeId, cfg: ControlFlowGraph, graph: DataflowGraph, { callName, ignoreIf, cascadeIf }: LinkTo<RegExp> | PromotedLinkTo): NodeId[];
40
+ export declare function identifyLinkToLastCallRelation(from: NodeId, cfg: ControlFlowGraph, graph: DataflowGraph, { callName, ignoreIf, cascadeIf }: LinkTo<RegExp> | PromotedLinkTo, knownCalls?: Map<NodeId, Required<DataflowGraphVertexFunctionCall>>): NodeId[];
@@ -31,25 +31,22 @@ var CallTargets;
31
31
  /**
32
32
  * Determines whether the given function call node satisfies the specified call target condition.
33
33
  */
34
- function satisfiesCallTargets(id, graph, callTarget) {
35
- const callVertex = graph.getVertex(id, true);
36
- if (callVertex === undefined || callVertex.tag !== vertex_1.VertexType.FunctionCall) {
37
- return 'no';
38
- }
39
- const outgoing = graph.outgoingEdges(id);
34
+ function satisfiesCallTargets(info, graph, callTarget) {
35
+ const outgoing = graph.outgoingEdges(info.id);
40
36
  if (outgoing === undefined) {
41
37
  return 'no';
42
38
  }
43
- const callTargets = [...outgoing]
39
+ const callTargets = outgoing.entries()
44
40
  .filter(([, { types }]) => (0, edge_1.edgeIncludesType)(types, edge_1.EdgeType.Calls))
45
- .map(([t]) => t);
41
+ .map(([t]) => t)
42
+ .toArray();
46
43
  let builtIn = false;
47
- if (callVertex.environment !== undefined) {
44
+ if (info.environment !== undefined) {
48
45
  /*
49
46
  * for performance and scoping reasons, flowR will not identify the global linkage,
50
47
  * including any potential built-in mapping.
51
48
  */
52
- const reResolved = (0, resolve_by_name_1.resolveByName)(callVertex.name, callVertex.environment, identifier_1.ReferenceType.Unknown);
49
+ const reResolved = (0, resolve_by_name_1.resolveByName)(info.name, info.environment, identifier_1.ReferenceType.Unknown);
53
50
  if (reResolved?.some(t => (0, built_in_1.isBuiltIn)(t.definedAt))) {
54
51
  builtIn = true;
55
52
  }
@@ -115,31 +112,41 @@ function getValueOfArgument(graph, call, argument, additionalAllowedTypes) {
115
112
  }
116
113
  /**
117
114
  * Identifies nodes that link to the last call of a specified function from a given starting node in the control flow graph.
115
+ * If you pass on `knownCalls` (e.g., produced by {@link getCallsInCfg}), this will only respect the functions
116
+ * listed there and ignore any other calls. This can be also used to speed up the process if you already have
117
+ * the known calls available.
118
118
  */
119
- function identifyLinkToLastCallRelation(from, cfg, graph, { callName, ignoreIf, cascadeIf }) {
119
+ function identifyLinkToLastCallRelation(from, cfg, graph, { callName, ignoreIf, cascadeIf }, knownCalls) {
120
120
  if (ignoreIf?.(from, graph)) {
121
121
  return [];
122
122
  }
123
123
  const found = [];
124
+ const cNameCheck = callName instanceof RegExp ? ({ name }) => callName.test(name)
125
+ : ({ name }) => callName.has(name);
126
+ const getVertex = knownCalls ?
127
+ (node) => knownCalls.get(node) :
128
+ (node) => {
129
+ const v = graph.getVertex(node, true);
130
+ return (0, vertex_1.isFunctionCallVertex)(v) ? v : undefined;
131
+ };
124
132
  (0, simple_visitor_1.visitCfgInReverseOrder)(cfg, [from], node => {
125
133
  /* we ignore the start id as it cannot be the last call */
126
134
  if (node === from) {
127
135
  return;
128
136
  }
129
- const vertex = graph.getVertex(node, true);
130
- if (vertex === undefined || vertex.tag !== vertex_1.VertexType.FunctionCall) {
137
+ const vertex = getVertex(node);
138
+ if (vertex === undefined) {
131
139
  return;
132
140
  }
133
- if (callName instanceof RegExp ? callName.test(vertex.name) : callName.has(vertex.name)) {
141
+ if (cNameCheck(vertex)) {
134
142
  const act = cascadeIf ? cascadeIf(vertex, from, graph) : cascade_action_1.CascadeAction.Stop;
135
143
  if (act === cascade_action_1.CascadeAction.Skip) {
136
144
  return;
137
145
  }
138
- const tar = satisfiesCallTargets(vertex.id, graph, CallTargets.MustIncludeGlobal);
139
- if (tar === 'no') {
140
- return act === cascade_action_1.CascadeAction.Stop;
146
+ const tar = satisfiesCallTargets(vertex, graph, CallTargets.MustIncludeGlobal);
147
+ if (tar !== 'no') {
148
+ found.push(node);
141
149
  }
142
- found.push(node);
143
150
  return act === cascade_action_1.CascadeAction.Stop;
144
151
  }
145
152
  });
@@ -15,7 +15,7 @@ export interface DataflowClusterQueryResult extends BaseQueryResult {
15
15
  }
16
16
  export declare const ClusterQueryDefinition: {
17
17
  readonly executor: typeof executeDataflowClusterQuery;
18
- readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => Promise<boolean>;
18
+ readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => Promise<boolean>;
19
19
  readonly schema: Joi.ObjectSchema<any>;
20
20
  readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
21
21
  };
@@ -22,7 +22,7 @@ export interface ControlFlowQueryResult extends BaseQueryResult {
22
22
  }
23
23
  export declare const ControlFlowQueryDefinition: {
24
24
  readonly executor: typeof executeControlFlowQuery;
25
- readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => Promise<boolean>;
25
+ readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => Promise<boolean>;
26
26
  readonly schema: Joi.ObjectSchema<any>;
27
27
  readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
28
28
  };
@@ -14,7 +14,7 @@ export interface DataflowLensQueryResult extends BaseQueryResult {
14
14
  }
15
15
  export declare const DataflowLensQueryDefinition: {
16
16
  readonly executor: typeof executeDataflowLensQuery;
17
- readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
17
+ readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
18
18
  readonly schema: Joi.ObjectSchema<any>;
19
19
  readonly flattenInvolvedNodes: () => never[];
20
20
  };
@@ -15,7 +15,7 @@ export interface DataflowQueryResult extends BaseQueryResult {
15
15
  }
16
16
  export declare const DataflowQueryDefinition: {
17
17
  readonly executor: typeof executeDataflowQuery;
18
- readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
18
+ readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
19
19
  readonly schema: Joi.ObjectSchema<any>;
20
20
  readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
21
21
  };
@@ -1,6 +1,6 @@
1
1
  import { type DependenciesQuery, type DependenciesQueryResult } from './dependencies-query-format';
2
2
  import type { BasicQueryData } from '../../base-query-format';
3
3
  /**
4
- *
4
+ * Executes a dependencies query.
5
5
  */
6
6
  export declare function executeDependenciesQuery({ analyzer, }: BasicQueryData, queries: readonly DependenciesQuery[]): Promise<DependenciesQueryResult>;
@@ -12,7 +12,7 @@ const identify_link_to_last_call_relation_1 = require("../call-context-query/ide
12
12
  const resolve_argument_1 = require("../../../dataflow/eval/resolve/resolve-argument");
13
13
  const assert_1 = require("../../../util/assert");
14
14
  /**
15
- *
15
+ * Executes a dependencies query.
16
16
  */
17
17
  async function executeDependenciesQuery({ analyzer, }, queries) {
18
18
  if (queries.length !== 1) {
@@ -70,7 +70,7 @@ export interface DependencyInfo extends Record<string, unknown> {
70
70
  export declare function getAllCategories(queries: readonly DependenciesQuery[]): Record<DependencyCategoryName, DependencyCategorySettings>;
71
71
  export declare const DependenciesQueryDefinition: {
72
72
  readonly executor: typeof executeDependenciesQuery;
73
- readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[], queries: readonly import("../../query").Query[]) => true;
73
+ readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[], queries: readonly import("../../query").Query[]) => true;
74
74
  readonly schema: Joi.ObjectSchema<any>;
75
75
  readonly flattenInvolvedNodes: (queryResults: BaseQueryResult, query: readonly import("../../query").Query[]) => NodeId[];
76
76
  };
@@ -25,7 +25,7 @@ exports.DefaultDependencyCategories = {
25
25
  /* for libraries, we have to additionally track all uses of `::` and `:::`, for this we currently simply traverse all uses */
26
26
  additionalAnalysis: async (data, ignoreDefault, _functions, _queryResults, result) => {
27
27
  if (!ignoreDefault) {
28
- (0, visitor_1.visitAst)((await data.analyzer.normalize()).ast, n => {
28
+ (0, visitor_1.visitAst)((await data.analyzer.normalize()).ast.files.map(f => f.root), n => {
29
29
  if (n.type === type_1.RType.Symbol && n.namespace) {
30
30
  const dep = data.analyzer.inspectContext().deps.getDependency(n.namespace);
31
31
  /* we should improve the identification of ':::' */
@@ -16,7 +16,7 @@ async function executeDfShapeQuery({ analyzer }, queries) {
16
16
  const dfg = (await analyzer.dataflow()).graph;
17
17
  const cfg = await analyzer.controlflow();
18
18
  const start = Date.now();
19
- const domains = (0, shape_inference_1.inferDataFrameShapes)(cfg, dfg, ast, analyzer.flowrConfig);
19
+ const domains = (0, shape_inference_1.inferDataFrameShapes)(cfg, dfg, ast, analyzer.inspectContext());
20
20
  if (queries.length === 1 && queries[0].criterion === undefined) {
21
21
  return {
22
22
  '.meta': {
@@ -14,10 +14,10 @@ export interface DfShapeQuery extends BaseQueryFormat {
14
14
  export interface DfShapeQueryResult extends BaseQueryResult {
15
15
  domains: DataFrameStateDomain | Map<SingleSlicingCriterion, DataFrameDomain | undefined>;
16
16
  }
17
- declare function dfShapeQueryLineParser(output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions): ParsedQueryLine<'df-shape'>;
17
+ declare function dfShapeQueryLineParser(_output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions): ParsedQueryLine<'df-shape'>;
18
18
  export declare const DfShapeQueryDefinition: {
19
19
  readonly executor: typeof executeDfShapeQuery;
20
- readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
20
+ readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
21
21
  readonly jsonFormatter: (queryResults: BaseQueryResult) => object;
22
22
  readonly fromLine: typeof dfShapeQueryLineParser;
23
23
  readonly schema: Joi.ObjectSchema<any>;
@@ -10,7 +10,7 @@ const time_1 = require("../../../util/text/time");
10
10
  const df_shape_query_executor_1 = require("./df-shape-query-executor");
11
11
  const slice_query_parser_1 = require("../../../cli/repl/parser/slice-query-parser");
12
12
  const joi_1 = __importDefault(require("joi"));
13
- function dfShapeQueryLineParser(output, line, _config) {
13
+ function dfShapeQueryLineParser(_output, line, _config) {
14
14
  const criterion = (0, slice_query_parser_1.sliceCriterionParser)(line[0]);
15
15
  return {
16
16
  query: {
@@ -35,10 +35,11 @@ exports.DfShapeQueryDefinition = {
35
35
  return true;
36
36
  },
37
37
  jsonFormatter: (queryResults) => {
38
- const out = queryResults;
39
- const domains = out.domains instanceof dataframe_domain_1.DataFrameStateDomain ? out.domains.value : out.domains;
40
- const json = Object.fromEntries(domains.entries().map(([key, domain]) => [key, domain?.toJson()]));
41
- return json;
38
+ const { domains, ...out } = queryResults;
39
+ const state = domains instanceof dataframe_domain_1.DataFrameStateDomain ? domains.value : domains;
40
+ const json = Object.fromEntries(state.entries().map(([key, domain]) => [key, domain?.toJson() ?? null]));
41
+ const result = { domains: json, ...out };
42
+ return result;
42
43
  },
43
44
  fromLine: dfShapeQueryLineParser,
44
45
  schema: joi_1.default.object({
@@ -1,6 +1,7 @@
1
1
  import type { BasicQueryData } from '../../base-query-format';
2
2
  import type { HappensBeforeQuery, HappensBeforeQueryResult } from './happens-before-query-format';
3
3
  /**
4
- *
4
+ * Execute happens-before queries on the given analyzer.
5
+ * This checks, whether for two given slicing criteria `a` and `b`, `a` happens before `b` in the control flow graph.
5
6
  */
6
7
  export declare function executeHappensBefore({ analyzer }: BasicQueryData, queries: readonly HappensBeforeQuery[]): Promise<HappensBeforeQueryResult>;
@@ -7,7 +7,8 @@ const extract_cfg_1 = require("../../../control-flow/extract-cfg");
7
7
  const happens_before_1 = require("../../../control-flow/happens-before");
8
8
  const parse_1 = require("../../../slicing/criterion/parse");
9
9
  /**
10
- *
10
+ * Execute happens-before queries on the given analyzer.
11
+ * This checks, whether for two given slicing criteria `a` and `b`, `a` happens before `b` in the control flow graph.
11
12
  */
12
13
  async function executeHappensBefore({ analyzer }, queries) {
13
14
  const start = Date.now();
@@ -13,7 +13,7 @@ export interface HappensBeforeQueryResult extends BaseQueryResult {
13
13
  }
14
14
  export declare const HappensBeforeQueryDefinition: {
15
15
  readonly executor: typeof executeHappensBefore;
16
- readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
16
+ readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
17
17
  readonly schema: Joi.ObjectSchema<any>;
18
18
  readonly flattenInvolvedNodes: () => never[];
19
19
  };
@@ -10,7 +10,7 @@ export interface IdMapQueryResult extends BaseQueryResult {
10
10
  }
11
11
  export declare const IdMapQueryDefinition: {
12
12
  readonly executor: typeof executeIdMapQuery;
13
- readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
13
+ readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
14
14
  readonly schema: Joi.ObjectSchema<any>;
15
15
  readonly flattenInvolvedNodes: () => never[];
16
16
  };
@@ -1,6 +1,6 @@
1
1
  import type { InspectHigherOrderQuery, InspectHigherOrderQueryResult } from './inspect-higher-order-query-format';
2
2
  import type { BasicQueryData } from '../../base-query-format';
3
3
  /**
4
- *
4
+ * Execute higher-order function inspection queries on the given analyzer.
5
5
  */
6
6
  export declare function executeHigherOrderQuery({ analyzer }: BasicQueryData, queries: readonly InspectHigherOrderQuery[]): Promise<InspectHigherOrderQueryResult>;
@@ -5,7 +5,7 @@ const parse_1 = require("../../../slicing/criterion/parse");
5
5
  const vertex_1 = require("../../../dataflow/graph/vertex");
6
6
  const higher_order_function_1 = require("../../../dataflow/fn/higher-order-function");
7
7
  /**
8
- *
8
+ * Execute higher-order function inspection queries on the given analyzer.
9
9
  */
10
10
  async function executeHigherOrderQuery({ analyzer }, queries) {
11
11
  const start = Date.now();
@@ -16,7 +16,7 @@ export interface InspectHigherOrderQueryResult extends BaseQueryResult {
16
16
  }
17
17
  export declare const InspectHigherOrderQueryDefinition: {
18
18
  readonly executor: typeof executeHigherOrderQuery;
19
- readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, processed: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => Promise<boolean>;
19
+ readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, processed: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => Promise<boolean>;
20
20
  readonly schema: Joi.ObjectSchema<any>;
21
21
  readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
22
22
  };
@@ -27,7 +27,7 @@ declare function linterQueryLineParser(output: ReplOutput, line: readonly string
27
27
  declare function linterQueryCompleter(line: readonly string[], startingNewArg: boolean, _config: FlowrConfigOptions): CommandCompletions;
28
28
  export declare const LinterQueryDefinition: {
29
29
  readonly executor: typeof executeLinterQuery;
30
- readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
30
+ readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
31
31
  readonly completer: typeof linterQueryCompleter;
32
32
  readonly fromLine: typeof linterQueryLineParser;
33
33
  readonly schema: Joi.ObjectSchema<any>;
@@ -12,6 +12,7 @@ const ansi_1 = require("../../../util/text/ansi");
12
12
  const time_1 = require("../../../util/text/time");
13
13
  const doc_code_1 = require("../../../documentation/doc-util/doc-code");
14
14
  const retriever_1 = require("../../../r-bridge/retriever");
15
+ const assert_1 = require("../../../util/assert");
15
16
  function rulesFromInput(output, rulesPart) {
16
17
  return rulesPart
17
18
  .reduce((acc, ruleName) => {
@@ -78,9 +79,18 @@ function linterQueryCompleter(line, startingNewArg, _config) {
78
79
  }
79
80
  exports.LinterQueryDefinition = {
80
81
  executor: linter_query_executor_1.executeLinterQuery,
81
- asciiSummarizer: (formatter, _analyzer, queryResults, result) => {
82
+ asciiSummarizer: (formatter, analyzer, queryResults, result) => {
82
83
  const out = queryResults;
83
84
  result.push(`Query: ${(0, ansi_1.bold)('linter', formatter)} (${(0, time_1.printAsMs)(out['.meta'].timing, 0)})`);
85
+ const allDidFail = Object.values(out.results).every(r => (0, linter_format_1.isLintingResultsError)(r));
86
+ if (allDidFail) {
87
+ result.push('All linting rules failed to execute.');
88
+ if (analyzer.inspectContext().files.loadingOrder.getUnorderedRequests().length === 0) {
89
+ result.push(formatter.format('No requests to lint for were found in the analysis.', { color: 1 /* Colors.Red */, effect: ansi_1.ColorEffect.Foreground, style: 1 /* FontStyles.Bold */ }));
90
+ result.push('If you consider this an error, please report a bug: ' + (0, assert_1.getGuardIssueUrl)('analyzer found no requests to lint for'));
91
+ }
92
+ return true;
93
+ }
84
94
  for (const [ruleName, results] of Object.entries(out.results)) {
85
95
  addLintingRuleResult(ruleName, results, result);
86
96
  }
@@ -101,7 +111,8 @@ function addLintingRuleResult(ruleName, results, result) {
101
111
  const rule = linter_rules_1.LintingRules[ruleName];
102
112
  result.push(` ╰ **${rule.info.name}** (${ruleName}):`);
103
113
  if ((0, linter_format_1.isLintingResultsError)(results)) {
104
- result.push(` ╰ Error during execution of Rule: ${results.error}`);
114
+ const error = results.error.includes('At least one request must be set') ? 'No requests to lint for were found in the analysis.' : 'Error during execution of rule: ' + results.error;
115
+ result.push(` ╰ ${error}`);
105
116
  return;
106
117
  }
107
118
  for (const certainty of [linter_format_1.LintingResultCertainty.Certain, linter_format_1.LintingResultCertainty.Uncertain]) {
@@ -39,7 +39,8 @@ async function executeLocationMapQuery({ analyzer }, queries) {
39
39
  };
40
40
  let count = 0;
41
41
  const inverseMap = new Map();
42
- for (const file of (await analyzer.dataflow()).graph.sourced) {
42
+ await analyzer.dataflow(); // ensure all files are considered
43
+ for (const file of analyzer.inspectContext().files.consideredFilesList()) {
43
44
  locationMap.files[count] = file;
44
45
  inverseMap.set(file, count);
45
46
  count++;
@@ -25,7 +25,7 @@ export interface LocationMapQueryResult extends BaseQueryResult {
25
25
  ids: Record<NodeId, [FileId, SourceRange]>;
26
26
  };
27
27
  }
28
- declare function locationMapLineParser(output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions): ParsedQueryLine<'location-map'>;
28
+ declare function locationMapLineParser(_output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions): ParsedQueryLine<'location-map'>;
29
29
  export declare const LocationMapQueryDefinition: {
30
30
  readonly executor: typeof executeLocationMapQuery;
31
31
  readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: unknown, queryResults: BaseQueryResult, result: string[]) => true;
@@ -10,7 +10,7 @@ const time_1 = require("../../../util/text/time");
10
10
  const joi_1 = __importDefault(require("joi"));
11
11
  const query_print_1 = require("../../query-print");
12
12
  const slice_query_parser_1 = require("../../../cli/repl/parser/slice-query-parser");
13
- function locationMapLineParser(output, line, _config) {
13
+ function locationMapLineParser(_output, line, _config) {
14
14
  const criteria = (0, slice_query_parser_1.sliceCriteriaParser)(line[0]);
15
15
  return {
16
16
  query: {
@@ -13,7 +13,7 @@ export interface NormalizedAstQueryResult extends BaseQueryResult {
13
13
  }
14
14
  export declare const NormalizedAstQueryDefinition: {
15
15
  readonly executor: typeof executeNormalizedAstQuery;
16
- readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
16
+ readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
17
17
  readonly schema: Joi.ObjectSchema<any>;
18
18
  readonly flattenInvolvedNodes: () => never[];
19
19
  };
@@ -18,7 +18,7 @@ export interface OriginQueryResult extends BaseQueryResult {
18
18
  declare function originQueryLineParser(output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions): ParsedQueryLine<'origin'>;
19
19
  export declare const OriginQueryDefinition: {
20
20
  readonly executor: typeof executeResolveValueQuery;
21
- readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
21
+ readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
22
22
  readonly fromLine: typeof originQueryLineParser;
23
23
  readonly schema: Joi.ObjectSchema<any>;
24
24
  readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
@@ -9,12 +9,14 @@ async function executeProjectQuery({ analyzer }, queries) {
9
9
  if (queries.length !== 1) {
10
10
  log_1.log.warn('Project query expects only up to one query, but got', queries.length);
11
11
  }
12
+ // we need to know what is considered by the analyzer
13
+ await analyzer.dataflow();
12
14
  return {
13
15
  '.meta': {
14
16
  /* there is no sense in measuring a get */
15
17
  timing: 0
16
18
  },
17
- files: (await analyzer.dataflow()).graph.sourced
19
+ files: [...analyzer.inspectContext().files.consideredFilesList()]
18
20
  };
19
21
  }
20
22
  //# sourceMappingURL=project-query-executor.js.map
@@ -9,7 +9,7 @@ export interface ProjectQueryResult extends BaseQueryResult {
9
9
  }
10
10
  export declare const ProjectQueryDefinition: {
11
11
  readonly executor: typeof executeProjectQuery;
12
- readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
12
+ readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
13
13
  readonly schema: Joi.ObjectSchema<any>;
14
14
  readonly flattenInvolvedNodes: () => never[];
15
15
  };
@@ -1,10 +1,10 @@
1
1
  import type { ResolveValueQuery, ResolveValueQueryResult } from './resolve-value-query-format';
2
2
  import type { BasicQueryData } from '../../base-query-format';
3
3
  /**
4
- *
4
+ * Naive fingerprint to filter out duplicate queries.
5
5
  */
6
6
  export declare function fingerPrintOfQuery(query: ResolveValueQuery): string;
7
7
  /**
8
- *
8
+ * Executes a resolve-value query.
9
9
  */
10
10
  export declare function executeResolveValueQuery({ analyzer }: BasicQueryData, queries: readonly ResolveValueQuery[]): Promise<ResolveValueQueryResult>;
@@ -6,13 +6,13 @@ const log_1 = require("../../../util/log");
6
6
  const parse_1 = require("../../../slicing/criterion/parse");
7
7
  const alias_tracking_1 = require("../../../dataflow/eval/resolve/alias-tracking");
8
8
  /**
9
- *
9
+ * Naive fingerprint to filter out duplicate queries.
10
10
  */
11
11
  function fingerPrintOfQuery(query) {
12
12
  return JSON.stringify(query);
13
13
  }
14
14
  /**
15
- *
15
+ * Executes a resolve-value query.
16
16
  */
17
17
  async function executeResolveValueQuery({ analyzer }, queries) {
18
18
  const start = Date.now();
@@ -19,7 +19,7 @@ export interface ResolveValueQueryResult extends BaseQueryResult {
19
19
  declare function resolveValueLineParser(output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions): ParsedQueryLine<'resolve-value'>;
20
20
  export declare const ResolveValueQueryDefinition: {
21
21
  readonly executor: typeof executeResolveValueQuery;
22
- readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, result: string[]) => true;
22
+ readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
23
23
  readonly fromLine: typeof resolveValueLineParser;
24
24
  readonly schema: Joi.ObjectSchema<any>;
25
25
  readonly flattenInvolvedNodes: () => never[];