@eagleoutice/flowr 1.4.1 → 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.
- package/README.md +3 -3
- package/abstract-interpretation/processor.js +9 -3
- package/config.d.ts +16 -0
- package/config.js +75 -0
- package/core/input.d.ts +1 -1
- package/core/output.d.ts +1 -2
- package/core/print/parse-printer.d.ts +1 -2
- package/core/print/parse-printer.js +6 -4
- package/core/print/slice-diff-ansi.js +7 -7
- package/core/slicer.js +4 -8
- package/core/steps.d.ts +355 -31
- package/core/steps.js +7 -14
- package/dataflow/environments/environment.js +8 -0
- package/dataflow/environments/register.js +1 -0
- package/dataflow/extractor.d.ts +2 -2
- package/dataflow/extractor.js +10 -2
- package/dataflow/internal/process/functions/function-call.js +7 -1
- package/dataflow/internal/process/functions/source.d.ts +8 -0
- package/dataflow/internal/process/functions/source.js +81 -0
- package/dataflow/processor.d.ts +10 -1
- package/index.d.ts +0 -2
- package/index.js +0 -2
- package/package.json +75 -202
- package/r-bridge/lang-4.x/ast/index.d.ts +1 -0
- package/r-bridge/lang-4.x/ast/index.js +3 -0
- package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +2 -0
- package/r-bridge/lang-4.x/ast/model/processing/decorate.js +6 -1
- package/r-bridge/lang-4.x/ast/parser/json/format.d.ts +14 -0
- package/r-bridge/lang-4.x/ast/parser/json/format.js +26 -0
- package/r-bridge/lang-4.x/ast/parser/json/parser.d.ts +7 -0
- package/r-bridge/lang-4.x/ast/parser/json/parser.js +57 -0
- package/r-bridge/lang-4.x/ast/parser/xml/data.d.ts +0 -3
- package/r-bridge/lang-4.x/ast/parser/xml/index.d.ts +0 -2
- package/r-bridge/lang-4.x/ast/parser/xml/index.js +0 -2
- package/r-bridge/lang-4.x/ast/parser/xml/input-format.d.ts +5 -1
- package/r-bridge/lang-4.x/ast/parser/xml/input-format.js +7 -10
- package/r-bridge/lang-4.x/ast/parser/xml/internal/access.js +2 -2
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then-else.js +1 -1
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then.js +2 -2
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.js +4 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/argument.js +2 -2
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/call.js +4 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/definition.js +2 -2
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/parameter.js +2 -2
- package/r-bridge/lang-4.x/ast/parser/xml/internal/index.d.ts +0 -1
- package/r-bridge/lang-4.x/ast/parser/xml/internal/index.js +0 -1
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/break.js +2 -2
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/for.js +3 -6
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/next.js +2 -2
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/repeat.js +2 -2
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/while.js +2 -2
- package/r-bridge/lang-4.x/ast/parser/xml/internal/meta.d.ts +6 -11
- package/r-bridge/lang-4.x/ast/parser/xml/internal/meta.js +15 -23
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/binary.js +6 -6
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.js +3 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/comment.js +2 -2
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/line-directive.js +2 -2
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.js +3 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.js +3 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.js +2 -2
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/number.js +2 -2
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/string.js +2 -2
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/symbol.js +4 -4
- package/r-bridge/lang-4.x/values.d.ts +0 -1
- package/r-bridge/lang-4.x/values.js +14 -6
- package/r-bridge/retriever.d.ts +25 -21
- package/r-bridge/retriever.js +73 -23
- package/r-bridge/shell-executor.d.ts +3 -17
- package/r-bridge/shell-executor.js +9 -78
- package/r-bridge/shell.d.ts +5 -27
- package/r-bridge/shell.js +31 -92
- package/{statistics/output → util}/ansi.js +1 -1
- package/util/args.d.ts +8 -4
- package/util/args.js +11 -4
- package/util/cfg/visitor.js +1 -1
- package/util/files.d.ts +6 -0
- package/util/files.js +11 -1
- package/util/log.js +3 -0
- package/util/{summarizer/summarizer.d.ts → summarizer.d.ts} +15 -1
- package/util/summarizer.js +37 -0
- package/util/version.d.ts +2 -0
- package/util/version.js +10 -0
- package/benchmark/index.d.ts +0 -3
- package/benchmark/index.js +0 -20
- package/benchmark/slicer.d.ts +0 -101
- package/benchmark/slicer.js +0 -225
- package/benchmark/stats/index.d.ts +0 -10
- package/benchmark/stats/index.js +0 -27
- package/benchmark/stats/print.d.ts +0 -7
- package/benchmark/stats/print.js +0 -157
- package/benchmark/stats/stats.d.ts +0 -41
- package/benchmark/stats/stats.js +0 -6
- package/benchmark/stopwatch.d.ts +0 -35
- package/benchmark/stopwatch.js +0 -79
- package/cli/benchmark-app.d.ts +0 -9
- package/cli/benchmark-app.js +0 -52
- package/cli/benchmark-helper-app.d.ts +0 -7
- package/cli/benchmark-helper-app.js +0 -60
- package/cli/common/features.d.ts +0 -3
- package/cli/common/features.js +0 -30
- package/cli/common/index.d.ts +0 -2
- package/cli/common/index.js +0 -19
- package/cli/common/options.d.ts +0 -20
- package/cli/common/options.js +0 -82
- package/cli/common/script.d.ts +0 -21
- package/cli/common/script.js +0 -61
- package/cli/common/scripts-info.d.ts +0 -24
- package/cli/common/scripts-info.js +0 -69
- package/cli/export-quads-app.d.ts +0 -7
- package/cli/export-quads-app.js +0 -46
- package/cli/repl/commands/cfg.d.ts +0 -3
- package/cli/repl/commands/cfg.js +0 -37
- package/cli/repl/commands/commands.d.ts +0 -11
- package/cli/repl/commands/commands.js +0 -103
- package/cli/repl/commands/dataflow.d.ts +0 -3
- package/cli/repl/commands/dataflow.js +0 -34
- package/cli/repl/commands/execute.d.ts +0 -4
- package/cli/repl/commands/execute.js +0 -27
- package/cli/repl/commands/index.d.ts +0 -2
- package/cli/repl/commands/index.js +0 -19
- package/cli/repl/commands/main.d.ts +0 -39
- package/cli/repl/commands/main.js +0 -14
- package/cli/repl/commands/normalize.d.ts +0 -3
- package/cli/repl/commands/normalize.js +0 -34
- package/cli/repl/commands/parse.d.ts +0 -2
- package/cli/repl/commands/parse.js +0 -109
- package/cli/repl/commands/quit.d.ts +0 -2
- package/cli/repl/commands/quit.js +0 -12
- package/cli/repl/commands/version.d.ts +0 -16
- package/cli/repl/commands/version.js +0 -33
- package/cli/repl/core.d.ts +0 -39
- package/cli/repl/core.js +0 -116
- package/cli/repl/execute.d.ts +0 -28
- package/cli/repl/execute.js +0 -79
- package/cli/repl/index.d.ts +0 -5
- package/cli/repl/index.js +0 -22
- package/cli/repl/prompt.d.ts +0 -2
- package/cli/repl/prompt.js +0 -9
- package/cli/repl/server/connection.d.ts +0 -21
- package/cli/repl/server/connection.js +0 -218
- package/cli/repl/server/messages/analysis.d.ts +0 -71
- package/cli/repl/server/messages/analysis.js +0 -21
- package/cli/repl/server/messages/error.d.ts +0 -11
- package/cli/repl/server/messages/error.js +0 -3
- package/cli/repl/server/messages/hello.d.ts +0 -20
- package/cli/repl/server/messages/hello.js +0 -3
- package/cli/repl/server/messages/index.d.ts +0 -1
- package/cli/repl/server/messages/index.js +0 -3
- package/cli/repl/server/messages/messages.d.ts +0 -35
- package/cli/repl/server/messages/messages.js +0 -40
- package/cli/repl/server/messages/repl.d.ts +0 -33
- package/cli/repl/server/messages/repl.js +0 -37
- package/cli/repl/server/messages/slice.d.ts +0 -25
- package/cli/repl/server/messages/slice.js +0 -37
- package/cli/repl/server/net.d.ts +0 -49
- package/cli/repl/server/net.js +0 -63
- package/cli/repl/server/send.d.ts +0 -4
- package/cli/repl/server/send.js +0 -18
- package/cli/repl/server/server.d.ts +0 -20
- package/cli/repl/server/server.js +0 -66
- package/cli/repl/server/validate.d.ts +0 -15
- package/cli/repl/server/validate.js +0 -34
- package/cli/slicer-app.d.ts +0 -11
- package/cli/slicer-app.js +0 -81
- package/cli/statistics-app.d.ts +0 -11
- package/cli/statistics-app.js +0 -98
- package/cli/statistics-helper-app.d.ts +0 -11
- package/cli/statistics-helper-app.js +0 -83
- package/cli/summarizer-app.d.ts +0 -18
- package/cli/summarizer-app.js +0 -67
- package/flowr.d.ts +0 -27
- package/flowr.js +0 -137
- package/r-bridge/lang-4.x/ast/parser/xml/config.d.ts +0 -25
- package/r-bridge/lang-4.x/ast/parser/xml/config.js +0 -16
- package/r-bridge/lang-4.x/ast/parser/xml/internal/xml-to-json.d.ts +0 -9
- package/r-bridge/lang-4.x/ast/parser/xml/internal/xml-to-json.js +0 -51
- package/r-bridge/lang-4.x/ast/parser/xml/parser.d.ts +0 -17
- package/r-bridge/lang-4.x/ast/parser/xml/parser.js +0 -30
- package/statistics/features/common-syntax-probability.d.ts +0 -31
- package/statistics/features/common-syntax-probability.js +0 -156
- package/statistics/features/feature.d.ts +0 -175
- package/statistics/features/feature.js +0 -30
- package/statistics/features/index.d.ts +0 -1
- package/statistics/features/index.js +0 -18
- package/statistics/features/post-processing.d.ts +0 -12
- package/statistics/features/post-processing.js +0 -21
- package/statistics/features/supported/assignments/assignments.d.ts +0 -11
- package/statistics/features/supported/assignments/assignments.js +0 -53
- package/statistics/features/supported/assignments/index.d.ts +0 -1
- package/statistics/features/supported/assignments/index.js +0 -6
- package/statistics/features/supported/assignments/post-process.d.ts +0 -3
- package/statistics/features/supported/assignments/post-process.js +0 -125
- package/statistics/features/supported/comments/comments.d.ts +0 -18
- package/statistics/features/supported/comments/comments.js +0 -133
- package/statistics/features/supported/comments/index.d.ts +0 -1
- package/statistics/features/supported/comments/index.js +0 -6
- package/statistics/features/supported/comments/post-process.d.ts +0 -3
- package/statistics/features/supported/comments/post-process.js +0 -50
- package/statistics/features/supported/control-flow/control-flow.d.ts +0 -17
- package/statistics/features/supported/control-flow/control-flow.js +0 -67
- package/statistics/features/supported/control-flow/index.d.ts +0 -1
- package/statistics/features/supported/control-flow/index.js +0 -6
- package/statistics/features/supported/control-flow/post-process.d.ts +0 -3
- package/statistics/features/supported/control-flow/post-process.js +0 -65
- package/statistics/features/supported/data-access/data-access.d.ts +0 -15
- package/statistics/features/supported/data-access/data-access.js +0 -118
- package/statistics/features/supported/data-access/index.d.ts +0 -1
- package/statistics/features/supported/data-access/index.js +0 -6
- package/statistics/features/supported/data-access/post-process.d.ts +0 -3
- package/statistics/features/supported/data-access/post-process.js +0 -107
- package/statistics/features/supported/defined-functions/defined-functions.d.ts +0 -35
- package/statistics/features/supported/defined-functions/defined-functions.js +0 -139
- package/statistics/features/supported/defined-functions/index.d.ts +0 -1
- package/statistics/features/supported/defined-functions/index.js +0 -6
- package/statistics/features/supported/defined-functions/post-process.d.ts +0 -6
- package/statistics/features/supported/defined-functions/post-process.js +0 -177
- package/statistics/features/supported/expression-list/expression-list.d.ts +0 -9
- package/statistics/features/supported/expression-list/expression-list.js +0 -36
- package/statistics/features/supported/expression-list/index.d.ts +0 -1
- package/statistics/features/supported/expression-list/index.js +0 -6
- package/statistics/features/supported/expression-list/post-process.d.ts +0 -3
- package/statistics/features/supported/expression-list/post-process.js +0 -44
- package/statistics/features/supported/index.d.ts +0 -10
- package/statistics/features/supported/index.js +0 -27
- package/statistics/features/supported/loops/index.d.ts +0 -1
- package/statistics/features/supported/loops/index.js +0 -6
- package/statistics/features/supported/loops/loops.d.ts +0 -20
- package/statistics/features/supported/loops/loops.js +0 -79
- package/statistics/features/supported/loops/post-process.d.ts +0 -3
- package/statistics/features/supported/loops/post-process.js +0 -72
- package/statistics/features/supported/used-functions/index.d.ts +0 -1
- package/statistics/features/supported/used-functions/index.js +0 -6
- package/statistics/features/supported/used-functions/post-process.d.ts +0 -6
- package/statistics/features/supported/used-functions/post-process.js +0 -179
- package/statistics/features/supported/used-functions/used-functions.d.ts +0 -24
- package/statistics/features/supported/used-functions/used-functions.js +0 -95
- package/statistics/features/supported/used-packages/index.d.ts +0 -1
- package/statistics/features/supported/used-packages/index.js +0 -6
- package/statistics/features/supported/used-packages/post-process.d.ts +0 -3
- package/statistics/features/supported/used-packages/post-process.js +0 -121
- package/statistics/features/supported/used-packages/used-packages.d.ts +0 -16
- package/statistics/features/supported/used-packages/used-packages.js +0 -130
- package/statistics/features/supported/values/index.d.ts +0 -1
- package/statistics/features/supported/values/index.js +0 -6
- package/statistics/features/supported/values/post-process.d.ts +0 -3
- package/statistics/features/supported/values/post-process.js +0 -72
- package/statistics/features/supported/values/values.d.ts +0 -14
- package/statistics/features/supported/values/values.js +0 -101
- package/statistics/features/supported/variables/index.d.ts +0 -1
- package/statistics/features/supported/variables/index.js +0 -6
- package/statistics/features/supported/variables/post-process.d.ts +0 -9
- package/statistics/features/supported/variables/post-process.js +0 -122
- package/statistics/features/supported/variables/variables.d.ts +0 -15
- package/statistics/features/supported/variables/variables.js +0 -70
- package/statistics/index.d.ts +0 -6
- package/statistics/index.js +0 -24
- package/statistics/meta-statistics.d.ts +0 -33
- package/statistics/meta-statistics.js +0 -17
- package/statistics/output/file-provider.d.ts +0 -37
- package/statistics/output/file-provider.js +0 -97
- package/statistics/output/index.d.ts +0 -4
- package/statistics/output/index.js +0 -21
- package/statistics/output/print-stats.d.ts +0 -17
- package/statistics/output/print-stats.js +0 -69
- package/statistics/output/statistics-file.d.ts +0 -37
- package/statistics/output/statistics-file.js +0 -69
- package/statistics/statistics.d.ts +0 -24
- package/statistics/statistics.js +0 -109
- package/util/summarizer/auto-detect.d.ts +0 -2
- package/util/summarizer/auto-detect.js +0 -32
- package/util/summarizer/benchmark/data.d.ts +0 -66
- package/util/summarizer/benchmark/data.js +0 -13
- package/util/summarizer/benchmark/first-phase/input.d.ts +0 -2
- package/util/summarizer/benchmark/first-phase/input.js +0 -59
- package/util/summarizer/benchmark/first-phase/process.d.ts +0 -10
- package/util/summarizer/benchmark/first-phase/process.js +0 -208
- package/util/summarizer/benchmark/second-phase/graph.d.ts +0 -2
- package/util/summarizer/benchmark/second-phase/graph.js +0 -54
- package/util/summarizer/benchmark/second-phase/process.d.ts +0 -4
- package/util/summarizer/benchmark/second-phase/process.js +0 -89
- package/util/summarizer/benchmark/summarizer.d.ts +0 -35
- package/util/summarizer/benchmark/summarizer.js +0 -49
- package/util/summarizer/statistics/first-phase/process.d.ts +0 -6
- package/util/summarizer/statistics/first-phase/process.js +0 -81
- package/util/summarizer/statistics/post-process/clusterer.d.ts +0 -26
- package/util/summarizer/statistics/post-process/clusterer.js +0 -43
- package/util/summarizer/statistics/post-process/file-based-count.d.ts +0 -17
- package/util/summarizer/statistics/post-process/file-based-count.js +0 -49
- package/util/summarizer/statistics/post-process/histogram.d.ts +0 -59
- package/util/summarizer/statistics/post-process/histogram.js +0 -128
- package/util/summarizer/statistics/post-process/index.d.ts +0 -4
- package/util/summarizer/statistics/post-process/index.js +0 -21
- package/util/summarizer/statistics/post-process/post-process-output.d.ts +0 -16
- package/util/summarizer/statistics/post-process/post-process-output.js +0 -104
- package/util/summarizer/statistics/second-phase/process.d.ts +0 -11
- package/util/summarizer/statistics/second-phase/process.js +0 -117
- package/util/summarizer/statistics/summarizer.d.ts +0 -35
- package/util/summarizer/statistics/summarizer.js +0 -135
- package/util/summarizer/summarizer.js +0 -13
- /package/{statistics/output → util}/ansi.d.ts +0 -0
|
@@ -1,130 +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.usedPackages = exports.initialUsedPackageInfos = void 0;
|
|
27
|
-
const xpath = __importStar(require("xpath-ts2"));
|
|
28
|
-
const output_1 = require("../../../output");
|
|
29
|
-
const post_process_1 = require("./post-process");
|
|
30
|
-
exports.initialUsedPackageInfos = {
|
|
31
|
-
library: 0,
|
|
32
|
-
require: 0,
|
|
33
|
-
loadNamespace: 0,
|
|
34
|
-
requireNamespace: 0,
|
|
35
|
-
attachNamespace: 0,
|
|
36
|
-
withinApply: 0,
|
|
37
|
-
'::': 0,
|
|
38
|
-
':::': 0,
|
|
39
|
-
/** just contains all occurrences where it is impossible to statically determine which package is loaded */
|
|
40
|
-
'<loadedByVariable>': 0
|
|
41
|
-
};
|
|
42
|
-
// based on the extraction routine of lintr search for function calls which are not character-loads (we can not trace those...)
|
|
43
|
-
const withinApply = xpath.parse(`
|
|
44
|
-
//SYMBOL_FUNCTION_CALL[contains(.,"apply")]/../..
|
|
45
|
-
//SYMBOL[text()='require' or text()='library' or text()='loadNamespace' or text()='requireNamespace' or text()='attachNamespace']
|
|
46
|
-
/../..
|
|
47
|
-
`);
|
|
48
|
-
// horrible ways I found exploratively like loading within `sapply`
|
|
49
|
-
const libraryOrRequire = xpath.parse(`
|
|
50
|
-
//SYMBOL_FUNCTION_CALL[text() = $variable]
|
|
51
|
-
/parent::expr
|
|
52
|
-
/parent::expr[
|
|
53
|
-
expr[2][STR_CONST]
|
|
54
|
-
or (
|
|
55
|
-
expr[2][SYMBOL]
|
|
56
|
-
and not(
|
|
57
|
-
SYMBOL_SUB[text() = 'character.only']
|
|
58
|
-
/following-sibling::expr[1]
|
|
59
|
-
/NUM_CONST[text() = 'TRUE' or text() = 'T']
|
|
60
|
-
)
|
|
61
|
-
)
|
|
62
|
-
]/OP-LEFT-PAREN[1]/following-sibling::expr[1][SYMBOL | STR_CONST]
|
|
63
|
-
`);
|
|
64
|
-
// there is no except in xpath 1.0?
|
|
65
|
-
const packageLoadedWithVariableLoadRequire = xpath.parse(`
|
|
66
|
-
//SYMBOL_FUNCTION_CALL[text() = 'library' or text() = 'require']
|
|
67
|
-
/parent::expr
|
|
68
|
-
/parent::expr[
|
|
69
|
-
expr[2][SYMBOL]
|
|
70
|
-
and (
|
|
71
|
-
SYMBOL_SUB[text() = 'character.only']
|
|
72
|
-
/following-sibling::expr[1]
|
|
73
|
-
/NUM_CONST[text() = 'TRUE' or text() = 'T']
|
|
74
|
-
)
|
|
75
|
-
]/OP-LEFT-PAREN[1]/following-sibling::expr[1][SYMBOL | STR_CONST]
|
|
76
|
-
`);
|
|
77
|
-
const packageLoadedWithVariableNamespaces = xpath.parse(`
|
|
78
|
-
//SYMBOL_FUNCTION_CALL[text() = 'loadNamespace' or text() = 'requireNamespace' or text() = 'attachNamespace']/../following-sibling::expr[1][SYMBOL]
|
|
79
|
-
`);
|
|
80
|
-
const queryForFunctionCall = xpath.parse(`
|
|
81
|
-
//SYMBOL_FUNCTION_CALL[text() = $variable]/../following-sibling::expr[1][STR_CONST]
|
|
82
|
-
`);
|
|
83
|
-
// otherwise, the parser seems to fail
|
|
84
|
-
const queryForNsAccess = xpath.parse(`
|
|
85
|
-
//NS_GET[text() = $variable]/../SYMBOL_PACKAGE[1]
|
|
86
|
-
|
|
|
87
|
-
//NS_GET_INT[text() = $variable]/../SYMBOL_PACKAGE[1]
|
|
88
|
-
`);
|
|
89
|
-
const queries = [
|
|
90
|
-
{
|
|
91
|
-
types: ['library', 'require'],
|
|
92
|
-
query: libraryOrRequire
|
|
93
|
-
},
|
|
94
|
-
{
|
|
95
|
-
types: ['loadNamespace', 'requireNamespace', 'attachNamespace'],
|
|
96
|
-
query: queryForFunctionCall
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
types: ['::', ':::'],
|
|
100
|
-
query: queryForNsAccess
|
|
101
|
-
}
|
|
102
|
-
];
|
|
103
|
-
exports.usedPackages = {
|
|
104
|
-
name: 'Used Packages',
|
|
105
|
-
description: 'All the packages used in the code',
|
|
106
|
-
process(existing, input) {
|
|
107
|
-
// we will unify in the end, so we can count, group etc. but we do not re-count multiple packages in the same file
|
|
108
|
-
for (const q of queries) {
|
|
109
|
-
for (const fn of q.types) {
|
|
110
|
-
const nodes = q.query.select({ node: input.parsedRAst, variables: { variable: fn } });
|
|
111
|
-
existing[fn] += nodes.length;
|
|
112
|
-
(0, output_1.appendStatisticsFile)(this.name, fn, nodes, input.filepath, true);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
const nodesForVariableLoad = [
|
|
116
|
-
...packageLoadedWithVariableLoadRequire.select({ node: input.parsedRAst }),
|
|
117
|
-
...packageLoadedWithVariableNamespaces.select({ node: input.parsedRAst })
|
|
118
|
-
];
|
|
119
|
-
existing['<loadedByVariable>'] += nodesForVariableLoad.length;
|
|
120
|
-
// should not be unique as variables may be repeated, and we have no idea
|
|
121
|
-
(0, output_1.appendStatisticsFile)(this.name, '<loadedByVariable>', nodesForVariableLoad, input.filepath);
|
|
122
|
-
const withinApplyNodes = withinApply.select({ node: input.parsedRAst });
|
|
123
|
-
existing.withinApply += withinApplyNodes.length;
|
|
124
|
-
(0, output_1.appendStatisticsFile)(this.name, 'withinApply', withinApplyNodes, input.filepath);
|
|
125
|
-
return existing;
|
|
126
|
-
},
|
|
127
|
-
initialValue: exports.initialUsedPackageInfos,
|
|
128
|
-
postProcess: post_process_1.postProcess
|
|
129
|
-
};
|
|
130
|
-
//# sourceMappingURL=used-packages.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { values } from './values';
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.values = void 0;
|
|
4
|
-
var values_1 = require("./values");
|
|
5
|
-
Object.defineProperty(exports, "values", { enumerable: true, get: function () { return values_1.values; } });
|
|
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,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 node_fs_1 = __importDefault(require("node: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 = node_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 = node_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 node_fs_1 = __importDefault(require("node: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 = node_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 = node_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
|
package/statistics/index.d.ts
DELETED
package/statistics/index.js
DELETED
|
@@ -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
|