@eagleoutice/flowr 1.4.2 → 1.5.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 (223) hide show
  1. package/core/print/slice-diff-ansi.js +7 -7
  2. package/core/steps.d.ts +352 -11
  3. package/core/steps.js +4 -4
  4. package/index.d.ts +0 -2
  5. package/index.js +0 -2
  6. package/package.json +65 -215
  7. package/util/{summarizer/summarizer.d.ts → summarizer.d.ts} +15 -1
  8. package/util/summarizer.js +37 -0
  9. package/util/version.d.ts +2 -0
  10. package/util/version.js +10 -0
  11. package/benchmark/index.d.ts +0 -3
  12. package/benchmark/index.js +0 -20
  13. package/benchmark/slicer.d.ts +0 -98
  14. package/benchmark/slicer.js +0 -213
  15. package/benchmark/stats/index.d.ts +0 -10
  16. package/benchmark/stats/index.js +0 -27
  17. package/benchmark/stats/print.d.ts +0 -7
  18. package/benchmark/stats/print.js +0 -155
  19. package/benchmark/stats/stats.d.ts +0 -40
  20. package/benchmark/stats/stats.js +0 -6
  21. package/benchmark/stopwatch.d.ts +0 -35
  22. package/benchmark/stopwatch.js +0 -79
  23. package/cli/benchmark-app.d.ts +0 -10
  24. package/cli/benchmark-app.js +0 -67
  25. package/cli/benchmark-helper-app.d.ts +0 -9
  26. package/cli/benchmark-helper-app.js +0 -69
  27. package/cli/common/features.d.ts +0 -3
  28. package/cli/common/features.js +0 -30
  29. package/cli/common/index.d.ts +0 -2
  30. package/cli/common/index.js +0 -19
  31. package/cli/common/options.d.ts +0 -20
  32. package/cli/common/options.js +0 -85
  33. package/cli/common/script.d.ts +0 -21
  34. package/cli/common/script.js +0 -61
  35. package/cli/common/scripts-info.d.ts +0 -25
  36. package/cli/common/scripts-info.js +0 -83
  37. package/cli/export-quads-app.d.ts +0 -7
  38. package/cli/export-quads-app.js +0 -42
  39. package/cli/repl/commands/cfg.d.ts +0 -3
  40. package/cli/repl/commands/cfg.js +0 -37
  41. package/cli/repl/commands/commands.d.ts +0 -13
  42. package/cli/repl/commands/commands.js +0 -142
  43. package/cli/repl/commands/dataflow.d.ts +0 -3
  44. package/cli/repl/commands/dataflow.js +0 -34
  45. package/cli/repl/commands/execute.d.ts +0 -4
  46. package/cli/repl/commands/execute.js +0 -27
  47. package/cli/repl/commands/index.d.ts +0 -2
  48. package/cli/repl/commands/index.js +0 -19
  49. package/cli/repl/commands/main.d.ts +0 -39
  50. package/cli/repl/commands/main.js +0 -14
  51. package/cli/repl/commands/normalize.d.ts +0 -3
  52. package/cli/repl/commands/normalize.js +0 -34
  53. package/cli/repl/commands/parse.d.ts +0 -2
  54. package/cli/repl/commands/parse.js +0 -109
  55. package/cli/repl/commands/quit.d.ts +0 -2
  56. package/cli/repl/commands/quit.js +0 -15
  57. package/cli/repl/commands/version.d.ts +0 -16
  58. package/cli/repl/commands/version.js +0 -33
  59. package/cli/repl/core.d.ts +0 -41
  60. package/cli/repl/core.js +0 -172
  61. package/cli/repl/execute.d.ts +0 -28
  62. package/cli/repl/execute.js +0 -79
  63. package/cli/repl/index.d.ts +0 -5
  64. package/cli/repl/index.js +0 -22
  65. package/cli/repl/prompt.d.ts +0 -2
  66. package/cli/repl/prompt.js +0 -9
  67. package/cli/repl/server/connection.d.ts +0 -21
  68. package/cli/repl/server/connection.js +0 -213
  69. package/cli/repl/server/messages/analysis.d.ts +0 -71
  70. package/cli/repl/server/messages/analysis.js +0 -21
  71. package/cli/repl/server/messages/error.d.ts +0 -11
  72. package/cli/repl/server/messages/error.js +0 -3
  73. package/cli/repl/server/messages/hello.d.ts +0 -20
  74. package/cli/repl/server/messages/hello.js +0 -3
  75. package/cli/repl/server/messages/index.d.ts +0 -1
  76. package/cli/repl/server/messages/index.js +0 -3
  77. package/cli/repl/server/messages/messages.d.ts +0 -35
  78. package/cli/repl/server/messages/messages.js +0 -40
  79. package/cli/repl/server/messages/repl.d.ts +0 -33
  80. package/cli/repl/server/messages/repl.js +0 -37
  81. package/cli/repl/server/messages/slice.d.ts +0 -25
  82. package/cli/repl/server/messages/slice.js +0 -37
  83. package/cli/repl/server/net.d.ts +0 -49
  84. package/cli/repl/server/net.js +0 -63
  85. package/cli/repl/server/send.d.ts +0 -4
  86. package/cli/repl/server/send.js +0 -18
  87. package/cli/repl/server/server.d.ts +0 -20
  88. package/cli/repl/server/server.js +0 -66
  89. package/cli/repl/server/validate.d.ts +0 -15
  90. package/cli/repl/server/validate.js +0 -34
  91. package/cli/slicer-app.d.ts +0 -11
  92. package/cli/slicer-app.js +0 -81
  93. package/cli/statistics-app.d.ts +0 -11
  94. package/cli/statistics-app.js +0 -98
  95. package/cli/statistics-helper-app.d.ts +0 -11
  96. package/cli/statistics-helper-app.js +0 -82
  97. package/cli/summarizer-app.d.ts +0 -18
  98. package/cli/summarizer-app.js +0 -66
  99. package/flowr.d.ts +0 -29
  100. package/flowr.js +0 -142
  101. package/statistics/features/common-syntax-probability.d.ts +0 -31
  102. package/statistics/features/common-syntax-probability.js +0 -156
  103. package/statistics/features/feature.d.ts +0 -175
  104. package/statistics/features/feature.js +0 -30
  105. package/statistics/features/index.d.ts +0 -1
  106. package/statistics/features/index.js +0 -18
  107. package/statistics/features/post-processing.d.ts +0 -12
  108. package/statistics/features/post-processing.js +0 -21
  109. package/statistics/features/supported/assignments/assignments.d.ts +0 -11
  110. package/statistics/features/supported/assignments/assignments.js +0 -53
  111. package/statistics/features/supported/assignments/index.d.ts +0 -1
  112. package/statistics/features/supported/assignments/index.js +0 -6
  113. package/statistics/features/supported/assignments/post-process.d.ts +0 -3
  114. package/statistics/features/supported/assignments/post-process.js +0 -125
  115. package/statistics/features/supported/comments/comments.d.ts +0 -18
  116. package/statistics/features/supported/comments/comments.js +0 -133
  117. package/statistics/features/supported/comments/index.d.ts +0 -1
  118. package/statistics/features/supported/comments/index.js +0 -6
  119. package/statistics/features/supported/comments/post-process.d.ts +0 -3
  120. package/statistics/features/supported/comments/post-process.js +0 -50
  121. package/statistics/features/supported/control-flow/control-flow.d.ts +0 -17
  122. package/statistics/features/supported/control-flow/control-flow.js +0 -67
  123. package/statistics/features/supported/control-flow/index.d.ts +0 -1
  124. package/statistics/features/supported/control-flow/index.js +0 -6
  125. package/statistics/features/supported/control-flow/post-process.d.ts +0 -3
  126. package/statistics/features/supported/control-flow/post-process.js +0 -65
  127. package/statistics/features/supported/data-access/data-access.d.ts +0 -15
  128. package/statistics/features/supported/data-access/data-access.js +0 -118
  129. package/statistics/features/supported/data-access/index.d.ts +0 -1
  130. package/statistics/features/supported/data-access/index.js +0 -6
  131. package/statistics/features/supported/data-access/post-process.d.ts +0 -3
  132. package/statistics/features/supported/data-access/post-process.js +0 -107
  133. package/statistics/features/supported/defined-functions/defined-functions.d.ts +0 -35
  134. package/statistics/features/supported/defined-functions/defined-functions.js +0 -139
  135. package/statistics/features/supported/defined-functions/index.d.ts +0 -1
  136. package/statistics/features/supported/defined-functions/index.js +0 -6
  137. package/statistics/features/supported/defined-functions/post-process.d.ts +0 -6
  138. package/statistics/features/supported/defined-functions/post-process.js +0 -177
  139. package/statistics/features/supported/expression-list/expression-list.d.ts +0 -9
  140. package/statistics/features/supported/expression-list/expression-list.js +0 -36
  141. package/statistics/features/supported/expression-list/index.d.ts +0 -1
  142. package/statistics/features/supported/expression-list/index.js +0 -6
  143. package/statistics/features/supported/expression-list/post-process.d.ts +0 -3
  144. package/statistics/features/supported/expression-list/post-process.js +0 -44
  145. package/statistics/features/supported/index.d.ts +0 -10
  146. package/statistics/features/supported/index.js +0 -27
  147. package/statistics/features/supported/loops/index.d.ts +0 -1
  148. package/statistics/features/supported/loops/index.js +0 -6
  149. package/statistics/features/supported/loops/loops.d.ts +0 -20
  150. package/statistics/features/supported/loops/loops.js +0 -79
  151. package/statistics/features/supported/loops/post-process.d.ts +0 -3
  152. package/statistics/features/supported/loops/post-process.js +0 -72
  153. package/statistics/features/supported/used-functions/index.d.ts +0 -1
  154. package/statistics/features/supported/used-functions/index.js +0 -6
  155. package/statistics/features/supported/used-functions/post-process.d.ts +0 -6
  156. package/statistics/features/supported/used-functions/post-process.js +0 -179
  157. package/statistics/features/supported/used-functions/used-functions.d.ts +0 -24
  158. package/statistics/features/supported/used-functions/used-functions.js +0 -95
  159. package/statistics/features/supported/used-packages/index.d.ts +0 -1
  160. package/statistics/features/supported/used-packages/index.js +0 -6
  161. package/statistics/features/supported/used-packages/post-process.d.ts +0 -3
  162. package/statistics/features/supported/used-packages/post-process.js +0 -121
  163. package/statistics/features/supported/used-packages/used-packages.d.ts +0 -16
  164. package/statistics/features/supported/used-packages/used-packages.js +0 -130
  165. package/statistics/features/supported/values/index.d.ts +0 -1
  166. package/statistics/features/supported/values/index.js +0 -6
  167. package/statistics/features/supported/values/post-process.d.ts +0 -3
  168. package/statistics/features/supported/values/post-process.js +0 -72
  169. package/statistics/features/supported/values/values.d.ts +0 -14
  170. package/statistics/features/supported/values/values.js +0 -101
  171. package/statistics/features/supported/variables/index.d.ts +0 -1
  172. package/statistics/features/supported/variables/index.js +0 -6
  173. package/statistics/features/supported/variables/post-process.d.ts +0 -9
  174. package/statistics/features/supported/variables/post-process.js +0 -122
  175. package/statistics/features/supported/variables/variables.d.ts +0 -15
  176. package/statistics/features/supported/variables/variables.js +0 -70
  177. package/statistics/index.d.ts +0 -6
  178. package/statistics/index.js +0 -24
  179. package/statistics/meta-statistics.d.ts +0 -33
  180. package/statistics/meta-statistics.js +0 -17
  181. package/statistics/output/file-provider.d.ts +0 -37
  182. package/statistics/output/file-provider.js +0 -97
  183. package/statistics/output/index.d.ts +0 -4
  184. package/statistics/output/index.js +0 -21
  185. package/statistics/output/print-stats.d.ts +0 -17
  186. package/statistics/output/print-stats.js +0 -69
  187. package/statistics/output/statistics-file.d.ts +0 -37
  188. package/statistics/output/statistics-file.js +0 -69
  189. package/statistics/statistics.d.ts +0 -24
  190. package/statistics/statistics.js +0 -108
  191. package/util/summarizer/auto-detect.d.ts +0 -2
  192. package/util/summarizer/auto-detect.js +0 -32
  193. package/util/summarizer/benchmark/data.d.ts +0 -66
  194. package/util/summarizer/benchmark/data.js +0 -13
  195. package/util/summarizer/benchmark/first-phase/input.d.ts +0 -3
  196. package/util/summarizer/benchmark/first-phase/input.js +0 -75
  197. package/util/summarizer/benchmark/first-phase/process.d.ts +0 -11
  198. package/util/summarizer/benchmark/first-phase/process.js +0 -217
  199. package/util/summarizer/benchmark/second-phase/graph.d.ts +0 -2
  200. package/util/summarizer/benchmark/second-phase/graph.js +0 -54
  201. package/util/summarizer/benchmark/second-phase/process.d.ts +0 -6
  202. package/util/summarizer/benchmark/second-phase/process.js +0 -126
  203. package/util/summarizer/benchmark/summarizer.d.ts +0 -31
  204. package/util/summarizer/benchmark/summarizer.js +0 -58
  205. package/util/summarizer/statistics/first-phase/process.d.ts +0 -6
  206. package/util/summarizer/statistics/first-phase/process.js +0 -81
  207. package/util/summarizer/statistics/post-process/clusterer.d.ts +0 -26
  208. package/util/summarizer/statistics/post-process/clusterer.js +0 -43
  209. package/util/summarizer/statistics/post-process/file-based-count.d.ts +0 -17
  210. package/util/summarizer/statistics/post-process/file-based-count.js +0 -49
  211. package/util/summarizer/statistics/post-process/histogram.d.ts +0 -59
  212. package/util/summarizer/statistics/post-process/histogram.js +0 -128
  213. package/util/summarizer/statistics/post-process/index.d.ts +0 -4
  214. package/util/summarizer/statistics/post-process/index.js +0 -21
  215. package/util/summarizer/statistics/post-process/post-process-output.d.ts +0 -16
  216. package/util/summarizer/statistics/post-process/post-process-output.js +0 -103
  217. package/util/summarizer/statistics/second-phase/process.d.ts +0 -11
  218. package/util/summarizer/statistics/second-phase/process.js +0 -117
  219. package/util/summarizer/statistics/summarizer.d.ts +0 -35
  220. package/util/summarizer/statistics/summarizer.js +0 -135
  221. package/util/summarizer/summarizer.js +0 -13
  222. /package/{statistics/output → util}/ansi.d.ts +0 -0
  223. /package/{statistics/output → util}/ansi.js +0 -0
@@ -1,72 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.postProcess = void 0;
7
- const data_1 = require("../../../../util/summarizer/benchmark/data");
8
- const fs_1 = __importDefault(require("fs"));
9
- const path_1 = __importDefault(require("path"));
10
- const process_1 = require("../../../../util/summarizer/benchmark/first-phase/process");
11
- const files_1 = require("../../../../util/files");
12
- const time_1 = require("../../../../util/time");
13
- const arrays_1 = require("../../../../util/arrays");
14
- const post_processing_1 = require("../../post-processing");
15
- function postProcess(featureRoot, info, outputPath, config) {
16
- const collected = {};
17
- for (const [filepath, data] of info.entries()) {
18
- const value = data.values;
19
- for (const [key, val] of Object.entries(value)) {
20
- let get = collected[key];
21
- if (!get) {
22
- get = (0, post_processing_1.emptySummarizedWithProject)();
23
- collected[key] = get;
24
- }
25
- get.count.push(val);
26
- if (val > 0) {
27
- (0, post_processing_1.recordFilePath)(get, filepath, config);
28
- }
29
- }
30
- }
31
- const valuesOutStream = fs_1.default.createWriteStream(path_1.default.join(outputPath, 'values.csv'));
32
- valuesOutStream.write(`kind,unique-projects,unique-files,${(0, data_1.summarizedMeasurement2CsvHeader)()}\n`);
33
- for (const [key, val] of Object.entries(collected)) {
34
- const data = val;
35
- const sum = (0, process_1.summarizeMeasurement)(data.count);
36
- valuesOutStream.write(`${JSON.stringify(key)},${data.uniqueProjects.size},${data.uniqueFiles.size},${(0, data_1.summarizedMeasurement2Csv)(sum)}\n`);
37
- }
38
- valuesOutStream.close();
39
- // now we read all numeric values to get the top used magic numbers (per file)
40
- const valueMap = new Map();
41
- (0, files_1.readLineByLineSync)(path_1.default.join(featureRoot, 'numeric.txt'), (line, lineNumber) => {
42
- if (line.length === 0) {
43
- return;
44
- }
45
- if (lineNumber % 2_500 === 0) {
46
- console.log(` [${(0, time_1.date2string)(new Date())}] Collecting numeric values ${lineNumber}`);
47
- }
48
- const [values, context] = JSON.parse(String(line));
49
- const bag = (0, arrays_1.array2bag)(values);
50
- for (const [key, val] of bag.entries()) {
51
- let get = valueMap.get(key);
52
- if (!get) {
53
- get = { count: [], uniqueFiles: new Set(), uniqueProjects: new Set() };
54
- valueMap.set(key, get);
55
- }
56
- get.count.push(val);
57
- if (val > 0) {
58
- get.uniqueFiles.add(context ?? '');
59
- get.uniqueProjects.add(context?.split(path_1.default.sep)[config.projectSkip] ?? '');
60
- }
61
- }
62
- });
63
- const magicNumbersOutStream = fs_1.default.createWriteStream(path_1.default.join(outputPath, 'magic-numbers.csv'));
64
- magicNumbersOutStream.write(`num,unique-projects,unique-files,${(0, data_1.summarizedMeasurement2CsvHeader)()}\n`);
65
- for (const [key, val] of valueMap.entries()) {
66
- const sum = (0, process_1.summarizeMeasurement)(val.count);
67
- magicNumbersOutStream.write(`${JSON.stringify(key)},${val.uniqueProjects.size},${val.uniqueFiles.size},${(0, data_1.summarizedMeasurement2Csv)(sum)}\n`);
68
- }
69
- magicNumbersOutStream.close();
70
- }
71
- exports.postProcess = postProcess;
72
- //# sourceMappingURL=post-process.js.map
@@ -1,14 +0,0 @@
1
- import type { Feature } from '../../feature';
2
- import type { Writable } from 'ts-essentials';
3
- declare const initialValueInfo: {
4
- allNumerics: number;
5
- imaginaryNumbers: number;
6
- integers: number;
7
- floatHex: number;
8
- logical: number;
9
- specialConstants: number;
10
- strings: number;
11
- };
12
- export type ValueInfo = Writable<typeof initialValueInfo>;
13
- export declare const values: Feature<ValueInfo>;
14
- export {};
@@ -1,101 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.values = void 0;
27
- const xpath = __importStar(require("xpath-ts2"));
28
- const r_bridge_1 = require("../../../../r-bridge");
29
- const assert_1 = require("../../../../util/assert");
30
- const output_1 = require("../../../output");
31
- const post_process_1 = require("./post-process");
32
- const initialValueInfo = {
33
- allNumerics: 0,
34
- imaginaryNumbers: 0,
35
- integers: 0,
36
- floatHex: 0,
37
- logical: 0,
38
- specialConstants: 0,
39
- strings: 0
40
- };
41
- const numericConstantQuery = xpath.parse('//NUM_CONST');
42
- const stringConstantQuery = xpath.parse('//STR_CONST');
43
- const specialConstantsQuery = xpath.parse('//NULL_CONST');
44
- const shortLogicalSymbolQuery = xpath.parse('//SYMBOL[text() = \'T\' or text() = \'F\']');
45
- function classifyNumericConstants(numeric, existing) {
46
- if (numeric === r_bridge_1.RTrue || numeric === r_bridge_1.RFalse) {
47
- return 'logical';
48
- }
49
- if (numeric === r_bridge_1.RNa || numeric === 'NaN' || numeric === r_bridge_1.RNull || numeric === 'Inf' || numeric === '-Inf') {
50
- return 'special-constants';
51
- }
52
- if (numeric.includes('i')) {
53
- existing.imaginaryNumbers++;
54
- }
55
- else if (numeric.endsWith('L')) {
56
- existing.integers++;
57
- }
58
- else if (r_bridge_1.RNumHexFloatRegex.test(numeric)) {
59
- existing.floatHex++;
60
- }
61
- return 'allNumerics';
62
- }
63
- exports.values = {
64
- name: 'Values',
65
- description: 'All values used (as constants etc.)',
66
- process(existing, input) {
67
- const strings = stringConstantQuery.select({ node: input.parsedRAst });
68
- const numerics = numericConstantQuery.select({ node: input.parsedRAst });
69
- const specialConstants = specialConstantsQuery.select({ node: input.parsedRAst });
70
- const specialLogicalSymbols = shortLogicalSymbolQuery.select({ node: input.parsedRAst });
71
- const numbers = [];
72
- numerics.map(n => [n, classifyNumericConstants(n.textContent ?? '<unknown>', existing)])
73
- .forEach(([n, type]) => {
74
- switch (type) {
75
- case 'allNumerics':
76
- numbers.push(n);
77
- break;
78
- case 'logical':
79
- specialLogicalSymbols.push(n);
80
- break;
81
- case 'special-constants':
82
- specialConstants.push(n);
83
- break;
84
- default:
85
- (0, assert_1.assertUnreachable)(type);
86
- }
87
- });
88
- existing.strings += strings.length;
89
- existing.allNumerics += numerics.length;
90
- existing.specialConstants += specialConstants.length;
91
- existing.logical += specialLogicalSymbols.length;
92
- (0, output_1.appendStatisticsFile)(this.name, 'numeric', numbers, input.filepath);
93
- (0, output_1.appendStatisticsFile)(this.name, 'string', strings, input.filepath);
94
- (0, output_1.appendStatisticsFile)(this.name, 'specialConstant', specialConstants, input.filepath);
95
- (0, output_1.appendStatisticsFile)(this.name, 'logical', specialLogicalSymbols, input.filepath);
96
- return existing;
97
- },
98
- initialValue: initialValueInfo,
99
- postProcess: post_process_1.postProcess
100
- };
101
- //# sourceMappingURL=values.js.map
@@ -1 +0,0 @@
1
- export { variables } from './variables';
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.variables = void 0;
4
- var variables_1 = require("./variables");
5
- Object.defineProperty(exports, "variables", { enumerable: true, get: function () { return variables_1.variables; } });
6
- //# sourceMappingURL=index.js.map
@@ -1,9 +0,0 @@
1
- import type { FeatureStatisticsWithMeta } from '../../feature';
2
- import type { StatisticsSummarizerConfiguration } from '../../../../util/summarizer/statistics/summarizer';
3
- import type { SummarizedWithProject } from '../../post-processing';
4
- export declare function postProcess(featureRoot: string, info: Map<string, FeatureStatisticsWithMeta>, outputPath: string, config: StatisticsSummarizerConfiguration): void;
5
- type VariableInfoMap = Map<string, SummarizedWithProject & {
6
- linePercentageInFile: number[][];
7
- }>;
8
- export declare function writeVariableInfoToCsv(outputPath: string, filename: `${string}.csv`, data: VariableInfoMap): void;
9
- export {};
@@ -1,122 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.writeVariableInfoToCsv = exports.postProcess = void 0;
7
- const post_processing_1 = require("../../post-processing");
8
- const fs_1 = __importDefault(require("fs"));
9
- const path_1 = __importDefault(require("path"));
10
- const data_1 = require("../../../../util/summarizer/benchmark/data");
11
- const process_1 = require("../../../../util/summarizer/benchmark/first-phase/process");
12
- const files_1 = require("../../../../util/files");
13
- function collectUsedVariables(featureRoot, info, config, outputPath) {
14
- const used = collectVariableInfoFor(path_1.default.join(featureRoot, 'usedVariables.txt'), info, config);
15
- writeVariableInfoToCsv(outputPath, 'used-variables.csv', used);
16
- // we manually clear these maps to save memory
17
- used.clear();
18
- }
19
- function collectDefinedVariables(featureRoot, info, config, outputPath) {
20
- const defined = collectVariableInfoFor(path_1.default.join(featureRoot, 'definedVariables.txt'), info, config);
21
- writeVariableInfoToCsv(outputPath, 'defined-variables.csv', defined);
22
- defined.clear();
23
- }
24
- function collectRedefinedVariables(featureRoot, info, config, outputPath) {
25
- const redefined = collectVariableInfoFor(path_1.default.join(featureRoot, 'redefinedVariables.txt'), info, config);
26
- writeVariableInfoToCsv(outputPath, 'redefined-variables.csv', redefined);
27
- redefined.clear();
28
- }
29
- function writeVariableCountsToCsv(outputPath, collected) {
30
- const variablesOutStream = fs_1.default.createWriteStream(path_1.default.join(outputPath, 'variable-counts.csv'));
31
- variablesOutStream.write(`kind,unique-projects,unique-files,${(0, data_1.summarizedMeasurement2CsvHeader)()}\n`);
32
- for (const [key, val] of Object.entries(collected)) {
33
- if (key === 'unknownVariables') {
34
- // they are for function calls etc and in hindsight not a good idea
35
- continue;
36
- }
37
- const data = val;
38
- const sum = (0, process_1.summarizeMeasurement)(data.count);
39
- variablesOutStream.write(`${JSON.stringify(key)},${data.uniqueProjects.size},${data.uniqueFiles.size},${(0, data_1.summarizedMeasurement2Csv)(sum)}\n`);
40
- }
41
- variablesOutStream.close();
42
- }
43
- function collectInformation(info, config) {
44
- const collected = {};
45
- for (const [filepath, data] of info.entries()) {
46
- const value = data.variables;
47
- for (const [key, val] of Object.entries(value)) {
48
- let get = collected[key];
49
- if (!get) {
50
- get = (0, post_processing_1.emptySummarizedWithProject)();
51
- collected[key] = get;
52
- }
53
- get.count.push(val);
54
- if (val > 0) {
55
- (0, post_processing_1.recordFilePath)(get, filepath, config);
56
- }
57
- }
58
- }
59
- return collected;
60
- }
61
- function postProcess(featureRoot, info, outputPath, config) {
62
- const collected = collectInformation(info, config);
63
- writeVariableCountsToCsv(outputPath, collected);
64
- collectUsedVariables(featureRoot, info, config, outputPath);
65
- collectDefinedVariables(featureRoot, info, config, outputPath);
66
- collectRedefinedVariables(featureRoot, info, config, outputPath);
67
- }
68
- exports.postProcess = postProcess;
69
- function writeVariableInfoToCsv(outputPath, filename, data) {
70
- const out = fs_1.default.createWriteStream(path_1.default.join(outputPath, filename));
71
- out.write(`variable,unique-projects,unique-files,${(0, data_1.summarizedMeasurement2CsvHeader)('count')},${(0, data_1.summarizedMeasurement2CsvHeader)('line-frac')}\n`);
72
- for (const [key, val] of data.entries()) {
73
- const { count, uniqueProjects, uniqueFiles, linePercentageInFile } = val;
74
- const counts = (0, process_1.summarizeMeasurement)(count);
75
- const lineFrac = (0, process_1.summarizeMeasurement)(linePercentageInFile.flat());
76
- out.write(`${JSON.stringify(key)},${uniqueProjects.size},${uniqueFiles.size},${(0, data_1.summarizedMeasurement2Csv)(counts)},${(0, data_1.summarizedMeasurement2Csv)(lineFrac)}\n`);
77
- }
78
- out.close();
79
- }
80
- exports.writeVariableInfoToCsv = writeVariableInfoToCsv;
81
- function collectVariableInfoFor(filepath, info, config) {
82
- // variable name to summary
83
- const collected = new Map();
84
- (0, files_1.readLineByLineSync)(filepath, (line, lineNumber) => {
85
- if (line.length === 0) {
86
- return;
87
- }
88
- if (lineNumber % 2_500 === 0) {
89
- console.log(` Processed ${lineNumber} lines of ${filepath}`);
90
- }
91
- const [vars, context] = JSON.parse(line.toString());
92
- const numberOfLines = info.get(context ?? '')?.stats.lines[0].length;
93
- // first we have to collect what this file gives us
94
- const perFile = new Map();
95
- for (const [name, [line]] of vars) {
96
- let get = perFile.get(name);
97
- if (!get) {
98
- get = { ...(0, post_processing_1.emptySummarizedWithProject)(), linePercentageInFile: [] };
99
- perFile.set(name, get);
100
- }
101
- get.count.push(1);
102
- if (numberOfLines) {
103
- get.linePercentageInFile.push(line / numberOfLines);
104
- }
105
- }
106
- // now we merge it into the global map (oh gosh this is so horrible
107
- for (const [name, data] of perFile.entries()) {
108
- let get = collected.get(name);
109
- if (!get) {
110
- get = { ...(0, post_processing_1.emptySummarizedWithProject)(), linePercentageInFile: [] };
111
- collected.set(name, get);
112
- }
113
- get.count.push(data.count.length);
114
- get.linePercentageInFile.push(data.linePercentageInFile);
115
- if (data.count.length > 0) {
116
- (0, post_processing_1.recordFilePath)(get, context, config);
117
- }
118
- }
119
- });
120
- return collected;
121
- }
122
- //# sourceMappingURL=post-process.js.map
@@ -1,15 +0,0 @@
1
- import type { Feature } from '../../feature';
2
- import type { Writable } from 'ts-essentials';
3
- declare const initialVariableInfo: {
4
- numberOfVariableUses: number;
5
- numberOfDefinitions: number;
6
- numberOfRedefinitions: number;
7
- unknownVariables: number;
8
- };
9
- export type VariableInfo = Writable<typeof initialVariableInfo>;
10
- export type DefinedVariableInformation = [
11
- name: string,
12
- location: [line: number, character: number]
13
- ];
14
- export declare const variables: Feature<VariableInfo>;
15
- export {};
@@ -1,70 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.variables = void 0;
4
- const r_bridge_1 = require("../../../../r-bridge");
5
- const output_1 = require("../../../output");
6
- const dataflow_1 = require("../../../../dataflow");
7
- const post_process_1 = require("./post-process");
8
- const initialVariableInfo = {
9
- numberOfVariableUses: 0,
10
- numberOfDefinitions: 0,
11
- numberOfRedefinitions: 0,
12
- // we failed to get the type/role, maybe for function call names etc.
13
- unknownVariables: 0
14
- };
15
- function visitVariables(info, input) {
16
- // same-def-def edges are bidirectional, we want to avoid counting them twice!
17
- const redefinedBlocker = new Set();
18
- (0, r_bridge_1.visitAst)(input.normalizedRAst.ast, node => {
19
- if (node.type !== "RSymbol" /* RType.Symbol */ || (0, r_bridge_1.isSpecialSymbol)(node)) {
20
- return;
21
- }
22
- // search for the node in the DF graph
23
- const mayNode = input.dataflow.graph.get(node.info.id);
24
- if (mayNode === undefined) {
25
- info.unknownVariables++;
26
- (0, output_1.appendStatisticsFile)(exports.variables.name, 'unknown', [[
27
- node.info.fullLexeme ?? node.lexeme,
28
- [node.location.start.line, node.location.start.column]
29
- ]], input.filepath);
30
- return;
31
- }
32
- const [dfNode, edges] = mayNode;
33
- if (dfNode.tag === 'variable-definition') {
34
- info.numberOfDefinitions++;
35
- const lexeme = node.info.fullLexeme ?? node.lexeme;
36
- (0, output_1.appendStatisticsFile)(exports.variables.name, 'definedVariables', [[
37
- lexeme,
38
- [node.location.start.line, node.location.start.column]
39
- ]], input.filepath);
40
- // check for redefinitions
41
- const hasRedefinitions = [...edges.entries()].some(([target, edge]) => !redefinedBlocker.has(target) && edge.types.has(dataflow_1.EdgeType.SameDefDef));
42
- if (hasRedefinitions) {
43
- info.numberOfRedefinitions++;
44
- redefinedBlocker.add(node.info.id);
45
- (0, output_1.appendStatisticsFile)(exports.variables.name, 'redefinedVariables', [[
46
- lexeme,
47
- [node.location.start.line, node.location.start.column]
48
- ]], input.filepath);
49
- }
50
- }
51
- else if (dfNode.tag === 'use') {
52
- info.numberOfVariableUses++;
53
- (0, output_1.appendStatisticsFile)(exports.variables.name, 'usedVariables', [[
54
- node.info.fullLexeme ?? node.lexeme,
55
- [node.location.start.line, node.location.start.column]
56
- ]], input.filepath);
57
- }
58
- });
59
- }
60
- exports.variables = {
61
- name: 'Variables',
62
- description: 'Variable Usage, Assignments, and Redefinitions',
63
- process(existing, input) {
64
- visitVariables(existing, input);
65
- return existing;
66
- },
67
- initialValue: initialVariableInfo,
68
- postProcess: post_process_1.postProcess
69
- };
70
- //# sourceMappingURL=variables.js.map
@@ -1,6 +0,0 @@
1
- export * from './statistics';
2
- export * from './features';
3
- export * from './output';
4
- export * from '../util/summarizer/statistics/post-process';
5
- export { initialMetaStatistics } from './meta-statistics';
6
- export { MetaStatistics } from './meta-statistics';
@@ -1,24 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.initialMetaStatistics = void 0;
18
- __exportStar(require("./statistics"), exports);
19
- __exportStar(require("./features"), exports);
20
- __exportStar(require("./output"), exports);
21
- __exportStar(require("../util/summarizer/statistics/post-process"), exports);
22
- var meta_statistics_1 = require("./meta-statistics");
23
- Object.defineProperty(exports, "initialMetaStatistics", { enumerable: true, get: function () { return meta_statistics_1.initialMetaStatistics; } });
24
- //# sourceMappingURL=index.js.map
@@ -1,33 +0,0 @@
1
- import type { RParseRequestFromFile, RParseRequestFromText } from '../r-bridge';
2
- /**
3
- * Statistics on skipped files, the time required, and more.
4
- *
5
- * @see extractUsageStatistics
6
- * @see initialMetaStatistics
7
- */
8
- export interface MetaStatistics {
9
- /**
10
- * The number of requests that were parsed successfully
11
- */
12
- successfulParsed: number;
13
- /**
14
- * The processing time for each request
15
- */
16
- processingTimeMs: number[];
17
- /**
18
- * All failed requests (e.g., if they can not be converted to XML)
19
- */
20
- failedRequests: (RParseRequestFromText | RParseRequestFromFile)[];
21
- /**
22
- * Number of lines with each individual line length consumed for each request
23
- */
24
- lines: number[][];
25
- /**
26
- * The number of nodes in the normalized AST
27
- */
28
- numberOfNormalizedNodes: number[];
29
- }
30
- /**
31
- * Returns an initial {@link MetaStatistics} object, using neutral defaults (like the empty list).
32
- */
33
- export declare function initialMetaStatistics(): MetaStatistics;
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.initialMetaStatistics = void 0;
4
- /**
5
- * Returns an initial {@link MetaStatistics} object, using neutral defaults (like the empty list).
6
- */
7
- function initialMetaStatistics() {
8
- return {
9
- successfulParsed: 0,
10
- numberOfNormalizedNodes: [],
11
- processingTimeMs: [],
12
- failedRequests: [],
13
- lines: []
14
- };
15
- }
16
- exports.initialMetaStatistics = initialMetaStatistics;
17
- //# sourceMappingURL=meta-statistics.js.map
@@ -1,37 +0,0 @@
1
- export type AppendFnType = string | number | symbol;
2
- export interface StatisticAppendProvider {
3
- append(name: string, fn: AppendFnType, content: string): void;
4
- }
5
- export type DummyAppendMemoryMap = Map<string, Map<AppendFnType, string[]>>;
6
- export declare class DummyAppendProvider implements StatisticAppendProvider {
7
- private readonly map;
8
- /**
9
- * If you pass a map the dummy will log all append calls to the map, using the feature name and the appendage type as keys
10
- *
11
- * @param map - The map to log to
12
- */
13
- constructor(map?: DummyAppendMemoryMap | undefined);
14
- append(name: string, fn: AppendFnType, content: string): void;
15
- }
16
- export declare const defaultStatisticsFileSuffix = ".txt";
17
- /**
18
- * Provides cached open connections for all files to connect.
19
- * allowing to append to the same file often.
20
- * <p>
21
- * While we could simply reopen these files, it is safer/more performant to keep the connection open.
22
- */
23
- export declare class StatisticFileProvider implements StatisticAppendProvider {
24
- readonly statisticsDirectory: string;
25
- private readonly connections;
26
- constructor(statisticsDirectory: string | undefined);
27
- /**
28
- * @param name - the name of the feature {@link Feature#name}
29
- * @param fn - the name of the feature-aspect to record
30
- */
31
- private statisticsFile;
32
- /**
33
- * Append the given content to the information for a feature of the given name and function.
34
- */
35
- append(name: string, fn: AppendFnType, content: string): void;
36
- private getHandle;
37
- }
@@ -1,97 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.StatisticFileProvider = exports.defaultStatisticsFileSuffix = exports.DummyAppendProvider = void 0;
7
- const path_1 = __importDefault(require("path"));
8
- const fs_1 = __importDefault(require("fs"));
9
- const assert_1 = require("../../util/assert");
10
- const log_1 = require("../../util/log");
11
- class DummyAppendProvider {
12
- map;
13
- /**
14
- * If you pass a map the dummy will log all append calls to the map, using the feature name and the appendage type as keys
15
- *
16
- * @param map - The map to log to
17
- */
18
- constructor(map = undefined) {
19
- this.map = map;
20
- }
21
- append(name, fn, content) {
22
- if (log_1.log.settings.minLevel >= 1 /* LogLevel.Trace */) {
23
- log_1.log.trace(`DummyAppendProvider: ${name} ${String(fn)} ${content}`);
24
- }
25
- if (this.map) {
26
- const fnMap = this.map.get(name);
27
- const contentArr = content.split('\n');
28
- if (fnMap) {
29
- const contentList = fnMap.get(fn);
30
- if (contentList) {
31
- contentList.push(...contentArr);
32
- }
33
- else {
34
- // just in case the map already had some entries
35
- fnMap.set(fn, contentArr);
36
- }
37
- }
38
- else {
39
- this.map.set(name, new Map([[fn, contentArr]]));
40
- }
41
- }
42
- }
43
- }
44
- exports.DummyAppendProvider = DummyAppendProvider;
45
- exports.defaultStatisticsFileSuffix = '.txt';
46
- /**
47
- * Provides cached open connections for all files to connect.
48
- * allowing to append to the same file often.
49
- * <p>
50
- * While we could simply reopen these files, it is safer/more performant to keep the connection open.
51
- */
52
- class StatisticFileProvider {
53
- statisticsDirectory;
54
- connections = new Map();
55
- constructor(statisticsDirectory) {
56
- (0, assert_1.guard)(statisticsDirectory !== undefined, 'Please supply an output directory!');
57
- this.statisticsDirectory = statisticsDirectory;
58
- // just to make sure, that they are closed
59
- process.on('beforeExit', () => {
60
- this.connections.forEach(fd => {
61
- fs_1.default.closeSync(fd);
62
- });
63
- });
64
- }
65
- /**
66
- * @param name - the name of the feature {@link Feature#name}
67
- * @param fn - the name of the feature-aspect to record
68
- */
69
- statisticsFile(name, fn) {
70
- return path_1.default.join(this.statisticsDirectory, name, `${fn}${exports.defaultStatisticsFileSuffix}`);
71
- }
72
- /**
73
- * Append the given content to the information for a feature of the given name and function.
74
- */
75
- append(name, fn, content) {
76
- const descriptor = this.getHandle(name, String(fn));
77
- fs_1.default.appendFileSync(descriptor, content + '\n', 'utf8');
78
- }
79
- getHandle(name, fn) {
80
- const key = `${name}-${fn}`;
81
- const fileHandle = this.connections.get(key);
82
- if (fileHandle) {
83
- return fileHandle;
84
- }
85
- // open the connection and ensure the location
86
- const filepath = this.statisticsFile(name, String(fn));
87
- const dirpath = path_1.default.dirname(filepath);
88
- if (!fs_1.default.existsSync(dirpath)) {
89
- fs_1.default.mkdirSync(dirpath, { recursive: true });
90
- }
91
- const fileDescriptor = fs_1.default.openSync(filepath, 'a');
92
- this.connections.set(key, fileDescriptor);
93
- return fileDescriptor;
94
- }
95
- }
96
- exports.StatisticFileProvider = StatisticFileProvider;
97
- //# sourceMappingURL=file-provider.js.map
@@ -1,4 +0,0 @@
1
- export * from './print-stats';
2
- export * from './file-provider';
3
- export * from './statistics-file';
4
- export * from './ansi';