@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,175 +0,0 @@
1
- import type { EvalOptions } from 'xpath-ts2/src/parse-api';
2
- import type { MergeableRecord } from '../../util/objects';
3
- import type { NormalizedAst } from '../../r-bridge';
4
- import type { DataflowInformation } from '../../dataflow/internal/info';
5
- import type { MetaStatistics } from '../meta-statistics';
6
- import type { StatisticsSummarizerConfiguration } from '../../util/summarizer/statistics/summarizer';
7
- /**
8
- * Maps each sub-feature name to the number of occurrences of that sub-feature.
9
- * Allows for one nesting level to denote hierarchical features.
10
- * <p>
11
- * Since we are writing to files {@link process}, we only count feature occurrences (some feature/parts are not written to file)
12
- */
13
- export type FeatureInfo = Record<string, unknown> & MergeableRecord;
14
- /**
15
- * The information and context that a {@link FeatureProcessor} may operate in.
16
- */
17
- export interface FeatureProcessorInput extends MergeableRecord {
18
- /** The XML Document representing the parsed (non-normalized) R AST */
19
- readonly parsedRAst: Document;
20
- /** The R AST, after the normalization step */
21
- readonly normalizedRAst: NormalizedAst;
22
- /** The dataflow information for the given input */
23
- readonly dataflow: DataflowInformation;
24
- /** The filepath that the document originated from (if present, may be undefined if the input was provided as text). This can be relative to the common root directory of requests. */
25
- readonly filepath: string | undefined;
26
- }
27
- /**
28
- * A function that processes the analysis results of a document and returns the feature information.
29
- */
30
- export type FeatureProcessor<T extends FeatureInfo> = (existing: T, input: FeatureProcessorInput) => T;
31
- /**
32
- * A feature is something to be retrieved by the statistics.
33
- *
34
- * @typeParam T - The type of what should be collected for the feature
35
- *
36
- * @see ALL_FEATURES
37
- */
38
- export interface Feature<T extends FeatureInfo> {
39
- /** A descriptive, yet unique name of the feature */
40
- readonly name: string;
41
- /** A description of the feature */
42
- readonly description: string;
43
- /** A function that retrieves the feature in the document appends it to the existing feature set (we could use a monoid :D), the filepath corresponds to the active file (if any) */
44
- process: FeatureProcessor<T>;
45
- /**
46
- * If present, this feature allows to post-process the results of the feature extraction (for the summarizer).
47
- * <p>
48
- * The extraction can use the output path to write files to, and should return the final output.
49
- *
50
- * @param featureRoot - The root path to the feature directory which should contain all the files the feature can write to (already merged for every file processed)
51
- * @param info - The feature statistic maps each file name/context encountered to the feature information as well as the meta statistics for the file
52
- * @param outputPath - The path to write the output to (besides what is collected in the output and meta information)
53
- * @param config - The configuration for the summarizer (e.g., to obtain the number of folders to skip for the feature root)
54
- */
55
- postProcess?: (featureRoot: string, info: Map<string, FeatureStatisticsWithMeta>, outputPath: string, config: StatisticsSummarizerConfiguration) => void;
56
- /** Values to start the existing track from */
57
- initialValue: T;
58
- }
59
- /**
60
- * The source of truth for all features that are supported by the statistics.
61
- */
62
- export declare const ALL_FEATURES: {
63
- readonly usedPackages: Feature<import("ts-essentials").Writable<{
64
- library: number;
65
- require: number;
66
- loadNamespace: number;
67
- requireNamespace: number;
68
- attachNamespace: number;
69
- withinApply: number;
70
- '::': number;
71
- ':::': number;
72
- '<loadedByVariable>': number;
73
- }>>;
74
- readonly comments: Feature<import("ts-essentials").Writable<{
75
- totalAmount: number;
76
- roxygenComments: number;
77
- import: number;
78
- importFrom: number;
79
- importMethodsFrom: number;
80
- importClassesFrom: number;
81
- useDynLib: number;
82
- export: number;
83
- exportClass: number;
84
- exportMethod: number;
85
- exportS3Method: number;
86
- exportPattern: number;
87
- }>>;
88
- readonly definedFunctions: Feature<import("ts-essentials").Writable<{
89
- total: number;
90
- lambdasOnly: number;
91
- assignedFunctions: number;
92
- nestedFunctions: number;
93
- recursive: number;
94
- deepestNesting: number;
95
- }>>;
96
- readonly usedFunctions: Feature<import("ts-essentials").Writable<{
97
- allFunctionCalls: number;
98
- args: Record<number, bigint | import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>>;
99
- nestedFunctionCalls: number;
100
- deepestNesting: number;
101
- unnamedCalls: number;
102
- }>>;
103
- readonly values: Feature<import("ts-essentials").Writable<{
104
- allNumerics: number;
105
- imaginaryNumbers: number;
106
- integers: number;
107
- floatHex: number;
108
- logical: number;
109
- specialConstants: number;
110
- strings: number;
111
- }>>;
112
- readonly assignments: Feature<import("ts-essentials").Writable<{
113
- assignmentOperator: Record<string, bigint>;
114
- assigned: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
115
- deepestNesting: number;
116
- nestedOperatorAssignment: number;
117
- }>>;
118
- readonly loops: Feature<import("ts-essentials").Writable<{
119
- forLoops: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
120
- forLoopVar: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
121
- forBody: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
122
- whileLoops: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
123
- whileBody: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
124
- repeatLoops: bigint;
125
- repeatBody: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
126
- breakStatements: number;
127
- nextStatements: number;
128
- implicitLoops: number;
129
- nestedExplicitLoops: number;
130
- deepestExplicitNesting: number;
131
- }>>;
132
- readonly controlflow: Feature<import("ts-essentials").Writable<{
133
- ifThen: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
134
- thenBody: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
135
- ifThenElse: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
136
- elseBody: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
137
- nestedIfThen: number;
138
- nestedIfThenElse: number;
139
- deepestNesting: number;
140
- switchCase: import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
141
- }>>;
142
- readonly dataAccess: Feature<import("ts-essentials").Writable<{
143
- singleBracket: Record<number, bigint | import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>>;
144
- doubleBracket: Record<number, bigint | import("./common-syntax-probability").CommonSyntaxTypeCounts<bigint>>;
145
- chainedOrNestedAccess: number;
146
- longestChain: number;
147
- deepestNesting: number;
148
- byName: number;
149
- bySlot: number;
150
- }>>;
151
- readonly expressionList: Feature<import("ts-essentials").Writable<{
152
- allExpressionLists: number;
153
- deepestNesting: number;
154
- }>>;
155
- readonly variables: Feature<import("ts-essentials").Writable<{
156
- numberOfVariableUses: number;
157
- numberOfDefinitions: number;
158
- numberOfRedefinitions: number;
159
- unknownVariables: number;
160
- }>>;
161
- };
162
- export type FeatureKey = keyof typeof ALL_FEATURES;
163
- export type FeatureValue<K extends FeatureKey> = ReturnType<typeof ALL_FEATURES[K]['process']>;
164
- /** If the user passes `all`, this should be every feature present in {@link ALL_FEATURES} (see {@link allFeatureNames})*/
165
- export type FeatureSelection = Set<FeatureKey>;
166
- export declare const allFeatureNames: Set<FeatureKey>;
167
- export type FeatureStatistics = {
168
- [K in FeatureKey]: FeatureInfo;
169
- };
170
- export type FeatureStatisticsWithMeta = FeatureStatistics & {
171
- stats: MetaStatistics;
172
- };
173
- export interface Query {
174
- select(options?: EvalOptions): Node[];
175
- }
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.allFeatureNames = exports.ALL_FEATURES = void 0;
4
- /**
5
- * This module holds the definition of what a {@link Feature} that can be extracted from an R AST is.
6
- *
7
- * Furthermore, it contains the definition of all features that are known in {@link ALL_FEATURES}.
8
- *
9
- * @module
10
- */
11
- const supported_1 = require("./supported");
12
- const variables_1 = require("./supported/variables/variables");
13
- /**
14
- * The source of truth for all features that are supported by the statistics.
15
- */
16
- exports.ALL_FEATURES = {
17
- usedPackages: supported_1.usedPackages,
18
- comments: supported_1.comments,
19
- definedFunctions: supported_1.definedFunctions,
20
- usedFunctions: supported_1.usedFunctions,
21
- values: supported_1.values,
22
- assignments: supported_1.assignments,
23
- loops: supported_1.loops,
24
- controlflow: supported_1.controlflow,
25
- dataAccess: supported_1.dataAccess,
26
- expressionList: supported_1.expressionList,
27
- variables: variables_1.variables
28
- };
29
- exports.allFeatureNames = new Set(Object.keys(exports.ALL_FEATURES));
30
- //# sourceMappingURL=feature.js.map
@@ -1 +0,0 @@
1
- export * from './feature';
@@ -1,18 +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("./feature"), exports);
18
- //# sourceMappingURL=index.js.map
@@ -1,12 +0,0 @@
1
- import type { MergeableRecord } from '../../util/objects';
2
- import type { StatisticsSummarizerConfiguration } from '../../util/summarizer/statistics/summarizer';
3
- export interface SummarizedWithProject<Uniques = Set<string>, Count = number[]> {
4
- uniqueProjects: Uniques;
5
- uniqueFiles: Uniques;
6
- count: Count;
7
- }
8
- export declare function emptySummarizedWithProject(): SummarizedWithProject;
9
- export type ReplaceKeysForSummary<Source, Target> = MergeableRecord & {
10
- [K in keyof Source]: Target;
11
- };
12
- export declare function recordFilePath(summarize: SummarizedWithProject, filepath: string, config: StatisticsSummarizerConfiguration): void;
@@ -1,21 +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.recordFilePath = exports.emptySummarizedWithProject = void 0;
7
- const path_1 = __importDefault(require("path"));
8
- function emptySummarizedWithProject() {
9
- return {
10
- uniqueProjects: new Set(),
11
- uniqueFiles: new Set(),
12
- count: []
13
- };
14
- }
15
- exports.emptySummarizedWithProject = emptySummarizedWithProject;
16
- function recordFilePath(summarize, filepath, config) {
17
- summarize.uniqueFiles.add(filepath);
18
- summarize.uniqueProjects.add(filepath.split(path_1.default.sep)[config.projectSkip] ?? '');
19
- }
20
- exports.recordFilePath = recordFilePath;
21
- //# sourceMappingURL=post-processing.js.map
@@ -1,11 +0,0 @@
1
- import type { Feature } from '../../feature';
2
- import type { Writable } from 'ts-essentials';
3
- declare const initialAssignmentInfo: {
4
- assignmentOperator: Record<string, bigint>;
5
- assigned: import("../../common-syntax-probability").CommonSyntaxTypeCounts<bigint>;
6
- deepestNesting: number;
7
- nestedOperatorAssignment: number;
8
- };
9
- export type AssignmentInfo = Writable<typeof initialAssignmentInfo>;
10
- export declare const assignments: Feature<AssignmentInfo>;
11
- export {};
@@ -1,53 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.assignments = void 0;
4
- const common_syntax_probability_1 = require("../../common-syntax-probability");
5
- const r_bridge_1 = require("../../../../r-bridge");
6
- const post_process_1 = require("./post-process");
7
- const initialAssignmentInfo = {
8
- // operator to occurrence count
9
- assignmentOperator: {},
10
- assigned: (0, common_syntax_probability_1.emptyCommonSyntaxTypeCounts)(),
11
- // find combinations like `` is most often used for functions?
12
- deepestNesting: 0,
13
- nestedOperatorAssignment: 0
14
- };
15
- function visitAssignment(info, input) {
16
- const assignmentStack = [];
17
- (0, r_bridge_1.visitAst)(input.normalizedRAst.ast, node => {
18
- if (node.type !== "RBinaryOp" /* RType.BinaryOp */ || node.flavor !== 'assignment') {
19
- return;
20
- }
21
- if (assignmentStack.length > 0) {
22
- info.nestedOperatorAssignment++;
23
- info.deepestNesting = Math.max(info.deepestNesting, assignmentStack.length);
24
- }
25
- assignmentStack.push(node);
26
- info.assignmentOperator[node.operator] = (info.assignmentOperator[node.operator] ?? 0n) + 1n;
27
- switch (node.operator) {
28
- case '->':
29
- case '->>':
30
- info.assigned = (0, common_syntax_probability_1.updateCommonSyntaxTypeCounts)(info.assigned, node.lhs);
31
- break;
32
- default:
33
- info.assigned = (0, common_syntax_probability_1.updateCommonSyntaxTypeCounts)(info.assigned, node.rhs);
34
- break;
35
- }
36
- }, node => {
37
- // drop again :D
38
- if (node.type === "RBinaryOp" /* RType.BinaryOp */ && node.flavor === 'assignment') {
39
- assignmentStack.pop();
40
- }
41
- });
42
- }
43
- exports.assignments = {
44
- name: 'Assignments',
45
- description: 'all ways to assign something in R',
46
- process(existing, input) {
47
- visitAssignment(existing, input);
48
- return existing;
49
- },
50
- initialValue: initialAssignmentInfo,
51
- postProcess: post_process_1.postProcess
52
- };
53
- //# sourceMappingURL=assignments.js.map
@@ -1 +0,0 @@
1
- export { assignments } from './assignments';
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.assignments = void 0;
4
- var assignments_1 = require("./assignments");
5
- Object.defineProperty(exports, "assignments", { enumerable: true, get: function () { return assignments_1.assignments; } });
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,125 +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 common_syntax_probability_1 = require("../../common-syntax-probability");
8
- const numbers_1 = require("../../../../util/numbers");
9
- const fs_1 = __importDefault(require("fs"));
10
- const path_1 = __importDefault(require("path"));
11
- const data_1 = require("../../../../util/summarizer/benchmark/data");
12
- const process_1 = require("../../../../util/summarizer/benchmark/first-phase/process");
13
- const arrays_1 = require("../../../../util/arrays");
14
- const assert_1 = require("../../../../util/assert");
15
- function appendOperators(base, b, filepath, config) {
16
- for (const [key, val] of Object.entries(b)) {
17
- let get = base.assignmentOperator[key];
18
- if (!get) {
19
- get = { uniqueFiles: new Set(), uniqueProjects: new Set(), counts: [] };
20
- base.assignmentOperator[key] = get;
21
- }
22
- const num = (0, numbers_1.bigint2number)(val);
23
- get.counts.push([num]);
24
- if (num > 0) {
25
- get.uniqueFiles.add(filepath);
26
- get.uniqueProjects.add(filepath.split(path_1.default.sep)[config.projectSkip] ?? '');
27
- }
28
- }
29
- }
30
- // returns a map that for each combination of operators found (like `<-,=`) returns the number of projects and files
31
- // that use both of them
32
- function retrieveUsageCombinationCounts(collected) {
33
- const ops = Object.keys(collected.assignmentOperator);
34
- if (ops.length < 1) {
35
- return new Map();
36
- }
37
- const allCombinations = [...(0, arrays_1.getUniqueCombinationsOfSize)(ops, 1)];
38
- const store = new Map();
39
- for (const combs of allCombinations) {
40
- if (combs.length === 1) {
41
- // we can just copy the information
42
- const { uniqueProjects, uniqueFiles } = collected.assignmentOperator[combs[0]];
43
- store.set(combs[0], { uniqueProjects, uniqueFiles });
44
- continue;
45
- }
46
- const existingKey = combs.slice(0, -1).join(',');
47
- const existing = store.get(existingKey);
48
- (0, assert_1.guard)(existing !== undefined, `Unable to retrieve cache for ${existingKey}`);
49
- const newKey = combs.join(',');
50
- const { uniqueProjects, uniqueFiles } = collected.assignmentOperator[combs[combs.length - 1]];
51
- const newUniqueProjects = new Set([...existing.uniqueProjects].filter(x => uniqueProjects.has(x)));
52
- const newUniqueFiles = new Set([...existing.uniqueFiles].filter(x => uniqueFiles.has(x)));
53
- store.set(newKey, { uniqueProjects: newUniqueProjects, uniqueFiles: newUniqueFiles });
54
- }
55
- const result = new Map();
56
- for (const [key, val] of store.entries()) {
57
- result.set(key, { uniqueProjects: val.uniqueProjects.size, uniqueFiles: val.uniqueFiles.size });
58
- }
59
- return result;
60
- }
61
- function writeOperatorCombinationsUsageToCsv(collected, outputPath) {
62
- // now to get all projects exhausted with _only_ a given subset (e.g., all projects only using '=')
63
- const operators = retrieveUsageCombinationCounts(collected);
64
- const out = fs_1.default.createWriteStream(path_1.default.join(outputPath, 'assignments-assigned-combinations.csv'));
65
- out.write('assignment,unique-projects,unique-files\n');
66
- for (const [key, val] of operators.entries()) {
67
- out.write(`${JSON.stringify(key)},${val.uniqueProjects},${val.uniqueFiles}\n`);
68
- }
69
- out.close();
70
- }
71
- function writeAssignmentMetadataToCsv(outputPath, collected) {
72
- const out = fs_1.default.createWriteStream(path_1.default.join(outputPath, 'assignments-meta.csv'));
73
- out.write(`kind,${(0, data_1.summarizedMeasurement2CsvHeader)()}\n`);
74
- const summarizedDeepestNesting = (0, process_1.summarizeMeasurement)(collected.deepestNesting.flat());
75
- out.write(`deepest-nesting,${(0, data_1.summarizedMeasurement2Csv)(summarizedDeepestNesting)}\n`);
76
- const summarizedNestedOperatorAssignment = (0, process_1.summarizeMeasurement)(collected.nestedOperatorAssignment.flat());
77
- out.write(`nested-operator-assignment,${(0, data_1.summarizedMeasurement2Csv)(summarizedNestedOperatorAssignment)}\n`);
78
- out.close();
79
- }
80
- function writeAssignedTypesToCsv(outputPath, collected) {
81
- const out = fs_1.default.createWriteStream(path_1.default.join(outputPath, 'assignments-assigned.csv'));
82
- out.write(`kind,name,${(0, data_1.summarizedMeasurement2CsvHeader)()}\n`);
83
- for (const [entryName, values] of Object.entries(collected.assigned)) {
84
- if (Array.isArray(values)) {
85
- out.write(`${JSON.stringify(entryName)},"",${(0, data_1.summarizedMeasurement2Csv)((0, process_1.summarizeMeasurement)(values.flat()))}\n`);
86
- }
87
- else {
88
- for (const [keyName, keyValue] of Object.entries(values)) {
89
- out.write(`${JSON.stringify(entryName)},${JSON.stringify(keyName)},${(0, data_1.summarizedMeasurement2Csv)((0, process_1.summarizeMeasurement)(keyValue.flat()))}\n`);
90
- }
91
- }
92
- }
93
- out.close();
94
- }
95
- function writeAssignmentOperatorsToCsv(outputPath, collected) {
96
- const fnOutStream = fs_1.default.createWriteStream(path_1.default.join(outputPath, 'assignments-assignment-operators.csv'));
97
- fnOutStream.write(`assignment,unique-projects,unique-files,${(0, data_1.summarizedMeasurement2CsvHeader)()}\n`);
98
- for (const [key, val] of Object.entries(collected.assignmentOperator)) {
99
- const { uniqueProjects, uniqueFiles, counts } = val;
100
- const summarized = (0, data_1.summarizedMeasurement2Csv)((0, process_1.summarizeMeasurement)(counts.flat()));
101
- fnOutStream.write(`${JSON.stringify(key)},${uniqueProjects.size},${uniqueFiles.size},${summarized}\n`);
102
- }
103
- fnOutStream.close();
104
- }
105
- function postProcess(featureRoot, info, outputPath, config) {
106
- const collected = {
107
- assignmentOperator: {},
108
- assigned: (0, common_syntax_probability_1.emptyCommonSyntaxTypeCounts)(() => []),
109
- deepestNesting: [],
110
- nestedOperatorAssignment: []
111
- };
112
- for (const [filepath, data] of info.entries()) {
113
- const assignmentInfo = data.assignments;
114
- collected.deepestNesting.push([assignmentInfo.deepestNesting]);
115
- collected.nestedOperatorAssignment.push([assignmentInfo.nestedOperatorAssignment]);
116
- (0, common_syntax_probability_1.appendCommonSyntaxTypeCounter)(collected.assigned, assignmentInfo.assigned);
117
- appendOperators(collected, assignmentInfo.assignmentOperator, filepath, config);
118
- }
119
- writeAssignmentOperatorsToCsv(outputPath, collected);
120
- writeOperatorCombinationsUsageToCsv(collected, outputPath);
121
- writeAssignmentMetadataToCsv(outputPath, collected);
122
- writeAssignedTypesToCsv(outputPath, collected);
123
- }
124
- exports.postProcess = postProcess;
125
- //# sourceMappingURL=post-process.js.map
@@ -1,18 +0,0 @@
1
- import type { Feature } from '../../feature';
2
- import type { Writable } from 'ts-essentials';
3
- export declare const initialCommentInfo: {
4
- totalAmount: number;
5
- roxygenComments: number;
6
- import: number;
7
- importFrom: number;
8
- importMethodsFrom: number;
9
- importClassesFrom: number;
10
- useDynLib: number;
11
- export: number;
12
- exportClass: number;
13
- exportMethod: number;
14
- exportS3Method: number;
15
- exportPattern: number;
16
- };
17
- export type CommentInfo = Writable<typeof initialCommentInfo>;
18
- export declare const comments: Feature<CommentInfo>;
@@ -1,133 +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.comments = exports.initialCommentInfo = void 0;
27
- const xpath = __importStar(require("xpath-ts2"));
28
- const assert_1 = require("../../../../util/assert");
29
- const output_1 = require("../../../output");
30
- const post_process_1 = require("./post-process");
31
- exports.initialCommentInfo = {
32
- totalAmount: 0,
33
- roxygenComments: 0,
34
- import: 0,
35
- importFrom: 0,
36
- importMethodsFrom: 0,
37
- importClassesFrom: 0,
38
- useDynLib: 0,
39
- export: 0,
40
- exportClass: 0,
41
- exportMethod: 0,
42
- exportS3Method: 0,
43
- exportPattern: 0
44
- };
45
- const commentQuery = xpath.parse('//COMMENT');
46
- const importRegex = /^'\s*@import\s+(?<package>\S+)/;
47
- const importFromRegex = /^'\s*@importFrom\s+(?<package>\S+)(?<fn>( +\S+)+)$/;
48
- const useDynLibRegex = /^'\s*@useDynLib\s+(?<package>\S+)(?<fn>( +\S+)+)?$/;
49
- /** we still name the classes fn, so we can reuse processing code */
50
- const importClassesFromRegex = /^'\s*@importClassesFrom\s+(?<package>\S+)(?<fn>( +\S+)+)$/;
51
- const importMethodsFrom = /^'\s*@importMethodsFrom\s+(?<package>\S+)(?<fn>( +\S+)+)$/;
52
- /** deliberately includes the others to get a "total" overview */
53
- const exportRegex = /^'\s*@export/;
54
- const exportS3MethodRegex = /^'\s*@exportS3Method/;
55
- const exportClassRegex = /^'\s*@exportClass/;
56
- const exportMethodRegex = /^'\s*@exportMethod/;
57
- const exportPatternRegex = /^'\s*@exportPattern/;
58
- function processRoxygenImport(existing, commentsText, filepath) {
59
- const packages = commentsText.map(text => importRegex.exec(text)?.groups?.package).filter(assert_1.isNotUndefined);
60
- existing.import += packages.length;
61
- (0, output_1.appendStatisticsFile)(exports.comments.name, 'import', packages, filepath, true);
62
- }
63
- function processWithRegex(commentsText, existing, regex) {
64
- return commentsText.map(text => regex.exec(text)).filter(assert_1.isNotNull)
65
- .flatMap(match => {
66
- const packageName = match.groups?.package ?? '<unknown>';
67
- return (match.groups?.fn.trim().split(/\s+/) ?? []).map(fn => `${JSON.stringify(packageName)},${fn}`);
68
- });
69
- }
70
- function processRoxygenImportFrom(existing, commentsText, filepath) {
71
- const result = processWithRegex(commentsText, existing, importFromRegex);
72
- existing.importFrom += result.length;
73
- (0, output_1.appendStatisticsFile)(exports.comments.name, 'importFrom', result, filepath, true);
74
- }
75
- function processRoxygenImportClassesFrom(existing, commentsText, filepath) {
76
- const result = processWithRegex(commentsText, existing, importClassesFromRegex);
77
- existing.importClassesFrom += result.length;
78
- (0, output_1.appendStatisticsFile)(exports.comments.name, 'importClassesFrom', result, filepath, true);
79
- }
80
- function processRoxygenImportMethodsFrom(existing, commentsText, filepath) {
81
- const result = processWithRegex(commentsText, existing, importMethodsFrom);
82
- existing.importMethodsFrom += result.length;
83
- (0, output_1.appendStatisticsFile)(exports.comments.name, 'importMethodsFrom', result, filepath, true);
84
- }
85
- function processExports(existing, comments) {
86
- existing.export += comments.filter(text => exportRegex.test(text)).length;
87
- existing.exportClass += comments.filter(text => exportClassRegex.test(text)).length;
88
- existing.exportMethod += comments.filter(text => exportMethodRegex.test(text)).length;
89
- existing.exportS3Method += comments.filter(text => exportS3MethodRegex.test(text)).length;
90
- existing.exportPattern += comments.filter(text => exportPatternRegex.test(text)).length;
91
- }
92
- function processMatchForDynLib(match) {
93
- const packageName = match.groups?.package ?? '<unknown>';
94
- const functions = match.groups?.fn?.trim().split(/\s+/) ?? [];
95
- if (functions.length === 0) {
96
- return [packageName];
97
- }
98
- else {
99
- return functions.map(fn => `${JSON.stringify(packageName)},${fn}`);
100
- }
101
- }
102
- function processRoxygenUseDynLib(existing, commentsText, filepath) {
103
- const result = commentsText.map(text => useDynLibRegex.exec(text))
104
- .filter(assert_1.isNotNull)
105
- .flatMap(processMatchForDynLib);
106
- existing.useDynLib += result.length;
107
- (0, output_1.appendStatisticsFile)(exports.comments.name, 'useDynLib', result, filepath, true);
108
- }
109
- exports.comments = {
110
- name: 'Comments',
111
- description: 'All comments that appear within the document',
112
- process(existing, input) {
113
- const comments = commentQuery.select({ node: input.parsedRAst }).map(node => node.textContent ?? '#')
114
- .map(text => {
115
- (0, assert_1.guard)(text.startsWith('#'), `unexpected comment ${text}`);
116
- return text.slice(1);
117
- })
118
- .map(text => text.trim());
119
- existing.totalAmount += comments.length;
120
- const roxygenComments = comments.filter(text => text.startsWith("'"));
121
- existing.roxygenComments += roxygenComments.length;
122
- processRoxygenImport(existing, roxygenComments, input.filepath);
123
- processRoxygenImportFrom(existing, roxygenComments, input.filepath);
124
- processRoxygenUseDynLib(existing, roxygenComments, input.filepath);
125
- processRoxygenImportClassesFrom(existing, roxygenComments, input.filepath);
126
- processRoxygenImportMethodsFrom(existing, roxygenComments, input.filepath);
127
- processExports(existing, roxygenComments);
128
- return existing;
129
- },
130
- initialValue: exports.initialCommentInfo,
131
- postProcess: post_process_1.postProcess
132
- };
133
- //# sourceMappingURL=comments.js.map
@@ -1 +0,0 @@
1
- export { comments } from './comments';
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.comments = void 0;
4
- var comments_1 = require("./comments");
5
- Object.defineProperty(exports, "comments", { enumerable: true, get: function () { return comments_1.comments; } });
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;