@eagleoutice/flowr 2.2.0 → 2.2.2

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 (50) hide show
  1. package/cli/flowr.js +2 -1
  2. package/cli/repl/commands/repl-cfg.js +30 -7
  3. package/cli/repl/commands/repl-dataflow.js +22 -2
  4. package/cli/repl/commands/repl-normalize.js +22 -2
  5. package/cli/repl/commands/repl-parse.js +8 -2
  6. package/cli/repl/core.js +4 -0
  7. package/cli/repl/server/connection.js +1 -1
  8. package/cli/script-core/statistics-helper-core.js +1 -1
  9. package/config.js +8 -1
  10. package/dataflow/environments/resolve-by-name.js +5 -4
  11. package/dataflow/extractor.js +1 -1
  12. package/dataflow/graph/dataflowgraph-builder.d.ts +11 -10
  13. package/dataflow/graph/dataflowgraph-builder.js +11 -10
  14. package/dataflow/graph/edge.d.ts +1 -1
  15. package/dataflow/graph/edge.js +2 -2
  16. package/dataflow/graph/vertex.d.ts +6 -6
  17. package/dataflow/graph/vertex.js +5 -5
  18. package/dataflow/internal/process/functions/call/built-in/built-in-access.js +9 -5
  19. package/dataflow/internal/process/functions/call/built-in/built-in-source.js +2 -2
  20. package/documentation/doc-util/doc-cfg.js +2 -2
  21. package/documentation/doc-util/doc-types.js +3 -3
  22. package/documentation/print-interface-wiki.js +0 -2
  23. package/documentation/print-query-wiki.js +54 -0
  24. package/package.json +8 -6
  25. package/queries/catalog/call-context-query/call-context-query-executor.js +1 -1
  26. package/queries/catalog/happens-before-query/happens-before-query-executor.d.ts +3 -0
  27. package/queries/catalog/happens-before-query/happens-before-query-executor.js +36 -0
  28. package/queries/catalog/happens-before-query/happens-before-query-format.d.ts +71 -0
  29. package/queries/catalog/happens-before-query/happens-before-query-format.js +27 -0
  30. package/queries/catalog/resolve-value-query/resolve-value-query-executor.d.ts +4 -0
  31. package/queries/catalog/resolve-value-query/resolve-value-query-executor.js +34 -0
  32. package/queries/catalog/resolve-value-query/resolve-value-query-format.d.ts +72 -0
  33. package/queries/catalog/resolve-value-query/resolve-value-query-format.js +49 -0
  34. package/queries/catalog/search-query/search-query-executor.js +0 -4
  35. package/queries/query.d.ts +119 -1
  36. package/queries/query.js +5 -1
  37. package/r-bridge/data/data.d.ts +2 -2
  38. package/r-bridge/data/data.js +2 -2
  39. package/r-bridge/lang-4.x/tree-sitter/tree-sitter-normalize.js +46 -29
  40. package/r-bridge/lang-4.x/tree-sitter/tree-sitter-types.d.ts +4 -1
  41. package/r-bridge/lang-4.x/tree-sitter/tree-sitter-types.js +3 -0
  42. package/util/cfg/cfg.d.ts +12 -1
  43. package/util/cfg/cfg.js +64 -10
  44. package/util/cfg/happens-before.d.ts +7 -0
  45. package/util/cfg/happens-before.js +32 -0
  46. package/util/logic.d.ts +4 -4
  47. package/util/logic.js +8 -0
  48. package/util/range.d.ts +21 -0
  49. package/util/range.js +3 -0
  50. package/util/version.js +1 -1
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.happensBefore = happensBefore;
4
+ const logic_1 = require("../logic");
5
+ /**
6
+ * Determines if node `a` happens before node `b` in the control flow graph.
7
+ */
8
+ function happensBefore(cfg, a, b) {
9
+ const visited = new Set();
10
+ /* the first is the id we are currently at, the second one the exit marker of the current largest cd scope */
11
+ const stack = [[b, undefined]];
12
+ while (stack.length > 0) {
13
+ const [current, cd] = stack.pop();
14
+ let useCd = cd;
15
+ if (current === a) {
16
+ return cd ? logic_1.Ternary.Maybe : logic_1.Ternary.Always;
17
+ }
18
+ else if (visited.has(current)) {
19
+ continue;
20
+ }
21
+ else if (cd && (current === cd || visited.has(cd))) {
22
+ useCd = undefined;
23
+ }
24
+ visited.add(current);
25
+ for (const [id, t] of cfg.outgoing(current) ?? []) {
26
+ const marker = t.label === 'CD' ? `${t.caused}-exit` : useCd;
27
+ stack.push([id, useCd ?? marker]);
28
+ }
29
+ }
30
+ return logic_1.Ternary.Never;
31
+ }
32
+ //# sourceMappingURL=happens-before.js.map
package/util/logic.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- export declare const enum Ternary {
2
- Always = 0,
3
- Maybe = 1,
4
- Never = 2
1
+ export declare enum Ternary {
2
+ Always = "always",
3
+ Maybe = "maybe",
4
+ Never = "never"
5
5
  }
package/util/logic.js CHANGED
@@ -1,3 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Ternary = void 0;
4
+ // diverging from boolean | maybe requires explicit handling
5
+ var Ternary;
6
+ (function (Ternary) {
7
+ Ternary["Always"] = "always";
8
+ Ternary["Maybe"] = "maybe";
9
+ Ternary["Never"] = "never";
10
+ })(Ternary || (exports.Ternary = Ternary = {}));
3
11
  //# sourceMappingURL=logic.js.map
package/util/range.d.ts CHANGED
@@ -1,9 +1,27 @@
1
+ /**
2
+ * A source position in a file.
3
+ *
4
+ * Please note that some packages like `xmlparsedata` use their own start and end only to break ties
5
+ * (e.g., `xmlparsedata` calculates them on a max col width approximation)
6
+ */
1
7
  export type SourcePosition = [
2
8
  /** starts with 1 */
3
9
  line: number,
4
10
  /** starts with 1 */
5
11
  column: number
6
12
  ];
13
+ /**
14
+ * Describe the start and end {@link SourcePosition|source position} of an element.
15
+ *
16
+ * @see {@link rangeFrom} - to create a range
17
+ * @see {@link mergeRanges} - to merge multiple ranges
18
+ * @see {@link getRangeStart} - to get the start of a range
19
+ * @see {@link getRangeEnd} - to get the end of a range
20
+ * @see {@link rangeStartsCompletelyBefore} - to check if one range starts before another
21
+ * @see {@link rangesOverlap} - to check if two ranges overlap
22
+ * @see {@link addRanges} - to add two ranges
23
+ * @see {@link rangeCompare} - to compare two ranges
24
+ */
7
25
  export type SourceRange = [
8
26
  /** inclusive start position */
9
27
  startLine: number,
@@ -36,6 +54,9 @@ export declare function rangeStartsCompletelyBefore([, , r1el, r1ec]: SourceRang
36
54
  * Checks if the two ranges overlap.
37
55
  */
38
56
  export declare function rangesOverlap([r1sl, r1sc, r1el, r1ec]: SourceRange, [r2sl, r2sc, r2el, r2ec]: SourceRange): boolean;
57
+ /**
58
+ * Calculate the component-wise sum of two ranges
59
+ */
39
60
  export declare function addRanges([r1sl, r1sc, r1el, r1ec]: SourceRange, [r2sl, r2sc, r2el, r2ec]: SourceRange): SourceRange;
40
61
  /**
41
62
  * Provides a comparator for {@link SourceRange}s that sorts them in ascending order.
package/util/range.js CHANGED
@@ -45,6 +45,9 @@ function rangeStartsCompletelyBefore([, , r1el, r1ec], [r2sl, r2sc, ,]) {
45
45
  function rangesOverlap([r1sl, r1sc, r1el, r1ec], [r2sl, r2sc, r2el, r2ec]) {
46
46
  return r1sl <= r2el && r2sl <= r1el && r1sc <= r2ec && r2sc <= r1ec;
47
47
  }
48
+ /**
49
+ * Calculate the component-wise sum of two ranges
50
+ */
48
51
  function addRanges([r1sl, r1sc, r1el, r1ec], [r2sl, r2sc, r2el, r2ec]) {
49
52
  return [r1sl + r2sl, r1sc + r2sc, r1el + r2el, r1ec + r2ec];
50
53
  }
package/util/version.js CHANGED
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.flowrVersion = flowrVersion;
4
4
  const semver_1 = require("semver");
5
5
  // this is automatically replaced with the current version by release-it
6
- const version = '2.2.0';
6
+ const version = '2.2.2';
7
7
  function flowrVersion() {
8
8
  return new semver_1.SemVer(version);
9
9
  }