@eagleoutice/flowr 2.6.2 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. package/README.md +36 -34
  2. package/abstract-interpretation/data-frame/absint-visitor.d.ts +1 -1
  3. package/abstract-interpretation/data-frame/absint-visitor.js +6 -6
  4. package/abstract-interpretation/data-frame/dataframe-domain.d.ts +4 -7
  5. package/abstract-interpretation/data-frame/dataframe-domain.js +5 -11
  6. package/abstract-interpretation/data-frame/mappers/access-mapper.d.ts +3 -1
  7. package/abstract-interpretation/data-frame/mappers/access-mapper.js +3 -2
  8. package/abstract-interpretation/data-frame/mappers/arguments.js +2 -2
  9. package/abstract-interpretation/data-frame/mappers/assignment-mapper.d.ts +3 -1
  10. package/abstract-interpretation/data-frame/mappers/assignment-mapper.js +3 -2
  11. package/abstract-interpretation/data-frame/mappers/function-mapper.d.ts +7 -7
  12. package/abstract-interpretation/data-frame/mappers/function-mapper.js +28 -24
  13. package/abstract-interpretation/data-frame/mappers/replacement-mapper.d.ts +3 -1
  14. package/abstract-interpretation/data-frame/mappers/replacement-mapper.js +3 -2
  15. package/abstract-interpretation/data-frame/semantics.js +54 -41
  16. package/abstract-interpretation/data-frame/shape-inference.d.ts +3 -3
  17. package/abstract-interpretation/data-frame/shape-inference.js +3 -3
  18. package/abstract-interpretation/domains/abstract-domain.d.ts +1 -0
  19. package/abstract-interpretation/domains/abstract-domain.js +3 -2
  20. package/abstract-interpretation/domains/bounded-set-domain.js +1 -1
  21. package/abstract-interpretation/domains/interval-domain.d.ts +2 -2
  22. package/abstract-interpretation/domains/interval-domain.js +3 -6
  23. package/abstract-interpretation/domains/lattice.d.ts +2 -0
  24. package/abstract-interpretation/domains/lattice.js +3 -1
  25. package/abstract-interpretation/domains/positive-interval-domain.d.ts +1 -1
  26. package/abstract-interpretation/domains/positive-interval-domain.js +1 -1
  27. package/abstract-interpretation/domains/satisfiable-domain.d.ts +2 -2
  28. package/abstract-interpretation/domains/satisfiable-domain.js +2 -2
  29. package/abstract-interpretation/domains/set-range-domain.d.ts +98 -0
  30. package/abstract-interpretation/domains/set-range-domain.js +400 -0
  31. package/abstract-interpretation/domains/set-upper-bound-domain.js +2 -2
  32. package/abstract-interpretation/domains/singleton-domain.js +2 -2
  33. package/abstract-interpretation/normalized-ast-fold.d.ts +1 -1
  34. package/benchmark/slicer.d.ts +3 -1
  35. package/benchmark/slicer.js +50 -27
  36. package/benchmark/stats/print.js +8 -5
  37. package/benchmark/stats/stats.d.ts +3 -2
  38. package/benchmark/summarizer/data.d.ts +11 -8
  39. package/benchmark/summarizer/first-phase/process.js +12 -9
  40. package/benchmark/summarizer/second-phase/graph.d.ts +3 -1
  41. package/benchmark/summarizer/second-phase/graph.js +3 -1
  42. package/benchmark/summarizer/second-phase/process.js +24 -18
  43. package/cli/export-quads-app.js +1 -1
  44. package/cli/repl/commands/repl-dataflow.js +2 -1
  45. package/cli/repl/commands/repl-parse.js +16 -4
  46. package/cli/repl/commands/repl-query.js +1 -1
  47. package/cli/repl/core.js +16 -13
  48. package/cli/repl/server/connection.js +2 -1
  49. package/cli/script-core/statistics-helper-core.js +2 -1
  50. package/cli/slicer-app.js +3 -4
  51. package/cli/wiki.d.ts +4 -0
  52. package/cli/wiki.js +165 -0
  53. package/config.d.ts +4 -0
  54. package/config.js +6 -0
  55. package/control-flow/cfg-dead-code.js +14 -3
  56. package/control-flow/cfg-simplification.d.ts +5 -2
  57. package/control-flow/cfg-simplification.js +3 -0
  58. package/control-flow/extract-cfg.d.ts +9 -3
  59. package/control-flow/extract-cfg.js +44 -4
  60. package/control-flow/semantic-cfg-guided-visitor.d.ts +2 -2
  61. package/control-flow/simple-visitor.js +2 -2
  62. package/control-flow/useless-loop.d.ts +3 -3
  63. package/control-flow/useless-loop.js +16 -5
  64. package/core/pipeline-executor.d.ts +3 -6
  65. package/core/pipeline-executor.js +4 -7
  66. package/core/print/normalize-printer.d.ts +1 -1
  67. package/core/print/normalize-printer.js +2 -2
  68. package/core/steps/all/core/00-parse.d.ts +1 -1
  69. package/core/steps/all/core/00-parse.js +1 -1
  70. package/core/steps/all/core/10-normalize.d.ts +3 -9
  71. package/core/steps/all/core/10-normalize.js +1 -16
  72. package/core/steps/all/core/11-normalize-tree-sitter.d.ts +2 -3
  73. package/core/steps/all/core/11-normalize-tree-sitter.js +2 -3
  74. package/core/steps/all/core/20-dataflow.d.ts +3 -4
  75. package/core/steps/all/core/20-dataflow.js +2 -2
  76. package/core/steps/all/static-slicing/00-slice.d.ts +4 -2
  77. package/core/steps/all/static-slicing/00-slice.js +3 -2
  78. package/core/steps/all/static-slicing/10-reconstruct.d.ts +8 -0
  79. package/core/steps/all/static-slicing/10-reconstruct.js +4 -1
  80. package/core/steps/pipeline/default-pipelines.d.ts +94 -95
  81. package/core/steps/pipeline/default-pipelines.js +8 -8
  82. package/dataflow/cluster.js +2 -2
  83. package/dataflow/environments/append.d.ts +5 -0
  84. package/dataflow/environments/append.js +6 -20
  85. package/dataflow/environments/built-in.d.ts +2 -1
  86. package/dataflow/environments/clone.d.ts +1 -2
  87. package/dataflow/environments/clone.js +3 -17
  88. package/dataflow/environments/define.d.ts +7 -3
  89. package/dataflow/environments/define.js +9 -56
  90. package/dataflow/environments/diff.js +3 -3
  91. package/dataflow/environments/environment.d.ts +48 -28
  92. package/dataflow/environments/environment.js +187 -62
  93. package/dataflow/environments/overwrite.d.ts +1 -5
  94. package/dataflow/environments/overwrite.js +2 -61
  95. package/dataflow/environments/reference-to-maybe.d.ts +13 -0
  96. package/dataflow/environments/reference-to-maybe.js +54 -0
  97. package/dataflow/environments/resolve-by-name.d.ts +6 -1
  98. package/dataflow/environments/resolve-by-name.js +56 -4
  99. package/dataflow/environments/scoping.d.ts +8 -4
  100. package/dataflow/environments/scoping.js +13 -9
  101. package/dataflow/eval/resolve/alias-tracking.d.ts +10 -4
  102. package/dataflow/eval/resolve/alias-tracking.js +15 -13
  103. package/dataflow/eval/resolve/resolve-argument.d.ts +2 -1
  104. package/dataflow/eval/resolve/resolve-argument.js +10 -10
  105. package/dataflow/eval/resolve/resolve.d.ts +13 -11
  106. package/dataflow/eval/resolve/resolve.js +16 -15
  107. package/dataflow/eval/values/string/string-constants.d.ts +9 -3
  108. package/dataflow/eval/values/string/string-constants.js +9 -3
  109. package/dataflow/extractor.d.ts +2 -3
  110. package/dataflow/extractor.js +25 -28
  111. package/dataflow/fn/higher-order-function.d.ts +2 -1
  112. package/dataflow/fn/higher-order-function.js +4 -4
  113. package/dataflow/graph/dataflowgraph-builder.d.ts +9 -5
  114. package/dataflow/graph/dataflowgraph-builder.js +21 -11
  115. package/dataflow/graph/diff-dataflow-graph.js +2 -2
  116. package/dataflow/graph/graph.d.ts +13 -11
  117. package/dataflow/graph/graph.js +40 -24
  118. package/dataflow/graph/invert-dfg.d.ts +3 -2
  119. package/dataflow/graph/invert-dfg.js +3 -3
  120. package/dataflow/graph/resolve-graph.d.ts +2 -1
  121. package/dataflow/graph/resolve-graph.js +2 -2
  122. package/dataflow/graph/unknown-replacement.d.ts +4 -2
  123. package/dataflow/graph/unknown-replacement.js +4 -2
  124. package/dataflow/graph/vertex.d.ts +3 -3
  125. package/dataflow/graph/vertex.js +3 -3
  126. package/dataflow/info.d.ts +8 -1
  127. package/dataflow/info.js +21 -0
  128. package/dataflow/internal/linker.js +10 -11
  129. package/dataflow/internal/process/functions/call/argument/make-argument.d.ts +2 -2
  130. package/dataflow/internal/process/functions/call/argument/make-argument.js +2 -3
  131. package/dataflow/internal/process/functions/call/argument/unpack-argument.d.ts +7 -1
  132. package/dataflow/internal/process/functions/call/argument/unpack-argument.js +12 -3
  133. package/dataflow/internal/process/functions/call/built-in/built-in-access.d.ts +1 -1
  134. package/dataflow/internal/process/functions/call/built-in/built-in-access.js +7 -7
  135. package/dataflow/internal/process/functions/call/built-in/built-in-apply.js +2 -2
  136. package/dataflow/internal/process/functions/call/built-in/built-in-assignment.d.ts +3 -1
  137. package/dataflow/internal/process/functions/call/built-in/built-in-assignment.js +6 -6
  138. package/dataflow/internal/process/functions/call/built-in/built-in-eval.js +14 -14
  139. package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.js +10 -8
  140. package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.js +4 -4
  141. package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.d.ts +2 -1
  142. package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.js +10 -14
  143. package/dataflow/internal/process/functions/call/built-in/built-in-get.d.ts +1 -1
  144. package/dataflow/internal/process/functions/call/built-in/built-in-get.js +2 -2
  145. package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.d.ts +3 -1
  146. package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.js +8 -6
  147. package/dataflow/internal/process/functions/call/built-in/built-in-library.js +1 -1
  148. package/dataflow/internal/process/functions/call/built-in/built-in-list.js +2 -2
  149. package/dataflow/internal/process/functions/call/built-in/built-in-pipe.js +4 -4
  150. package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.d.ts +6 -1
  151. package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.js +7 -2
  152. package/dataflow/internal/process/functions/call/built-in/built-in-replacement.js +5 -5
  153. package/dataflow/internal/process/functions/call/built-in/built-in-rm.js +6 -4
  154. package/dataflow/internal/process/functions/call/built-in/built-in-source.d.ts +15 -10
  155. package/dataflow/internal/process/functions/call/built-in/built-in-source.js +78 -75
  156. package/dataflow/internal/process/functions/call/built-in/built-in-special-bin-op.d.ts +3 -1
  157. package/dataflow/internal/process/functions/call/built-in/built-in-special-bin-op.js +3 -1
  158. package/dataflow/internal/process/functions/call/built-in/built-in-vector.js +2 -2
  159. package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.js +5 -5
  160. package/dataflow/internal/process/functions/call/common.d.ts +1 -1
  161. package/dataflow/internal/process/functions/call/common.js +6 -7
  162. package/dataflow/internal/process/functions/call/default-call-handling.d.ts +3 -1
  163. package/dataflow/internal/process/functions/call/default-call-handling.js +3 -1
  164. package/dataflow/internal/process/functions/call/known-call-handling.js +4 -4
  165. package/dataflow/internal/process/functions/call/named-call-handling.js +4 -4
  166. package/dataflow/internal/process/functions/call/unnamed-call-handling.js +1 -1
  167. package/dataflow/internal/process/functions/process-argument.js +1 -1
  168. package/dataflow/internal/process/functions/process-parameter.js +4 -4
  169. package/dataflow/internal/process/process-symbol.js +1 -1
  170. package/dataflow/internal/process/process-value.d.ts +1 -1
  171. package/dataflow/internal/process/process-value.js +7 -7
  172. package/dataflow/origin/dfg-get-symbol-refs.d.ts +1 -1
  173. package/dataflow/origin/dfg-get-symbol-refs.js +1 -1
  174. package/dataflow/processor.d.ts +7 -16
  175. package/documentation/data/dfg/doc-data-dfg-util.d.ts +0 -2
  176. package/documentation/data/faq/faqs.js +27 -18
  177. package/documentation/data/faq/recommended-configs.d.ts +36 -0
  178. package/documentation/data/faq/recommended-configs.js +40 -0
  179. package/documentation/data/faq/wiki-faq-store.d.ts +1 -0
  180. package/documentation/data/faq/wiki-faq-store.js +10 -2
  181. package/documentation/data/server/doc-data-server-messages.js +1 -1
  182. package/documentation/doc-capabilities.d.ts +9 -0
  183. package/documentation/{print-capabilities-markdown.js → doc-capabilities.js} +18 -21
  184. package/documentation/doc-readme.d.ts +9 -0
  185. package/documentation/{print-readme.js → doc-readme.js} +31 -35
  186. package/documentation/doc-util/doc-benchmarks.d.ts +6 -4
  187. package/documentation/doc-util/doc-benchmarks.js +6 -4
  188. package/documentation/doc-util/doc-cfg.js +5 -8
  189. package/documentation/doc-util/doc-dfg.d.ts +7 -7
  190. package/documentation/doc-util/doc-dfg.js +15 -14
  191. package/documentation/doc-util/doc-escape.d.ts +6 -0
  192. package/documentation/doc-util/doc-escape.js +11 -0
  193. package/documentation/doc-util/doc-general.d.ts +22 -2
  194. package/documentation/doc-util/doc-general.js +22 -2
  195. package/documentation/doc-util/doc-normalized-ast.d.ts +10 -5
  196. package/documentation/doc-util/doc-normalized-ast.js +14 -10
  197. package/documentation/doc-util/doc-query.d.ts +12 -4
  198. package/documentation/doc-util/doc-query.js +18 -11
  199. package/documentation/doc-util/doc-search.d.ts +0 -30
  200. package/documentation/doc-util/doc-search.js +2 -73
  201. package/documentation/doc-util/doc-server-message.d.ts +5 -5
  202. package/documentation/doc-util/doc-server-message.js +4 -4
  203. package/documentation/doc-util/doc-types.d.ts +69 -32
  204. package/documentation/doc-util/doc-types.js +109 -62
  205. package/documentation/index.d.ts +9 -9
  206. package/documentation/index.js +9 -9
  207. package/documentation/issue-linting-rule.d.ts +9 -0
  208. package/documentation/{print-linter-issue.js → issue-linting-rule.js} +20 -23
  209. package/documentation/wiki-analyzer.d.ts +9 -0
  210. package/documentation/wiki-analyzer.js +425 -0
  211. package/documentation/wiki-cfg.d.ts +9 -0
  212. package/documentation/{print-cfg-wiki.js → wiki-cfg.js} +144 -160
  213. package/documentation/wiki-core.d.ts +14 -0
  214. package/documentation/{print-core-wiki.js → wiki-core.js} +164 -175
  215. package/documentation/wiki-dataflow-graph.d.ts +9 -0
  216. package/documentation/{print-dataflow-graph-wiki.js → wiki-dataflow-graph.js} +146 -177
  217. package/documentation/wiki-engine.d.ts +9 -0
  218. package/documentation/{print-engines-wiki.js → wiki-engine.js} +27 -42
  219. package/documentation/wiki-faq.d.ts +8 -0
  220. package/documentation/wiki-faq.js +21 -0
  221. package/documentation/wiki-interface.d.ts +9 -0
  222. package/documentation/{print-interface-wiki.js → wiki-interface.js} +59 -56
  223. package/documentation/wiki-linter.d.ts +9 -0
  224. package/documentation/{print-linter-wiki.js → wiki-linter.js} +52 -48
  225. package/documentation/wiki-linting-and-testing.d.ts +9 -0
  226. package/documentation/{print-linting-and-testing-wiki.js → wiki-linting-and-testing.js} +25 -32
  227. package/documentation/wiki-mk/doc-context.d.ts +186 -0
  228. package/documentation/wiki-mk/doc-context.js +84 -0
  229. package/documentation/wiki-mk/doc-maker.d.ts +95 -0
  230. package/documentation/wiki-mk/doc-maker.js +134 -0
  231. package/documentation/wiki-normalized-ast.d.ts +9 -0
  232. package/documentation/{print-normalized-ast-wiki.js → wiki-normalized-ast.js} +64 -47
  233. package/documentation/wiki-onboarding.d.ts +8 -0
  234. package/documentation/{print-onboarding-wiki.js → wiki-onboarding.js} +18 -15
  235. package/documentation/wiki-query.d.ts +9 -0
  236. package/documentation/{print-query-wiki.js → wiki-query.js} +62 -47
  237. package/documentation/wiki-search.d.ts +9 -0
  238. package/documentation/wiki-search.js +61 -0
  239. package/linter/linter-executor.js +3 -2
  240. package/linter/linter-format.d.ts +2 -2
  241. package/linter/linter-rules.d.ts +15 -19
  242. package/linter/rules/absolute-path.d.ts +1 -2
  243. package/linter/rules/absolute-path.js +5 -5
  244. package/linter/rules/dataframe-access-validation.d.ts +2 -2
  245. package/linter/rules/dataframe-access-validation.js +13 -9
  246. package/linter/rules/dead-code.d.ts +1 -1
  247. package/linter/rules/deprecated-functions.d.ts +1 -5
  248. package/linter/rules/file-path-validity.d.ts +1 -1
  249. package/linter/rules/file-path-validity.js +4 -4
  250. package/linter/rules/function-finder-util.d.ts +3 -7
  251. package/linter/rules/function-finder-util.js +1 -1
  252. package/linter/rules/naming-convention.d.ts +2 -2
  253. package/linter/rules/naming-convention.js +1 -1
  254. package/linter/rules/network-functions.d.ts +1 -1
  255. package/linter/rules/network-functions.js +1 -1
  256. package/linter/rules/seeded-randomness.d.ts +4 -3
  257. package/linter/rules/seeded-randomness.js +38 -18
  258. package/linter/rules/unused-definition.d.ts +1 -1
  259. package/linter/rules/useless-loop.d.ts +2 -2
  260. package/linter/rules/useless-loop.js +2 -2
  261. package/package.json +5 -17
  262. package/project/cache/flowr-analyzer-cache.d.ts +7 -10
  263. package/project/cache/flowr-analyzer-cache.js +17 -38
  264. package/project/cache/flowr-analyzer-controlflow-cache.d.ts +34 -0
  265. package/project/cache/flowr-analyzer-controlflow-cache.js +79 -0
  266. package/project/context/flowr-analyzer-context.d.ts +37 -5
  267. package/project/context/flowr-analyzer-context.js +51 -4
  268. package/project/context/flowr-analyzer-environment-context.d.ts +47 -0
  269. package/project/context/flowr-analyzer-environment-context.js +50 -0
  270. package/project/context/flowr-analyzer-files-context.d.ts +63 -13
  271. package/project/context/flowr-analyzer-files-context.js +110 -39
  272. package/project/context/flowr-file.d.ts +32 -10
  273. package/project/context/flowr-file.js +30 -9
  274. package/project/flowr-analyzer-builder.d.ts +22 -28
  275. package/project/flowr-analyzer-builder.js +32 -70
  276. package/project/flowr-analyzer.d.ts +55 -14
  277. package/project/flowr-analyzer.js +53 -8
  278. package/project/plugins/file-plugins/flowr-analyzer-description-file-plugin.d.ts +7 -1
  279. package/project/plugins/file-plugins/flowr-analyzer-description-file-plugin.js +13 -5
  280. package/project/plugins/file-plugins/flowr-analyzer-file-plugin.d.ts +3 -3
  281. package/project/plugins/file-plugins/flowr-analyzer-file-plugin.js +11 -5
  282. package/project/plugins/file-plugins/flowr-description-file.d.ts +3 -3
  283. package/project/plugins/file-plugins/notebooks/flowr-analyzer-jupyter-file-plugin.d.ts +22 -0
  284. package/project/plugins/file-plugins/notebooks/flowr-analyzer-jupyter-file-plugin.js +33 -0
  285. package/project/plugins/file-plugins/notebooks/flowr-analyzer-qmd-file-plugin.d.ts +22 -0
  286. package/project/plugins/file-plugins/notebooks/flowr-analyzer-qmd-file-plugin.js +33 -0
  287. package/project/plugins/file-plugins/notebooks/flowr-analyzer-rmd-file-plugin.d.ts +22 -0
  288. package/project/plugins/file-plugins/notebooks/flowr-analyzer-rmd-file-plugin.js +33 -0
  289. package/project/plugins/file-plugins/notebooks/flowr-jupyter-file.d.ts +20 -0
  290. package/project/plugins/file-plugins/notebooks/flowr-jupyter-file.js +42 -0
  291. package/project/plugins/file-plugins/notebooks/flowr-rmarkdown-file.d.ts +59 -0
  292. package/project/plugins/file-plugins/notebooks/flowr-rmarkdown-file.js +132 -0
  293. package/project/plugins/file-plugins/notebooks/notebook.d.ts +0 -0
  294. package/project/plugins/file-plugins/notebooks/notebook.js +2 -0
  295. package/project/plugins/flowr-analyzer-plugin-defaults.d.ts +5 -0
  296. package/project/plugins/flowr-analyzer-plugin-defaults.js +23 -0
  297. package/project/plugins/flowr-analyzer-plugin.d.ts +2 -0
  298. package/project/plugins/flowr-analyzer-plugin.js +2 -0
  299. package/project/plugins/loading-order-plugins/flowr-analyzer-loading-order-description-file-plugin.js +1 -1
  300. package/project/plugins/package-version-plugins/flowr-analyzer-package-versions-description-file-plugin.js +1 -1
  301. package/project/plugins/plugin-registry.d.ts +34 -0
  302. package/project/plugins/plugin-registry.js +62 -0
  303. package/project/plugins/project-discovery/flowr-analyzer-project-discovery-plugin.js +7 -1
  304. package/queries/catalog/call-context-query/call-context-query-executor.js +5 -6
  305. package/queries/catalog/call-context-query/identify-link-to-last-call-relation.d.ts +5 -2
  306. package/queries/catalog/call-context-query/identify-link-to-last-call-relation.js +25 -18
  307. package/queries/catalog/cluster-query/cluster-query-format.d.ts +1 -1
  308. package/queries/catalog/control-flow-query/control-flow-query-format.d.ts +1 -1
  309. package/queries/catalog/control-flow-query/control-flow-query-format.js +3 -2
  310. package/queries/catalog/dataflow-lens-query/dataflow-lens-query-executor.js +1 -1
  311. package/queries/catalog/dataflow-lens-query/dataflow-lens-query-format.d.ts +1 -1
  312. package/queries/catalog/dataflow-query/dataflow-query-format.d.ts +1 -1
  313. package/queries/catalog/dependencies-query/dependencies-query-executor.d.ts +1 -1
  314. package/queries/catalog/dependencies-query/dependencies-query-executor.js +5 -5
  315. package/queries/catalog/dependencies-query/dependencies-query-format.d.ts +1 -1
  316. package/queries/catalog/dependencies-query/dependencies-query-format.js +1 -1
  317. package/queries/catalog/df-shape-query/df-shape-query-executor.d.ts +1 -1
  318. package/queries/catalog/df-shape-query/df-shape-query-executor.js +2 -2
  319. package/queries/catalog/df-shape-query/df-shape-query-format.d.ts +6 -6
  320. package/queries/catalog/df-shape-query/df-shape-query-format.js +8 -7
  321. package/queries/catalog/happens-before-query/happens-before-query-executor.d.ts +2 -1
  322. package/queries/catalog/happens-before-query/happens-before-query-executor.js +2 -1
  323. package/queries/catalog/happens-before-query/happens-before-query-format.d.ts +1 -1
  324. package/queries/catalog/id-map-query/id-map-query-format.d.ts +1 -1
  325. package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-executor.d.ts +1 -1
  326. package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-executor.js +4 -4
  327. package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-format.d.ts +1 -1
  328. package/queries/catalog/linter-query/linter-query-format.d.ts +1 -1
  329. package/queries/catalog/linter-query/linter-query-format.js +13 -2
  330. package/queries/catalog/location-map-query/location-map-query-executor.js +2 -1
  331. package/queries/catalog/location-map-query/location-map-query-format.d.ts +1 -1
  332. package/queries/catalog/location-map-query/location-map-query-format.js +1 -1
  333. package/queries/catalog/normalized-ast-query/normalized-ast-query-format.d.ts +1 -1
  334. package/queries/catalog/origin-query/origin-query-format.d.ts +1 -1
  335. package/queries/catalog/project-query/project-query-executor.js +3 -1
  336. package/queries/catalog/project-query/project-query-format.d.ts +1 -1
  337. package/queries/catalog/resolve-value-query/resolve-value-query-executor.d.ts +2 -2
  338. package/queries/catalog/resolve-value-query/resolve-value-query-executor.js +3 -3
  339. package/queries/catalog/resolve-value-query/resolve-value-query-format.d.ts +1 -1
  340. package/queries/catalog/search-query/search-query-format.d.ts +1 -1
  341. package/queries/catalog/static-slice-query/static-slice-query-executor.js +2 -2
  342. package/queries/catalog/static-slice-query/static-slice-query-format.d.ts +1 -1
  343. package/queries/catalog/static-slice-query/static-slice-query-format.js +13 -1
  344. package/queries/query.d.ts +26 -18
  345. package/queries/query.js +21 -1
  346. package/r-bridge/lang-4.x/ast/model/collect.d.ts +2 -1
  347. package/r-bridge/lang-4.x/ast/model/collect.js +4 -0
  348. package/r-bridge/lang-4.x/ast/model/nodes/r-project.d.ts +29 -0
  349. package/r-bridge/lang-4.x/ast/model/nodes/r-project.js +15 -0
  350. package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +5 -7
  351. package/r-bridge/lang-4.x/ast/model/processing/decorate.js +24 -11
  352. package/r-bridge/lang-4.x/ast/model/type.d.ts +2 -0
  353. package/r-bridge/lang-4.x/ast/model/type.js +2 -0
  354. package/r-bridge/lang-4.x/ast/parser/json/format.js +1 -1
  355. package/r-bridge/lang-4.x/ast/parser/json/parser.d.ts +9 -8
  356. package/r-bridge/lang-4.x/ast/parser/json/parser.js +11 -10
  357. package/r-bridge/lang-4.x/ast/parser/main/internal/structure/normalize-root.d.ts +4 -3
  358. package/r-bridge/lang-4.x/ast/parser/main/internal/structure/normalize-root.js +20 -11
  359. package/r-bridge/lang-4.x/tree-sitter/tree-sitter-executor.d.ts +3 -3
  360. package/r-bridge/lang-4.x/tree-sitter/tree-sitter-executor.js +5 -4
  361. package/r-bridge/lang-4.x/tree-sitter/tree-sitter-normalize.d.ts +3 -2
  362. package/r-bridge/lang-4.x/tree-sitter/tree-sitter-normalize.js +14 -5
  363. package/r-bridge/parser.d.ts +15 -5
  364. package/r-bridge/parser.js +27 -13
  365. package/r-bridge/retriever.d.ts +9 -15
  366. package/r-bridge/retriever.js +14 -5
  367. package/r-bridge/shell.d.ts +1 -1
  368. package/r-bridge/shell.js +1 -1
  369. package/reconstruct/auto-select/auto-select-defaults.d.ts +0 -1
  370. package/reconstruct/auto-select/magic-comments.js +1 -1
  371. package/reconstruct/reconstruct.d.ts +17 -9
  372. package/reconstruct/reconstruct.js +19 -8
  373. package/search/flowr-search.d.ts +12 -0
  374. package/search/search-executor/search-enrichers.d.ts +9 -2
  375. package/search/search-executor/search-enrichers.js +1 -3
  376. package/search/search-executor/search-generators.d.ts +1 -1
  377. package/search/search-executor/search-generators.js +9 -4
  378. package/slicing/criterion/collect-all.d.ts +3 -2
  379. package/slicing/criterion/collect-all.js +1 -1
  380. package/slicing/criterion/parse.js +4 -4
  381. package/slicing/static/slice-call.d.ts +3 -2
  382. package/slicing/static/slice-call.js +4 -4
  383. package/slicing/static/static-slicer.d.ts +3 -1
  384. package/slicing/static/static-slicer.js +6 -7
  385. package/statistics/features/supported/assignments/assignments.js +1 -1
  386. package/statistics/features/supported/control-flow/control-flow.js +2 -2
  387. package/statistics/features/supported/data-access/data-access.js +1 -1
  388. package/statistics/features/supported/defined-functions/defined-functions.js +1 -1
  389. package/statistics/features/supported/expression-list/statistics-expression-list.js +1 -1
  390. package/statistics/features/supported/loops/loops.js +1 -1
  391. package/statistics/features/supported/used-functions/used-functions.js +2 -2
  392. package/statistics/features/supported/variables/variables.js +3 -2
  393. package/statistics/statistics.js +3 -2
  394. package/util/assert.d.ts +4 -0
  395. package/util/assert.js +4 -0
  396. package/util/containers.js +1 -1
  397. package/util/files.d.ts +1 -1
  398. package/util/files.js +1 -1
  399. package/util/mermaid/ast.d.ts +4 -3
  400. package/util/mermaid/ast.js +36 -8
  401. package/util/mermaid/cfg.js +1 -1
  402. package/util/mermaid/dfg.d.ts +1 -0
  403. package/util/mermaid/dfg.js +3 -3
  404. package/util/simple-df/dfg-view.d.ts +2 -1
  405. package/util/simple-df/dfg-view.js +2 -2
  406. package/util/version.js +1 -1
  407. package/dataflow/environments/remove.d.ts +0 -12
  408. package/dataflow/environments/remove.js +0 -52
  409. package/documentation/print-analyzer-wiki.d.ts +0 -1
  410. package/documentation/print-analyzer-wiki.js +0 -141
  411. package/documentation/print-capabilities-markdown.d.ts +0 -1
  412. package/documentation/print-cfg-wiki.d.ts +0 -1
  413. package/documentation/print-core-wiki.d.ts +0 -5
  414. package/documentation/print-dataflow-graph-wiki.d.ts +0 -1
  415. package/documentation/print-engines-wiki.d.ts +0 -1
  416. package/documentation/print-faq-wiki.d.ts +0 -1
  417. package/documentation/print-faq-wiki.js +0 -18
  418. package/documentation/print-interface-wiki.d.ts +0 -1
  419. package/documentation/print-linter-issue.d.ts +0 -1
  420. package/documentation/print-linter-wiki.d.ts +0 -1
  421. package/documentation/print-linting-and-testing-wiki.d.ts +0 -1
  422. package/documentation/print-normalized-ast-wiki.d.ts +0 -1
  423. package/documentation/print-onboarding-wiki.d.ts +0 -1
  424. package/documentation/print-query-wiki.d.ts +0 -1
  425. package/documentation/print-readme.d.ts +0 -1
  426. package/documentation/print-search-wiki.d.ts +0 -1
  427. package/documentation/print-search-wiki.js +0 -74
  428. package/util/formats/adapter-format.d.ts +0 -6
  429. package/util/formats/adapter-format.js +0 -3
  430. package/util/formats/adapter.d.ts +0 -27
  431. package/util/formats/adapter.js +0 -58
  432. package/util/formats/adapters/r-adapter.d.ts +0 -4
  433. package/util/formats/adapters/r-adapter.js +0 -7
  434. package/util/formats/adapters/rmd-adapter.d.ts +0 -35
  435. package/util/formats/adapters/rmd-adapter.js +0 -100
@@ -1,5 +1,12 @@
1
1
  import ts from 'typescript';
2
+ /**
3
+ * Kinds of TypeScript type elements we can encounter.
4
+ * Please note, that a `function` is also a `variable` here.
5
+ */
2
6
  export type TypeElementKind = 'interface' | 'type' | 'enum' | 'class' | 'variable';
7
+ /**
8
+ * The full underlying information about a TypeScript type element found in source code.
9
+ */
3
10
  export interface TypeElementInSource {
4
11
  name: string;
5
12
  node: ts.Node;
@@ -12,46 +19,56 @@ export interface TypeElementInSource {
12
19
  readonly properties?: string[];
13
20
  }
14
21
  /**
15
- *
22
+ * Retrieve TypeScript source files from the given file names.
16
23
  */
17
24
  export declare function getTypeScriptSourceFiles(fileNames: readonly string[]): {
18
25
  files: ts.SourceFile[];
19
26
  program: ts.Program;
20
27
  };
21
28
  /**
22
- *
29
+ * Drop generics from a TypeScript type name.
30
+ * @example
31
+ * ```ts
32
+ * const typeName = 'MyType<T, U>';
33
+ * const cleanName = dropGenericsFromTypeName(typeName);
34
+ * console.log(cleanName); // 'MyType'
35
+ * ```
23
36
  */
24
37
  export declare function dropGenericsFromTypeName(type: string): string;
25
38
  /**
26
- *
39
+ * Remove comment symbols from a TypeScript comment string.
40
+ * This also takes care of special JSDoc tags like `{@link ...}` and `{@see ...}`.
41
+ * @example
42
+ * ```ts
43
+ * const comment = '/**\n* This is a comment.\n* It has multiple lines.\n *\/'; // closing comment sadly escaped for ts doc
44
+ * const cleaned = removeCommentSymbolsFromTypeScriptComment(comment);
45
+ * console.log(cleaned);
46
+ * ```
47
+ * This will output:
48
+ * ```md
49
+ * This is a comment.
50
+ * It has multiple lines.
51
+ * ```
27
52
  */
28
53
  export declare function removeCommentSymbolsFromTypeScriptComment(comment: string): string;
29
- /**
30
- *
31
- */
32
- export declare function getTextualCommentsFromTypeScript(node: ts.Node): string[];
33
54
  /**
34
55
  *
35
56
  */
36
57
  export declare function getStartLineOfTypeScriptNode(node: ts.Node, sourceFile: ts.SourceFile): number;
37
58
  /**
38
- *
39
- */
40
- export declare function getType(node: ts.Node, typeChecker: ts.TypeChecker): string;
41
- /**
42
- *
43
- */
44
- export declare function followTypeReference(type: ts.TypeReferenceNode, sourceFile: ts.SourceFile): string[];
45
- /**
46
- *
59
+ * Return the link to the type in the source code.
60
+ * If you create a wiki, please refer to the functions provided by the {@link GeneralWikiContext}.
47
61
  */
48
- export declare function getTypePathForTypeScript({ filePath }: Pick<TypeElementInSource, 'filePath'>): string;
62
+ export declare function getTypePathLink(elem: Pick<TypeElementInSource, 'filePath' | 'lineNumber'>, prefix?: string): string;
49
63
  /**
50
- *
64
+ * Visualize the type hierarchy as a mermaid class diagram.
51
65
  */
52
- export declare function getTypePathLink(elem: Pick<TypeElementInSource, 'filePath' | 'lineNumber'>, prefix?: string): string;
66
+ export declare function visualizeMermaidClassDiagram(hierarchyList: readonly TypeElementInSource[], options: {
67
+ typeNameForMermaid?: string;
68
+ inlineTypes?: readonly string[];
69
+ }): string | undefined;
53
70
  export interface GetTypesAsMermaidOption {
54
- readonly rootFolder?: string;
71
+ readonly rootFolder?: string | string[];
55
72
  readonly files?: readonly string[];
56
73
  /** if you request a type name, we will generate a mermaid diagram for that type */
57
74
  readonly typeNameForMermaid?: string;
@@ -74,10 +91,6 @@ export declare function getTypesFromFolder(options: GetTypesAsMermaidOption & {
74
91
  mermaid: undefined;
75
92
  });
76
93
  export declare function getTypesFromFolder(options: GetTypesAsMermaidOption): TypeReport;
77
- /**
78
- *
79
- */
80
- export declare function implSnippet(node: TypeElementInSource | undefined, program: ts.Program, showName?: boolean, nesting?: number, open?: boolean): string;
81
94
  export interface PrintHierarchyArguments {
82
95
  readonly program: ts.Program;
83
96
  readonly info: TypeElementInSource[];
@@ -86,26 +99,41 @@ export interface PrintHierarchyArguments {
86
99
  readonly initialNesting?: number;
87
100
  readonly maxDepth?: number;
88
101
  readonly openTop?: boolean;
102
+ readonly showImplSnippet?: boolean;
89
103
  }
90
104
  export declare const mermaidHide: string[];
91
105
  /**
92
- *
106
+ * Print the hierarchy of types starting from the given root.
107
+ * If you create a wiki, please refer to the functions provided by the {@link GeneralWikiContext}.
108
+ */
109
+ export declare function printHierarchy({ program, info, root, collapseFromNesting, initialNesting, maxDepth, openTop, showImplSnippet }: PrintHierarchyArguments): string;
110
+ /**
111
+ * Options to print code of an element
93
112
  */
94
- export declare function printHierarchy({ program, info, root, collapseFromNesting, initialNesting, maxDepth, openTop }: PrintHierarchyArguments): string;
95
- interface FnInfo {
113
+ export interface FnElementInfo {
114
+ /** The type information collected from the source code */
96
115
  info: TypeElementInSource[];
116
+ /** The TypeScript program used to extract the info */
97
117
  program: ts.Program;
118
+ /** Number of lines to drop from the start of the code block */
98
119
  dropLinesStart?: number;
120
+ /** Number of lines to drop from the end of the code block */
99
121
  dropLinesEnd?: number;
122
+ /** Whether to not automatically gobble leading spaces */
100
123
  doNotAutoGobble?: boolean;
124
+ /** Whether to hide the "Defined at ..." line */
101
125
  hideDefinedAt?: boolean;
102
126
  }
103
127
  /**
128
+ * Print an element from the info as code block.
129
+ * If you create a wiki, please refer to the functions provided by the {@link GeneralWikiContext}.
104
130
  *
131
+ * This is great to show examples that are directly taken from the source code.
105
132
  */
106
- export declare function printCodeOfElement({ program, info, dropLinesEnd, dropLinesStart, doNotAutoGobble, hideDefinedAt }: FnInfo, name: string): string;
133
+ export declare function printCodeOfElement({ program, info, dropLinesEnd, dropLinesStart, doNotAutoGobble, hideDefinedAt }: FnElementInfo, name: string): string;
107
134
  /**
108
- * Create a short link to a type in the documentation
135
+ * Create a short link to a type in the documentation.
136
+ * If you create a wiki, please refer to the functions provided by the {@link GeneralDocContext}.
109
137
  * @param name - The name of the type, e.g. `MyType`, may include a container, e.g.,`MyContainer::MyType` (this works with function nestings too)
110
138
  * Use `:::` if you want to access a scoped function, but the name should be displayed without the scope
111
139
  * @param hierarchy - The hierarchy of types to search in
@@ -114,7 +142,11 @@ export declare function printCodeOfElement({ program, info, dropLinesEnd, dropLi
114
142
  */
115
143
  export declare function shortLink(name: string, hierarchy: readonly TypeElementInSource[], codeStyle?: boolean, realNameWrapper?: string): string;
116
144
  /**
117
- *
145
+ * Create a short link to a type in the documentation.
146
+ * If you create a wiki, please refer to the functions provided by the {@link GeneralWikiContext}.
147
+ * @param name - The name of the type, e.g. `MyType`, may include a container, e.g.,`MyContainer::MyType` (this works with function nestings too)
148
+ * Use `:::` if you want to access a scoped function, but the name should be displayed without the scope
149
+ * @param hierarchy - The hierarchy of types to search in
118
150
  */
119
151
  export declare function shortLinkFile(name: string, hierarchy: readonly TypeElementInSource[]): string;
120
152
  export interface GetDocumentationForTypeFilters {
@@ -122,7 +154,12 @@ export interface GetDocumentationForTypeFilters {
122
154
  type?: TypeElementKind;
123
155
  }
124
156
  /**
125
- *
157
+ * Retrieve documentation comments for a type.
158
+ * If you create a wiki, please refer to the functions provided by the {@link GeneralWikiContext}.
159
+ * @param name - The name of the type, e.g. `MyType`, may include a container, e.g.,`MyContainer::MyType` (this works with function nestings too)
160
+ * Use `:::` if you want to access a scoped function, but the name should be displayed without the scope
161
+ * @param hierarchy - The hierarchy of types to search in
162
+ * @param prefix - A prefix to add to each line of the documentation
163
+ * @param filter - Optional filters for retrieving the documentation
126
164
  */
127
165
  export declare function getDocumentationForType(name: string, hierarchy: TypeElementInSource[], prefix?: string, filter?: GetDocumentationForTypeFilters): string;
128
- export {};
@@ -7,14 +7,10 @@ exports.mermaidHide = void 0;
7
7
  exports.getTypeScriptSourceFiles = getTypeScriptSourceFiles;
8
8
  exports.dropGenericsFromTypeName = dropGenericsFromTypeName;
9
9
  exports.removeCommentSymbolsFromTypeScriptComment = removeCommentSymbolsFromTypeScriptComment;
10
- exports.getTextualCommentsFromTypeScript = getTextualCommentsFromTypeScript;
11
10
  exports.getStartLineOfTypeScriptNode = getStartLineOfTypeScriptNode;
12
- exports.getType = getType;
13
- exports.followTypeReference = followTypeReference;
14
- exports.getTypePathForTypeScript = getTypePathForTypeScript;
15
11
  exports.getTypePathLink = getTypePathLink;
12
+ exports.visualizeMermaidClassDiagram = visualizeMermaidClassDiagram;
16
13
  exports.getTypesFromFolder = getTypesFromFolder;
17
- exports.implSnippet = implSnippet;
18
14
  exports.printHierarchy = printHierarchy;
19
15
  exports.printCodeOfElement = printCodeOfElement;
20
16
  exports.shortLink = shortLink;
@@ -30,22 +26,36 @@ const doc_code_1 = require("./doc-code");
30
26
  const doc_structure_1 = require("./doc-structure");
31
27
  const html_hover_over_1 = require("../../util/html-hover-over");
32
28
  const doc_general_1 = require("./doc-general");
29
+ const options = {
30
+ target: typescript_1.default.ScriptTarget.ESNext,
31
+ skipLibCheck: true,
32
+ skipDefaultLibCheck: true,
33
+ allowJs: true,
34
+ strict: false,
35
+ checkJs: false,
36
+ strictNullChecks: false,
37
+ noUncheckedIndexedAccess: false,
38
+ noUncheckedSideEffectImports: false,
39
+ noCheck: true,
40
+ noEmit: true,
41
+ noResolve: true,
42
+ noUnusedLocals: false,
43
+ alwaysStrict: true,
44
+ incremental: false,
45
+ types: [],
46
+ lib: [],
47
+ noLib: true,
48
+ moduleResolution: typescript_1.default.ModuleResolutionKind.Classic,
49
+ allowUnreachableCode: true,
50
+ allowUnusedLabels: true,
51
+ disableSolutionSearching: true,
52
+ };
33
53
  /**
34
- *
54
+ * Retrieve TypeScript source files from the given file names.
35
55
  */
36
56
  function getTypeScriptSourceFiles(fileNames) {
37
57
  try {
38
- const program = typescript_1.default.createProgram(fileNames, {
39
- target: typescript_1.default.ScriptTarget.ESNext,
40
- skipLibCheck: true,
41
- skipDefaultLibCheck: true,
42
- allowJs: true,
43
- checkJs: false,
44
- strictNullChecks: false,
45
- noUncheckedIndexedAccess: false,
46
- noUncheckedSideEffectImports: false,
47
- noCheck: true
48
- });
58
+ const program = typescript_1.default.createProgram(fileNames, options);
49
59
  return { program, files: fileNames.map(fileName => program.getSourceFile(fileName)).filter(file => !!file) };
50
60
  }
51
61
  catch (err) {
@@ -53,31 +63,49 @@ function getTypeScriptSourceFiles(fileNames) {
53
63
  return { files: [], program: undefined };
54
64
  }
55
65
  }
66
+ const DropGenericsPattern = /<.*>/g;
56
67
  /**
57
- *
68
+ * Drop generics from a TypeScript type name.
69
+ * @example
70
+ * ```ts
71
+ * const typeName = 'MyType<T, U>';
72
+ * const cleanName = dropGenericsFromTypeName(typeName);
73
+ * console.log(cleanName); // 'MyType'
74
+ * ```
58
75
  */
59
76
  function dropGenericsFromTypeName(type) {
60
77
  let previous;
61
78
  do {
62
79
  previous = type;
63
- type = type.replace(/<.*>/g, '');
80
+ type = type.replace(DropGenericsPattern, '');
64
81
  } while (type !== previous);
65
82
  return type;
66
83
  }
84
+ const PruneDocCommentPattern = /^\/\*\*?|\*\/$|^\s*\*\s?|\s*\*$/gm;
85
+ const PrunedocLinkPattern = /\{@[a-zA-Z]+ ([^}]+\|)?(?<name>[^}]+)}/gm;
67
86
  /**
68
- *
87
+ * Remove comment symbols from a TypeScript comment string.
88
+ * This also takes care of special JSDoc tags like `{@link ...}` and `{@see ...}`.
89
+ * @example
90
+ * ```ts
91
+ * const comment = '/**\n* This is a comment.\n* It has multiple lines.\n *\/'; // closing comment sadly escaped for ts doc
92
+ * const cleaned = removeCommentSymbolsFromTypeScriptComment(comment);
93
+ * console.log(cleaned);
94
+ * ```
95
+ * This will output:
96
+ * ```md
97
+ * This is a comment.
98
+ * It has multiple lines.
99
+ * ```
69
100
  */
70
101
  function removeCommentSymbolsFromTypeScriptComment(comment) {
71
102
  return comment
72
103
  // remove '/** \n * \n */...
73
- .replace(/^\/\*\*?/gm, '').replace(/^\s*\*\s*/gm, '').replace(/\*\/$/gm, '').replace(/^\s*\*/gm, '')
74
- /* replace {@key foo|bar} with `bar` and {@key foo} with `foo` */
75
- .replace(/\{@[a-zA-Z]+ ([^}]+\|)?(?<name>[^}]+)}/gm, '<code>$<name></code>')
104
+ .replace(PruneDocCommentPattern, '')
105
+ // replace {@key foo|bar} with `bar` and {@key foo} with `foo`
106
+ .replace(PrunedocLinkPattern, '<code>$<name></code>')
76
107
  .trim();
77
108
  }
78
- /**
79
- *
80
- */
81
109
  function getTextualCommentsFromTypeScript(node) {
82
110
  const comments = typescript_1.default.getJSDocCommentsAndTags(node);
83
111
  const out = [];
@@ -100,17 +128,11 @@ function getStartLineOfTypeScriptNode(node, sourceFile) {
100
128
  const lineStart = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line;
101
129
  return lineStart + 1;
102
130
  }
103
- /**
104
- *
105
- */
106
131
  function getType(node, typeChecker) {
107
132
  const tryDirect = typeChecker.getTypeAtLocation(node);
108
133
  return tryDirect ? typeChecker.typeToString(tryDirect) : 'unknown';
109
134
  }
110
135
  const defaultSkip = ['Pick', 'Partial', 'Required', 'Readonly', 'Omit', 'DeepPartial', 'DeepReadonly', 'DeepWritable', 'StrictOmit'];
111
- /**
112
- *
113
- */
114
136
  function followTypeReference(type, sourceFile) {
115
137
  const node = type.typeName;
116
138
  if (typescript_1.default.isQualifiedName(node)) {
@@ -136,7 +158,7 @@ function collectHierarchyInformation(sourceFiles, options) {
136
158
  const baseTypes = node.heritageClauses?.flatMap(clause => clause.types
137
159
  .map(type => type.getText(sourceFile) ?? '')
138
160
  .map(dropGenericsFromTypeName)) ?? [];
139
- const generics = node.typeParameters?.map(param => param.getText(sourceFile) ?? '') || [];
161
+ const generics = node.typeParameters?.map(param => param.getText(sourceFile) ?? '') ?? [];
140
162
  hierarchyList.push({
141
163
  name: dropGenericsFromTypeName(interfaceName),
142
164
  node,
@@ -162,7 +184,7 @@ function collectHierarchyInformation(sourceFiles, options) {
162
184
  .map(dropGenericsFromTypeName);
163
185
  }
164
186
  else if (typescript_1.default.isTypeReferenceNode(node.type)) {
165
- baseTypes = [...followTypeReference(node.type, sourceFile)].map(dropGenericsFromTypeName);
187
+ baseTypes = followTypeReference(node.type, sourceFile).map(dropGenericsFromTypeName);
166
188
  }
167
189
  const generics = node.typeParameters?.map(param => param.getText(sourceFile) ?? '') ?? [];
168
190
  hierarchyList.push({
@@ -266,19 +288,17 @@ function collectHierarchyInformation(sourceFiles, options) {
266
288
  }
267
289
  typescript_1.default.forEachChild(node, child => visit(child, sourceFile));
268
290
  };
269
- sourceFiles.forEach(sourceFile => {
270
- visit(sourceFile, sourceFile);
271
- });
291
+ for (const sf of sourceFiles) {
292
+ visit(sf, sf);
293
+ }
272
294
  return hierarchyList;
273
295
  }
274
- /**
275
- *
276
- */
277
296
  function getTypePathForTypeScript({ filePath }) {
278
297
  return filePath.replace(/^.*\/src\//, 'src/').replace(/^.*\/test\//, 'test/');
279
298
  }
280
299
  /**
281
- *
300
+ * Return the link to the type in the source code.
301
+ * If you create a wiki, please refer to the functions provided by the {@link GeneralWikiContext}.
282
302
  */
283
303
  function getTypePathLink(elem, prefix = doc_files_1.RemoteFlowrFilePathBaseRef) {
284
304
  const fromSource = getTypePathForTypeScript(elem);
@@ -335,6 +355,9 @@ function generateMermaidClassDiagram(hierarchyList, rootName, options, visited =
335
355
  }
336
356
  return collect;
337
357
  }
358
+ /**
359
+ * Visualize the type hierarchy as a mermaid class diagram.
360
+ */
338
361
  function visualizeMermaidClassDiagram(hierarchyList, options) {
339
362
  if (!options.typeNameForMermaid) {
340
363
  return undefined;
@@ -363,21 +386,24 @@ function getTypesFromFileAsMermaid(fileNames, options) {
363
386
  */
364
387
  function getTypesFromFolder(options) {
365
388
  (0, assert_1.guard)(options.rootFolder !== undefined || options.files !== undefined, 'Either rootFolder or files must be provided');
366
- const files = [...options.files ?? []];
389
+ let files = [...options.files ?? []];
367
390
  if (options.rootFolder) {
368
- for (const fileBuff of fs_1.default.readdirSync(options.rootFolder, { recursive: true })) {
369
- const file = fileBuff.toString();
370
- if (file.endsWith('.ts')) {
371
- files.push(path_1.default.join(options.rootFolder, file));
372
- }
391
+ const folders = Array.isArray(options.rootFolder) ? options.rootFolder : [options.rootFolder];
392
+ for (const folder of folders) {
393
+ files = files.concat(fs_1.default.readdirSync(folder, { recursive: true })
394
+ .filter(f => {
395
+ const p = f.toString();
396
+ return p.endsWith('.ts')
397
+ && !p.endsWith('.test.ts')
398
+ && !p.endsWith('-app.ts')
399
+ && !p.endsWith('.d.ts');
400
+ })
401
+ .map(f => path_1.default.join(folder, f.toString())));
373
402
  }
374
403
  }
375
404
  return getTypesFromFileAsMermaid(files, options);
376
405
  }
377
- /**
378
- *
379
- */
380
- function implSnippet(node, program, showName = true, nesting = 0, open = false) {
406
+ function implSnippet(node, program, showName = true, nesting = 0, open = false, showImplSnippet = true) {
381
407
  (0, assert_1.guard)(node !== undefined, 'Node must be defined => invalid change of type name?');
382
408
  const indent = ' '.repeat(nesting * 2);
383
409
  const bold = node.kind === 'interface' || node.kind === 'enum' ? '**' : '';
@@ -386,16 +412,22 @@ function implSnippet(node, program, showName = true, nesting = 0, open = false)
386
412
  if (text.trim() !== '') {
387
413
  text = ' ' + text;
388
414
  }
389
- const code = node.node.getFullText(program.getSourceFile(node.node.getSourceFile().fileName));
390
- text += `\n<details${open ? ' open' : ''}><summary style="color:gray">Defined at <a href="${getTypePathLink(node)}">${getTypePathLink(node, '.')}</a></summary>\n\n${(0, doc_code_1.codeBlock)('ts', code)}\n\n</details>\n`;
415
+ if (showImplSnippet) {
416
+ const code = node.node.getFullText(program.getSourceFile(node.node.getSourceFile().fileName));
417
+ text += `\n<details${open ? ' open' : ''}><summary style="color:gray">Defined at <a href="${getTypePathLink(node)}">${getTypePathLink(node, '.')}</a></summary>\n\n${(0, doc_code_1.codeBlock)('ts', code)}\n\n</details>\n`;
418
+ }
419
+ else {
420
+ text += `\n<br/><i>(Defined at <a href="${getTypePathLink(node)}">${getTypePathLink(node, '.')}</a>)</i>\n`;
421
+ }
391
422
  const init = showName ? `* ${bold}[${node.name}](${getTypePathLink(node)})${bold} ${sep}${indent}` : '';
392
423
  return ` ${indent}${showName ? init : ''} ${text.replaceAll('\t', ' ').split(/\n/g).join(`\n${indent} `)}`;
393
424
  }
394
425
  exports.mermaidHide = ['Leaf', 'Location', 'Namespace', 'Base', 'WithChildren', 'Partial', 'RAccessBase'];
395
426
  /**
396
- *
427
+ * Print the hierarchy of types starting from the given root.
428
+ * If you create a wiki, please refer to the functions provided by the {@link GeneralWikiContext}.
397
429
  */
398
- function printHierarchy({ program, info, root, collapseFromNesting = 1, initialNesting = 0, maxDepth = 20, openTop }) {
430
+ function printHierarchy({ program, info, root, collapseFromNesting = 1, initialNesting = 0, maxDepth = 20, openTop, showImplSnippet = true }) {
399
431
  if (initialNesting > maxDepth) {
400
432
  return '';
401
433
  }
@@ -403,13 +435,13 @@ function printHierarchy({ program, info, root, collapseFromNesting = 1, initialN
403
435
  if (!node) {
404
436
  return '';
405
437
  }
406
- const thisLine = implSnippet(node, program, true, initialNesting, initialNesting === 0 && openTop);
438
+ const thisLine = implSnippet(node, program, true, initialNesting, initialNesting === 0 && openTop, showImplSnippet);
407
439
  const result = [];
408
440
  for (const baseType of node.extends) {
409
441
  if (exports.mermaidHide.includes(baseType)) {
410
442
  continue;
411
443
  }
412
- const res = printHierarchy({ program, info: info, root: baseType, collapseFromNesting, initialNesting: initialNesting + 1, maxDepth });
444
+ const res = printHierarchy({ program, info: info, root: baseType, collapseFromNesting, initialNesting: initialNesting + 1, maxDepth, showImplSnippet });
413
445
  result.push(res);
414
446
  }
415
447
  const out = result.join('\n');
@@ -421,7 +453,10 @@ function printHierarchy({ program, info, root, collapseFromNesting = 1, initialN
421
453
  }
422
454
  }
423
455
  /**
456
+ * Print an element from the info as code block.
457
+ * If you create a wiki, please refer to the functions provided by the {@link GeneralWikiContext}.
424
458
  *
459
+ * This is great to show examples that are directly taken from the source code.
425
460
  */
426
461
  function printCodeOfElement({ program, info, dropLinesEnd = 0, dropLinesStart = 0, doNotAutoGobble, hideDefinedAt }, name) {
427
462
  const node = info.find(e => e.name === name);
@@ -442,7 +477,7 @@ function printCodeOfElement({ program, info, dropLinesEnd = 0, dropLinesStart =
442
477
  const lines = code.replaceAll('\t', ' ').split(/\n/g);
443
478
  let gobble = Number.POSITIVE_INFINITY;
444
479
  for (const line of lines) {
445
- const match = line.match(/^(\s+)\S+/);
480
+ const match = line.match(/^(\s*)\S+/);
446
481
  if (match) {
447
482
  gobble = Math.min(gobble, match[1].length);
448
483
  }
@@ -487,7 +522,8 @@ function retrieveNode(name, hierarchy, fuzzy = false, type = undefined) {
487
522
  return [container, name, node[0]];
488
523
  }
489
524
  /**
490
- * Create a short link to a type in the documentation
525
+ * Create a short link to a type in the documentation.
526
+ * If you create a wiki, please refer to the functions provided by the {@link GeneralDocContext}.
491
527
  * @param name - The name of the type, e.g. `MyType`, may include a container, e.g.,`MyContainer::MyType` (this works with function nestings too)
492
528
  * Use `:::` if you want to access a scoped function, but the name should be displayed without the scope
493
529
  * @param hierarchy - The hierarchy of types to search in
@@ -507,10 +543,15 @@ function shortLink(name, hierarchy, codeStyle = true, realNameWrapper = 'b') {
507
543
  }
508
544
  const comments = node.comments?.join('\n').replace(/\\?\n|```[a-zA-Z]*|\s\s*/g, ' ').replace(/<\/?code>|`/g, '').replace(/<\/?p\/?>/g, ' ').replace(/"/g, '\'') ?? '';
509
545
  return `<a href="${getTypePathLink(node)}">${codeStyle ? '<code>' : ''}${(node.comments?.length ?? 0) > 0 ?
510
- (0, html_hover_over_1.textWithTooltip)(pkg ? `${pkg}::<${realNameWrapper}>${mainName}</${realNameWrapper}>` : mainName, comments.length > 400 ? comments.slice(0, 400) + '...' : comments) : node.name}${codeStyle ? '</code>' : ''}</a>`;
546
+ (0, html_hover_over_1.textWithTooltip)(pkg ? `${pkg}::<${realNameWrapper}>${mainName}</${realNameWrapper}>` : mainName, comments.length > 400 ? comments.slice(0, 400) + '...' : comments) :
547
+ pkg ? `${pkg}::<${realNameWrapper}>${mainName}</${realNameWrapper}>` : mainName}${codeStyle ? '</code>' : ''}</a>`;
511
548
  }
512
549
  /**
513
- *
550
+ * Create a short link to a type in the documentation.
551
+ * If you create a wiki, please refer to the functions provided by the {@link GeneralWikiContext}.
552
+ * @param name - The name of the type, e.g. `MyType`, may include a container, e.g.,`MyContainer::MyType` (this works with function nestings too)
553
+ * Use `:::` if you want to access a scoped function, but the name should be displayed without the scope
554
+ * @param hierarchy - The hierarchy of types to search in
514
555
  */
515
556
  function shortLinkFile(name, hierarchy) {
516
557
  const res = retrieveNode(name, hierarchy);
@@ -522,7 +563,13 @@ function shortLinkFile(name, hierarchy) {
522
563
  return `<a href="${getTypePathLink(node)}">${getTypePathForTypeScript(node)}</a>`;
523
564
  }
524
565
  /**
525
- *
566
+ * Retrieve documentation comments for a type.
567
+ * If you create a wiki, please refer to the functions provided by the {@link GeneralWikiContext}.
568
+ * @param name - The name of the type, e.g. `MyType`, may include a container, e.g.,`MyContainer::MyType` (this works with function nestings too)
569
+ * Use `:::` if you want to access a scoped function, but the name should be displayed without the scope
570
+ * @param hierarchy - The hierarchy of types to search in
571
+ * @param prefix - A prefix to add to each line of the documentation
572
+ * @param filter - Optional filters for retrieving the documentation
526
573
  */
527
574
  function getDocumentationForType(name, hierarchy, prefix = '', filter) {
528
575
  const res = retrieveNode(name, hierarchy, filter?.fuzzy, filter?.type);
@@ -1,9 +1,9 @@
1
- export * from './print-core-wiki';
2
- export * from './print-query-wiki';
3
- export * from './print-search-wiki';
4
- export * from './print-engines-wiki';
5
- export * from './print-interface-wiki';
6
- export * from './print-dataflow-graph-wiki';
7
- export * from './print-normalized-ast-wiki';
8
- export * from './print-capabilities-markdown';
9
- export * from './print-linting-and-testing-wiki';
1
+ export * from './wiki-core';
2
+ export * from './wiki-query';
3
+ export * from './wiki-search';
4
+ export * from './wiki-engine';
5
+ export * from './wiki-interface';
6
+ export * from './wiki-dataflow-graph';
7
+ export * from './wiki-normalized-ast';
8
+ export * from './doc-capabilities';
9
+ export * from './wiki-linting-and-testing';
@@ -14,13 +14,13 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./print-core-wiki"), exports);
18
- __exportStar(require("./print-query-wiki"), exports);
19
- __exportStar(require("./print-search-wiki"), exports);
20
- __exportStar(require("./print-engines-wiki"), exports);
21
- __exportStar(require("./print-interface-wiki"), exports);
22
- __exportStar(require("./print-dataflow-graph-wiki"), exports);
23
- __exportStar(require("./print-normalized-ast-wiki"), exports);
24
- __exportStar(require("./print-capabilities-markdown"), exports);
25
- __exportStar(require("./print-linting-and-testing-wiki"), exports);
17
+ __exportStar(require("./wiki-core"), exports);
18
+ __exportStar(require("./wiki-query"), exports);
19
+ __exportStar(require("./wiki-search"), exports);
20
+ __exportStar(require("./wiki-engine"), exports);
21
+ __exportStar(require("./wiki-interface"), exports);
22
+ __exportStar(require("./wiki-dataflow-graph"), exports);
23
+ __exportStar(require("./wiki-normalized-ast"), exports);
24
+ __exportStar(require("./doc-capabilities"), exports);
25
+ __exportStar(require("./wiki-linting-and-testing"), exports);
26
26
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,9 @@
1
+ import type { DocMakerArgs } from './wiki-mk/doc-maker';
2
+ import { DocMaker } from './wiki-mk/doc-maker';
3
+ /**
4
+ * https://github.com/flowr-analysis/flowr/blob/main/.github/ISSUE_TEMPLATE/linting-rule.yaml
5
+ */
6
+ export declare class IssueLintingRule extends DocMaker {
7
+ constructor();
8
+ text({ ctx }: DocMakerArgs): string;
9
+ }
@@ -1,15 +1,11 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const log_1 = require("../../test/functionality/_helper/log");
7
- const doc_types_1 = require("./doc-util/doc-types");
8
- const path_1 = __importDefault(require("path"));
3
+ exports.IssueLintingRule = void 0;
9
4
  const linter_tags_1 = require("../linter/linter-tags");
10
5
  const doc_general_1 = require("./doc-util/doc-general");
11
6
  const doc_files_1 = require("./doc-util/doc-files");
12
7
  const linter_rules_1 = require("../linter/linter-rules");
8
+ const doc_maker_1 = require("./wiki-mk/doc-maker");
13
9
  /* this prints the yaml configuration for the GitHub issue template to request a new linter rule / an update */
14
10
  function summarizeIfTooLong(text, maxLength = 52) {
15
11
  if (text.length <= maxLength) {
@@ -17,11 +13,15 @@ function summarizeIfTooLong(text, maxLength = 52) {
17
13
  }
18
14
  return text.slice(0, maxLength - 1) + '…';
19
15
  }
20
- function getText() {
21
- const types = (0, doc_types_1.getTypesFromFolder)({
22
- rootFolder: path_1.default.resolve('./src/linter/')
23
- });
24
- return `
16
+ /**
17
+ * https://github.com/flowr-analysis/flowr/blob/main/.github/ISSUE_TEMPLATE/linting-rule.yaml
18
+ */
19
+ class IssueLintingRule extends doc_maker_1.DocMaker {
20
+ constructor() {
21
+ super('.github/ISSUE_TEMPLATE/linting-rule.yaml', module.filename, '', false);
22
+ }
23
+ text({ ctx }) {
24
+ return `
25
25
  name: Linting Rule
26
26
  description: Suggest either a new linting rule or an improvement to an existing one.
27
27
  title: "[Linter]: "
@@ -48,9 +48,9 @@ body:
48
48
  options:
49
49
  - New Rule
50
50
  ${(0, doc_general_1.prefixLines)(Object.keys(linter_rules_1.LintingRules).sort().map(name => {
51
- const rule = linter_rules_1.LintingRules[name];
52
- return `- ${rule.info.name}`;
53
- }).join('\n'), ' ')}
51
+ const rule = linter_rules_1.LintingRules[name];
52
+ return `- ${rule.info.name}`;
53
+ }).join('\n'), ' ')}
54
54
  default: 0
55
55
  - type: checkboxes
56
56
  id: tags
@@ -59,13 +59,10 @@ ${(0, doc_general_1.prefixLines)(Object.keys(linter_rules_1.LintingRules).sort()
59
59
  description: Select any tags that you think apply to the linting rule you are suggesting. If you try to suggest a new linting rule, please only select those that you think apply after your suggestions.
60
60
  options:
61
61
  ${(0, doc_general_1.prefixLines)(Object.entries(linter_tags_1.LintingRuleTag).map(([name]) => {
62
- return `- label: '**${name}**: ${summarizeIfTooLong((0, doc_types_1.getDocumentationForType)('LintingRuleTag::' + name, types.info).replaceAll(/\n/g, ' ').replaceAll('\'', '\\\'').trim())}'\n required: false`;
63
- }).join('\n'), ' ')}
64
- `.trim();
65
- }
66
- /** if we run this script, we want a Markdown representation of the capabilities */
67
- if (require.main === module) {
68
- (0, log_1.setMinLevelOfAllLogs)(6 /* LogLevel.Fatal */);
69
- console.log(getText());
62
+ return `- label: '**${name}**: ${summarizeIfTooLong(ctx.doc('LintingRuleTag::' + name).replaceAll(/\n/g, ' ').replaceAll('\'', '\\\'').trim())}'\n required: false`;
63
+ }).join('\n'), ' ')}
64
+ `.trim();
65
+ }
70
66
  }
71
- //# sourceMappingURL=print-linter-issue.js.map
67
+ exports.IssueLintingRule = IssueLintingRule;
68
+ //# sourceMappingURL=issue-linting-rule.js.map
@@ -0,0 +1,9 @@
1
+ import type { DocMakerArgs } from './wiki-mk/doc-maker';
2
+ import { DocMaker } from './wiki-mk/doc-maker';
3
+ /**
4
+ * https://github.com/flowr-analysis/flowr/wiki/Analyzer
5
+ */
6
+ export declare class WikiAnalyzer extends DocMaker {
7
+ constructor();
8
+ text({ ctx }: DocMakerArgs): string;
9
+ }