@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
@@ -1,10 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FlowrAnalyzerContext = void 0;
4
+ exports.contextFromInput = contextFromInput;
5
+ exports.contextFromSources = contextFromSources;
4
6
  const flowr_analyzer_files_context_1 = require("./flowr-analyzer-files-context");
5
7
  const flowr_analyzer_dependencies_context_1 = require("./flowr-analyzer-dependencies-context");
6
8
  const flowr_analyzer_plugin_1 = require("../plugins/flowr-analyzer-plugin");
7
9
  const flowr_analyzer_loading_order_context_1 = require("./flowr-analyzer-loading-order-context");
10
+ const arrays_1 = require("../../util/collections/arrays");
11
+ const retriever_1 = require("../../r-bridge/retriever");
12
+ const config_1 = require("../../config");
13
+ const flowr_file_1 = require("./flowr-file");
8
14
  /**
9
15
  * This summarizes the other context layers used by the {@link FlowrAnalyzer}.
10
16
  * Have a look at the attributes and layers listed below (e.g., {@link files} and {@link deps})
@@ -20,7 +26,9 @@ const flowr_analyzer_loading_order_context_1 = require("./flowr-analyzer-loading
20
26
  class FlowrAnalyzerContext {
21
27
  files;
22
28
  deps;
23
- constructor(plugins) {
29
+ config;
30
+ constructor(config, plugins) {
31
+ this.config = config;
24
32
  const loadingOrder = new flowr_analyzer_loading_order_context_1.FlowrAnalyzerLoadingOrderContext(this, plugins.get(flowr_analyzer_plugin_1.PluginType.LoadingOrder));
25
33
  this.files = new flowr_analyzer_files_context_1.FlowrAnalyzerFilesContext(loadingOrder, (plugins.get(flowr_analyzer_plugin_1.PluginType.ProjectDiscovery) ?? []), (plugins.get(flowr_analyzer_plugin_1.PluginType.FileLoad) ?? []));
26
34
  this.deps = new flowr_analyzer_dependencies_context_1.FlowrAnalyzerDependenciesContext(this, (plugins.get(flowr_analyzer_plugin_1.PluginType.DependencyIdentification) ?? []));
@@ -29,9 +37,11 @@ class FlowrAnalyzerContext {
29
37
  addRequests(requests) {
30
38
  this.files.addRequests(requests);
31
39
  }
32
- /** delegate request addition */
33
- addRequest(request) {
34
- this.files.addRequest(request);
40
+ addFile(f) {
41
+ this.files.addFile(f);
42
+ }
43
+ addFiles(f) {
44
+ this.files.addFiles(f);
35
45
  }
36
46
  /** this conducts all the step that can be done before the main analysis run */
37
47
  resolvePreAnalysis() {
@@ -55,4 +65,38 @@ class FlowrAnalyzerContext {
55
65
  }
56
66
  }
57
67
  exports.FlowrAnalyzerContext = FlowrAnalyzerContext;
68
+ /**
69
+ * Lifting {@link requestFromInput} to create a full {@link FlowrAnalyzerContext} from input requests.
70
+ * Please use this only for a "quick" setup, or to have compatibility with the pre-project flowR era.
71
+ * Otherwise, refer to a {@link FlowrAnalyzerBuilder} to create a fully customized {@link FlowrAnalyzer} instance.
72
+ * @see {@link requestFromInput} - for details on how inputs are processed into requests.
73
+ * @see {@link contextFromSources} - to create a context from source code strings directly.
74
+ */
75
+ function contextFromInput(input, config = config_1.defaultConfigOptions, plugins) {
76
+ const context = new FlowrAnalyzerContext(config, (0, arrays_1.arraysGroupBy)(plugins ?? [], (p) => p.type));
77
+ if (typeof input === 'string' || Array.isArray(input) && input.every(i => typeof i === 'string')) {
78
+ const requests = (0, retriever_1.requestFromInput)(input);
79
+ context.addRequests(Array.isArray(requests) ? requests : [requests]);
80
+ }
81
+ else {
82
+ const requests = Array.isArray(input) ? input : [input];
83
+ context.addRequests(requests);
84
+ }
85
+ return context;
86
+ }
87
+ /**
88
+ * Create a {@link FlowrAnalyzerContext} from a set of source code strings.
89
+ * @param sources - A record mapping file paths to their source code content.
90
+ * @param config - Configuration options for the analyzer.
91
+ * @param plugins - Optional plugins to extend the analyzer's functionality.
92
+ * @see {@link contextFromInput} - to create a context from input requests.
93
+ * @see {@link FlowrInlineTextFile} - to create inline text files for the sources.
94
+ */
95
+ function contextFromSources(sources, config = config_1.defaultConfigOptions, plugins) {
96
+ const context = new FlowrAnalyzerContext(config, (0, arrays_1.arraysGroupBy)(plugins ?? [], (p) => p.type));
97
+ for (const [p, c] of Object.entries(sources)) {
98
+ context.addFile(new flowr_file_1.FlowrInlineTextFile(p, c));
99
+ }
100
+ return context;
101
+ }
58
102
  //# sourceMappingURL=flowr-analyzer-context.js.map
@@ -1,9 +1,9 @@
1
1
  import { AbstractFlowrAnalyzerContext } from './abstract-flowr-analyzer-context';
2
- import { type RParseRequest, type RParseRequestFromFile } from '../../r-bridge/retriever';
2
+ import type { RParseRequestFromText, RParseRequest, RParseRequestFromFile } from '../../r-bridge/retriever';
3
3
  import type { FlowrAnalyzerLoadingOrderContext, ReadOnlyFlowrAnalyzerLoadingOrderContext } from './flowr-analyzer-loading-order-context';
4
4
  import { FlowrAnalyzerProjectDiscoveryPlugin } from '../plugins/project-discovery/flowr-analyzer-project-discovery-plugin';
5
5
  import { FlowrAnalyzerFilePlugin } from '../plugins/file-plugins/flowr-analyzer-file-plugin';
6
- import { type FlowrFile, type FlowrFileProvider, SpecialFileRole } from './flowr-file';
6
+ import { FlowrFile, type FlowrFileProvider, FileRole } from './flowr-file';
7
7
  import type { FlowrDescriptionFile } from '../plugins/file-plugins/flowr-description-file';
8
8
  /**
9
9
  * This is a request to process a folder as a project, which will be expanded by the registered {@link FlowrAnalyzerProjectDiscoveryPlugin}s.
@@ -16,11 +16,12 @@ export interface RProjectAnalysisRequest {
16
16
  readonly content: string;
17
17
  }
18
18
  export type RAnalysisRequest = RParseRequest | RProjectAnalysisRequest;
19
- export type SpecialFiles = {
20
- [SpecialFileRole.Description]: FlowrDescriptionFile[];
21
- [SpecialFileRole.Namespace]: FlowrFileProvider[];
22
- [SpecialFileRole.Data]: FlowrFileProvider[];
23
- [SpecialFileRole.Other]: FlowrFileProvider[];
19
+ export type RoleBasedFiles = {
20
+ [FileRole.Description]: FlowrDescriptionFile[];
21
+ [FileRole.Namespace]: FlowrFileProvider[];
22
+ [FileRole.Source]: FlowrFileProvider[];
23
+ [FileRole.Data]: FlowrFileProvider[];
24
+ [FileRole.Other]: FlowrFileProvider[];
24
25
  };
25
26
  /**
26
27
  * This is the read-only interface for the files context, which is used to manage all files known to the {@link FlowrAnalyzer}.
@@ -43,7 +44,37 @@ export interface ReadOnlyFlowrAnalyzerFilesContext {
43
44
  * getFilesByRole(SpecialFileRole.Description)
44
45
  * ```
45
46
  */
46
- getFilesByRole<Role extends SpecialFileRole>(role: Role): SpecialFiles[Role];
47
+ getFilesByRole<Role extends FileRole>(role: Role): RoleBasedFiles[Role];
48
+ /**
49
+ * Check if the context has a file with the given path.
50
+ * Please note, that this may also check the file system, depending on the configuration
51
+ * (see {@link FlowrConfigOptions.project.resolveUnknownPathsOnDisk}).
52
+ * @param path - The path to the file.
53
+ *
54
+ * If you do not know the exact path or, e.g., casing of the file, use {@link exists} instead.
55
+ */
56
+ hasFile(path: string): boolean;
57
+ /**
58
+ * Check if a file exists at the given path, optionally ignoring case.
59
+ * @param path - The path to the file.
60
+ * @param ignoreCase - Whether to ignore case when checking for the file.
61
+ *
62
+ * Please note that this method checks the file system based on the configuration (see {@link FlowrConfigOptions.project.resolveUnknownPathsOnDisk}).
63
+ * @returns The actual path of the file if it exists, otherwise `undefined`.
64
+ */
65
+ exists(path: string, ignoreCase: boolean): string | undefined;
66
+ /**
67
+ * Until parsers support multiple request types from the virtual context system,
68
+ * we resolve their contents.
69
+ */
70
+ resolveRequest(r: RParseRequest): {
71
+ r: RParseRequestFromText;
72
+ path?: string;
73
+ };
74
+ /**
75
+ * Get all files that have been considered during dataflow analysis.
76
+ */
77
+ consideredFilesList(): readonly string[];
47
78
  }
48
79
  /**
49
80
  * This is the analyzer file context to be modified by all plugins that affect the files.
@@ -54,10 +85,21 @@ export declare class FlowrAnalyzerFilesContext extends AbstractFlowrAnalyzerCont
54
85
  readonly name = "flowr-analyzer-files-context";
55
86
  readonly loadingOrder: FlowrAnalyzerLoadingOrderContext;
56
87
  private files;
88
+ private inlineFiles;
57
89
  private readonly fileLoaders;
58
- private specialFiles;
90
+ /** these are all the paths of files that have been considered by the dataflow graph (even if not added) */
91
+ private readonly consideredFiles;
92
+ private byRole;
59
93
  constructor(loadingOrder: FlowrAnalyzerLoadingOrderContext, plugins: readonly FlowrAnalyzerProjectDiscoveryPlugin[], fileLoaders: readonly FlowrAnalyzerFilePlugin[]);
60
94
  reset(): void;
95
+ /**
96
+ * Record that a file has been considered during dataflow analysis.
97
+ */
98
+ addConsideredFile(path: string): void;
99
+ /**
100
+ * Get all files that have been considered during dataflow analysis.
101
+ */
102
+ consideredFilesList(): readonly string[];
61
103
  /**
62
104
  * Add multiple requests to the context. This is just a convenience method that calls {@link addRequest} for each request.
63
105
  */
@@ -65,21 +107,29 @@ export declare class FlowrAnalyzerFilesContext extends AbstractFlowrAnalyzerCont
65
107
  /**
66
108
  * Add a request to the context. If the request is of type `project`, it will be expanded using the registered {@link FlowrAnalyzerProjectDiscoveryPlugin}s.
67
109
  */
68
- addRequest(request: RAnalysisRequest): void;
110
+ private addRequest;
69
111
  /**
70
112
  * Add multiple files to the context. This is just a convenience method that calls {@link addFile} for each file.
71
113
  */
72
- addFiles(...files: (string | FlowrFileProvider<string> | RParseRequestFromFile)[]): void;
114
+ addFiles(files: (string | FlowrFileProvider | RParseRequestFromFile)[]): void;
73
115
  /**
74
116
  * Add a file to the context. If the file has a special role, it will be added to the corresponding list of special files.
75
117
  * This method also applies any registered {@link FlowrAnalyzerFilePlugin}s to the file before adding it to the context.
76
118
  */
77
- addFile(file: string | FlowrFileProvider<string> | RParseRequestFromFile, role?: SpecialFileRole): void;
119
+ addFile(file: string | FlowrFileProvider | RParseRequestFromFile, role?: FileRole): FlowrFileProvider<{
120
+ toString(): string;
121
+ }>;
122
+ hasFile(path: string): boolean;
123
+ exists(p: string, ignoreCase: boolean): string | undefined;
78
124
  private fileLoadPlugins;
125
+ resolveRequest(r: RParseRequest): {
126
+ r: RParseRequestFromText;
127
+ path?: string;
128
+ };
79
129
  /**
80
130
  * Get all requests that have been added to this context.
81
131
  * This is a convenience method that calls {@link FlowrAnalyzerLoadingOrderContext.getLoadingOrder}.
82
132
  */
83
133
  computeLoadingOrder(): readonly RParseRequest[];
84
- getFilesByRole<Role extends SpecialFileRole>(role: Role): SpecialFiles[Role];
134
+ getFilesByRole<Role extends FileRole>(role: Role): RoleBasedFiles[Role];
85
135
  }
@@ -1,4 +1,7 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.FlowrAnalyzerFilesContext = void 0;
4
7
  const abstract_flowr_analyzer_context_1 = require("./abstract-flowr-analyzer-context");
@@ -8,23 +11,19 @@ const flowr_analyzer_project_discovery_plugin_1 = require("../plugins/project-di
8
11
  const flowr_analyzer_file_plugin_1 = require("../plugins/file-plugins/flowr-analyzer-file-plugin");
9
12
  const flowr_file_1 = require("./flowr-file");
10
13
  const log_1 = require("../../util/log");
14
+ const fs_1 = __importDefault(require("fs"));
15
+ const path_1 = __importDefault(require("path"));
11
16
  const fileLog = log_1.log.getSubLogger({ name: 'flowr-analyzer-files-context' });
12
- function obtainFileAndPath(file, role) {
13
- let f;
14
- let p;
17
+ function wrapFile(file, role) {
15
18
  if (typeof file === 'string') {
16
- f = new flowr_file_1.FlowrTextFile(file, role);
17
- p = file;
19
+ return new flowr_file_1.FlowrTextFile(file, role);
18
20
  }
19
21
  else if ('request' in file) {
20
- f = file;
21
- p = file.content;
22
+ return flowr_file_1.FlowrFile.fromRequest(file);
22
23
  }
23
24
  else {
24
- f = file;
25
- p = file.path().toString();
25
+ return file;
26
26
  }
27
- return { f, p };
28
27
  }
29
28
  /**
30
29
  * This is the analyzer file context to be modified by all plugins that affect the files.
@@ -34,15 +33,19 @@ function obtainFileAndPath(file, role) {
34
33
  class FlowrAnalyzerFilesContext extends abstract_flowr_analyzer_context_1.AbstractFlowrAnalyzerContext {
35
34
  name = 'flowr-analyzer-files-context';
36
35
  loadingOrder;
37
- /* all project files etc., this contains *all* files, loading orders etc. are to be handled by plugins */
36
+ /* all project files etc., this contains *all* (non-inline) files, loading orders etc. are to be handled by plugins */
38
37
  files = new Map();
38
+ inlineFiles = [];
39
39
  fileLoaders;
40
+ /** these are all the paths of files that have been considered by the dataflow graph (even if not added) */
41
+ consideredFiles = [];
40
42
  /* files that are part of the analysis, e.g. source files */
41
- specialFiles = {
42
- [flowr_file_1.SpecialFileRole.Description]: [],
43
- [flowr_file_1.SpecialFileRole.Namespace]: [],
44
- [flowr_file_1.SpecialFileRole.Data]: [],
45
- [flowr_file_1.SpecialFileRole.Other]: []
43
+ byRole = {
44
+ [flowr_file_1.FileRole.Description]: [],
45
+ [flowr_file_1.FileRole.Namespace]: [],
46
+ [flowr_file_1.FileRole.Source]: [],
47
+ [flowr_file_1.FileRole.Data]: [],
48
+ [flowr_file_1.FileRole.Other]: []
46
49
  };
47
50
  constructor(loadingOrder, plugins, fileLoaders) {
48
51
  super(loadingOrder.getAttachedContext(), flowr_analyzer_project_discovery_plugin_1.FlowrAnalyzerProjectDiscoveryPlugin.defaultPlugin(), plugins);
@@ -53,6 +56,18 @@ class FlowrAnalyzerFilesContext extends abstract_flowr_analyzer_context_1.Abstra
53
56
  this.loadingOrder.reset();
54
57
  this.files = new Map();
55
58
  }
59
+ /**
60
+ * Record that a file has been considered during dataflow analysis.
61
+ */
62
+ addConsideredFile(path) {
63
+ this.consideredFiles.push(path);
64
+ }
65
+ /**
66
+ * Get all files that have been considered during dataflow analysis.
67
+ */
68
+ consideredFilesList() {
69
+ return this.consideredFiles;
70
+ }
56
71
  /**
57
72
  * Add multiple requests to the context. This is just a convenience method that calls {@link addRequest} for each request.
58
73
  */
@@ -67,9 +82,6 @@ class FlowrAnalyzerFilesContext extends abstract_flowr_analyzer_context_1.Abstra
67
82
  addRequest(request) {
68
83
  if (request.request !== 'project') {
69
84
  this.loadingOrder.addRequest(request);
70
- if (request.request === 'file') {
71
- this.files.set(request.content, request);
72
- }
73
85
  return;
74
86
  }
75
87
  const expandedRequests = this.applyPlugins(request).flat();
@@ -85,7 +97,7 @@ class FlowrAnalyzerFilesContext extends abstract_flowr_analyzer_context_1.Abstra
85
97
  /**
86
98
  * Add multiple files to the context. This is just a convenience method that calls {@link addFile} for each file.
87
99
  */
88
- addFiles(...files) {
100
+ addFiles(files) {
89
101
  for (const file of files) {
90
102
  this.addFile(file);
91
103
  }
@@ -95,29 +107,88 @@ class FlowrAnalyzerFilesContext extends abstract_flowr_analyzer_context_1.Abstra
95
107
  * This method also applies any registered {@link FlowrAnalyzerFilePlugin}s to the file before adding it to the context.
96
108
  */
97
109
  addFile(file, role) {
98
- const { f, p } = obtainFileAndPath(file, role);
99
- const { f: fA, p: pA } = this.fileLoadPlugins(f, p);
100
- const exist = this.files.get(pA);
101
- (0, assert_1.guard)(exist === undefined || exist === fA, `File ${pA} already added to the context.`);
102
- this.files.set(pA, fA);
103
- if (!(0, retriever_1.isParseRequest)(fA) && fA.role) {
104
- this.specialFiles[fA.role].push(fA);
110
+ const f = this.fileLoadPlugins(wrapFile(file, role));
111
+ if (f.path() === flowr_file_1.FlowrFile.INLINE_PATH) {
112
+ this.inlineFiles.push(f);
113
+ }
114
+ else {
115
+ const exist = this.files.get(f.path());
116
+ (0, assert_1.guard)(exist === undefined || exist === f, `File ${f.path()} already added to the context.`);
117
+ this.files.set(f.path(), f);
118
+ }
119
+ if (f.role) {
120
+ this.byRole[f.role].push(f);
121
+ }
122
+ return f;
123
+ }
124
+ hasFile(path) {
125
+ return this.files.has(path)
126
+ || (this.ctx.config.project.resolveUnknownPathsOnDisk && fs_1.default.existsSync(path));
127
+ }
128
+ exists(p, ignoreCase) {
129
+ try {
130
+ if (!ignoreCase) {
131
+ return this.hasFile(p) ? p : undefined;
132
+ }
133
+ // walk the directory and find the first match
134
+ const dir = path_1.default.dirname(p);
135
+ const file = path_1.default.basename(p);
136
+ // try to find in local known files first
137
+ const localFound = Array.from(this.files.keys()).find(f => {
138
+ return path_1.default.dirname(f) === dir && path_1.default.basename(f).toLowerCase() === file.toLowerCase();
139
+ });
140
+ if (localFound) {
141
+ return localFound;
142
+ }
143
+ if (this.ctx.config.project.resolveUnknownPathsOnDisk) {
144
+ const files = fs_1.default.readdirSync(dir);
145
+ const found = files.find(f => f.toLowerCase() === file.toLowerCase());
146
+ return found ? path_1.default.join(dir, found) : undefined;
147
+ }
148
+ return undefined;
149
+ }
150
+ catch {
151
+ return undefined;
105
152
  }
106
153
  }
107
- fileLoadPlugins(f, p) {
154
+ fileLoadPlugins(f) {
108
155
  let fFinal = f;
109
- let pFinal = p;
110
- if (!(0, retriever_1.isParseRequest)(f)) { // we have to change the types when we integrate the adapters
111
- for (const loader of this.fileLoaders) {
112
- if (loader.applies(p)) {
113
- fileLog.debug(`Applying file loader ${loader.name} to file ${p}`);
114
- fFinal = loader.processor(this.ctx, f);
115
- pFinal = f.path().toString();
116
- break;
117
- }
156
+ for (const loader of this.fileLoaders) {
157
+ if (loader.applies(f.path())) {
158
+ fileLog.debug(`Applying file loader ${loader.name} to file ${f.path()}`);
159
+ fFinal = loader.processor(this.ctx, f);
160
+ break;
161
+ }
162
+ }
163
+ return fFinal;
164
+ }
165
+ resolveRequest(r) {
166
+ if (r.request === 'text') {
167
+ return { r };
168
+ }
169
+ const file = this.files.get(r.content);
170
+ if (file === undefined && this.ctx.config.project.resolveUnknownPathsOnDisk) {
171
+ fileLog.debug(`File ${r.content} not found in context, trying to load from disk.`);
172
+ if (fs_1.default.existsSync(r.content)) {
173
+ const loadedFile = this.addFile(new flowr_file_1.FlowrTextFile(r.content));
174
+ return {
175
+ r: {
176
+ request: 'text',
177
+ content: loadedFile.content().toString(),
178
+ },
179
+ path: loadedFile.path()
180
+ };
118
181
  }
119
182
  }
120
- return { f: fFinal, p: pFinal };
183
+ (0, assert_1.guard)(file !== undefined && file !== null, `File ${r.content} not found in context.`);
184
+ const content = file.content();
185
+ return {
186
+ r: {
187
+ request: 'text',
188
+ content: typeof content === 'string' ? content : '',
189
+ },
190
+ path: file.path()
191
+ };
121
192
  }
122
193
  /**
123
194
  * Get all requests that have been added to this context.
@@ -127,7 +198,7 @@ class FlowrAnalyzerFilesContext extends abstract_flowr_analyzer_context_1.Abstra
127
198
  return this.loadingOrder.getLoadingOrder();
128
199
  }
129
200
  getFilesByRole(role) {
130
- return this.specialFiles[role];
201
+ return this.byRole[role];
131
202
  }
132
203
  }
133
204
  exports.FlowrAnalyzerFilesContext = FlowrAnalyzerFilesContext;
@@ -1,4 +1,5 @@
1
1
  import type { PathLike } from 'fs';
2
+ import type { RParseRequest } from '../../r-bridge/retriever';
2
3
  /**
3
4
  * Just a readable alias for file paths, mostly for documentation purposes.
4
5
  * We separate {@link PathLike} types from string paths that are used for project paths.
@@ -9,16 +10,26 @@ export type FilePath = string;
9
10
  * This list may be extended in the future and reflects files that the {@link FlowrAnalyzer} can do something interesting with.
10
11
  * If you add an interesting file that is only part of your plugin infrastructure, please use the `other` role.
11
12
  */
12
- export declare enum SpecialFileRole {
13
+ export declare enum FileRole {
13
14
  /** The `DESCRIPTION` file in R packages, this is the only currently supported special file. */
14
15
  Description = "description",
15
16
  /** The `NAMESPACE` file in R packages, currently not specially supported. */
16
17
  Namespace = "namespace",
17
18
  /** Data files, e.g., `R/sysdata.rda`, currently not specially supported. */
18
19
  Data = "data",
20
+ /**
21
+ * Catch-all for any file that provides usable R source code to incorporate into the analysis.
22
+ * Please note, that the loading order/inclusion and even potential relevance of these source files
23
+ * is determined by the loading order plugins (cf. {@link PluginType.LoadingOrder})
24
+ * in the {@link FlowrAnalyzerLoadingOrderContext}.
25
+ */
26
+ Source = "source",
19
27
  /** Other special files that are not specifically supported by flowR but may be interesting for some analyses. */
20
28
  Other = "other"
21
29
  }
30
+ export type StringableContent = {
31
+ toString(): string;
32
+ };
22
33
  /**
23
34
  * This is the basic interface for all files known to the FlowrAnalyzer.
24
35
  * You can implement this interface to provide custom file loading mechanisms.
@@ -30,19 +41,23 @@ export declare enum SpecialFileRole {
30
41
  * If you want to pass in inline text files, see {@link FlowrInlineTextFile}.
31
42
  * @typeParam Content - The type of the content returned by the `content()` method.
32
43
  */
33
- export interface FlowrFileProvider<Content = unknown> {
44
+ export interface FlowrFileProvider<Content extends {
45
+ toString(): string;
46
+ } = {
47
+ toString(): string;
48
+ }> {
34
49
  /**
35
50
  * The role of this file, if any, in general your file should _not_ decide for itself what role it has in the project context,
36
51
  * this is for the loaders plugins to decide (cf. {@link PluginType}) as they can, e.g., respect ignore files, updated mappings, etc.
37
52
  * However, they will 1) set this role as soon as they decide on it (using {@link assignRole}) and 2) try to respect an already assigned role (however, user configurations may override this).
38
53
  */
39
- role?: SpecialFileRole;
54
+ role?: FileRole;
40
55
  /**
41
56
  * The path to the file, this is used for identification and logging purposes.
42
57
  * If the file does not exist on disk, this can be a virtual path (e.g. for inline files).
43
58
  * Even though this is a getter, please make sure that the operation is cheap and deterministic (some decorators may overwrite the path, e.g., because they support other protocols).
44
59
  */
45
- path(): PathLike;
60
+ path(): string;
46
61
  /**
47
62
  * The content of the file, this may be cached by the implementation and does not have to be expensive.
48
63
  * You can used stream based implementations but right now there is no external, project-wide expressions of life cycles for files.
@@ -53,22 +68,29 @@ export interface FlowrFileProvider<Content = unknown> {
53
68
  * Assign a role to this file, this should be done by the loader plugins (cf. {@link PluginType}).
54
69
  * **Do not call this method yourself unless you are a file-loader plugin and/or really know what you are doing, this may break plugin assumptions!**
55
70
  */
56
- assignRole(role: SpecialFileRole): void;
71
+ assignRole(role: FileRole): void;
57
72
  }
58
73
  /**
59
74
  * A basic implementation of the {@link FlowrFileProvider} interface that caches the content after the first load (i.e., updates on disk are ignored).
60
75
  *
61
76
  * See {@link FlowrTextFile} for a text-file specific implementation and {@link FlowrInlineTextFile} for inline text files.
62
77
  */
63
- export declare abstract class FlowrFile<Content = unknown> implements FlowrFileProvider<Content> {
78
+ export declare abstract class FlowrFile<Content extends StringableContent = StringableContent> implements FlowrFileProvider<Content> {
64
79
  private contentCache;
65
80
  protected filePath: PathLike;
66
- readonly role?: SpecialFileRole;
67
- constructor(filePath: PathLike, role?: SpecialFileRole);
68
- path(): PathLike;
81
+ readonly role?: FileRole;
82
+ static readonly INLINE_PATH = "@inline";
83
+ constructor(filePath: PathLike, role?: FileRole);
84
+ path(): string;
69
85
  content(): Content;
70
86
  protected abstract loadContent(): Content;
71
- assignRole(role: SpecialFileRole): void;
87
+ assignRole(role: FileRole): void;
88
+ /**
89
+ * Creates a {@link FlowrFile} from a given {@link RParseRequest}.
90
+ * @see {@link FlowrTextFile}
91
+ * @see {@link FlowrInlineTextFile}
92
+ */
93
+ static fromRequest(request: RParseRequest): FlowrFile<string>;
72
94
  }
73
95
  /**
74
96
  * A basic implementation of the {@link FlowrFileProvider} interface for text files that caches the content after the first load (i.e., updates on disk are ignored).
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.FlowrInlineTextFile = exports.FlowrTextFile = exports.FlowrFile = exports.SpecialFileRole = void 0;
6
+ exports.FlowrInlineTextFile = exports.FlowrTextFile = exports.FlowrFile = exports.FileRole = void 0;
7
7
  const fs_1 = __importDefault(require("fs"));
8
8
  const assert_1 = require("../../util/assert");
9
9
  /**
@@ -11,17 +11,24 @@ const assert_1 = require("../../util/assert");
11
11
  * This list may be extended in the future and reflects files that the {@link FlowrAnalyzer} can do something interesting with.
12
12
  * If you add an interesting file that is only part of your plugin infrastructure, please use the `other` role.
13
13
  */
14
- var SpecialFileRole;
15
- (function (SpecialFileRole) {
14
+ var FileRole;
15
+ (function (FileRole) {
16
16
  /** The `DESCRIPTION` file in R packages, this is the only currently supported special file. */
17
- SpecialFileRole["Description"] = "description";
17
+ FileRole["Description"] = "description";
18
18
  /** The `NAMESPACE` file in R packages, currently not specially supported. */
19
- SpecialFileRole["Namespace"] = "namespace";
19
+ FileRole["Namespace"] = "namespace";
20
20
  /** Data files, e.g., `R/sysdata.rda`, currently not specially supported. */
21
- SpecialFileRole["Data"] = "data";
21
+ FileRole["Data"] = "data";
22
+ /**
23
+ * Catch-all for any file that provides usable R source code to incorporate into the analysis.
24
+ * Please note, that the loading order/inclusion and even potential relevance of these source files
25
+ * is determined by the loading order plugins (cf. {@link PluginType.LoadingOrder})
26
+ * in the {@link FlowrAnalyzerLoadingOrderContext}.
27
+ */
28
+ FileRole["Source"] = "source";
22
29
  /** Other special files that are not specifically supported by flowR but may be interesting for some analyses. */
23
- SpecialFileRole["Other"] = "other";
24
- })(SpecialFileRole || (exports.SpecialFileRole = SpecialFileRole = {}));
30
+ FileRole["Other"] = "other";
31
+ })(FileRole || (exports.FileRole = FileRole = {}));
25
32
  /**
26
33
  * A basic implementation of the {@link FlowrFileProvider} interface that caches the content after the first load (i.e., updates on disk are ignored).
27
34
  *
@@ -31,12 +38,13 @@ class FlowrFile {
31
38
  contentCache;
32
39
  filePath;
33
40
  role;
41
+ static INLINE_PATH = '@inline';
34
42
  constructor(filePath, role) {
35
43
  this.filePath = filePath;
36
44
  this.role = role;
37
45
  }
38
46
  path() {
39
- return this.filePath;
47
+ return this.filePath.toString();
40
48
  }
41
49
  content() {
42
50
  if (this.contentCache === undefined) {
@@ -48,6 +56,19 @@ class FlowrFile {
48
56
  (0, assert_1.guard)(this.role === undefined || this.role === role, `File ${this.filePath.toString()} already has a role assigned: ${this.role}`);
49
57
  this.role = role;
50
58
  }
59
+ /**
60
+ * Creates a {@link FlowrFile} from a given {@link RParseRequest}.
61
+ * @see {@link FlowrTextFile}
62
+ * @see {@link FlowrInlineTextFile}
63
+ */
64
+ static fromRequest(request) {
65
+ if (request.request === 'file') {
66
+ return new FlowrTextFile(request.content);
67
+ }
68
+ else {
69
+ return new FlowrInlineTextFile(FlowrFile.INLINE_PATH, request.content);
70
+ }
71
+ }
51
72
  }
52
73
  exports.FlowrFile = FlowrFile;
53
74
  /**