@eagleoutice/flowr 2.2.12 → 2.2.13

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 (256) hide show
  1. package/README.md +82 -20
  2. package/benchmark/slicer.js +2 -2
  3. package/benchmark/summarizer/first-phase/input.js +1 -1
  4. package/benchmark/summarizer/first-phase/process.js +3 -3
  5. package/benchmark/summarizer/second-phase/process.js +1 -1
  6. package/benchmark/summarizer/summarizer.js +1 -1
  7. package/cli/common/options.js +4 -4
  8. package/cli/common/script.js +1 -1
  9. package/cli/flowr.js +1 -1
  10. package/cli/repl/commands/repl-cfg.d.ts +2 -0
  11. package/cli/repl/commands/repl-cfg.js +38 -24
  12. package/cli/repl/commands/repl-commands.js +4 -2
  13. package/cli/repl/commands/repl-dataflow.js +3 -3
  14. package/cli/repl/commands/repl-execute.js +1 -1
  15. package/cli/repl/commands/repl-main.d.ts +1 -1
  16. package/cli/repl/commands/repl-main.js +1 -1
  17. package/cli/repl/commands/repl-normalize.js +1 -1
  18. package/cli/repl/commands/repl-query.js +2 -2
  19. package/cli/repl/core.js +1 -1
  20. package/cli/repl/prompt.js +1 -1
  21. package/cli/repl/server/connection.js +4 -4
  22. package/cli/repl/server/messages/message-analysis.d.ts +1 -1
  23. package/cli/script-core/statistics-core.js +1 -1
  24. package/cli/script-core/statistics-helper-core.js +4 -4
  25. package/config.d.ts +47 -24
  26. package/config.js +3 -3
  27. package/control-flow/basic-cfg-guided-visitor.d.ts +39 -0
  28. package/control-flow/basic-cfg-guided-visitor.js +114 -0
  29. package/control-flow/cfg-properties.d.ts +26 -0
  30. package/control-flow/cfg-properties.js +100 -0
  31. package/control-flow/cfg-simplification.d.ts +18 -0
  32. package/control-flow/cfg-simplification.js +55 -0
  33. package/control-flow/cfg-to-basic-blocks.d.ts +5 -0
  34. package/control-flow/cfg-to-basic-blocks.js +81 -0
  35. package/control-flow/control-flow-graph.d.ts +247 -0
  36. package/control-flow/control-flow-graph.js +290 -0
  37. package/control-flow/dfg-cfg-guided-visitor.d.ts +32 -0
  38. package/control-flow/dfg-cfg-guided-visitor.js +71 -0
  39. package/control-flow/diff-cfg.d.ts +11 -0
  40. package/control-flow/diff-cfg.js +161 -0
  41. package/control-flow/extract-cfg.d.ts +30 -0
  42. package/control-flow/extract-cfg.js +475 -0
  43. package/control-flow/happens-before.d.ts +7 -0
  44. package/{util/cfg → control-flow}/happens-before.js +3 -3
  45. package/control-flow/semantic-cfg-guided-visitor.d.ts +452 -0
  46. package/control-flow/semantic-cfg-guided-visitor.js +492 -0
  47. package/control-flow/simple-visitor.d.ts +25 -0
  48. package/control-flow/simple-visitor.js +80 -0
  49. package/control-flow/syntax-cfg-guided-visitor.d.ts +128 -0
  50. package/control-flow/syntax-cfg-guided-visitor.js +166 -0
  51. package/core/print/print.d.ts +1 -1
  52. package/core/print/slice-diff-ansi.js +1 -1
  53. package/core/steps/pipeline/create-pipeline.js +1 -1
  54. package/dataflow/environments/built-in-config.js +9 -6
  55. package/dataflow/environments/built-in.d.ts +8 -4
  56. package/dataflow/environments/built-in.js +47 -5
  57. package/dataflow/environments/default-builtin-config.d.ts +2 -0
  58. package/dataflow/environments/default-builtin-config.js +81 -14
  59. package/dataflow/environments/resolve-by-name.js +15 -4
  60. package/dataflow/extractor.js +2 -2
  61. package/dataflow/graph/dataflowgraph-builder.d.ts +3 -1
  62. package/dataflow/graph/dataflowgraph-builder.js +4 -2
  63. package/dataflow/graph/diff-dataflow-graph.d.ts +16 -0
  64. package/dataflow/graph/{diff.js → diff-dataflow-graph.js} +30 -56
  65. package/dataflow/graph/graph.d.ts +11 -3
  66. package/dataflow/graph/graph.js +27 -12
  67. package/dataflow/graph/vertex.d.ts +17 -2
  68. package/dataflow/internal/linker.d.ts +3 -2
  69. package/dataflow/internal/linker.js +33 -24
  70. package/dataflow/internal/process/functions/call/argument/unpack-argument.d.ts +1 -1
  71. package/dataflow/internal/process/functions/call/argument/unpack-argument.js +1 -1
  72. package/dataflow/internal/process/functions/call/built-in/built-in-access.js +12 -9
  73. package/dataflow/internal/process/functions/call/built-in/built-in-apply.d.ts +1 -1
  74. package/dataflow/internal/process/functions/call/built-in/built-in-apply.js +84 -16
  75. package/dataflow/internal/process/functions/call/built-in/built-in-assignment.js +23 -16
  76. package/dataflow/internal/process/functions/call/built-in/built-in-eval.js +5 -5
  77. package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.js +9 -4
  78. package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.js +3 -2
  79. package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.js +15 -4
  80. package/dataflow/internal/process/functions/call/built-in/built-in-get.js +4 -3
  81. package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.js +4 -3
  82. package/dataflow/internal/process/functions/call/built-in/built-in-library.js +4 -3
  83. package/dataflow/internal/process/functions/call/built-in/built-in-list.js +1 -1
  84. package/dataflow/internal/process/functions/call/built-in/built-in-pipe.js +1 -1
  85. package/dataflow/internal/process/functions/call/built-in/built-in-quote.js +9 -7
  86. package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.js +3 -2
  87. package/dataflow/internal/process/functions/call/built-in/built-in-replacement.d.ts +1 -0
  88. package/dataflow/internal/process/functions/call/built-in/built-in-replacement.js +19 -4
  89. package/dataflow/internal/process/functions/call/built-in/built-in-rm.js +2 -2
  90. package/dataflow/internal/process/functions/call/built-in/built-in-source.js +19 -4
  91. package/dataflow/internal/process/functions/call/built-in/built-in-special-bin-op.js +4 -3
  92. package/dataflow/internal/process/functions/call/built-in/built-in-vector.js +3 -3
  93. package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.js +3 -3
  94. package/dataflow/internal/process/functions/call/common.d.ts +4 -1
  95. package/dataflow/internal/process/functions/call/common.js +5 -3
  96. package/dataflow/internal/process/functions/call/known-call-handling.d.ts +3 -2
  97. package/dataflow/internal/process/functions/call/known-call-handling.js +2 -1
  98. package/dataflow/internal/process/functions/call/named-call-handling.js +1 -1
  99. package/dataflow/internal/process/functions/call/unnamed-call-handling.d.ts +1 -0
  100. package/dataflow/internal/process/functions/call/unnamed-call-handling.js +6 -4
  101. package/dataflow/internal/process/process-named-call.d.ts +1 -1
  102. package/dataflow/internal/process/process-named-call.js +5 -5
  103. package/dataflow/origin/dfg-get-origin.d.ts +82 -0
  104. package/dataflow/origin/dfg-get-origin.js +116 -0
  105. package/documentation/doc-util/doc-cfg.d.ts +13 -6
  106. package/documentation/doc-util/doc-cfg.js +19 -14
  107. package/documentation/doc-util/doc-cli-option.js +4 -2
  108. package/documentation/doc-util/doc-dfg.js +3 -3
  109. package/documentation/doc-util/doc-escape.d.ts +7 -0
  110. package/documentation/doc-util/doc-escape.js +19 -0
  111. package/documentation/doc-util/doc-files.d.ts +1 -0
  112. package/documentation/doc-util/doc-files.js +2 -1
  113. package/documentation/doc-util/doc-normalized-ast.js +3 -3
  114. package/documentation/doc-util/doc-query.js +2 -2
  115. package/documentation/doc-util/doc-repl.js +1 -1
  116. package/documentation/doc-util/doc-search.js +1 -1
  117. package/documentation/doc-util/doc-server-message.js +2 -2
  118. package/documentation/doc-util/doc-structure.d.ts +1 -0
  119. package/documentation/doc-util/doc-structure.js +5 -0
  120. package/documentation/doc-util/doc-types.d.ts +7 -1
  121. package/documentation/doc-util/doc-types.js +13 -2
  122. package/documentation/print-capabilities-markdown.js +27 -1
  123. package/documentation/print-cfg-wiki.js +505 -17
  124. package/documentation/print-dataflow-graph-wiki.js +180 -25
  125. package/documentation/print-engines-wiki.js +1 -1
  126. package/documentation/print-faq-wiki.d.ts +1 -0
  127. package/documentation/print-faq-wiki.js +75 -0
  128. package/documentation/print-interface-wiki.js +1 -1
  129. package/documentation/print-linting-and-testing-wiki.js +52 -36
  130. package/documentation/print-normalized-ast-wiki.js +1 -1
  131. package/documentation/print-onboarding-wiki.d.ts +1 -0
  132. package/documentation/print-onboarding-wiki.js +42 -0
  133. package/documentation/print-query-wiki.js +21 -1
  134. package/documentation/print-readme.js +10 -3
  135. package/package.json +9 -6
  136. package/queries/catalog/call-context-query/call-context-query-executor.js +5 -5
  137. package/queries/catalog/call-context-query/call-context-query-format.d.ts +1 -1
  138. package/queries/catalog/call-context-query/call-context-query-format.js +2 -2
  139. package/queries/catalog/call-context-query/identify-link-to-last-call-relation.d.ts +2 -2
  140. package/queries/catalog/call-context-query/identify-link-to-last-call-relation.js +24 -21
  141. package/queries/catalog/cluster-query/cluster-query-format.d.ts +1 -1
  142. package/queries/catalog/cluster-query/cluster-query-format.js +1 -1
  143. package/queries/catalog/config-query/config-query-format.d.ts +1 -1
  144. package/queries/catalog/config-query/config-query-format.js +2 -2
  145. package/queries/catalog/dataflow-lens-query/dataflow-lens-query-format.d.ts +1 -1
  146. package/queries/catalog/dataflow-lens-query/dataflow-lens-query-format.js +2 -2
  147. package/queries/catalog/dataflow-query/dataflow-query-format.d.ts +1 -1
  148. package/queries/catalog/dataflow-query/dataflow-query-format.js +2 -2
  149. package/queries/catalog/dependencies-query/dependencies-query-executor.js +4 -2
  150. package/queries/catalog/dependencies-query/dependencies-query-format.d.ts +1 -1
  151. package/queries/catalog/dependencies-query/dependencies-query-format.js +2 -2
  152. package/queries/catalog/happens-before-query/happens-before-query-executor.d.ts +1 -1
  153. package/queries/catalog/happens-before-query/happens-before-query-executor.js +4 -4
  154. package/queries/catalog/happens-before-query/happens-before-query-format.d.ts +1 -1
  155. package/queries/catalog/happens-before-query/happens-before-query-format.js +2 -2
  156. package/queries/catalog/id-map-query/id-map-query-format.d.ts +1 -1
  157. package/queries/catalog/id-map-query/id-map-query-format.js +2 -2
  158. package/queries/catalog/lineage-query/lineage-query-format.d.ts +1 -1
  159. package/queries/catalog/lineage-query/lineage-query-format.js +2 -2
  160. package/queries/catalog/location-map-query/location-map-query-format.d.ts +1 -1
  161. package/queries/catalog/location-map-query/location-map-query-format.js +2 -2
  162. package/queries/catalog/normalized-ast-query/normalized-ast-query-format.d.ts +1 -1
  163. package/queries/catalog/normalized-ast-query/normalized-ast-query-format.js +2 -2
  164. package/queries/catalog/origin-query/origin-query-executor.d.ts +5 -0
  165. package/queries/catalog/origin-query/origin-query-executor.js +33 -0
  166. package/queries/catalog/origin-query/origin-query-format.d.ts +71 -0
  167. package/queries/catalog/origin-query/origin-query-format.js +27 -0
  168. package/queries/catalog/project-query/project-query-format.d.ts +1 -1
  169. package/queries/catalog/project-query/project-query-format.js +2 -2
  170. package/queries/catalog/resolve-value-query/resolve-value-query-format.d.ts +1 -1
  171. package/queries/catalog/resolve-value-query/resolve-value-query-format.js +2 -2
  172. package/queries/catalog/search-query/search-query-format.d.ts +1 -1
  173. package/queries/catalog/search-query/search-query-format.js +2 -2
  174. package/queries/catalog/static-slice-query/static-slice-query-format.d.ts +1 -1
  175. package/queries/catalog/static-slice-query/static-slice-query-format.js +2 -2
  176. package/queries/query-print.d.ts +1 -1
  177. package/queries/query-print.js +4 -4
  178. package/queries/query.d.ts +61 -2
  179. package/queries/query.js +3 -1
  180. package/r-bridge/lang-4.x/ast/model/nodes/r-number.d.ts +3 -2
  181. package/r-bridge/lang-4.x/ast/model/nodes/r-number.js +5 -0
  182. package/r-bridge/lang-4.x/ast/model/nodes/r-string.d.ts +3 -2
  183. package/r-bridge/lang-4.x/ast/model/nodes/r-string.js +5 -0
  184. package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +1 -1
  185. package/r-bridge/lang-4.x/ast/model/processing/decorate.js +1 -1
  186. package/r-bridge/lang-4.x/ast/model/processing/fold.js +3 -1
  187. package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.d.ts +1 -1
  188. package/r-bridge/lang-4.x/ast/parser/main/internal/expression/normalize-expression.js +1 -1
  189. package/r-bridge/lang-4.x/ast/parser/main/internal/functions/normalize-argument.js +1 -1
  190. package/r-bridge/lang-4.x/ast/parser/main/internal/functions/normalize-call.js +1 -1
  191. package/r-bridge/lang-4.x/ast/parser/main/internal/functions/normalize-definition.js +1 -1
  192. package/r-bridge/lang-4.x/ast/parser/main/internal/normalize-access.js +1 -1
  193. package/r-bridge/lang-4.x/ast/parser/main/internal/operators/normalize-binary.js +1 -1
  194. package/r-bridge/lang-4.x/ast/parser/main/internal/structure/normalize-root.js +1 -1
  195. package/r-bridge/lang-4.x/ast/parser/main/internal/values/normalize-symbol.js +1 -1
  196. package/r-bridge/lang-4.x/tree-sitter/tree-sitter-executor.d.ts +2 -2
  197. package/r-bridge/lang-4.x/tree-sitter/tree-sitter-executor.js +4 -4
  198. package/r-bridge/lang-4.x/tree-sitter/tree-sitter-normalize.js +26 -8
  199. package/r-bridge/retriever.js +1 -1
  200. package/search/search-executor/search-generators.d.ts +1 -1
  201. package/search/search-executor/search-transformer.d.ts +1 -1
  202. package/slicing/criterion/collect-all.js +1 -1
  203. package/slicing/static/slice-call.js +13 -3
  204. package/statistics/features/supported/assignments/post-process.js +1 -1
  205. package/statistics/features/supported/defined-functions/post-process.js +2 -2
  206. package/statistics/features/supported/used-functions/post-process.js +1 -1
  207. package/statistics/features/supported/used-packages/post-process.js +2 -2
  208. package/statistics/features/supported/values/post-process.js +2 -2
  209. package/statistics/output/print-stats.js +2 -2
  210. package/statistics/summarizer/post-process/clusterer.d.ts +1 -1
  211. package/statistics/summarizer/post-process/clusterer.js +1 -1
  212. package/statistics/summarizer/post-process/histogram.js +3 -3
  213. package/statistics/summarizer/post-process/post-process-output.js +3 -3
  214. package/statistics/summarizer/second-phase/process.js +2 -2
  215. package/statistics/summarizer/summarizer.js +2 -2
  216. package/util/assert.js +36 -1
  217. package/util/cfg/cfg.d.ts +0 -80
  218. package/util/cfg/cfg.js +0 -549
  219. package/util/{arrays.d.ts → collections/arrays.d.ts} +1 -1
  220. package/util/{arrays.js → collections/arrays.js} +3 -3
  221. package/util/collections/set.js +17 -0
  222. package/util/diff-graph.d.ts +47 -0
  223. package/util/diff-graph.js +61 -0
  224. package/util/diff.d.ts +6 -6
  225. package/util/diff.js +1 -1
  226. package/util/mermaid/cfg.d.ts +9 -2
  227. package/util/mermaid/cfg.js +64 -12
  228. package/util/mermaid/dfg.d.ts +2 -1
  229. package/util/mermaid/dfg.js +26 -10
  230. package/util/mermaid/mermaid.d.ts +2 -0
  231. package/util/mermaid/mermaid.js +6 -0
  232. package/util/quads.js +1 -1
  233. package/util/schema.d.ts +1 -1
  234. package/util/schema.js +1 -1
  235. package/util/summarizer.js +1 -1
  236. package/util/{text.js → text/text.js} +1 -1
  237. package/util/{time.js → text/time.js} +1 -1
  238. package/util/version.js +1 -1
  239. package/dataflow/graph/diff.d.ts +0 -36
  240. package/util/cfg/happens-before.d.ts +0 -7
  241. package/util/cfg/visitor.d.ts +0 -9
  242. package/util/cfg/visitor.js +0 -30
  243. package/util/set.js +0 -31
  244. /package/util/{bimap.d.ts → collections/bimap.d.ts} +0 -0
  245. /package/util/{bimap.js → collections/bimap.js} +0 -0
  246. /package/util/{defaultmap.d.ts → collections/defaultmap.d.ts} +0 -0
  247. /package/util/{defaultmap.js → collections/defaultmap.js} +0 -0
  248. /package/util/{set.d.ts → collections/set.d.ts} +0 -0
  249. /package/util/{ansi.d.ts → text/ansi.d.ts} +0 -0
  250. /package/util/{ansi.js → text/ansi.js} +0 -0
  251. /package/util/{args.d.ts → text/args.d.ts} +0 -0
  252. /package/util/{args.js → text/args.js} +0 -0
  253. /package/util/{strings.d.ts → text/strings.d.ts} +0 -0
  254. /package/util/{strings.js → text/strings.js} +0 -0
  255. /package/util/{text.d.ts → text/text.d.ts} +0 -0
  256. /package/util/{time.d.ts → text/time.d.ts} +0 -0
@@ -1,5 +1,5 @@
1
- import type { Leaf, Location, NoInfo } from '../model';
2
- import type { RType } from '../type';
1
+ import type { Leaf, Location, NoInfo, RNode } from '../model';
2
+ import { RType } from '../type';
3
3
  import type { RNumberValue } from '../../../convert-values';
4
4
  /**
5
5
  * A number like `3`, `-2.14`, `1L`, or `2i`.
@@ -10,3 +10,4 @@ export interface RNumber<Info = NoInfo> extends Leaf<Info>, Location {
10
10
  readonly type: RType.Number;
11
11
  content: RNumberValue;
12
12
  }
13
+ export declare function isRNumber(node: RNode | undefined): node is RNumber;
@@ -1,3 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isRNumber = isRNumber;
4
+ const type_1 = require("../type");
5
+ function isRNumber(node) {
6
+ return node?.type === type_1.RType.Number;
7
+ }
3
8
  //# sourceMappingURL=r-number.js.map
@@ -1,6 +1,6 @@
1
- import type { Leaf, Location, NoInfo } from '../model';
2
- import type { RType } from '../type';
1
+ import type { Leaf, Location, NoInfo, RNode } from '../model';
3
2
  import type { RStringValue } from '../../../convert-values';
3
+ import { RType } from '../type';
4
4
  /**
5
5
  * Represents a string like `"hello"`, including raw strings like `r"(hello)"`.
6
6
  */
@@ -8,3 +8,4 @@ export interface RString<Info = NoInfo> extends Leaf<Info>, Location {
8
8
  readonly type: RType.String;
9
9
  content: RStringValue;
10
10
  }
11
+ export declare function isRString(node: RNode | undefined): node is RString;
@@ -1,3 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isRString = isRString;
4
+ const type_1 = require("../type");
5
+ function isRString(node) {
6
+ return node?.type === type_1.RType.String;
7
+ }
3
8
  //# sourceMappingURL=r-string.js.map
@@ -10,7 +10,7 @@
10
10
  */
11
11
  import type { NoInfo, RNode } from '../model';
12
12
  import type { SourceRange } from '../../../../../util/range';
13
- import { BiMap } from '../../../../../util/bimap';
13
+ import { BiMap } from '../../../../../util/collections/bimap';
14
14
  import type { MergeableRecord } from '../../../../../util/objects';
15
15
  import { RoleInParent } from './role';
16
16
  import type { NodeId } from './node-id';
@@ -17,7 +17,7 @@ exports.nodeToLocationId = nodeToLocationId;
17
17
  exports.deterministicLocationIdGenerator = deterministicLocationIdGenerator;
18
18
  exports.decorateAst = decorateAst;
19
19
  const assert_1 = require("../../../../../util/assert");
20
- const bimap_1 = require("../../../../../util/bimap");
20
+ const bimap_1 = require("../../../../../util/collections/bimap");
21
21
  const type_1 = require("../type");
22
22
  const stateful_fold_1 = require("./stateful-fold");
23
23
  const r_function_call_1 = require("../nodes/r-function-call");
@@ -2,7 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.foldAst = foldAst;
4
4
  const stateful_fold_1 = require("./stateful-fold");
5
- const down = () => undefined;
5
+ function down() {
6
+ return undefined;
7
+ }
6
8
  /**
7
9
  * Folds in old functional-fashion over the AST structure.
8
10
  * <p>
@@ -47,7 +47,7 @@ export interface StatefulFoldFunctions<Info, Down, Up> {
47
47
  foldWhile: (loop: RWhileLoop<Info>, condition: Up, body: Up, down: Down) => Up;
48
48
  foldRepeat: (loop: RRepeatLoop<Info>, body: Up, down: Down) => Up;
49
49
  foldNext: (next: RNext<Info>, down: Down) => Up;
50
- foldBreak: (next: RBreak<Info>, down: Down) => Up;
50
+ foldBreak: (brk: RBreak<Info>, down: Down) => Up;
51
51
  };
52
52
  other: {
53
53
  foldComment: (comment: RComment<Info>, down: Down) => Up;
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.normalizeExpression = normalizeExpression;
4
4
  const normalize_meta_1 = require("../../normalize-meta");
5
5
  const normalize_access_1 = require("../normalize-access");
6
- const arrays_1 = require("../../../../../../../util/arrays");
6
+ const arrays_1 = require("../../../../../../../util/collections/arrays");
7
7
  const normalize_expressions_1 = require("../structure/normalize-expressions");
8
8
  const normalize_call_1 = require("../functions/normalize-call");
9
9
  const normalize_definition_1 = require("../functions/normalize-definition");
@@ -6,7 +6,7 @@ const normalize_meta_1 = require("../../normalize-meta");
6
6
  const assert_1 = require("../../../../../../../util/assert");
7
7
  const type_1 = require("../../../../model/type");
8
8
  const normalize_single_node_1 = require("../structure/normalize-single-node");
9
- const strings_1 = require("../../../../../../../util/strings");
9
+ const strings_1 = require("../../../../../../../util/text/strings");
10
10
  /**
11
11
  * Either parses `[expr]` or `[SYMBOL_SUB, EQ_SUB, expr]` as an argument of a function call in R.
12
12
  * Probably directly called by the function call parser as otherwise, we do not expect to find arguments.
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.tryNormalizeFunctionCall = tryNormalizeFunctionCall;
4
4
  const parser_1 = require("../../../json/parser");
5
5
  const normalize_meta_1 = require("../../normalize-meta");
6
- const arrays_1 = require("../../../../../../../util/arrays");
6
+ const arrays_1 = require("../../../../../../../util/collections/arrays");
7
7
  const assert_1 = require("../../../../../../../util/assert");
8
8
  const normalize_argument_1 = require("./normalize-argument");
9
9
  const r_function_call_1 = require("../../../../model/nodes/r-function-call");
@@ -4,7 +4,7 @@ exports.tryNormalizeFunctionDefinition = tryNormalizeFunctionDefinition;
4
4
  const parser_1 = require("../../../json/parser");
5
5
  const normalize_meta_1 = require("../../normalize-meta");
6
6
  const assert_1 = require("../../../../../../../util/assert");
7
- const arrays_1 = require("../../../../../../../util/arrays");
7
+ const arrays_1 = require("../../../../../../../util/collections/arrays");
8
8
  const normalize_parameter_1 = require("./normalize-parameter");
9
9
  const type_1 = require("../../../../model/type");
10
10
  const normalize_expressions_1 = require("../structure/normalize-expressions");
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.tryNormalizeAccess = tryNormalizeAccess;
4
4
  const normalize_argument_1 = require("./functions/normalize-argument");
5
5
  const parser_1 = require("../../json/parser");
6
- const arrays_1 = require("../../../../../../util/arrays");
6
+ const arrays_1 = require("../../../../../../util/collections/arrays");
7
7
  const assert_1 = require("../../../../../../util/assert");
8
8
  const normalize_meta_1 = require("../normalize-meta");
9
9
  const type_1 = require("../../../model/type");
@@ -6,7 +6,7 @@ const parser_1 = require("../../../json/parser");
6
6
  const normalize_meta_1 = require("../../normalize-meta");
7
7
  const assert_1 = require("../../../../../../../util/assert");
8
8
  const log_1 = require("../../../../../../../util/log");
9
- const strings_1 = require("../../../../../../../util/strings");
9
+ const strings_1 = require("../../../../../../../util/text/strings");
10
10
  const type_1 = require("../../../../model/type");
11
11
  const operators_1 = require("../../../../model/operators");
12
12
  const normalize_single_node_1 = require("../structure/normalize-single-node");
@@ -4,7 +4,7 @@ exports.normalizeRootObjToAst = normalizeRootObjToAst;
4
4
  const normalize_meta_1 = require("../../normalize-meta");
5
5
  const normalize_expressions_1 = require("./normalize-expressions");
6
6
  const log_1 = require("../../../../../../../util/log");
7
- const arrays_1 = require("../../../../../../../util/arrays");
7
+ const arrays_1 = require("../../../../../../../util/collections/arrays");
8
8
  const type_1 = require("../../../../model/type");
9
9
  /**
10
10
  * Takes the parse dta as object and produces an undecorated, normalized AST.
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.tryNormalizeSymbol = tryNormalizeSymbol;
4
4
  const assert_1 = require("../../../../../../../util/assert");
5
5
  const normalize_meta_1 = require("../../normalize-meta");
6
- const strings_1 = require("../../../../../../../util/strings");
6
+ const strings_1 = require("../../../../../../../util/text/strings");
7
7
  const type_1 = require("../../../../model/type");
8
8
  /**
9
9
  * Normalize the given object as an R symbol (incorporating namespace information).
@@ -1,8 +1,8 @@
1
1
  import Parser from 'web-tree-sitter';
2
2
  import type { RParseRequest } from '../../retriever';
3
3
  import type { SyncParser } from '../../parser';
4
- export declare const DEFAULT_TREE_SITTER_R_WASM_PATH: string;
5
- export declare const DEFAULT_TREE_SITTER_WASM_PATH: string;
4
+ export declare const DEFAULT_TREE_SITTER_R_WASM_PATH = "./node_modules/@eagleoutice/tree-sitter-r/tree-sitter-r.wasm";
5
+ export declare const DEFAULT_TREE_SITTER_WASM_PATH = "./node_modules/web-tree-sitter/tree-sitter.wasm";
6
6
  /**
7
7
  * Synchronous and (way) faster alternative to the {@link RShell} using tree-sitter.
8
8
  */
@@ -8,8 +8,8 @@ const web_tree_sitter_1 = __importDefault(require("web-tree-sitter"));
8
8
  const fs_1 = __importDefault(require("fs"));
9
9
  const config_1 = require("../../../config");
10
10
  const log_1 = require("../../../util/log");
11
- exports.DEFAULT_TREE_SITTER_R_WASM_PATH = `${__dirname}/tree-sitter-r.wasm`;
12
- exports.DEFAULT_TREE_SITTER_WASM_PATH = `${__dirname}/tree-sitter.wasm`;
11
+ exports.DEFAULT_TREE_SITTER_R_WASM_PATH = './node_modules/@eagleoutice/tree-sitter-r/tree-sitter-r.wasm';
12
+ exports.DEFAULT_TREE_SITTER_WASM_PATH = './node_modules/web-tree-sitter/tree-sitter.wasm';
13
13
  const wasmLog = log_1.log.getSubLogger({ name: 'tree-sitter-wasm' });
14
14
  /**
15
15
  * Synchronous and (way) faster alternative to the {@link RShell} using tree-sitter.
@@ -27,13 +27,13 @@ class TreeSitterExecutor {
27
27
  const treeSitterWasmPath = overrideTreeSitterWasmPath ?? (0, config_1.getEngineConfig)('tree-sitter')?.treeSitterWasmPath ?? exports.DEFAULT_TREE_SITTER_WASM_PATH;
28
28
  // noinspection JSUnusedGlobalSymbols - this is used by emscripten, see https://emscripten.org/docs/api_reference/module.html
29
29
  await web_tree_sitter_1.default.init({
30
- locateFile: (path, prefix) => {
30
+ locateFile: treeSitterWasmPath ? (path, prefix) => {
31
31
  // allow setting a custom path for the tree sitter wasm file
32
32
  if (path.endsWith('tree-sitter.wasm')) {
33
33
  return treeSitterWasmPath;
34
34
  }
35
35
  return prefix + path;
36
- },
36
+ } : undefined,
37
37
  onAbort: (s) => wasmLog.error(`Tree-sitter wasm aborted: ${s}`),
38
38
  print: (s) => wasmLog.debug(s),
39
39
  printErr: (s) => wasmLog.error(s)
@@ -9,9 +9,9 @@ const type_1 = require("../ast/model/type");
9
9
  const retriever_1 = require("../../retriever");
10
10
  const convert_values_1 = require("../convert-values");
11
11
  const normalize_meta_1 = require("../ast/parser/main/normalize-meta");
12
- const arrays_1 = require("../../../util/arrays");
12
+ const arrays_1 = require("../../../util/collections/arrays");
13
13
  const r_function_call_1 = require("../ast/model/nodes/r-function-call");
14
- const strings_1 = require("../../../util/strings");
14
+ const strings_1 = require("../../../util/text/strings");
15
15
  const config_1 = require("../../../config");
16
16
  const log_1 = require("../../../util/log");
17
17
  /**
@@ -511,17 +511,35 @@ function convertTreeNode(node) {
511
511
  lexeme: node.text,
512
512
  ...defaultInfo
513
513
  };
514
+ case tree_sitter_types_1.TreeSitterType.Error:
515
+ return {
516
+ type: type_1.RType.ExpressionList,
517
+ location: undefined,
518
+ lexeme: undefined,
519
+ children: [],
520
+ grouping: undefined,
521
+ info: defaultInfo
522
+ };
514
523
  default:
515
524
  throw new normalizer_data_1.ParseError(`unexpected node type ${node.type} at ${JSON.stringify(range)}`);
516
525
  }
517
526
  }
518
527
  function makeSourceRange(node) {
519
- return [
520
- // tree-sitter is 0-based but we want 1-based
521
- node.startPosition.row + 1, node.startPosition.column + 1,
522
- // tree-sitter's end position is one off from ours, so we don't add 1 here
523
- node.endPosition.row + 1, node.endPosition.column
524
- ];
528
+ if (node.startPosition && node.endPosition) {
529
+ return [
530
+ // tree-sitter is 0-based but we want 1-based
531
+ node.startPosition.row + 1, node.startPosition.column + 1,
532
+ // tree-sitter's end position is one off from ours, so we don't add 1 here
533
+ node.endPosition.row + 1, node.endPosition.column
534
+ ];
535
+ }
536
+ else {
537
+ return [
538
+ (node.startPosition?.row ?? -2) + 1, (node.startPosition?.column ?? -2) + 1,
539
+ // tree-sitter's end position is one off from ours, so we don't add 1 here
540
+ (node.endPosition?.row ?? -2) + 1, node.endPosition?.column ?? -1
541
+ ];
542
+ }
525
543
  }
526
544
  function splitComments(nodes) {
527
545
  const comments = [];
@@ -12,7 +12,7 @@ exports.retrieveParseDataFromRCode = retrieveParseDataFromRCode;
12
12
  exports.retrieveNormalizedAstFromRCode = retrieveNormalizedAstFromRCode;
13
13
  exports.removeRQuotes = removeRQuotes;
14
14
  exports.retrieveNumberOfRTokensOfLastParse = retrieveNumberOfRTokensOfLastParse;
15
- const strings_1 = require("../util/strings");
15
+ const strings_1 = require("../util/text/strings");
16
16
  const assert_1 = require("../util/assert");
17
17
  const shell_executor_1 = require("./shell-executor");
18
18
  const parser_1 = require("./lang-4.x/ast/parser/json/parser");
@@ -1,7 +1,7 @@
1
1
  import type { FlowrSearchElement, FlowrSearchGeneratorNodeBase, FlowrSearchGetFilter, FlowrSearchInput } from '../flowr-search';
2
2
  import { FlowrSearchElements } from '../flowr-search';
3
3
  import type { Pipeline } from '../../core/steps/pipeline/pipeline';
4
- import type { TailTypesOrUndefined } from '../../util/arrays';
4
+ import type { TailTypesOrUndefined } from '../../util/collections/arrays';
5
5
  import type { ParentInformation } from '../../r-bridge/lang-4.x/ast/model/processing/decorate';
6
6
  import type { SlicingCriteria } from '../../slicing/criterion/parse';
7
7
  /**
@@ -1,6 +1,6 @@
1
1
  import type { FlowrSearchElement, FlowrSearchElements, FlowrSearchInput, FlowrSearchTransformerNodeBase } from '../flowr-search';
2
2
  import type { Pipeline } from '../../core/steps/pipeline/pipeline';
3
- import type { LastOfArray, Tail2TypesOrUndefined, TailOfArray } from '../../util/arrays';
3
+ import type { LastOfArray, Tail2TypesOrUndefined, TailOfArray } from '../../util/collections/arrays';
4
4
  import type { FlowrFilterExpression } from '../flowr-search-filters';
5
5
  import type { FlowrSearchGeneratorNode } from './search-generators';
6
6
  import type { ParentInformation } from '../../r-bridge/lang-4.x/ast/model/processing/decorate';
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.collectAllSlicingCriteria = collectAllSlicingCriteria;
4
4
  const assert_1 = require("../../util/assert");
5
- const arrays_1 = require("../../util/arrays");
5
+ const arrays_1 = require("../../util/collections/arrays");
6
6
  const r_function_call_1 = require("../../r-bridge/lang-4.x/ast/model/nodes/r-function-call");
7
7
  /**
8
8
  * Will create all possible slicing criteria for the given ast, based on the {@link SlicingCriteriaFilter}.
@@ -24,13 +24,13 @@ function getAllFunctionCallTargets(dataflowGraph, callerInfo, baseEnvironment, q
24
24
  const activeEnvironment = (0, built_in_function_definition_1.retrieveActiveEnvironment)(callerInfo.environment, baseEnvironment);
25
25
  const name = callerInfo.name;
26
26
  (0, assert_1.guard)(name !== undefined, () => `name of id: ${callerInfo.id} can not be found in id map`);
27
- const functionCallDefs = (0, resolve_by_name_1.resolveByName)(name, activeEnvironment, identifier_1.ReferenceType.Unknown)?.filter(d => d.definedAt !== built_in_1.BuiltIn)?.map(d => d.nodeId) ?? [];
27
+ const functionCallDefs = (0, resolve_by_name_1.resolveByName)(name, activeEnvironment, identifier_1.ReferenceType.Unknown)?.filter(d => !(0, built_in_1.isBuiltIn)(d.definedAt))?.map(d => d.nodeId) ?? [];
28
28
  for (const [target, outgoingEdge] of outgoingEdges[1].entries()) {
29
29
  if ((0, edge_1.edgeIncludesType)(outgoingEdge.types, edge_1.EdgeType.Calls)) {
30
30
  functionCallDefs.push(target);
31
31
  }
32
32
  }
33
- const functionCallTargets = queue.memoizeCallTargets(functionCallDefs.join(';'), () => (0, linker_1.getAllLinkedFunctionDefinitions)(new Set(functionCallDefs), dataflowGraph));
33
+ const functionCallTargets = queue.memoizeCallTargets(functionCallDefs.join(';'), () => (0, linker_1.getAllLinkedFunctionDefinitions)(new Set(functionCallDefs), dataflowGraph)[0]);
34
34
  return [functionCallTargets, activeEnvironment];
35
35
  }
36
36
  function includeArgumentFunctionCallClosure(arg, baseEnvironment, activeEnvironment, queue, dataflowGraph) {
@@ -38,7 +38,7 @@ function includeArgumentFunctionCallClosure(arg, baseEnvironment, activeEnvironm
38
38
  if (!valueRoot) {
39
39
  return;
40
40
  }
41
- const callTargets = queue.memoizeCallTargets(valueRoot, () => (0, linker_1.getAllLinkedFunctionDefinitions)(new Set([valueRoot]), dataflowGraph));
41
+ const callTargets = queue.memoizeCallTargets(valueRoot, () => (0, linker_1.getAllLinkedFunctionDefinitions)(new Set([valueRoot]), dataflowGraph)[0]);
42
42
  linkCallTargets(false, callTargets, activeEnvironment, (0, fingerprint_1.envFingerprint)(activeEnvironment), queue);
43
43
  }
44
44
  function linkCallTargets(onlyForSideEffects, functionCallTargets, activeEnvironment, activeEnvironmentFingerprint, queue) {
@@ -46,6 +46,16 @@ function linkCallTargets(onlyForSideEffects, functionCallTargets, activeEnvironm
46
46
  for (const exitPoint of functionCallTarget.exitPoints) {
47
47
  queue.add(exitPoint, activeEnvironment, activeEnvironmentFingerprint, onlyForSideEffects);
48
48
  }
49
+ // handle open reads
50
+ for (const openIn of functionCallTarget.subflow.in) {
51
+ // resolve them in the active env
52
+ if (openIn.name) {
53
+ const resolved = (0, resolve_by_name_1.resolveByName)(openIn.name, activeEnvironment, identifier_1.ReferenceType.Unknown);
54
+ for (const res of resolved ?? []) {
55
+ (0, static_slicer_1.updatePotentialAddition)(queue, functionCallTarget.id, res.nodeId, activeEnvironment, activeEnvironmentFingerprint);
56
+ }
57
+ }
58
+ }
49
59
  }
50
60
  }
51
61
  /** returns the new threshold hit count */
@@ -7,7 +7,7 @@ exports.postProcess = postProcess;
7
7
  const common_syntax_probability_1 = require("../../common-syntax-probability");
8
8
  const fs_1 = __importDefault(require("fs"));
9
9
  const path_1 = __importDefault(require("path"));
10
- const arrays_1 = require("../../../../util/arrays");
10
+ const arrays_1 = require("../../../../util/collections/arrays");
11
11
  const assert_1 = require("../../../../util/assert");
12
12
  const numbers_1 = require("../../../../util/numbers");
13
13
  const summarizer_1 = require("../../../../util/summarizer");
@@ -10,8 +10,8 @@ const defined_functions_1 = require("./defined-functions");
10
10
  const post_processing_1 = require("../../post-processing");
11
11
  const summarizer_1 = require("../../../../util/summarizer");
12
12
  const files_1 = require("../../../../util/files");
13
- const time_1 = require("../../../../util/time");
14
- const arrays_1 = require("../../../../util/arrays");
13
+ const time_1 = require("../../../../util/text/time");
14
+ const arrays_1 = require("../../../../util/collections/arrays");
15
15
  function getFnDefCsv(idx, info) {
16
16
  return `${JSON.stringify(idx)},${(0, summarizer_1.summarizedMeasurement2Csv)((0, summarizer_1.summarizeMeasurement)(info.total.flat()))}`
17
17
  + `,${(0, summarizer_1.summarizedMeasurement2Csv)((0, summarizer_1.summarizeMeasurement)(info.parameters.flat()))}`
@@ -10,7 +10,7 @@ const fs_1 = __importDefault(require("fs"));
10
10
  const used_functions_1 = require("./used-functions");
11
11
  const summarizer_1 = require("../../../../util/summarizer");
12
12
  const files_1 = require("../../../../util/files");
13
- const time_1 = require("../../../../util/time");
13
+ const time_1 = require("../../../../util/text/time");
14
14
  const numbers_1 = require("../../../../util/numbers");
15
15
  function retrieveFunctionCallInformation(featureRoot, info, config, outputPath) {
16
16
  // each number[][] contains a 'number[]' per file
@@ -10,8 +10,8 @@ const fs_1 = __importDefault(require("fs"));
10
10
  const path_1 = __importDefault(require("path"));
11
11
  const summarizer_1 = require("../../../../util/summarizer");
12
12
  const files_1 = require("../../../../util/files");
13
- const strings_1 = require("../../../../util/strings");
14
- const arrays_1 = require("../../../../util/arrays");
13
+ const strings_1 = require("../../../../util/text/strings");
14
+ const arrays_1 = require("../../../../util/collections/arrays");
15
15
  function postProcess(featureRoot, info, outputPath, config) {
16
16
  const collected = {};
17
17
  for (const [filepath, data] of info.entries()) {
@@ -8,9 +8,9 @@ const fs_1 = __importDefault(require("fs"));
8
8
  const path_1 = __importDefault(require("path"));
9
9
  const post_processing_1 = require("../../post-processing");
10
10
  const summarizer_1 = require("../../../../util/summarizer");
11
- const time_1 = require("../../../../util/time");
11
+ const time_1 = require("../../../../util/text/time");
12
12
  const files_1 = require("../../../../util/files");
13
- const arrays_1 = require("../../../../util/arrays");
13
+ const arrays_1 = require("../../../../util/collections/arrays");
14
14
  function postProcess(featureRoot, info, outputPath, config) {
15
15
  const collected = {};
16
16
  for (const [filepath, data] of info.entries()) {
@@ -4,10 +4,10 @@ exports.minMaxAvgAndMedian = minMaxAvgAndMedian;
4
4
  exports.statsString = statsString;
5
5
  exports.printFeatureStatistics = printFeatureStatistics;
6
6
  exports.printFeatureStatisticsEntry = printFeatureStatisticsEntry;
7
- const ansi_1 = require("../../util/ansi");
7
+ const ansi_1 = require("../../util/text/ansi");
8
8
  const json_1 = require("../../util/json");
9
9
  const feature_1 = require("../features/feature");
10
- const arrays_1 = require("../../util/arrays");
10
+ const arrays_1 = require("../../util/collections/arrays");
11
11
  function minMaxAvgAndMedian(data) {
12
12
  data = data.sort((a, b) => a - b);
13
13
  const sum = (0, arrays_1.arraySum)(data);
@@ -1,4 +1,4 @@
1
- import { DefaultMap } from '../../../util/defaultmap';
1
+ import { DefaultMap } from '../../../util/collections/defaultmap';
2
2
  import type { MergeableRecord } from '../../../util/objects';
3
3
  import type { NodeId } from '../../../r-bridge/lang-4.x/ast/model/processing/node-id';
4
4
  export type ContextsWithCount = DefaultMap<NodeId, number>;
@@ -11,7 +11,7 @@ exports.clusterStatisticsOutput = clusterStatisticsOutput;
11
11
  * @module
12
12
  */
13
13
  const n_readlines_1 = __importDefault(require("n-readlines"));
14
- const defaultmap_1 = require("../../../util/defaultmap");
14
+ const defaultmap_1 = require("../../../util/collections/defaultmap");
15
15
  const decorate_1 = require("../../../r-bridge/lang-4.x/ast/model/processing/decorate");
16
16
  /**
17
17
  * Takes a statistics file like `statistics-out/top-2023-01-01-00-00-00/Assignments/assignmentOperator.txt` and clusters the values by context
@@ -7,11 +7,11 @@ exports.histogramsFromClusters = histogramsFromClusters;
7
7
  exports.histogramFromNumbers = histogramFromNumbers;
8
8
  exports.histograms2table = histograms2table;
9
9
  const fs_1 = __importDefault(require("fs"));
10
- const bimap_1 = require("../../../util/bimap");
11
- const defaultmap_1 = require("../../../util/defaultmap");
10
+ const bimap_1 = require("../../../util/collections/bimap");
11
+ const defaultmap_1 = require("../../../util/collections/defaultmap");
12
12
  const assert_1 = require("../../../util/assert");
13
13
  const summarizer_1 = require("../../../util/summarizer");
14
- const arrays_1 = require("../../../util/arrays");
14
+ const arrays_1 = require("../../../util/collections/arrays");
15
15
  /**
16
16
  * Produces column-wise histogram-information based on a {@link ClusterReport}.
17
17
  *
@@ -9,12 +9,12 @@ const path_1 = __importDefault(require("path"));
9
9
  const fs_1 = __importDefault(require("fs"));
10
10
  const clusterer_1 = require("./clusterer");
11
11
  const log_1 = require("../../../util/log");
12
- const defaultmap_1 = require("../../../util/defaultmap");
13
- const ansi_1 = require("../../../util/ansi");
12
+ const defaultmap_1 = require("../../../util/collections/defaultmap");
13
+ const ansi_1 = require("../../../util/text/ansi");
14
14
  const feature_1 = require("../../features/feature");
15
15
  const decorate_1 = require("../../../r-bridge/lang-4.x/ast/model/processing/decorate");
16
16
  const file_provider_1 = require("../../output/file-provider");
17
- const arrays_1 = require("../../../util/arrays");
17
+ const arrays_1 = require("../../../util/collections/arrays");
18
18
  /**
19
19
  * Post process the collections in a given folder, reducing them in a memory preserving way.
20
20
  *
@@ -7,9 +7,9 @@ exports.postProcessFeatures = postProcessFeatures;
7
7
  exports.postProcessFeatureFolder = postProcessFeatureFolder;
8
8
  const fs_1 = __importDefault(require("fs"));
9
9
  const path_1 = __importDefault(require("path"));
10
- const time_1 = require("../../../util/time");
10
+ const time_1 = require("../../../util/text/time");
11
11
  const summarizer_1 = require("../../../util/summarizer");
12
- const arrays_1 = require("../../../util/arrays");
12
+ const arrays_1 = require("../../../util/collections/arrays");
13
13
  const files_1 = require("../../../util/files");
14
14
  const assert_1 = require("../../../util/assert");
15
15
  const feature_1 = require("../../features/feature");
@@ -10,9 +10,9 @@ const path_1 = __importDefault(require("path"));
10
10
  const process_1 = require("./first-phase/process");
11
11
  const process_2 = require("./second-phase/process");
12
12
  const summarizer_1 = require("../../util/summarizer");
13
- const strings_1 = require("../../util/strings");
13
+ const strings_1 = require("../../util/text/strings");
14
14
  const files_1 = require("../../util/files");
15
- const time_1 = require("../../util/time");
15
+ const time_1 = require("../../util/text/time");
16
16
  const log_1 = require("../../util/log");
17
17
  exports.statisticsFileNameRegex = /.*--.*\.tar\.gz$/;
18
18
  /**
package/util/assert.js CHANGED
@@ -7,6 +7,7 @@ exports.isUndefined = isUndefined;
7
7
  exports.isNotNull = isNotNull;
8
8
  exports.guard = guard;
9
9
  /* v8 ignore next */
10
+ const version_1 = require("./version");
10
11
  function assertUnreachable(x) {
11
12
  throw new Error(`Unexpected object: ${JSON.stringify(x)}`);
12
13
  }
@@ -19,9 +20,43 @@ function isUndefined(x) {
19
20
  function isNotNull(x) {
20
21
  return x !== null;
21
22
  }
23
+ function prepareStack(stack) {
24
+ if (!stack) {
25
+ return 'No stack trace available';
26
+ }
27
+ // remove the first line which is the error message
28
+ let lines = stack.split('\n');
29
+ lines.shift();
30
+ lines.shift();
31
+ lines.shift();
32
+ // clip over 8
33
+ if (lines.length > 8) {
34
+ lines = [...lines.slice(0, 3),
35
+ '...', ...lines.slice(lines.length - 5)];
36
+ }
37
+ return lines.map(l => l.replaceAll(/\(\/.*(src|test)/g, '(<>/$1')).join('\n');
38
+ }
39
+ function getGuardIssueUrl(message) {
40
+ const body = encodeURIComponent(`<!-- Please describe your issue in more detail below! -->
41
+
42
+
43
+ <!-- Automatically generated issue metadata, please do not edit or delete content below this line -->
44
+ ---
45
+
46
+ flowR version: ${(0, version_1.flowrVersion)().toString()}
47
+ node version: ${process.version}
48
+ node arch: ${process.arch}
49
+ node platform: ${process.platform}
50
+ message: \`${message}\`
51
+ stack trace:\n\`\`\`\n${prepareStack(new Error().stack)}\n\`\`\`
52
+
53
+ ---
54
+ `).replaceAll('(', '%28').replaceAll(')', '%29').replaceAll('-', '%2D');
55
+ return `https://github.com/flowr-analysis/flowr/issues/new?body=${body}`;
56
+ }
22
57
  class GuardError extends Error {
23
58
  constructor(message) {
24
- super(message);
59
+ super(message + '\n Report a Bug: ' + getGuardIssueUrl(message));
25
60
  this.name = 'GuardError';
26
61
  }
27
62
  }