@eagleoutice/flowr 1.5.2 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/abstract-interpretation/handler/binop/binop.d.ts +3 -4
- package/abstract-interpretation/handler/binop/binop.js +4 -2
- package/abstract-interpretation/handler/binop/operators.d.ts +2 -2
- package/abstract-interpretation/handler/binop/operators.js +14 -28
- package/abstract-interpretation/processor.d.ts +3 -2
- package/abstract-interpretation/processor.js +2 -2
- package/benchmark/slicer.d.ts +101 -0
- package/benchmark/slicer.js +214 -0
- package/benchmark/stats/print.d.ts +7 -0
- package/benchmark/stats/print.js +151 -0
- package/benchmark/stats/stats.d.ts +42 -0
- package/benchmark/stats/stats.js +6 -0
- package/benchmark/stopwatch.d.ts +35 -0
- package/benchmark/stopwatch.js +79 -0
- package/benchmark/summarizer/data.d.ts +54 -0
- package/benchmark/summarizer/first-phase/input.d.ts +3 -0
- package/benchmark/summarizer/first-phase/input.js +76 -0
- package/benchmark/summarizer/first-phase/process.d.ts +11 -0
- package/benchmark/summarizer/first-phase/process.js +205 -0
- package/benchmark/summarizer/second-phase/graph.d.ts +2 -0
- package/benchmark/summarizer/second-phase/graph.js +54 -0
- package/benchmark/summarizer/second-phase/process.d.ts +6 -0
- package/benchmark/summarizer/second-phase/process.js +127 -0
- package/benchmark/summarizer/summarizer.d.ts +31 -0
- package/benchmark/summarizer/summarizer.js +58 -0
- package/cli/benchmark-app.d.ts +10 -0
- package/cli/benchmark-app.js +67 -0
- package/cli/benchmark-helper-app.d.ts +9 -0
- package/cli/benchmark-helper-app.js +69 -0
- package/cli/common/features.d.ts +3 -0
- package/cli/common/features.js +30 -0
- package/cli/common/options.d.ts +20 -0
- package/cli/common/options.js +85 -0
- package/cli/common/script.d.ts +21 -0
- package/cli/common/script.js +61 -0
- package/cli/common/scripts-info.d.ts +25 -0
- package/cli/common/scripts-info.js +83 -0
- package/cli/export-quads-app.d.ts +7 -0
- package/cli/export-quads-app.js +43 -0
- package/cli/flowr.d.ts +29 -0
- package/cli/flowr.js +141 -0
- package/cli/repl/commands/cfg.d.ts +3 -0
- package/cli/repl/commands/cfg.js +37 -0
- package/cli/repl/commands/commands.d.ts +13 -0
- package/cli/repl/commands/commands.js +142 -0
- package/cli/repl/commands/dataflow.d.ts +3 -0
- package/cli/repl/commands/dataflow.js +34 -0
- package/cli/repl/commands/execute.d.ts +4 -0
- package/cli/repl/commands/execute.js +27 -0
- package/cli/repl/commands/main.d.ts +39 -0
- package/cli/repl/commands/main.js +14 -0
- package/cli/repl/commands/normalize.d.ts +3 -0
- package/cli/repl/commands/normalize.js +34 -0
- package/cli/repl/commands/parse.d.ts +2 -0
- package/cli/repl/commands/parse.js +110 -0
- package/cli/repl/commands/quit.d.ts +2 -0
- package/cli/repl/commands/quit.js +15 -0
- package/cli/repl/commands/version.d.ts +16 -0
- package/cli/repl/commands/version.js +28 -0
- package/cli/repl/core.d.ts +36 -0
- package/cli/repl/core.js +174 -0
- package/cli/repl/execute.d.ts +28 -0
- package/cli/repl/execute.js +79 -0
- package/cli/repl/print-version.d.ts +2 -0
- package/cli/repl/print-version.js +10 -0
- package/cli/repl/prompt.d.ts +2 -0
- package/cli/repl/prompt.js +9 -0
- package/cli/repl/server/connection.d.ts +21 -0
- package/cli/repl/server/connection.js +218 -0
- package/cli/repl/server/messages/analysis.d.ts +72 -0
- package/cli/repl/server/messages/analysis.js +21 -0
- package/cli/repl/server/messages/error.d.ts +11 -0
- package/{core/input.js → cli/repl/server/messages/error.js} +1 -1
- package/cli/repl/server/messages/hello.d.ts +20 -0
- package/{core/output.js → cli/repl/server/messages/hello.js} +1 -1
- package/cli/repl/server/messages/messages.d.ts +35 -0
- package/cli/repl/server/messages/messages.js +40 -0
- package/cli/repl/server/messages/repl.d.ts +33 -0
- package/cli/repl/server/messages/repl.js +37 -0
- package/cli/repl/server/messages/slice.d.ts +26 -0
- package/cli/repl/server/messages/slice.js +37 -0
- package/cli/repl/server/net.d.ts +49 -0
- package/cli/repl/server/net.js +63 -0
- package/cli/repl/server/send.d.ts +4 -0
- package/cli/repl/server/send.js +18 -0
- package/cli/repl/server/server.d.ts +20 -0
- package/cli/repl/server/server.js +66 -0
- package/cli/repl/server/validate.d.ts +15 -0
- package/cli/repl/server/validate.js +34 -0
- package/cli/slicer-app.d.ts +11 -0
- package/cli/slicer-app.js +83 -0
- package/cli/statistics-app.d.ts +11 -0
- package/cli/statistics-app.js +99 -0
- package/cli/statistics-helper-app.d.ts +11 -0
- package/cli/statistics-helper-app.js +87 -0
- package/cli/summarizer-app.d.ts +18 -0
- package/cli/summarizer-app.js +66 -0
- package/core/pipeline-executor.d.ts +154 -0
- package/core/pipeline-executor.js +221 -0
- package/core/print/dataflow-printer.d.ts +3 -4
- package/core/print/dataflow-printer.js +5 -5
- package/core/print/normalize-printer.d.ts +1 -1
- package/core/print/normalize-printer.js +3 -3
- package/core/print/parse-printer.js +3 -3
- package/core/print/print.d.ts +13 -4
- package/core/print/print.js +13 -2
- package/core/print/slice-diff-ansi.d.ts +3 -2
- package/core/print/slice-diff-ansi.js +4 -4
- package/core/steps/all/core/00-parse.d.ts +28 -0
- package/core/steps/all/core/00-parse.js +24 -0
- package/core/steps/all/core/10-normalize.d.ts +29 -0
- package/core/steps/all/core/10-normalize.js +26 -0
- package/core/steps/all/core/20-dataflow.d.ts +27 -0
- package/core/steps/all/core/20-dataflow.js +29 -0
- package/core/steps/all/static-slicing/00-slice.d.ts +28 -0
- package/core/steps/all/static-slicing/00-slice.js +21 -0
- package/core/steps/all/static-slicing/10-reconstruct.d.ts +25 -0
- package/core/steps/all/static-slicing/10-reconstruct.js +21 -0
- package/core/steps/pipeline/create-pipeline.d.ts +6 -0
- package/core/steps/pipeline/create-pipeline.js +130 -0
- package/core/steps/pipeline/default-pipelines.d.ts +251 -0
- package/core/steps/pipeline/default-pipelines.js +18 -0
- package/core/steps/pipeline/invalid-pipeline-error.d.ts +6 -0
- package/core/steps/pipeline/invalid-pipeline-error.js +14 -0
- package/core/steps/pipeline/pipeline.d.ts +60 -0
- package/core/steps/pipeline/pipeline.js +28 -0
- package/core/steps/pipeline-step.d.ts +85 -0
- package/core/steps/pipeline-step.js +8 -0
- package/dataflow/environments/append.d.ts +4 -4
- package/dataflow/environments/append.js +4 -4
- package/dataflow/environments/built-in.d.ts +25 -0
- package/dataflow/environments/built-in.js +123 -0
- package/dataflow/environments/clone.d.ts +2 -0
- package/dataflow/environments/clone.js +23 -0
- package/dataflow/environments/{register.d.ts → define.d.ts} +3 -3
- package/dataflow/environments/define.js +51 -0
- package/dataflow/environments/diff.d.ts +6 -0
- package/dataflow/environments/diff.js +85 -0
- package/dataflow/environments/environment.d.ts +10 -43
- package/dataflow/environments/environment.js +32 -138
- package/dataflow/environments/identifier.d.ts +31 -0
- package/dataflow/environments/identifier.js +3 -0
- package/dataflow/environments/overwrite.d.ts +4 -4
- package/dataflow/environments/overwrite.js +9 -22
- package/dataflow/environments/resolve-by-name.d.ts +7 -6
- package/dataflow/environments/resolve-by-name.js +35 -19
- package/dataflow/environments/scoping.js +1 -4
- package/dataflow/extractor.d.ts +6 -6
- package/dataflow/extractor.js +47 -57
- package/dataflow/graph/diff.d.ts +24 -7
- package/dataflow/graph/diff.js +114 -74
- package/dataflow/graph/edge.d.ts +66 -20
- package/dataflow/graph/edge.js +73 -27
- package/dataflow/graph/graph.d.ts +53 -29
- package/dataflow/graph/graph.js +84 -89
- package/dataflow/graph/quads.js +2 -2
- package/dataflow/graph/vertex.d.ts +37 -34
- package/dataflow/info.d.ts +49 -0
- package/dataflow/info.js +29 -0
- package/dataflow/internal/linker.d.ts +11 -10
- package/dataflow/internal/linker.js +64 -90
- package/dataflow/internal/process/functions/call/argument/make-argument.d.ts +6 -0
- package/dataflow/internal/process/functions/call/argument/make-argument.js +31 -0
- package/dataflow/internal/process/functions/call/argument/unpack-argument.d.ts +3 -0
- package/dataflow/internal/process/functions/call/argument/unpack-argument.js +18 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-access.d.ts +9 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-access.js +82 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-assignment.d.ts +29 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-assignment.js +167 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.d.ts +11 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.js +165 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.js +97 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.js +165 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-get.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-get.js +36 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.js +100 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-library.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-library.js +32 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-logical-bin-op.d.ts +9 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-logical-bin-op.js +35 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-pipe.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-pipe.js +35 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-quote.d.ts +9 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-quote.js +29 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.js +32 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-replacement.d.ts +12 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-replacement.js +45 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-source.d.ts +11 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-source.js +72 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.js +61 -0
- package/dataflow/internal/process/functions/call/common.d.ts +35 -0
- package/dataflow/internal/process/functions/call/common.js +70 -0
- package/dataflow/internal/process/functions/call/default-call-handling.d.ts +5 -0
- package/dataflow/internal/process/functions/call/default-call-handling.js +15 -0
- package/dataflow/internal/process/functions/call/known-call-handling.d.ts +26 -0
- package/dataflow/internal/process/functions/call/known-call-handling.js +62 -0
- package/dataflow/internal/process/functions/call/named-call-handling.d.ts +7 -0
- package/dataflow/internal/process/functions/call/named-call-handling.js +53 -0
- package/dataflow/internal/process/functions/call/unnamed-call-handling.d.ts +6 -0
- package/dataflow/internal/process/functions/call/unnamed-call-handling.js +58 -0
- package/dataflow/internal/process/functions/process-argument.d.ts +9 -0
- package/dataflow/internal/process/functions/{argument.js → process-argument.js} +25 -20
- package/dataflow/internal/process/functions/{parameter.d.ts → process-parameter.d.ts} +3 -2
- package/dataflow/internal/process/functions/{parameter.js → process-parameter.js} +10 -13
- package/dataflow/internal/process/process-named-call.d.ts +6 -0
- package/dataflow/internal/process/process-named-call.js +17 -0
- package/dataflow/internal/process/process-symbol.d.ts +5 -0
- package/dataflow/internal/process/process-symbol.js +26 -0
- package/dataflow/internal/process/process-uninteresting-leaf.d.ts +4 -0
- package/dataflow/internal/process/process-uninteresting-leaf.js +9 -0
- package/dataflow/internal/process/process-value.d.ts +4 -0
- package/dataflow/internal/process/process-value.js +22 -0
- package/dataflow/logger.d.ts +1 -0
- package/dataflow/logger.js +6 -0
- package/dataflow/processor.d.ts +18 -13
- package/dataflow/processor.js +1 -1
- package/package.json +48 -85
- package/r-bridge/data/data.d.ts +603 -0
- package/r-bridge/data/data.js +753 -0
- package/r-bridge/data/get.d.ts +19 -0
- package/r-bridge/data/get.js +51 -0
- package/r-bridge/data/print.d.ts +1 -0
- package/r-bridge/data/print.js +58 -0
- package/r-bridge/data/types.d.ts +33 -0
- package/r-bridge/data/types.js +3 -0
- package/r-bridge/init.d.ts +3 -0
- package/r-bridge/init.js +22 -0
- package/r-bridge/lang-4.x/ast/model/collect.d.ts +2 -1
- package/r-bridge/lang-4.x/ast/model/collect.js +2 -2
- package/r-bridge/lang-4.x/ast/model/model.d.ts +26 -5
- package/r-bridge/lang-4.x/ast/model/nodes/r-access.d.ts +4 -3
- package/r-bridge/lang-4.x/ast/model/nodes/r-argument.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-binary-op.d.ts +0 -17
- package/r-bridge/lang-4.x/ast/model/nodes/r-expression-list.d.ts +3 -1
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.d.ts +6 -4
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.js +2 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-definition.d.ts +2 -3
- package/r-bridge/lang-4.x/ast/model/nodes/r-number.d.ts +1 -1
- package/r-bridge/lang-4.x/ast/model/nodes/r-string.d.ts +1 -1
- package/r-bridge/lang-4.x/ast/model/nodes/r-symbol.js +2 -2
- package/r-bridge/lang-4.x/ast/model/nodes/r-unary-op.d.ts +0 -11
- package/r-bridge/lang-4.x/ast/model/operators.d.ts +6 -18
- package/r-bridge/lang-4.x/ast/model/operators.js +36 -48
- package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +19 -15
- package/r-bridge/lang-4.x/ast/model/processing/decorate.js +59 -54
- package/r-bridge/lang-4.x/ast/model/processing/node-id.d.ts +8 -0
- package/r-bridge/lang-4.x/ast/model/processing/node-id.js +18 -0
- package/r-bridge/lang-4.x/ast/model/processing/role.d.ts +2 -2
- package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.d.ts +28 -17
- package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.js +7 -34
- package/r-bridge/lang-4.x/ast/model/processing/visitor.js +5 -2
- package/r-bridge/lang-4.x/ast/model/type.js +13 -6
- package/r-bridge/lang-4.x/ast/parser/json/format.d.ts +4 -1
- package/r-bridge/lang-4.x/ast/parser/json/format.js +9 -2
- package/r-bridge/lang-4.x/ast/parser/json/parser.d.ts +5 -5
- package/r-bridge/lang-4.x/ast/parser/json/parser.js +22 -27
- package/r-bridge/lang-4.x/ast/parser/xml/input-format.d.ts +10 -7
- package/r-bridge/lang-4.x/ast/parser/xml/input-format.js +19 -11
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then-else.d.ts → normalize-if-then-else.d.ts} +3 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then-else.js → normalize-if-then-else.js} +10 -13
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then.d.ts → normalize-if-then.d.ts} +3 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then.js → normalize-if-then.js} +9 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/normalize-expression.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/normalize-expression.js +64 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{argument.d.ts → normalize-argument.d.ts} +4 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{argument.js → normalize-argument.js} +13 -17
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{call.d.ts → normalize-call.d.ts} +6 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{call.js → normalize-call.js} +24 -29
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/normalize-definition.d.ts +12 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{definition.js → normalize-definition.js} +14 -19
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{parameter.d.ts → normalize-parameter.d.ts} +4 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{parameter.js → normalize-parameter.js} +12 -16
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-break.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{break.js → normalize-break.js} +6 -8
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-for.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{for.js → normalize-for.js} +18 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-next.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{next.js → normalize-next.js} +6 -8
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-repeat.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{repeat.js → normalize-repeat.js} +13 -16
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-while.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{while.js → normalize-while.js} +10 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/{access.d.ts → normalize-access.d.ts} +4 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/{access.js → normalize-access.js} +44 -45
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/{binary.d.ts → normalize-binary.d.ts} +3 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/{binary.js → normalize-binary.js} +23 -73
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/normalize-unary.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/normalize-unary.js +47 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/normalize-comment.d.ts +11 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/{comment.js → normalize-comment.js} +5 -10
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/normalize-line-directive.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/{line-directive.js → normalize-line-directive.js} +7 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-delimiter.d.ts +3 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-delimiter.js +15 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-expressions.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-expressions.js +182 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-root.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-root.js +34 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-single-node.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-single-node.js +59 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/normalize-number.d.ts +16 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{number.js → normalize-number.js} +12 -18
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/normalize-string.d.ts +11 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{string.js → normalize-string.js} +7 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{symbol.d.ts → normalize-symbol.d.ts} +4 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{symbol.js → normalize-symbol.js} +12 -15
- package/r-bridge/lang-4.x/ast/parser/xml/{internal/meta.d.ts → normalize-meta.d.ts} +5 -3
- package/r-bridge/lang-4.x/ast/parser/xml/{internal/meta.js → normalize-meta.js} +8 -8
- package/r-bridge/lang-4.x/ast/parser/xml/{data.d.ts → normalizer-data.d.ts} +1 -5
- package/r-bridge/lang-4.x/ast/parser/xml/normalizer-data.js +3 -0
- package/r-bridge/lang-4.x/{values.d.ts → convert-values.d.ts} +2 -2
- package/r-bridge/lang-4.x/{values.js → convert-values.js} +5 -5
- package/r-bridge/retriever.d.ts +5 -5
- package/r-bridge/retriever.js +11 -24
- package/r-bridge/shell-executor.d.ts +0 -1
- package/r-bridge/shell-executor.js +7 -12
- package/r-bridge/shell.d.ts +14 -12
- package/r-bridge/shell.js +50 -45
- package/reconstruct/reconstruct.d.ts +4 -2
- package/reconstruct/reconstruct.js +193 -185
- package/slicing/criterion/collect-all.d.ts +4 -3
- package/slicing/criterion/collect-all.js +5 -1
- package/slicing/criterion/filters/all-variables.js +14 -22
- package/slicing/criterion/parse.d.ts +4 -2
- package/slicing/criterion/parse.js +13 -11
- package/slicing/static/fingerprint.d.ts +5 -0
- package/slicing/static/fingerprint.js +17 -0
- package/slicing/static/slice-call.d.ts +10 -0
- package/slicing/static/slice-call.js +86 -0
- package/slicing/static/slicer-types.d.ts +33 -0
- package/slicing/static/slicer-types.js +3 -0
- package/slicing/static/static-slicer.d.ts +6 -24
- package/slicing/static/static-slicer.js +54 -155
- package/slicing/static/visiting-queue.d.ts +23 -0
- package/slicing/static/visiting-queue.js +53 -0
- package/statistics/features/common-syntax-probability.d.ts +29 -0
- package/statistics/features/common-syntax-probability.js +159 -0
- package/statistics/features/feature.d.ts +182 -0
- package/statistics/features/feature.js +39 -0
- package/statistics/features/post-processing.d.ts +12 -0
- package/statistics/features/post-processing.js +21 -0
- package/statistics/features/supported/assignments/assignments.d.ts +12 -0
- package/statistics/features/supported/assignments/assignments.js +55 -0
- package/statistics/features/supported/assignments/post-process.d.ts +3 -0
- package/statistics/features/supported/assignments/post-process.js +124 -0
- package/statistics/features/supported/comments/comments.d.ts +18 -0
- package/statistics/features/supported/comments/comments.js +133 -0
- package/statistics/features/supported/comments/post-process.d.ts +3 -0
- package/statistics/features/supported/comments/post-process.js +49 -0
- package/statistics/features/supported/control-flow/control-flow.d.ts +17 -0
- package/statistics/features/supported/control-flow/control-flow.js +68 -0
- package/statistics/features/supported/control-flow/post-process.d.ts +3 -0
- package/statistics/features/supported/control-flow/post-process.js +64 -0
- package/statistics/features/supported/data-access/data-access.d.ts +15 -0
- package/statistics/features/supported/data-access/data-access.js +120 -0
- package/statistics/features/supported/data-access/post-process.d.ts +3 -0
- package/statistics/features/supported/data-access/post-process.js +106 -0
- package/statistics/features/supported/defined-functions/defined-functions.d.ts +34 -0
- package/statistics/features/supported/defined-functions/defined-functions.js +142 -0
- package/statistics/features/supported/defined-functions/post-process.d.ts +6 -0
- package/statistics/features/supported/defined-functions/post-process.js +169 -0
- package/statistics/features/supported/expression-list/expression-list.d.ts +9 -0
- package/statistics/features/supported/expression-list/expression-list.js +36 -0
- package/statistics/features/supported/expression-list/post-process.d.ts +3 -0
- package/statistics/features/supported/expression-list/post-process.js +43 -0
- package/statistics/features/supported/loops/loops.d.ts +20 -0
- package/statistics/features/supported/loops/loops.js +79 -0
- package/statistics/features/supported/loops/post-process.d.ts +3 -0
- package/statistics/features/supported/loops/post-process.js +71 -0
- package/statistics/features/supported/used-functions/post-process.d.ts +6 -0
- package/statistics/features/supported/used-functions/post-process.js +178 -0
- package/statistics/features/supported/used-functions/used-functions.d.ts +24 -0
- package/statistics/features/supported/used-functions/used-functions.js +97 -0
- package/statistics/features/supported/used-packages/post-process.d.ts +3 -0
- package/statistics/features/supported/used-packages/post-process.js +120 -0
- package/statistics/features/supported/used-packages/used-packages.d.ts +16 -0
- package/statistics/features/supported/used-packages/used-packages.js +130 -0
- package/statistics/features/supported/values/post-process.d.ts +3 -0
- package/statistics/features/supported/values/post-process.js +71 -0
- package/statistics/features/supported/values/values.d.ts +14 -0
- package/statistics/features/supported/values/values.js +101 -0
- package/statistics/features/supported/variables/post-process.d.ts +9 -0
- package/statistics/features/supported/variables/post-process.js +121 -0
- package/statistics/features/supported/variables/variables.d.ts +15 -0
- package/statistics/features/supported/variables/variables.js +60 -0
- package/statistics/meta-statistics.d.ts +33 -0
- package/statistics/meta-statistics.js +17 -0
- package/statistics/output/file-provider.d.ts +37 -0
- package/statistics/output/file-provider.js +97 -0
- package/statistics/output/print-stats.d.ts +17 -0
- package/statistics/output/print-stats.js +69 -0
- package/statistics/output/statistics-file.d.ts +37 -0
- package/statistics/output/statistics-file.js +69 -0
- package/statistics/statistics.d.ts +28 -0
- package/statistics/statistics.js +108 -0
- package/statistics/summarizer/auto-detect.d.ts +2 -0
- package/statistics/summarizer/auto-detect.js +32 -0
- package/statistics/summarizer/first-phase/process.d.ts +6 -0
- package/statistics/summarizer/first-phase/process.js +81 -0
- package/statistics/summarizer/post-process/clusterer.d.ts +26 -0
- package/statistics/summarizer/post-process/clusterer.js +43 -0
- package/statistics/summarizer/post-process/file-based-count.d.ts +17 -0
- package/statistics/summarizer/post-process/file-based-count.js +49 -0
- package/statistics/summarizer/post-process/histogram.d.ts +59 -0
- package/statistics/summarizer/post-process/histogram.js +128 -0
- package/statistics/summarizer/post-process/post-process-output.d.ts +16 -0
- package/statistics/summarizer/post-process/post-process-output.js +105 -0
- package/statistics/summarizer/second-phase/process.d.ts +11 -0
- package/statistics/summarizer/second-phase/process.js +116 -0
- package/statistics/summarizer/summarizer.d.ts +35 -0
- package/statistics/summarizer/summarizer.js +135 -0
- package/util/ansi.d.ts +2 -2
- package/util/ansi.js +2 -2
- package/util/arrays.d.ts +11 -1
- package/util/arrays.js +34 -1
- package/util/assert.d.ts +1 -0
- package/util/assert.js +5 -1
- package/util/cfg/cfg.d.ts +3 -2
- package/util/cfg/cfg.js +17 -28
- package/util/cfg/visitor.d.ts +1 -1
- package/util/defaultmap.d.ts +1 -1
- package/util/defaultmap.js +1 -1
- package/util/diff.d.ts +4 -4
- package/util/files.d.ts +2 -2
- package/util/files.js +1 -1
- package/util/log.d.ts +1 -0
- package/util/log.js +7 -1
- package/util/logic.d.ts +1 -0
- package/util/logic.js +3 -0
- package/util/mermaid/ast.d.ts +1 -1
- package/util/mermaid/ast.js +2 -2
- package/util/mermaid/cfg.d.ts +1 -1
- package/util/mermaid/dfg.d.ts +34 -8
- package/util/mermaid/dfg.js +99 -70
- package/util/mermaid/mermaid.d.ts +1 -1
- package/util/mermaid/mermaid.js +6 -7
- package/util/objects.js +4 -0
- package/util/quads.d.ts +3 -3
- package/util/quads.js +0 -1
- package/util/range.d.ts +27 -14
- package/util/range.js +31 -27
- package/util/version.js +1 -1
- package/core/index.d.ts +0 -4
- package/core/index.js +0 -23
- package/core/input.d.ts +0 -42
- package/core/output.d.ts +0 -15
- package/core/slicer.d.ts +0 -124
- package/core/slicer.js +0 -227
- package/core/steps.d.ts +0 -508
- package/core/steps.js +0 -100
- package/dataflow/environments/index.d.ts +0 -7
- package/dataflow/environments/index.js +0 -23
- package/dataflow/environments/register.js +0 -40
- package/dataflow/environments/scopes.d.ts +0 -6
- package/dataflow/environments/scopes.js +0 -6
- package/dataflow/graph/index.d.ts +0 -4
- package/dataflow/graph/index.js +0 -21
- package/dataflow/index.d.ts +0 -5
- package/dataflow/index.js +0 -24
- package/dataflow/internal/info.d.ts +0 -21
- package/dataflow/internal/info.js +0 -16
- package/dataflow/internal/process/access.d.ts +0 -4
- package/dataflow/internal/process/access.js +0 -53
- package/dataflow/internal/process/expression-list.d.ts +0 -8
- package/dataflow/internal/process/expression-list.js +0 -144
- package/dataflow/internal/process/functions/argument.d.ts +0 -8
- package/dataflow/internal/process/functions/exit-points.d.ts +0 -2
- package/dataflow/internal/process/functions/exit-points.js +0 -121
- package/dataflow/internal/process/functions/function-call.d.ts +0 -5
- package/dataflow/internal/process/functions/function-call.js +0 -105
- package/dataflow/internal/process/functions/function-definition.d.ts +0 -4
- package/dataflow/internal/process/functions/function-definition.js +0 -176
- package/dataflow/internal/process/functions/source.d.ts +0 -8
- package/dataflow/internal/process/functions/source.js +0 -81
- package/dataflow/internal/process/if-then-else.d.ts +0 -4
- package/dataflow/internal/process/if-then-else.js +0 -56
- package/dataflow/internal/process/loops/for-loop.d.ts +0 -4
- package/dataflow/internal/process/loops/for-loop.js +0 -54
- package/dataflow/internal/process/loops/repeat-loop.d.ts +0 -4
- package/dataflow/internal/process/loops/repeat-loop.js +0 -21
- package/dataflow/internal/process/loops/while-loop.d.ts +0 -4
- package/dataflow/internal/process/loops/while-loop.js +0 -31
- package/dataflow/internal/process/operators/assignment.d.ts +0 -4
- package/dataflow/internal/process/operators/assignment.js +0 -129
- package/dataflow/internal/process/operators/non-assignment-binary-op.d.ts +0 -4
- package/dataflow/internal/process/operators/non-assignment-binary-op.js +0 -25
- package/dataflow/internal/process/operators/pipe.d.ts +0 -4
- package/dataflow/internal/process/operators/pipe.js +0 -46
- package/dataflow/internal/process/operators/unary-op.d.ts +0 -4
- package/dataflow/internal/process/operators/unary-op.js +0 -10
- package/dataflow/internal/process/symbol.d.ts +0 -4
- package/dataflow/internal/process/symbol.js +0 -21
- package/dataflow/internal/process/uninteresting-leaf.d.ts +0 -3
- package/dataflow/internal/process/uninteresting-leaf.js +0 -9
- package/index.d.ts +0 -4
- package/index.js +0 -21
- package/r-bridge/index.d.ts +0 -11
- package/r-bridge/index.js +0 -28
- package/r-bridge/lang-4.x/ast/index.d.ts +0 -3
- package/r-bridge/lang-4.x/ast/index.js +0 -22
- package/r-bridge/lang-4.x/ast/model/index.d.ts +0 -6
- package/r-bridge/lang-4.x/ast/model/index.js +0 -23
- package/r-bridge/lang-4.x/ast/model/nodes/index.d.ts +0 -21
- package/r-bridge/lang-4.x/ast/model/nodes/index.js +0 -38
- package/r-bridge/lang-4.x/ast/model/nodes/info/index.d.ts +0 -13
- package/r-bridge/lang-4.x/ast/model/nodes/info/index.js +0 -27
- package/r-bridge/lang-4.x/ast/model/processing/index.d.ts +0 -5
- package/r-bridge/lang-4.x/ast/model/processing/index.js +0 -22
- package/r-bridge/lang-4.x/ast/parser/xml/hooks.d.ts +0 -292
- package/r-bridge/lang-4.x/ast/parser/xml/hooks.js +0 -136
- package/r-bridge/lang-4.x/ast/parser/xml/index.d.ts +0 -3
- package/r-bridge/lang-4.x/ast/parser/xml/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.d.ts +0 -2
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.js +0 -19
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.d.ts +0 -10
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.js +0 -65
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.d.ts +0 -1
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.js +0 -18
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/definition.d.ts +0 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.d.ts +0 -2
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/index.d.ts +0 -9
- package/r-bridge/lang-4.x/ast/parser/xml/internal/index.js +0 -26
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/break.d.ts +0 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/for.d.ts +0 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.d.ts +0 -5
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.js +0 -22
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/next.d.ts +0 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/repeat.d.ts +0 -13
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/while.d.ts +0 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.d.ts +0 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.d.ts +0 -6
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.js +0 -24
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.d.ts +0 -13
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.js +0 -59
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/comment.d.ts +0 -11
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.d.ts +0 -1
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.js +0 -18
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/line-directive.d.ts +0 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.d.ts +0 -10
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.js +0 -159
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.d.ts +0 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.d.ts +0 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.js +0 -33
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.d.ts +0 -13
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.js +0 -64
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.d.ts +0 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/number.d.ts +0 -13
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/string.d.ts +0 -11
- package/r-bridge/lang-4.x/index.d.ts +0 -2
- package/r-bridge/lang-4.x/index.js +0 -19
- package/slicing/criterion/filters/index.d.ts +0 -1
- package/slicing/criterion/filters/index.js +0 -18
- package/slicing/criterion/index.d.ts +0 -3
- package/slicing/criterion/index.js +0 -20
- package/slicing/index.d.ts +0 -3
- package/slicing/index.js +0 -20
- package/slicing/static/index.d.ts +0 -1
- package/slicing/static/index.js +0 -18
- package/util/mermaid/index.d.ts +0 -3
- package/util/mermaid/index.js +0 -20
- /package/{r-bridge/lang-4.x/ast/parser/xml → benchmark/summarizer}/data.js +0 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module is tasked with processing the results of the benchmarking (see {@link SlicerStats}).
|
|
3
|
+
* @module
|
|
4
|
+
*/
|
|
5
|
+
import type { UltimateSlicerStats } from './data';
|
|
6
|
+
import type { CommonSummarizerConfiguration } from '../../util/summarizer';
|
|
7
|
+
import { Summarizer } from '../../util/summarizer';
|
|
8
|
+
export interface BenchmarkSummarizerConfiguration extends CommonSummarizerConfiguration {
|
|
9
|
+
/**
|
|
10
|
+
* If given, produce graph data output (e.g. for the benchmark visualization) to the given path
|
|
11
|
+
*/
|
|
12
|
+
graphOutputPath?: string;
|
|
13
|
+
/**
|
|
14
|
+
* The input path to read from
|
|
15
|
+
*/
|
|
16
|
+
inputPath: string;
|
|
17
|
+
/**
|
|
18
|
+
* Path for the intermediate results of the preparation phase
|
|
19
|
+
*/
|
|
20
|
+
intermediateOutputPath: string;
|
|
21
|
+
/**
|
|
22
|
+
* Path for the final results of the summarization phase
|
|
23
|
+
*/
|
|
24
|
+
outputPath: string;
|
|
25
|
+
}
|
|
26
|
+
export declare class BenchmarkSummarizer extends Summarizer<UltimateSlicerStats, BenchmarkSummarizerConfiguration> {
|
|
27
|
+
constructor(config: BenchmarkSummarizerConfiguration);
|
|
28
|
+
preparationPhase(): Promise<void>;
|
|
29
|
+
summarizePhase(): Promise<UltimateSlicerStats>;
|
|
30
|
+
private removeIfExists;
|
|
31
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
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.BenchmarkSummarizer = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const input_1 = require("./first-phase/input");
|
|
9
|
+
const process_1 = require("./second-phase/process");
|
|
10
|
+
const graph_1 = require("./second-phase/graph");
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const summarizer_1 = require("../../util/summarizer");
|
|
13
|
+
const files_1 = require("../../util/files");
|
|
14
|
+
const json_1 = require("../../util/json");
|
|
15
|
+
const print_1 = require("../stats/print");
|
|
16
|
+
class BenchmarkSummarizer extends summarizer_1.Summarizer {
|
|
17
|
+
constructor(config) {
|
|
18
|
+
super(config);
|
|
19
|
+
}
|
|
20
|
+
async preparationPhase() {
|
|
21
|
+
this.removeIfExists(`${this.config.intermediateOutputPath}.json`);
|
|
22
|
+
this.removeIfExists(this.config.intermediateOutputPath);
|
|
23
|
+
fs_1.default.mkdirSync(this.config.intermediateOutputPath);
|
|
24
|
+
const dirContent = fs_1.default.readdirSync(this.config.inputPath);
|
|
25
|
+
for (let i = 0; i < dirContent.length; i++) {
|
|
26
|
+
const filePath = path_1.default.join(this.config.inputPath, dirContent[i]);
|
|
27
|
+
const outputPath = path_1.default.join(this.config.intermediateOutputPath, dirContent[i]);
|
|
28
|
+
// generate measurements for each run
|
|
29
|
+
await (0, files_1.readLineByLine)(filePath, (line, lineNumber) => (0, input_1.processRunMeasurement)(line, i, lineNumber, `${outputPath}.log`, outputPath));
|
|
30
|
+
// generate combined measurements for the file
|
|
31
|
+
(0, input_1.processSummarizedFileMeasurement)(filePath, outputPath, `${this.config.intermediateOutputPath}.json`);
|
|
32
|
+
}
|
|
33
|
+
this.log('Done summarizing');
|
|
34
|
+
}
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/require-await -- just to obey the structure
|
|
36
|
+
async summarizePhase() {
|
|
37
|
+
this.log(`Summarizing all summaries from ${this.config.inputPath}...`);
|
|
38
|
+
this.removeIfExists(this.config.outputPath);
|
|
39
|
+
const summaries = [];
|
|
40
|
+
(0, files_1.readLineByLineSync)(`${this.config.intermediateOutputPath}.json`, (l) => (0, process_1.processNextUltimateSummary)(l, summaries));
|
|
41
|
+
const ultimate = (0, process_1.summarizeAllUltimateStats)(summaries);
|
|
42
|
+
this.log(`Writing ultimate summary to ${this.config.outputPath}`);
|
|
43
|
+
fs_1.default.writeFileSync(this.config.outputPath, JSON.stringify(ultimate, json_1.jsonReplacer));
|
|
44
|
+
console.log((0, print_1.ultimateStats2String)(ultimate));
|
|
45
|
+
if (this.config.graphOutputPath) {
|
|
46
|
+
(0, graph_1.writeGraphOutput)(ultimate, this.config.graphOutputPath);
|
|
47
|
+
}
|
|
48
|
+
return ultimate;
|
|
49
|
+
}
|
|
50
|
+
removeIfExists(path) {
|
|
51
|
+
if (path && fs_1.default.existsSync(path)) {
|
|
52
|
+
this.log(`Removing existing ${path}`);
|
|
53
|
+
fs_1.default.rmSync(path, { recursive: true });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.BenchmarkSummarizer = BenchmarkSummarizer;
|
|
58
|
+
//# sourceMappingURL=summarizer.js.map
|
|
@@ -0,0 +1,67 @@
|
|
|
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
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const assert_1 = require("../util/assert");
|
|
9
|
+
const files_1 = require("../util/files");
|
|
10
|
+
const log_1 = require("../util/log");
|
|
11
|
+
const parallel_1 = require("../util/parallel");
|
|
12
|
+
const script_1 = require("./common/script");
|
|
13
|
+
const options = (0, script_1.processCommandLineArgs)('benchmark', [], {
|
|
14
|
+
subtitle: 'Slice given files with additional benchmark information',
|
|
15
|
+
examples: [
|
|
16
|
+
'{italic example-folder/}',
|
|
17
|
+
'{bold --help}'
|
|
18
|
+
]
|
|
19
|
+
});
|
|
20
|
+
if (options.input.length === 0) {
|
|
21
|
+
console.error('No input files given. Nothing to do. See \'--help\' if this is an error.');
|
|
22
|
+
process.exit(0);
|
|
23
|
+
}
|
|
24
|
+
(0, assert_1.guard)(options.slice === 'all' || options.slice === 'no', 'slice must be either all or no');
|
|
25
|
+
(0, assert_1.guard)(options.runs === undefined || options.runs > 0, 'runs must be greater than zero');
|
|
26
|
+
function removeIfExists(summarizedRaw) {
|
|
27
|
+
if (fs_1.default.existsSync(summarizedRaw)) {
|
|
28
|
+
console.log(`Removing existing ${summarizedRaw}`);
|
|
29
|
+
fs_1.default.rmSync(summarizedRaw, { recursive: true });
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async function benchmark() {
|
|
33
|
+
removeIfExists(options.output);
|
|
34
|
+
fs_1.default.mkdirSync(options.output);
|
|
35
|
+
console.log(`Storing output in ${options.output}`);
|
|
36
|
+
console.log(`Using ${options.parallel} parallel executors`);
|
|
37
|
+
// we do not use the limit argument to be able to pick the limit randomly
|
|
38
|
+
const files = [];
|
|
39
|
+
for await (const file of (0, files_1.allRFilesFrom)(options.input)) {
|
|
40
|
+
files.push(file);
|
|
41
|
+
}
|
|
42
|
+
if (options.limit) {
|
|
43
|
+
log_1.log.info(`limiting to ${options.limit} files`);
|
|
44
|
+
// shuffle and limit
|
|
45
|
+
files.sort(() => Math.random() - 0.5);
|
|
46
|
+
}
|
|
47
|
+
const limit = options.limit ?? files.length;
|
|
48
|
+
const verboseAdd = options.verbose ? ['--verbose'] : [];
|
|
49
|
+
const args = files.map((f, i) => [
|
|
50
|
+
'--input', f.content,
|
|
51
|
+
'--file-id', `${i}`,
|
|
52
|
+
'--output', path_1.default.join(options.output, `${path_1.default.parse(f.content).name}.json`),
|
|
53
|
+
'--slice', options.slice, ...verboseAdd
|
|
54
|
+
]);
|
|
55
|
+
const runs = options.runs ?? 1;
|
|
56
|
+
for (let i = 1; i <= runs; i++) {
|
|
57
|
+
console.log(`Run ${i} of ${runs}`);
|
|
58
|
+
const pool = new parallel_1.LimitedThreadPool(`${__dirname}/benchmark-helper-app`,
|
|
59
|
+
// we reverse here "for looks", since the helper pops from the end, and we want file ids to be ascending :D
|
|
60
|
+
args.map(a => [...a, '--run-num', `${i}`]).reverse(), limit, options.parallel);
|
|
61
|
+
await pool.run();
|
|
62
|
+
const stats = pool.getStats();
|
|
63
|
+
console.log(`Run ${i} of ${runs}: Benchmarked ${stats.counter} files, skipped ${stats.skipped.length} files due to errors`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
void benchmark();
|
|
67
|
+
//# sourceMappingURL=benchmark-app.js.map
|
|
@@ -0,0 +1,69 @@
|
|
|
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
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const log_1 = require("../util/log");
|
|
8
|
+
const assert_1 = require("../util/assert");
|
|
9
|
+
const json_1 = require("../util/json");
|
|
10
|
+
const script_1 = require("./common/script");
|
|
11
|
+
const slicer_1 = require("../benchmark/slicer");
|
|
12
|
+
const all_variables_1 = require("../slicing/criterion/filters/all-variables");
|
|
13
|
+
const options = (0, script_1.processCommandLineArgs)('benchmark-helper', [], {
|
|
14
|
+
subtitle: 'Will slice for all possible variables, signal by exit code if slicing was successful, and can be run standalone',
|
|
15
|
+
examples: [
|
|
16
|
+
'{italic example-file.R} --output {italic output.json}',
|
|
17
|
+
'{bold --help}'
|
|
18
|
+
]
|
|
19
|
+
});
|
|
20
|
+
if (options.verbose) {
|
|
21
|
+
log_1.log.error('running with *verbose* setting - do not use for final benchmark', options);
|
|
22
|
+
}
|
|
23
|
+
(0, assert_1.guard)(options.slice === 'all' || options.slice === 'no', 'slice must be either all or no');
|
|
24
|
+
async function benchmark() {
|
|
25
|
+
// we do not use the limit argument to be able to pick the limit randomly
|
|
26
|
+
(0, assert_1.guard)(options.input !== undefined, 'No input file given');
|
|
27
|
+
(0, assert_1.guard)(options.output !== undefined, 'No output file given');
|
|
28
|
+
(0, assert_1.guard)((options['file-id'] === undefined) === (options['run-num'] === undefined), 'When giving a file-id or run-num, both have to be given');
|
|
29
|
+
// prefix for printing to console, includes file id and run number if present
|
|
30
|
+
const prefix = `[${options.input}${options['file-id'] !== undefined ? ` (file ${options['file-id']}, run ${options['run-num']})` : ''}]`;
|
|
31
|
+
console.log(`${prefix} Appending output to ${options.output}`);
|
|
32
|
+
// ensure the file exists
|
|
33
|
+
const fileStat = fs_1.default.statSync(options.input);
|
|
34
|
+
(0, assert_1.guard)(fileStat.isFile(), `File ${options.input} does not exist or is no file`);
|
|
35
|
+
const request = { request: 'file', content: options.input };
|
|
36
|
+
const slicer = new slicer_1.BenchmarkSlicer();
|
|
37
|
+
try {
|
|
38
|
+
await slicer.init(request);
|
|
39
|
+
// ${escape}1F${escape}1G${escape}2K for line reset
|
|
40
|
+
if (options.slice === 'all') {
|
|
41
|
+
const count = await slicer.sliceForAll(all_variables_1.DefaultAllVariablesFilter, (i, total, arr) => console.log(`${prefix} Slicing ${i + 1}/${total} [${JSON.stringify(arr[i])}]`));
|
|
42
|
+
console.log(`${prefix} Completed Slicing`);
|
|
43
|
+
(0, assert_1.guard)(count > 0, `No possible slices found for ${options.input}, skipping in count`);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
console.log(`${prefix} Skipping Slicing due to --slice=${options.slice}`);
|
|
47
|
+
}
|
|
48
|
+
const { stats } = slicer.finish();
|
|
49
|
+
const output = {
|
|
50
|
+
filename: options.input,
|
|
51
|
+
'file-id': options['file-id'],
|
|
52
|
+
'run-num': options['run-num'],
|
|
53
|
+
stats
|
|
54
|
+
};
|
|
55
|
+
// append line by line
|
|
56
|
+
fs_1.default.appendFileSync(options.output, `${JSON.stringify(output, json_1.jsonReplacer)}\n`);
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
if (e instanceof Error) {
|
|
60
|
+
if (!e.message.includes('unable to parse R')) {
|
|
61
|
+
console.log(`${prefix} Non R-Side error : ${e.message}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
slicer.ensureSessionClosed(); // ensure finish
|
|
65
|
+
throw e;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
void benchmark();
|
|
69
|
+
//# sourceMappingURL=benchmark-helper-app.js.map
|
|
@@ -0,0 +1,30 @@
|
|
|
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.retrieveArchiveName = exports.validateFeatures = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const feature_1 = require("../../statistics/features/feature");
|
|
9
|
+
function validateFeatures(features) {
|
|
10
|
+
for (const feature of features) {
|
|
11
|
+
if (feature === 'all') {
|
|
12
|
+
if (features.length > 1) {
|
|
13
|
+
console.error(`Feature "all" must be the only feature given, got ${features.join(', ')}`);
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
else if (!feature_1.allFeatureNames.has(feature)) {
|
|
18
|
+
console.error(`Feature ${feature} is unknown, supported are ${[...feature_1.allFeatureNames].join(', ')} or "all"`);
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return features[0] === 'all' ? feature_1.allFeatureNames : new Set(features);
|
|
23
|
+
}
|
|
24
|
+
exports.validateFeatures = validateFeatures;
|
|
25
|
+
function retrieveArchiveName(p) {
|
|
26
|
+
const basepath = path_1.default.normalize(p);
|
|
27
|
+
return `${basepath.endsWith(path_1.default.sep) ? basepath.substring(0, basepath.length - 1) : basepath}.tar.gz`;
|
|
28
|
+
}
|
|
29
|
+
exports.retrieveArchiveName = retrieveArchiveName;
|
|
30
|
+
//# sourceMappingURL=features.js.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { OptionDefinition } from 'command-line-usage';
|
|
2
|
+
/**
|
|
3
|
+
* This interface describes options, that every script *must* provide.
|
|
4
|
+
*/
|
|
5
|
+
export interface CommonOptions {
|
|
6
|
+
/** Enables the most verbose logging option available. */
|
|
7
|
+
verbose: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Shows the respective help including usage examples,
|
|
10
|
+
* see {@link processCommandLineArgs} or {@link helpForOptions} for more information.
|
|
11
|
+
*/
|
|
12
|
+
help: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare const benchmarkOptions: OptionDefinition[];
|
|
15
|
+
export declare const benchmarkHelperOptions: OptionDefinition[];
|
|
16
|
+
export declare const exportQuadsOptions: OptionDefinition[];
|
|
17
|
+
export declare const slicerOptions: OptionDefinition[];
|
|
18
|
+
export declare const statisticOptions: OptionDefinition[];
|
|
19
|
+
export declare const statisticHelperOptions: OptionDefinition[];
|
|
20
|
+
export declare const summarizerOptions: OptionDefinition[];
|
|
@@ -0,0 +1,85 @@
|
|
|
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.summarizerOptions = exports.statisticHelperOptions = exports.statisticOptions = exports.slicerOptions = exports.exportQuadsOptions = exports.benchmarkHelperOptions = exports.benchmarkOptions = void 0;
|
|
7
|
+
const os_1 = __importDefault(require("os"));
|
|
8
|
+
const time_1 = require("../../util/time");
|
|
9
|
+
const feature_1 = require("../../statistics/features/feature");
|
|
10
|
+
/**
|
|
11
|
+
* This string contains a string representation of the loading time of this module.
|
|
12
|
+
*/
|
|
13
|
+
const StartTimeString = (0, time_1.date2string)(new Date());
|
|
14
|
+
exports.benchmarkOptions = [
|
|
15
|
+
{ name: 'verbose', alias: 'v', type: Boolean, description: 'Run with verbose logging [do not use for the real benchmark as this affects the time measurements, but only to find errors]' },
|
|
16
|
+
{ name: 'help', alias: 'h', type: Boolean, description: 'Print this usage guide' },
|
|
17
|
+
{ name: 'limit', alias: 'l', type: Number, description: 'Limit the number of files to process (if given, this will choose these files randomly and add the chosen names to the output' },
|
|
18
|
+
{ name: 'runs', alias: 'r', type: Number, description: 'The amount of benchmark runs that should be done, out of which an average will be calculated' },
|
|
19
|
+
{ name: 'input', alias: 'i', type: String, description: 'Pass a folder or file as src to read from', multiple: true, defaultOption: true, defaultValue: [], typeLabel: '{underline files/folders}' },
|
|
20
|
+
{ name: 'parallel', alias: 'p', type: String, description: 'Number of parallel executors (defaults to {italic max(cpu.count-1, 1)})', defaultValue: Math.max(os_1.default.cpus().length - 1, 1), typeLabel: '{underline number}' },
|
|
21
|
+
{ name: 'slice', alias: 's', type: String, description: 'Automatically slice for *all* variables (default) or *no* slicing and only parsing/dataflow construction', defaultValue: 'all', typeLabel: '{underline all/no}' },
|
|
22
|
+
{ name: 'output', alias: 'o', type: String, description: `Directory to write all the measurements to in a per-file-basis (defaults to {italic benchmark-${StartTimeString}})`, defaultValue: `benchmark-${StartTimeString}`, typeLabel: '{underline file}' }
|
|
23
|
+
];
|
|
24
|
+
exports.benchmarkHelperOptions = [
|
|
25
|
+
{ name: 'verbose', alias: 'v', type: Boolean, description: 'Run with verbose logging [do not use for the real benchmark as this affects the time measurements, but only to find errors]' },
|
|
26
|
+
{ name: 'help', alias: 'h', type: Boolean, description: 'Print this usage guide' },
|
|
27
|
+
{ name: 'input', alias: 'i', type: String, description: 'Pass a single file as src to read from', multiple: false, defaultOption: true, typeLabel: '{underline file}' },
|
|
28
|
+
{ name: 'file-id', alias: 'd', type: Number, description: 'A numeric file id that can be used to match an input and run-num to a file' },
|
|
29
|
+
{ name: 'run-num', alias: 'r', type: Number, description: 'The n-th time that the file with the given file-id is being benchmarked' },
|
|
30
|
+
{ name: 'slice', alias: 's', type: String, description: 'Automatically slice for *all* variables (default) or *no* slicing and only parsing/dataflow construction', defaultValue: 'all', typeLabel: '{underline all/no}' },
|
|
31
|
+
{ name: 'output', alias: 'o', type: String, description: 'File to write the measurements to (appends a single line in JSON format)', typeLabel: '{underline file}' },
|
|
32
|
+
];
|
|
33
|
+
exports.exportQuadsOptions = [
|
|
34
|
+
{ name: 'verbose', alias: 'v', type: Boolean, description: 'Run with verbose logging' },
|
|
35
|
+
{ name: 'help', alias: 'h', type: Boolean, description: 'Print this usage guide' },
|
|
36
|
+
{ name: 'input', alias: 'i', type: String, description: 'Pass a folder or file as src to read from', multiple: true, defaultOption: true, defaultValue: [], typeLabel: '{underline files/folders}' },
|
|
37
|
+
{ name: 'limit', alias: 'l', type: Number, description: 'Limit the number of files to process' },
|
|
38
|
+
{ name: 'output', alias: 'o', type: String, description: 'File to write all the generated quads to (defaults to {italic out.quads})', typeLabel: '{underline file}' },
|
|
39
|
+
];
|
|
40
|
+
exports.slicerOptions = [
|
|
41
|
+
{ name: 'verbose', alias: 'v', type: Boolean, description: 'Run with verbose logging' },
|
|
42
|
+
{ name: 'help', alias: 'h', type: Boolean, description: 'Print this usage guide' },
|
|
43
|
+
{ name: 'input', alias: 'i', type: String, description: '(Required) Pass a single file to slice', multiple: false, defaultOption: true, typeLabel: '{underline files}' },
|
|
44
|
+
{ name: 'input-is-text', alias: 'r', type: Boolean, description: 'Indicate, that the input is *not* a file, but R code to directly consume' },
|
|
45
|
+
{ name: 'diff', alias: 'd', type: Boolean, description: 'This requires ansi-output and only works if the api option is not set. It visualizes the slice as a diff.' },
|
|
46
|
+
{ name: 'criterion', alias: 'c', type: String, description: '(Required) Slicing criterion either in the form {underline line:col} or {underline line@variable}, multiple can be separated by \'{bold ;}\'. If you do not want to slice but only process the file, pass an empty string.', multiple: false },
|
|
47
|
+
{ name: 'stats', alias: 's', type: Boolean, description: 'Print stats and write them to {italic <output>.stats} (runtimes etc.)', multiple: false },
|
|
48
|
+
{ name: 'output', alias: 'o', type: String, description: 'File to write all the generated quads to (defaults to the commandline)', typeLabel: '{underline file}' },
|
|
49
|
+
{ name: 'api', type: Boolean, description: 'Instead of human-readable output, dump a lot of json with the results of all intermediate steps.' },
|
|
50
|
+
];
|
|
51
|
+
const featureNameList = [...feature_1.allFeatureNames].map(s => `"${s}"`).join(', ');
|
|
52
|
+
exports.statisticOptions = [
|
|
53
|
+
{ name: 'verbose', alias: 'v', type: Boolean, description: 'Run with verbose logging' },
|
|
54
|
+
{ name: 'help', alias: 'h', type: Boolean, description: 'Print this usage guide' },
|
|
55
|
+
{ name: 'limit', alias: 'l', type: Number, description: 'Limit the number of files to process' },
|
|
56
|
+
{ name: 'input', alias: 'i', type: String, description: 'Pass a folder or file as src to read from', multiple: true, defaultOption: true, defaultValue: [], typeLabel: '{underline files/folders}' },
|
|
57
|
+
{ name: 'output-dir', alias: 'o', type: String, description: 'Folder to write the output to', defaultValue: `${process.cwd()}/statistics-out/${(0, time_1.date2string)(new Date())}`, typeLabel: '{underline folder}' },
|
|
58
|
+
{ name: 'dump-json', type: Boolean, description: 'Write JSON output during the extraction', typeLabel: '{underline folder}' },
|
|
59
|
+
{ name: 'no-ansi', type: Boolean, description: 'Disable ansi-escape-sequences in the output. Useful, if you want to redirect the output to a file.' },
|
|
60
|
+
{ name: 'parallel', alias: 'p', type: String, description: 'Number of parallel executors (defaults to {italic max(cpu.count-1, 1)})', defaultValue: Math.max(os_1.default.cpus().length - 1, 1), typeLabel: '{underline number}' },
|
|
61
|
+
{ name: 'features', type: String, description: `Features to track, supported are "all" or ${featureNameList}`, multiple: true, defaultValue: 'all', typeLabel: '{underline names}' },
|
|
62
|
+
];
|
|
63
|
+
exports.statisticHelperOptions = [
|
|
64
|
+
{ name: 'verbose', alias: 'v', type: Boolean, description: 'Run with verbose logging' },
|
|
65
|
+
{ name: 'help', alias: 'h', type: Boolean, description: 'Print this usage guide' },
|
|
66
|
+
{ name: 'input', alias: 'i', type: String, description: 'Pass single file as src to read from', multiple: false, defaultOption: true, typeLabel: '{underline file}' },
|
|
67
|
+
{ name: 'output-dir', alias: 'o', type: String, description: 'Folder to write the output to', typeLabel: '{underline folder}' },
|
|
68
|
+
{ name: 'root-dir', type: String, description: 'Root dir for the statistics files', defaultValue: '' },
|
|
69
|
+
{ name: 'compress', type: Boolean, description: 'Compress the output folder to a single file', defaultValue: false },
|
|
70
|
+
{ name: 'dump-json', type: Boolean, description: 'Write JSON output during the extraction', typeLabel: '{underline folder}' },
|
|
71
|
+
{ name: 'no-ansi', type: Boolean, description: 'Disable ansi-escape-sequences in the output. Useful, if you want to redirect the output to a file.' },
|
|
72
|
+
{ name: 'features', type: String, description: `Features to track, supported are "all" or ${featureNameList}`, multiple: true, defaultValue: 'all', typeLabel: '{underline names}' },
|
|
73
|
+
];
|
|
74
|
+
exports.summarizerOptions = [
|
|
75
|
+
{ name: 'verbose', alias: 'v', type: Boolean, description: 'Run with verbose logging' },
|
|
76
|
+
{ name: 'help', alias: 'h', type: Boolean, description: 'Print this usage guide' },
|
|
77
|
+
{ name: 'type', alias: 't', type: String, description: 'Manually specify if you want to post-process benchmark results, statistics, or compressed statistics (defaults to auto).', defaultValue: 'auto' },
|
|
78
|
+
{ name: 'graph', alias: 'g', type: Boolean, description: 'Produce data to be used for visualizing benchmarks over time' },
|
|
79
|
+
{ name: 'categorize', type: Boolean, description: 'Categorize the results (e.g., "test", "example", ...)', defaultValue: false },
|
|
80
|
+
{ name: 'project-skip', type: Number, description: 'Skip the first n folders to find the location of projects', defaultValue: 0 },
|
|
81
|
+
{ name: 'ultimate-only', alias: 'u', type: Boolean, description: 'Only perform the second summary-stage, with this, the input is used to find the summary-output.' },
|
|
82
|
+
{ name: 'input', alias: 'i', type: String, description: 'The {italic output} produced by the benchmark, the statistics, ...', defaultOption: true, multiple: false, typeLabel: '{underline file.json/output}' },
|
|
83
|
+
{ name: 'output', alias: 'o', type: String, description: 'Basename of the summaries (defaults to {italic <input>-summary})', typeLabel: '{underline file}' },
|
|
84
|
+
];
|
|
85
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The goal of this module is simply to streamline the creation of new scripts.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { scripts } from './scripts-info';
|
|
7
|
+
import type { CommonOptions } from './options';
|
|
8
|
+
/**
|
|
9
|
+
* Just a helping data structure to allow the user to provide example usages of the respective script.
|
|
10
|
+
* The subtitle will be displayed next to the title.
|
|
11
|
+
*/
|
|
12
|
+
export interface HelpContent {
|
|
13
|
+
subtitle: string;
|
|
14
|
+
examples: string[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Automatically generates a uniform help from a given script (see {@link scripts}).
|
|
18
|
+
* Additionally, you can pass usage examples that may make use of the formatting instructions `{italic x}` and `{bold x}`.
|
|
19
|
+
*/
|
|
20
|
+
export declare function helpForOptions(script: keyof typeof scripts, content: HelpContent): string;
|
|
21
|
+
export declare function processCommandLineArgs<T extends CommonOptions>(script: keyof typeof scripts, requireAdditionally: (keyof T)[], help: HelpContent): T;
|
|
@@ -0,0 +1,61 @@
|
|
|
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.processCommandLineArgs = exports.helpForOptions = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* The goal of this module is simply to streamline the creation of new scripts.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
const scripts_info_1 = require("./scripts-info");
|
|
13
|
+
const command_line_usage_1 = __importDefault(require("command-line-usage"));
|
|
14
|
+
const command_line_args_1 = __importDefault(require("command-line-args"));
|
|
15
|
+
const ansi_1 = require("../../util/ansi");
|
|
16
|
+
const log_1 = require("../../util/log");
|
|
17
|
+
/**
|
|
18
|
+
* Automatically generates a uniform help from a given script (see {@link scripts}).
|
|
19
|
+
* Additionally, you can pass usage examples that may make use of the formatting instructions `{italic x}` and `{bold x}`.
|
|
20
|
+
*/
|
|
21
|
+
function helpForOptions(script, content) {
|
|
22
|
+
return (0, command_line_usage_1.default)([
|
|
23
|
+
{
|
|
24
|
+
header: scripts_info_1.scripts[script].description,
|
|
25
|
+
content: content.subtitle
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
header: 'Synopsis',
|
|
29
|
+
content: content.examples.map(e => `$ ${scripts_info_1.scripts[script].toolName} ${e}`)
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
header: 'Options',
|
|
33
|
+
optionList: scripts_info_1.scripts[script].options
|
|
34
|
+
}
|
|
35
|
+
]);
|
|
36
|
+
}
|
|
37
|
+
exports.helpForOptions = helpForOptions;
|
|
38
|
+
function processCommandLineArgs(script, requireAdditionally, help) {
|
|
39
|
+
const options = (0, command_line_args_1.default)(scripts_info_1.scripts[script].options);
|
|
40
|
+
if (options.help) {
|
|
41
|
+
console.log(helpForOptions(script, help));
|
|
42
|
+
process.exit(0);
|
|
43
|
+
}
|
|
44
|
+
else if (requireAdditionally.length > 0) {
|
|
45
|
+
const keys = new Set(Object.keys(options));
|
|
46
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- we know that they are not given if undefined
|
|
47
|
+
const missing = requireAdditionally.filter(k => !keys.has(k) || options[k] === undefined);
|
|
48
|
+
if (missing.length > 0) {
|
|
49
|
+
console.error((0, ansi_1.italic)(`Missing required arguments: ${missing.join(', ')}. Showing help.`));
|
|
50
|
+
console.log(helpForOptions(script, help));
|
|
51
|
+
process.exit(0);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
log_1.log.updateSettings(l => l.settings.minLevel = options.verbose ? 1 /* LogLevel.Trace */ : 5 /* LogLevel.Error */);
|
|
55
|
+
if (options.verbose) {
|
|
56
|
+
log_1.log.info(`running with (debugging) options, ${JSON.stringify(options)}`);
|
|
57
|
+
}
|
|
58
|
+
return options;
|
|
59
|
+
}
|
|
60
|
+
exports.processCommandLineArgs = processCommandLineArgs;
|
|
61
|
+
//# sourceMappingURL=script.js.map
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file contains the references to all scripts, as well as their explanations and arguments.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import type { OptionDefinition } from 'command-line-usage';
|
|
7
|
+
import type { MergeableRecord } from '../../util/objects';
|
|
8
|
+
interface BaseScriptInformation extends MergeableRecord {
|
|
9
|
+
toolName: string;
|
|
10
|
+
target: string;
|
|
11
|
+
description: string;
|
|
12
|
+
usageExample: string;
|
|
13
|
+
options: OptionDefinition[];
|
|
14
|
+
}
|
|
15
|
+
export interface MasterScriptInformation extends BaseScriptInformation {
|
|
16
|
+
type: 'master script';
|
|
17
|
+
}
|
|
18
|
+
export interface HelperScriptInformation extends BaseScriptInformation {
|
|
19
|
+
type: 'helper script';
|
|
20
|
+
masterScripts: string[];
|
|
21
|
+
}
|
|
22
|
+
export type ScriptInformation = MasterScriptInformation | HelperScriptInformation;
|
|
23
|
+
export declare const scripts: Record<"slicer" | "benchmark" | "stats" | "summarizer" | "export-quads" | "stats-helper" | "benchmark-helper", ScriptInformation>;
|
|
24
|
+
export declare function getValidOptionsForCompletion(options: readonly OptionDefinition[], prevArgs: readonly string[]): string[];
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getValidOptionsForCompletion = exports.scripts = void 0;
|
|
4
|
+
const options_1 = require("./options");
|
|
5
|
+
const commands_1 = require("../repl/commands/commands");
|
|
6
|
+
/**
|
|
7
|
+
* We hold `_scripts` internally, as the modifiable variant and export the readonly scripts
|
|
8
|
+
*/
|
|
9
|
+
const _scripts = {
|
|
10
|
+
'slicer': {
|
|
11
|
+
toolName: 'slicer',
|
|
12
|
+
target: 'slicer-app',
|
|
13
|
+
description: 'Static backwards executable slicer for R',
|
|
14
|
+
options: options_1.slicerOptions,
|
|
15
|
+
usageExample: 'slicer -c "12@product" test/testfiles/example.R',
|
|
16
|
+
type: 'master script',
|
|
17
|
+
},
|
|
18
|
+
'benchmark': {
|
|
19
|
+
toolName: 'benchmark',
|
|
20
|
+
target: 'benchmark-app',
|
|
21
|
+
description: 'Benchmark the static backwards slicer',
|
|
22
|
+
type: 'master script',
|
|
23
|
+
usageExample: 'benchmark "example-folder/"',
|
|
24
|
+
options: options_1.benchmarkOptions
|
|
25
|
+
},
|
|
26
|
+
'benchmark-helper': {
|
|
27
|
+
toolName: 'benchmark-single',
|
|
28
|
+
target: 'benchmark-helper-app',
|
|
29
|
+
description: 'Helper Script to Benchmark the Slicer',
|
|
30
|
+
usageExample: 'benchmark-single "example.R" --output "example.json"',
|
|
31
|
+
options: options_1.benchmarkHelperOptions,
|
|
32
|
+
type: 'helper script',
|
|
33
|
+
masterScripts: ['benchmark']
|
|
34
|
+
},
|
|
35
|
+
'summarizer': {
|
|
36
|
+
toolName: 'summarizer',
|
|
37
|
+
target: 'summarizer-app',
|
|
38
|
+
description: 'Summarize the results of the benchmark',
|
|
39
|
+
options: options_1.summarizerOptions,
|
|
40
|
+
usageExample: 'summarizer "benchmark.json"',
|
|
41
|
+
type: 'master script',
|
|
42
|
+
},
|
|
43
|
+
'export-quads': {
|
|
44
|
+
toolName: 'export-quads',
|
|
45
|
+
target: 'export-quads-app',
|
|
46
|
+
description: 'Export quads of the normalized AST of a given R code file',
|
|
47
|
+
usageExample: 'export-quads "example.R" --output "example.quads"',
|
|
48
|
+
options: options_1.exportQuadsOptions,
|
|
49
|
+
type: 'master script',
|
|
50
|
+
},
|
|
51
|
+
'stats': {
|
|
52
|
+
toolName: 'stats',
|
|
53
|
+
target: 'statistics-app',
|
|
54
|
+
description: 'Generate usage Statistics for R scripts',
|
|
55
|
+
options: options_1.statisticOptions,
|
|
56
|
+
usageExample: 'stats -i example.R --output-dir "output-folder/"',
|
|
57
|
+
type: 'master script',
|
|
58
|
+
},
|
|
59
|
+
'stats-helper': {
|
|
60
|
+
toolName: 'stats-helper',
|
|
61
|
+
target: 'statistics-helper-app',
|
|
62
|
+
description: 'Generate usage Statistics for a single R script (parallel helper for stats)',
|
|
63
|
+
options: options_1.statisticHelperOptions,
|
|
64
|
+
usageExample: 'stats-helper -i example.R --output-dir "output-folder/"',
|
|
65
|
+
type: 'helper script',
|
|
66
|
+
masterScripts: ['stats']
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
exports.scripts = _scripts;
|
|
70
|
+
function getValidOptionsForCompletion(options, prevArgs) {
|
|
71
|
+
return options.filter(o => canAddOption(o, prevArgs)).flatMap(o => {
|
|
72
|
+
const args = [(0, commands_1.asOptionName)(o.name)];
|
|
73
|
+
if (o.alias) {
|
|
74
|
+
args.push((0, commands_1.asOptionName)(o.alias));
|
|
75
|
+
}
|
|
76
|
+
return args;
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
exports.getValidOptionsForCompletion = getValidOptionsForCompletion;
|
|
80
|
+
function canAddOption(option, prevArgs) {
|
|
81
|
+
return option.multiple || !prevArgs.includes((0, commands_1.asOptionName)(option.name)) && (!option.alias || !prevArgs.includes((0, commands_1.asOptionName)(option.alias)));
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=scripts-info.js.map
|
|
@@ -0,0 +1,43 @@
|
|
|
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
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const quads_1 = require("../util/quads");
|
|
8
|
+
const log_1 = require("../util/log");
|
|
9
|
+
const files_1 = require("../util/files");
|
|
10
|
+
const script_1 = require("./common/script");
|
|
11
|
+
const shell_1 = require("../r-bridge/shell");
|
|
12
|
+
const retriever_1 = require("../r-bridge/retriever");
|
|
13
|
+
const options = (0, script_1.processCommandLineArgs)('export-quads', [], {
|
|
14
|
+
subtitle: 'Generate RDF N-Quads from the AST of a given R script',
|
|
15
|
+
examples: [
|
|
16
|
+
'{bold -i} {italic example.R} {bold --output} {italic "example.quads"}',
|
|
17
|
+
'{bold --help}'
|
|
18
|
+
]
|
|
19
|
+
});
|
|
20
|
+
const shell = new shell_1.RShell();
|
|
21
|
+
async function writeQuadForSingleFile(request, output) {
|
|
22
|
+
const normalized = await (0, retriever_1.retrieveNormalizedAstFromRCode)(request, shell);
|
|
23
|
+
const serialized = (0, quads_1.serialize2quads)(normalized.ast, { context: request.content });
|
|
24
|
+
log_1.log.info(`Appending quads to ${output}`);
|
|
25
|
+
fs_1.default.appendFileSync(output, serialized);
|
|
26
|
+
}
|
|
27
|
+
async function getQuads() {
|
|
28
|
+
const output = options.output ?? 'out.quads';
|
|
29
|
+
let skipped = 0;
|
|
30
|
+
for await (const request of (0, files_1.allRFilesFrom)(options.input, options.limit)) {
|
|
31
|
+
try {
|
|
32
|
+
await writeQuadForSingleFile(request, output);
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
log_1.log.error(`[Skipped] Error while processing ${request.content}: ${e.message} (${e.stack ?? ''})`);
|
|
36
|
+
skipped++;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
console.log(`Skipped ${skipped} files`);
|
|
40
|
+
shell.close();
|
|
41
|
+
}
|
|
42
|
+
void getQuads();
|
|
43
|
+
//# sourceMappingURL=export-quads-app.js.map
|