@eagleoutice/flowr 1.4.2 → 1.5.1

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 +76 -216
  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 +11 -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,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.definedFunctions = void 0;
4
- var defined_functions_1 = require("./defined-functions");
5
- Object.defineProperty(exports, "definedFunctions", { enumerable: true, get: function () { return defined_functions_1.definedFunctions; } });
6
- //# sourceMappingURL=index.js.map
@@ -1,6 +0,0 @@
1
- import type { FeatureStatisticsWithMeta } from '../../feature';
2
- import type { StatisticsSummarizerConfiguration } from '../../../../util/summarizer/statistics/summarizer';
3
- /**
4
- * Note: the summary does not contain a 0 for each function that is _not_ called by a file. Hence, the minimum can not be 0 (division for mean etc. will still be performed on total file count)
5
- */
6
- export declare function postProcess(featureRoot: string, info: Map<string, FeatureStatisticsWithMeta>, outputPath: string, config: StatisticsSummarizerConfiguration): void;
@@ -1,177 +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 process_1 = require("../../../../util/summarizer/benchmark/first-phase/process");
9
- const files_1 = require("../../../../util/files");
10
- const path_1 = __importDefault(require("path"));
11
- const fs_1 = __importDefault(require("fs"));
12
- const time_1 = require("../../../../util/time");
13
- const defined_functions_1 = require("./defined-functions");
14
- const post_processing_1 = require("../../post-processing");
15
- const arrays_1 = require("../../../../util/arrays");
16
- function getFnDefCsv(idx, info) {
17
- return `${JSON.stringify(idx)},${(0, data_1.summarizedMeasurement2Csv)((0, process_1.summarizeMeasurement)(info.total.flat()))}`
18
- + `,${(0, data_1.summarizedMeasurement2Csv)((0, process_1.summarizeMeasurement)(info.parameters.flat()))}`
19
- + `,${(0, data_1.summarizedMeasurement2Csv)((0, process_1.summarizeMeasurement)(info.length.lines.flat()))}`
20
- + `,${(0, data_1.summarizedMeasurement2Csv)((0, process_1.summarizeMeasurement)(info.length.chars.flat()))}`
21
- + `,${(0, data_1.summarizedMeasurement2Csv)((0, process_1.summarizeMeasurement)(info.length.nonWhitespaceChars.flat()))}`
22
- + `,${(0, data_1.summarizedMeasurement2Csv)((0, process_1.summarizeMeasurement)(info.returns.explicit.flat()))}`
23
- + `,${(0, data_1.summarizedMeasurement2Csv)((0, process_1.summarizeMeasurement)(info.returns.implicit.flat()))}`
24
- + `,${(0, data_1.summarizedMeasurement2Csv)((0, process_1.summarizeMeasurement)(info.returns.onlyExplicit.flat()))}`
25
- + `,${(0, data_1.summarizedMeasurement2Csv)((0, process_1.summarizeMeasurement)(info.returns.onlyImplicit.flat()))}`
26
- + `,${(0, data_1.summarizedMeasurement2Csv)((0, process_1.summarizeMeasurement)(info.exitPointsLinePercentageInDef.flat(2)))}`
27
- + `,${(0, data_1.summarizedMeasurement2Csv)((0, process_1.summarizeMeasurement)(info.linePercentageInFile.flat()))}\n`;
28
- }
29
- function addToList(data, count, filepath, config) {
30
- data.count.push(count);
31
- if (count > 0) {
32
- (0, post_processing_1.recordFilePath)(data, filepath, config);
33
- }
34
- }
35
- function retrievePerFileDefinitionInformation(featureRoot, info, config, outputPath) {
36
- /**
37
- * maps fn-name (including namespace) to several definition information
38
- * we use tuples to reduce the memory!
39
- */
40
- const definitionsPerFile = [];
41
- const mergedSuperDefinitions = emptyFunctionDefinitionSummary();
42
- // we collect only `all-calls`
43
- (0, files_1.readLineByLineSync)(path_1.default.join(featureRoot, `${defined_functions_1.AllDefinitionsFileBase}.txt`), (line, lineNumber) => processNextLine(definitionsPerFile, lineNumber, info, JSON.parse(String(line))));
44
- console.log(` [${(0, time_1.date2string)(new Date())}] Defined functions process completed, start to write out function info`);
45
- const fnOutStream = fs_1.default.createWriteStream(path_1.default.join(outputPath, 'function-definitions.csv'));
46
- const prefixes = ['total', 'params', 'length-lines', 'length-chars', 'length-non-ws-chars', 'return-explicit', 'return-implicit', 'return-only-explicit', 'return-only-implicit', 'exit-points-line-crac', 'def-line-frac'];
47
- const others = prefixes.flatMap(data_1.summarizedMeasurement2CsvHeader).join(',');
48
- fnOutStream.write(`counter,${others}\n`);
49
- for (const [idx, info] of definitionsPerFile.entries()) {
50
- fnOutStream.write(getFnDefCsv(idx, info));
51
- mergedSuperDefinitions.total.push(...info.total);
52
- mergedSuperDefinitions.parameters.push(...info.parameters);
53
- mergedSuperDefinitions.length.lines.push(...info.length.lines);
54
- mergedSuperDefinitions.length.chars.push(...info.length.chars);
55
- mergedSuperDefinitions.length.nonWhitespaceChars.push(...info.length.nonWhitespaceChars);
56
- mergedSuperDefinitions.returns.explicit.push(...info.returns.explicit);
57
- mergedSuperDefinitions.returns.implicit.push(...info.returns.implicit);
58
- mergedSuperDefinitions.returns.onlyExplicit.push(...info.returns.onlyExplicit);
59
- mergedSuperDefinitions.returns.onlyImplicit.push(...info.returns.onlyImplicit);
60
- mergedSuperDefinitions.exitPointsLinePercentageInDef.push(...info.exitPointsLinePercentageInDef);
61
- mergedSuperDefinitions.linePercentageInFile.push(...info.linePercentageInFile);
62
- mergedSuperDefinitions.callsites.push(...info.callsites);
63
- }
64
- // now, write the ultimate summary at the end of the file
65
- fnOutStream.write(getFnDefCsv('all', mergedSuperDefinitions));
66
- fnOutStream.close();
67
- }
68
- function retrieveMetaInformation(info, config, outputPath) {
69
- const data = {
70
- total: (0, post_processing_1.emptySummarizedWithProject)(),
71
- lambdasOnly: (0, post_processing_1.emptySummarizedWithProject)(),
72
- assignedFunctions: (0, post_processing_1.emptySummarizedWithProject)(),
73
- nestedFunctions: (0, post_processing_1.emptySummarizedWithProject)(),
74
- recursive: (0, post_processing_1.emptySummarizedWithProject)(),
75
- deepestNesting: (0, post_processing_1.emptySummarizedWithProject)()
76
- };
77
- for (const [filepath, meta] of info.entries()) {
78
- const us = meta.definedFunctions;
79
- addToList(data.total, us.total, filepath, config);
80
- addToList(data.lambdasOnly, us.lambdasOnly, filepath, config);
81
- addToList(data.assignedFunctions, us.assignedFunctions, filepath, config);
82
- addToList(data.nestedFunctions, us.nestedFunctions, filepath, config);
83
- addToList(data.recursive, us.recursive, filepath, config);
84
- addToList(data.deepestNesting, us.deepestNesting, filepath, config);
85
- }
86
- console.log(` [${(0, time_1.date2string)(new Date())}] Defined functions metadata reading completed, summarizing and writing to file`);
87
- const out = fs_1.default.createWriteStream(path_1.default.join(outputPath, 'function-definitions-meta.csv'));
88
- out.write(`kind,unique-projects,unique-files,${(0, data_1.summarizedMeasurement2CsvHeader)()}\n`);
89
- for (const [key, val] of Object.entries(data)) {
90
- const data = val;
91
- out.write(`${JSON.stringify(key)},${data.uniqueProjects.size},${data.uniqueFiles.size},${(0, data_1.summarizedMeasurement2Csv)((0, process_1.summarizeMeasurement)(data.count))}\n`);
92
- }
93
- out.close();
94
- }
95
- function retrieveAssignedFunctionNames(featureRoot, config, outputPath) {
96
- const varNames = new Map();
97
- (0, files_1.readLineByLineSync)(path_1.default.join(featureRoot, 'assignedFunctions.txt'), line => {
98
- const parsed = JSON.parse(String(line));
99
- const [hits, context] = parsed;
100
- const countsForFile = (0, arrays_1.array2bag)(hits);
101
- for (const [name, count] of countsForFile.entries()) {
102
- let get = varNames.get(name);
103
- if (!get) {
104
- get = (0, post_processing_1.emptySummarizedWithProject)();
105
- varNames.set(name, get);
106
- }
107
- addToList(get, count, context ?? '', config);
108
- }
109
- });
110
- const varNamesOut = fs_1.default.createWriteStream(path_1.default.join(outputPath, 'function-definitions-var-names.csv'));
111
- varNamesOut.write(`name,unique-projects,unique-files,${(0, data_1.summarizedMeasurement2CsvHeader)()}\n`);
112
- for (const [key, val] of varNames.entries()) {
113
- varNamesOut.write(`${JSON.stringify(key)},${val.uniqueProjects.size},${val.uniqueFiles.size},${(0, data_1.summarizedMeasurement2Csv)((0, process_1.summarizeMeasurement)(val.count))}\n`);
114
- }
115
- varNamesOut.close();
116
- }
117
- /**
118
- * Note: the summary does not contain a 0 for each function that is _not_ called by a file. Hence, the minimum can not be 0 (division for mean etc. will still be performed on total file count)
119
- */
120
- function postProcess(featureRoot, info, outputPath, config) {
121
- // each number[][] contains a 'number[]' per file
122
- retrievePerFileDefinitionInformation(featureRoot, info, config, outputPath);
123
- console.log(` [${(0, time_1.date2string)(new Date())}] Defined functions reading completed, summarizing info...`);
124
- retrieveMetaInformation(info, config, outputPath);
125
- retrieveAssignedFunctionNames(featureRoot, config, outputPath);
126
- }
127
- exports.postProcess = postProcess;
128
- function emptyFunctionDefinitionSummary() {
129
- return {
130
- total: [],
131
- parameters: [],
132
- length: {
133
- lines: [],
134
- chars: [],
135
- nonWhitespaceChars: []
136
- },
137
- returns: {
138
- explicit: [],
139
- implicit: [],
140
- onlyExplicit: [],
141
- onlyImplicit: []
142
- },
143
- exitPointsLinePercentageInDef: [],
144
- linePercentageInFile: [],
145
- callsites: []
146
- };
147
- }
148
- function processNextLine(data, lineNumber, info, line) {
149
- if (lineNumber % 2_500 === 0) {
150
- console.log(` [${(0, time_1.date2string)(new Date())}] Defined functions processed ${lineNumber} lines`);
151
- }
152
- const [hits, context] = line;
153
- const forFile = emptyFunctionDefinitionSummary();
154
- for (const { location, length, returns, numberOfParameters, callsites } of hits) {
155
- const stats = info.get(context ?? '')?.stats.lines[0].length;
156
- // we retrieve the first component fo the path
157
- forFile.total.push(1);
158
- forFile.parameters.push(numberOfParameters);
159
- forFile.length.lines.push(length.lines);
160
- forFile.length.chars.push(length.characters);
161
- forFile.length.nonWhitespaceChars.push(length.nonWhitespaceCharacters);
162
- const explicits = returns.filter(r => r.explicit);
163
- forFile.returns.explicit.push(explicits.length);
164
- forFile.returns.implicit.push(returns.length - explicits.length);
165
- forFile.returns.onlyExplicit.push(explicits.length === returns.length ? 1 : 0);
166
- forFile.returns.onlyImplicit.push(explicits.length === 0 ? 1 : 0);
167
- forFile.exitPointsLinePercentageInDef.push(returns.map(r => r.location.line).map(l => l / length.lines));
168
- forFile.callsites.push(callsites.length);
169
- if (stats) {
170
- forFile.linePercentageInFile.push(location.line / stats);
171
- }
172
- }
173
- // push all of that to main :D
174
- forFile.total = [forFile.total.length];
175
- data.push(forFile);
176
- }
177
- //# sourceMappingURL=post-process.js.map
@@ -1,9 +0,0 @@
1
- import type { Writable } from 'ts-essentials';
2
- import type { Feature } from '../../feature';
3
- declare const initialExpressionListInfo: {
4
- allExpressionLists: number;
5
- deepestNesting: number;
6
- };
7
- export type ExpressionListInfo = Writable<typeof initialExpressionListInfo>;
8
- export declare const expressionList: Feature<ExpressionListInfo>;
9
- export {};
@@ -1,36 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.expressionList = void 0;
4
- const r_bridge_1 = require("../../../../r-bridge");
5
- const post_process_1 = require("./post-process");
6
- const initialExpressionListInfo = {
7
- allExpressionLists: 0,
8
- deepestNesting: 0
9
- };
10
- function visitLists(info, input) {
11
- let nest = -1; // we start with nesting 0
12
- let total = 0;
13
- (0, r_bridge_1.visitAst)(input.normalizedRAst.ast, node => {
14
- if (node.type === "RExpressionList" /* RType.ExpressionList */) {
15
- nest++;
16
- total++;
17
- info.deepestNesting = Math.max(info.deepestNesting, nest);
18
- }
19
- }, node => {
20
- if (node.type === "RExpressionList" /* RType.ExpressionList */) {
21
- nest--;
22
- }
23
- });
24
- info.allExpressionLists += total;
25
- }
26
- exports.expressionList = {
27
- name: 'Expression Lists',
28
- description: 'Counts expression list nestings',
29
- process(existing, input) {
30
- visitLists(existing, input);
31
- return existing;
32
- },
33
- initialValue: initialExpressionListInfo,
34
- postProcess: post_process_1.postProcess
35
- };
36
- //# sourceMappingURL=expression-list.js.map
@@ -1 +0,0 @@
1
- export { expressionList } from './expression-list';
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.expressionList = void 0;
4
- var expression_list_1 = require("./expression-list");
5
- Object.defineProperty(exports, "expressionList", { enumerable: true, get: function () { return expression_list_1.expressionList; } });
6
- //# sourceMappingURL=index.js.map
@@ -1,3 +0,0 @@
1
- import type { FeatureStatisticsWithMeta } from '../../feature';
2
- import type { StatisticsSummarizerConfiguration } from '../../../../util/summarizer/statistics/summarizer';
3
- export declare function postProcess(featureRoot: string, info: Map<string, FeatureStatisticsWithMeta>, outputPath: string, config: StatisticsSummarizerConfiguration): void;
@@ -1,44 +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 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
- function postProcess(featureRoot, info, outputPath, config) {
13
- const collected = {};
14
- const deepestNestingOut = fs_1.default.createWriteStream(path_1.default.join(outputPath, 'deepest-nesting-per-file.csv'));
15
- deepestNestingOut.write('file,deepest-nesting\n');
16
- for (const [filepath, data] of info.entries()) {
17
- const value = data.expressionList;
18
- for (const [key, val] of Object.entries(value)) {
19
- let get = collected[key];
20
- if (!get) {
21
- get = (0, post_processing_1.emptySummarizedWithProject)();
22
- collected[key] = get;
23
- }
24
- if (key === 'deepestNesting') {
25
- deepestNestingOut.write(`${JSON.stringify(filepath)},${val}\n`);
26
- }
27
- get.count.push(val);
28
- if (val > 0) {
29
- (0, post_processing_1.recordFilePath)(get, filepath, config);
30
- }
31
- }
32
- }
33
- deepestNestingOut.close();
34
- const variablesOutStream = fs_1.default.createWriteStream(path_1.default.join(outputPath, 'used-expression-lists.csv'));
35
- variablesOutStream.write(`kind,unique-projects,unique-files,${(0, data_1.summarizedMeasurement2CsvHeader)()}\n`);
36
- for (const [key, val] of Object.entries(collected)) {
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
- exports.postProcess = postProcess;
44
- //# sourceMappingURL=post-process.js.map
@@ -1,10 +0,0 @@
1
- export * from './loops/loops';
2
- export * from './values/values';
3
- export * from './comments/comments';
4
- export * from './data-access/data-access';
5
- export * from './assignments/assignments';
6
- export * from './control-flow/control-flow';
7
- export * from './used-packages/used-packages';
8
- export * from './used-functions/used-functions';
9
- export * from './defined-functions/defined-functions';
10
- export * from './expression-list/expression-list';
@@ -1,27 +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
- __exportStar(require("./loops/loops"), exports);
18
- __exportStar(require("./values/values"), exports);
19
- __exportStar(require("./comments/comments"), exports);
20
- __exportStar(require("./data-access/data-access"), exports);
21
- __exportStar(require("./assignments/assignments"), exports);
22
- __exportStar(require("./control-flow/control-flow"), exports);
23
- __exportStar(require("./used-packages/used-packages"), exports);
24
- __exportStar(require("./used-functions/used-functions"), exports);
25
- __exportStar(require("./defined-functions/defined-functions"), exports);
26
- __exportStar(require("./expression-list/expression-list"), exports);
27
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- export { loops } from './loops';
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.loops = void 0;
4
- var loops_1 = require("./loops");
5
- Object.defineProperty(exports, "loops", { enumerable: true, get: function () { return loops_1.loops; } });
6
- //# sourceMappingURL=index.js.map
@@ -1,20 +0,0 @@
1
- import type { Feature } from '../../feature';
2
- import type { Writable } from 'ts-essentials';
3
- declare const initialLoopInfo: {
4
- forLoops: import("../../common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
5
- forLoopVar: import("../../common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
6
- forBody: import("../../common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
7
- whileLoops: import("../../common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
8
- whileBody: import("../../common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
9
- repeatLoops: bigint;
10
- repeatBody: import("../../common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
11
- breakStatements: number;
12
- nextStatements: number;
13
- /** apply, tapply, lapply, ...*/
14
- implicitLoops: number;
15
- nestedExplicitLoops: number;
16
- deepestExplicitNesting: number;
17
- };
18
- export type LoopInfo = Writable<typeof initialLoopInfo>;
19
- export declare const loops: Feature<LoopInfo>;
20
- export {};
@@ -1,79 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.loops = void 0;
4
- const output_1 = require("../../../output");
5
- const r_bridge_1 = require("../../../../r-bridge");
6
- const common_syntax_probability_1 = require("../../common-syntax-probability");
7
- const post_process_1 = require("./post-process");
8
- const initialLoopInfo = {
9
- forLoops: (0, common_syntax_probability_1.emptyCommonSyntaxTypeCounts)(),
10
- forLoopVar: (0, common_syntax_probability_1.emptyCommonSyntaxTypeCounts)(),
11
- forBody: (0, common_syntax_probability_1.emptyCommonSyntaxTypeCounts)(),
12
- whileLoops: (0, common_syntax_probability_1.emptyCommonSyntaxTypeCounts)(),
13
- whileBody: (0, common_syntax_probability_1.emptyCommonSyntaxTypeCounts)(),
14
- repeatLoops: 0n,
15
- repeatBody: (0, common_syntax_probability_1.emptyCommonSyntaxTypeCounts)(),
16
- breakStatements: 0,
17
- nextStatements: 0,
18
- /** apply, tapply, lapply, ...*/
19
- implicitLoops: 0,
20
- nestedExplicitLoops: 0,
21
- deepestExplicitNesting: 0
22
- };
23
- const isImplicitLoop = /[lsvmt]?apply/;
24
- function visitLoops(info, input) {
25
- // holds number of loops and their nesting depths
26
- const loopStack = [];
27
- (0, r_bridge_1.visitAst)(input.normalizedRAst.ast, node => {
28
- switch (node.type) {
29
- case "RNext" /* RType.Next */:
30
- info.nextStatements++;
31
- return;
32
- case "RBreak" /* RType.Break */:
33
- info.breakStatements++;
34
- return;
35
- case "RFunctionCall" /* RType.FunctionCall */:
36
- if (node.flavor === 'named' && isImplicitLoop.test(node.functionName.lexeme)) {
37
- info.implicitLoops++;
38
- (0, output_1.appendStatisticsFile)(exports.loops.name, 'implicit-loop', [node.functionName.info.fullLexeme ?? node.functionName.lexeme], input.filepath);
39
- }
40
- return;
41
- case "RForLoop" /* RType.ForLoop */:
42
- (0, common_syntax_probability_1.updateCommonSyntaxTypeCounts)(info.forLoops, node.vector);
43
- (0, common_syntax_probability_1.updateCommonSyntaxTypeCounts)(info.forLoopVar, node.variable);
44
- (0, common_syntax_probability_1.updateCommonSyntaxTypeCounts)(info.forBody, ...node.body.children);
45
- break;
46
- case "RWhileLoop" /* RType.WhileLoop */:
47
- (0, common_syntax_probability_1.updateCommonSyntaxTypeCounts)(info.whileLoops, node.condition);
48
- (0, common_syntax_probability_1.updateCommonSyntaxTypeCounts)(info.whileBody, ...node.body.children);
49
- break;
50
- case "RRepeatLoop" /* RType.RepeatLoop */:
51
- info.repeatLoops++;
52
- (0, common_syntax_probability_1.updateCommonSyntaxTypeCounts)(info.repeatBody, ...node.body.children);
53
- break;
54
- default: return;
55
- }
56
- (0, output_1.appendStatisticsFile)(exports.loops.name, 'all-loops', [node.info.fullLexeme ?? node.lexeme], input.filepath);
57
- if (loopStack.length > 0) {
58
- info.nestedExplicitLoops++;
59
- info.deepestExplicitNesting = Math.max(info.deepestExplicitNesting, loopStack.length);
60
- }
61
- loopStack.push(node);
62
- }, node => {
63
- // drop again :D
64
- if (node.type === "RForLoop" /* RType.ForLoop */ || node.type === "RWhileLoop" /* RType.WhileLoop */ || node.type === "RRepeatLoop" /* RType.RepeatLoop */) {
65
- loopStack.pop();
66
- }
67
- });
68
- }
69
- exports.loops = {
70
- name: 'Loops',
71
- description: 'All looping structures in the document',
72
- process(existing, input) {
73
- visitLoops(existing, input);
74
- return existing;
75
- },
76
- initialValue: initialLoopInfo,
77
- postProcess: post_process_1.postProcess
78
- };
79
- //# sourceMappingURL=loops.js.map
@@ -1,3 +0,0 @@
1
- import type { FeatureStatisticsWithMeta } from '../../feature';
2
- import type { StatisticsSummarizerConfiguration } from '../../../../util/summarizer/statistics/summarizer';
3
- export declare function postProcess(featureRoot: string, info: Map<string, FeatureStatisticsWithMeta>, outputPath: string, config: StatisticsSummarizerConfiguration): void;
@@ -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 post_processing_1 = require("../../post-processing");
8
- const common_syntax_probability_1 = require("../../common-syntax-probability");
9
- const numbers_1 = require("../../../../util/numbers");
10
- const path_1 = __importDefault(require("path"));
11
- const fs_1 = __importDefault(require("fs"));
12
- const data_1 = require("../../../../util/summarizer/benchmark/data");
13
- const process_1 = require("../../../../util/summarizer/benchmark/first-phase/process");
14
- function postProcess(featureRoot, info, outputPath, config) {
15
- const collected = {
16
- forLoops: (0, common_syntax_probability_1.emptyCommonSyntaxTypeCounts)(() => []),
17
- forLoopVar: (0, common_syntax_probability_1.emptyCommonSyntaxTypeCounts)(() => []),
18
- forBody: (0, common_syntax_probability_1.emptyCommonSyntaxTypeCounts)(() => []),
19
- whileLoops: (0, common_syntax_probability_1.emptyCommonSyntaxTypeCounts)(() => []),
20
- whileBody: (0, common_syntax_probability_1.emptyCommonSyntaxTypeCounts)(() => []),
21
- repeatLoops: (0, post_processing_1.emptySummarizedWithProject)(),
22
- repeatBody: (0, common_syntax_probability_1.emptyCommonSyntaxTypeCounts)(() => []),
23
- breakStatements: (0, post_processing_1.emptySummarizedWithProject)(),
24
- nextStatements: (0, post_processing_1.emptySummarizedWithProject)(),
25
- implicitLoops: (0, post_processing_1.emptySummarizedWithProject)(),
26
- nestedExplicitLoops: (0, post_processing_1.emptySummarizedWithProject)(),
27
- deepestExplicitNesting: (0, post_processing_1.emptySummarizedWithProject)()
28
- };
29
- for (const [filepath, data] of info.entries()) {
30
- const value = data.loops;
31
- for (const [key, val] of Object.entries(value)) {
32
- if (typeof val !== 'object') {
33
- const get = collected[key];
34
- get.count.push(typeof val === 'number' ? Number(val) : (0, numbers_1.bigint2number)(val));
35
- if (val > 0) {
36
- (0, post_processing_1.recordFilePath)(get, filepath, config);
37
- }
38
- }
39
- else {
40
- (0, common_syntax_probability_1.appendCommonSyntaxTypeCounter)(collected[key], val);
41
- }
42
- }
43
- }
44
- const metaOut = fs_1.default.createWriteStream(path_1.default.join(outputPath, 'loops-meta.csv'));
45
- metaOut.write(`kind,unique-projects,unique-files,${(0, data_1.summarizedMeasurement2CsvHeader)()}\n`);
46
- for (const [key, val] of Object.entries(collected)) {
47
- const data = val;
48
- if ('uniqueProjects' in data) {
49
- metaOut.write(`${JSON.stringify(key)},${data.uniqueProjects.size},${data.uniqueFiles.size},${(0, data_1.summarizedMeasurement2Csv)((0, process_1.summarizeMeasurement)(data.count))}\n`);
50
- }
51
- else {
52
- // new file for each :D
53
- const out = fs_1.default.createWriteStream(path_1.default.join(outputPath, `loops-type-${key}.csv`));
54
- // name is for fields like number etc to allow to group multiple entries
55
- out.write(`kind,name,${(0, data_1.summarizedMeasurement2CsvHeader)()}\n`);
56
- for (const [name, vals] of Object.entries(data)) {
57
- if (Array.isArray(vals)) {
58
- out.write(`${JSON.stringify(name)},"",${(0, data_1.summarizedMeasurement2Csv)((0, process_1.summarizeMeasurement)(vals.flat()))}\n`);
59
- }
60
- else {
61
- for (const [keyName, keyValue] of Object.entries(vals)) {
62
- out.write(`${JSON.stringify(name)},${JSON.stringify(keyName)},${(0, data_1.summarizedMeasurement2Csv)((0, process_1.summarizeMeasurement)(keyValue.flat()))}\n`);
63
- }
64
- }
65
- }
66
- out.close();
67
- }
68
- }
69
- metaOut.close();
70
- }
71
- exports.postProcess = postProcess;
72
- //# sourceMappingURL=post-process.js.map
@@ -1 +0,0 @@
1
- export { usedFunctions } from './used-functions';
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.usedFunctions = void 0;
4
- var used_functions_1 = require("./used-functions");
5
- Object.defineProperty(exports, "usedFunctions", { enumerable: true, get: function () { return used_functions_1.usedFunctions; } });
6
- //# sourceMappingURL=index.js.map
@@ -1,6 +0,0 @@
1
- import type { FeatureStatisticsWithMeta } from '../../feature';
2
- import type { StatisticsSummarizerConfiguration } from '../../../../util/summarizer/statistics/summarizer';
3
- /**
4
- * Note: the summary does not contain a 0 for each function that is _not_ called by a file. Hence, the minimum can not be 0 (division for mean etc. will still be performed on total file count)
5
- */
6
- export declare function postProcess(featureRoot: string, info: Map<string, FeatureStatisticsWithMeta>, outputPath: string, config: StatisticsSummarizerConfiguration): void;