@eagleoutice/flowr 1.5.1 → 2.0.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/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 +52 -47
- 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
package/cli/flowr.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { OptionDefinition } from 'command-line-usage';
|
|
2
|
+
export declare const toolName = "flowr";
|
|
3
|
+
export declare const optionDefinitions: OptionDefinition[];
|
|
4
|
+
export interface FlowrCliOptions {
|
|
5
|
+
verbose: boolean;
|
|
6
|
+
version: boolean;
|
|
7
|
+
help: boolean;
|
|
8
|
+
server: boolean;
|
|
9
|
+
ws: boolean;
|
|
10
|
+
port: number;
|
|
11
|
+
'no-ansi': boolean;
|
|
12
|
+
execute: string | undefined;
|
|
13
|
+
script: string | undefined;
|
|
14
|
+
'config-file': string;
|
|
15
|
+
'r-path': string | undefined;
|
|
16
|
+
}
|
|
17
|
+
export declare const optionHelp: ({
|
|
18
|
+
header: string;
|
|
19
|
+
content: string;
|
|
20
|
+
optionList?: undefined;
|
|
21
|
+
} | {
|
|
22
|
+
header: string;
|
|
23
|
+
content: string[];
|
|
24
|
+
optionList?: undefined;
|
|
25
|
+
} | {
|
|
26
|
+
header: string;
|
|
27
|
+
optionList: OptionDefinition[];
|
|
28
|
+
content?: undefined;
|
|
29
|
+
})[];
|
package/cli/flowr.js
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
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.optionHelp = exports.optionDefinitions = exports.toolName = void 0;
|
|
7
|
+
const server_1 = require("./repl/server/server");
|
|
8
|
+
const net_1 = require("./repl/server/net");
|
|
9
|
+
const version_1 = require("../util/version");
|
|
10
|
+
const log_1 = require("../util/log");
|
|
11
|
+
const ansi_1 = require("../util/ansi");
|
|
12
|
+
const command_line_args_1 = __importDefault(require("command-line-args"));
|
|
13
|
+
const command_line_usage_1 = __importDefault(require("command-line-usage"));
|
|
14
|
+
const config_1 = require("../config");
|
|
15
|
+
const assert_1 = require("../util/assert");
|
|
16
|
+
const scripts_info_1 = require("./common/scripts-info");
|
|
17
|
+
const shell_1 = require("../r-bridge/shell");
|
|
18
|
+
const execute_1 = require("./repl/execute");
|
|
19
|
+
const main_1 = require("./repl/commands/main");
|
|
20
|
+
const core_1 = require("./repl/core");
|
|
21
|
+
const version_2 = require("./repl/commands/version");
|
|
22
|
+
const print_version_1 = require("./repl/print-version");
|
|
23
|
+
const scriptsText = Array.from(Object.entries(scripts_info_1.scripts).filter(([, { type }]) => type === 'master script'), ([k,]) => k).join(', ');
|
|
24
|
+
exports.toolName = 'flowr';
|
|
25
|
+
exports.optionDefinitions = [
|
|
26
|
+
{ name: 'verbose', alias: 'v', type: Boolean, description: 'Run with verbose logging (will be passed to the corresponding script)' },
|
|
27
|
+
{ name: 'help', alias: 'h', type: Boolean, description: 'Print this usage guide (or the guide of the corresponding script)' },
|
|
28
|
+
{ name: 'version', alias: 'V', type: Boolean, description: 'Provide information about the version of flowR as well as its underlying R system and exit.' },
|
|
29
|
+
{ name: 'server', type: Boolean, description: 'Do not drop into a repl, but instead start a server on the given port (default: 1042) and listen for messages.' },
|
|
30
|
+
{ name: 'ws', type: Boolean, description: 'If the server flag is set, use websocket for messaging' },
|
|
31
|
+
{ name: 'port', type: Number, description: 'The port to listen on, if --server is given.', defaultValue: 1042, typeLabel: '{underline port}' },
|
|
32
|
+
{ name: 'execute', alias: 'e', type: String, description: 'Execute the given command and exit. Use a semicolon ";" to separate multiple commands.', typeLabel: '{underline command}', multiple: false },
|
|
33
|
+
{ name: 'no-ansi', type: Boolean, description: 'Disable ansi-escape-sequences in the output. Useful, if you want to redirect the output to a file.' },
|
|
34
|
+
{ name: 'script', alias: 's', type: String, description: `The sub-script to run (${scriptsText})`, multiple: false, defaultOption: true, typeLabel: '{underline files}', defaultValue: undefined },
|
|
35
|
+
{ name: 'config-file', type: String, description: 'The name of the configuration file to use', multiple: false },
|
|
36
|
+
{ name: 'r-path', type: String, description: 'The path to the R executable to use. Defaults to your PATH.', multiple: false }
|
|
37
|
+
];
|
|
38
|
+
exports.optionHelp = [
|
|
39
|
+
{
|
|
40
|
+
header: `flowR (version ${(0, version_1.flowrVersion)().toString()})`,
|
|
41
|
+
content: 'A static dataflow analyzer and program slicer for R programs'
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
header: 'Synopsis',
|
|
45
|
+
content: [
|
|
46
|
+
`$ ${exports.toolName} {bold --help}`,
|
|
47
|
+
`$ ${exports.toolName} {bold --version}`,
|
|
48
|
+
`$ ${exports.toolName} {bold --server}`,
|
|
49
|
+
`$ ${exports.toolName} {bold --execute} {italic ":parse 2 - 4"}`,
|
|
50
|
+
`$ ${exports.toolName} {bold slicer} {bold --help}`,
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
header: 'Options',
|
|
55
|
+
optionList: exports.optionDefinitions
|
|
56
|
+
}
|
|
57
|
+
];
|
|
58
|
+
const options = (0, command_line_args_1.default)(exports.optionDefinitions);
|
|
59
|
+
log_1.log.updateSettings(l => l.settings.minLevel = options.verbose ? 1 /* LogLevel.Trace */ : 5 /* LogLevel.Error */);
|
|
60
|
+
log_1.log.info('running with options', options);
|
|
61
|
+
if (options['no-ansi']) {
|
|
62
|
+
log_1.log.info('disabling ansi colors');
|
|
63
|
+
(0, ansi_1.setFormatter)(ansi_1.voidFormatter);
|
|
64
|
+
}
|
|
65
|
+
(0, config_1.setConfigFile)(undefined, options['config-file'] ?? config_1.defaultConfigFile, true);
|
|
66
|
+
function retrieveShell() {
|
|
67
|
+
// we keep an active shell session to allow other parse investigations :)
|
|
68
|
+
let opts = {
|
|
69
|
+
revive: 2 /* RShellReviveOptions.Always */,
|
|
70
|
+
onRevive: (code, signal) => {
|
|
71
|
+
const signalText = signal == null ? '' : ` and signal ${signal}`;
|
|
72
|
+
console.log(ansi_1.formatter.format(`R process exited with code ${code}${signalText}. Restarting...`, { color: 5 /* Colors.Magenta */, effect: ansi_1.ColorEffect.Foreground }));
|
|
73
|
+
console.log((0, ansi_1.italic)(`If you want to exit, press either Ctrl+C twice, or enter ${(0, ansi_1.bold)(':quit')}`));
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
if (options['r-path']) {
|
|
77
|
+
opts = { ...opts, pathToRExecutable: options['r-path'] };
|
|
78
|
+
}
|
|
79
|
+
return new shell_1.RShell(opts);
|
|
80
|
+
}
|
|
81
|
+
async function mainRepl() {
|
|
82
|
+
if (options.script) {
|
|
83
|
+
let target = scripts_info_1.scripts[options.script].target;
|
|
84
|
+
(0, assert_1.guard)(target !== undefined, `Unknown script ${options.script}, pick one of ${scriptsText}.`);
|
|
85
|
+
console.log(`Running script '${ansi_1.formatter.format(options.script, { style: 1 /* FontStyles.Bold */ })}'`);
|
|
86
|
+
target = `cli/${target}`;
|
|
87
|
+
log_1.log.debug(`Script maps to "${target}"`);
|
|
88
|
+
await (0, execute_1.waitOnScript)(`${__dirname}/${target}`, process.argv.slice(3), undefined, true);
|
|
89
|
+
process.exit(0);
|
|
90
|
+
}
|
|
91
|
+
if (options.help) {
|
|
92
|
+
console.log((0, command_line_usage_1.default)(exports.optionHelp));
|
|
93
|
+
process.exit(0);
|
|
94
|
+
}
|
|
95
|
+
if (options.version) {
|
|
96
|
+
const shell = new shell_1.RShell();
|
|
97
|
+
process.on('exit', () => shell.close());
|
|
98
|
+
await (0, version_2.printVersionInformation)(main_1.standardReplOutput, shell);
|
|
99
|
+
process.exit(0);
|
|
100
|
+
}
|
|
101
|
+
const shell = retrieveShell();
|
|
102
|
+
const end = () => {
|
|
103
|
+
if (options.execute === undefined) {
|
|
104
|
+
console.log(`\n${(0, ansi_1.italic)('Exiting...')}`);
|
|
105
|
+
}
|
|
106
|
+
shell.close();
|
|
107
|
+
process.exit(0);
|
|
108
|
+
};
|
|
109
|
+
// hook some handlers
|
|
110
|
+
process.on('SIGINT', end);
|
|
111
|
+
process.on('SIGTERM', end);
|
|
112
|
+
if (options.execute) {
|
|
113
|
+
await (0, core_1.replProcessAnswer)(main_1.standardReplOutput, options.execute, shell);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
await (0, print_version_1.printVersionRepl)(shell);
|
|
117
|
+
await (0, core_1.repl)(shell);
|
|
118
|
+
}
|
|
119
|
+
process.exit(0);
|
|
120
|
+
}
|
|
121
|
+
async function mainServer(backend = new net_1.NetServer()) {
|
|
122
|
+
const shell = retrieveShell();
|
|
123
|
+
const end = () => {
|
|
124
|
+
if (options.execute === undefined) {
|
|
125
|
+
console.log(`\n${(0, ansi_1.italic)('Exiting...')}`);
|
|
126
|
+
}
|
|
127
|
+
shell.close();
|
|
128
|
+
process.exit(0);
|
|
129
|
+
};
|
|
130
|
+
// hook some handlers
|
|
131
|
+
process.on('SIGINT', end);
|
|
132
|
+
process.on('SIGTERM', end);
|
|
133
|
+
await new server_1.FlowRServer(shell, backend).start(options.port);
|
|
134
|
+
}
|
|
135
|
+
if (options.server) {
|
|
136
|
+
void mainServer(options.ws ? new net_1.WebSocketServerWrapper() : new net_1.NetServer());
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
void mainRepl();
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=flowr.js.map
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.controlflowStarCommand = exports.controlflowCommand = void 0;
|
|
4
|
+
const pipeline_executor_1 = require("../../../core/pipeline-executor");
|
|
5
|
+
const cfg_1 = require("../../../util/cfg/cfg");
|
|
6
|
+
const default_pipelines_1 = require("../../../core/steps/pipeline/default-pipelines");
|
|
7
|
+
const retriever_1 = require("../../../r-bridge/retriever");
|
|
8
|
+
const cfg_2 = require("../../../util/mermaid/cfg");
|
|
9
|
+
async function controlflow(shell, remainingLine) {
|
|
10
|
+
return await new pipeline_executor_1.PipelineExecutor(default_pipelines_1.DEFAULT_NORMALIZE_PIPELINE, {
|
|
11
|
+
shell,
|
|
12
|
+
request: (0, retriever_1.requestFromInput)(remainingLine.trim())
|
|
13
|
+
}).allRemainingSteps();
|
|
14
|
+
}
|
|
15
|
+
exports.controlflowCommand = {
|
|
16
|
+
description: `Get mermaid code for the control-flow graph of R code, start with '${retriever_1.fileProtocol}' to indicate a file`,
|
|
17
|
+
usageExample: ':controlflow',
|
|
18
|
+
aliases: ['cfg', 'cf'],
|
|
19
|
+
script: false,
|
|
20
|
+
fn: async (output, shell, remainingLine) => {
|
|
21
|
+
const result = await controlflow(shell, remainingLine);
|
|
22
|
+
const cfg = (0, cfg_1.extractCFG)(result.normalize);
|
|
23
|
+
output.stdout((0, cfg_2.cfgToMermaid)(cfg, result.normalize));
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
exports.controlflowStarCommand = {
|
|
27
|
+
description: `Get a mermaid url of the control-flow graph of R code, start with '${retriever_1.fileProtocol}' to indicate a file`,
|
|
28
|
+
usageExample: ':controlflow',
|
|
29
|
+
aliases: ['cfg*', 'cf*'],
|
|
30
|
+
script: false,
|
|
31
|
+
fn: async (output, shell, remainingLine) => {
|
|
32
|
+
const result = await controlflow(shell, remainingLine);
|
|
33
|
+
const cfg = (0, cfg_1.extractCFG)(result.normalize);
|
|
34
|
+
output.stdout((0, cfg_2.cfgToMermaidUrl)(cfg, result.normalize));
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=cfg.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ReplCommand } from './main';
|
|
2
|
+
export declare const helpCommand: ReplCommand;
|
|
3
|
+
/**
|
|
4
|
+
* The names of all commands including their aliases (but without the leading `:`)
|
|
5
|
+
*/
|
|
6
|
+
export declare function getCommandNames(): string[];
|
|
7
|
+
/**
|
|
8
|
+
* Get the command for a given command name or alias.
|
|
9
|
+
* @param command - The name of the command (without the leading `:`)
|
|
10
|
+
*/
|
|
11
|
+
export declare function getCommand(command: string): ReplCommand | undefined;
|
|
12
|
+
export declare function asOptionName(argument: string): string;
|
|
13
|
+
export declare function longestCommandName(): number;
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.longestCommandName = exports.asOptionName = exports.getCommand = exports.getCommandNames = exports.helpCommand = void 0;
|
|
4
|
+
const quit_1 = require("./quit");
|
|
5
|
+
const execute_1 = require("../execute");
|
|
6
|
+
const prompt_1 = require("../prompt");
|
|
7
|
+
const version_1 = require("./version");
|
|
8
|
+
const parse_1 = require("./parse");
|
|
9
|
+
const execute_2 = require("./execute");
|
|
10
|
+
const normalize_1 = require("./normalize");
|
|
11
|
+
const dataflow_1 = require("./dataflow");
|
|
12
|
+
const cfg_1 = require("./cfg");
|
|
13
|
+
const ansi_1 = require("../../../util/ansi");
|
|
14
|
+
const args_1 = require("../../../util/args");
|
|
15
|
+
const assert_1 = require("../../../util/assert");
|
|
16
|
+
const scripts_info_1 = require("../../common/scripts-info");
|
|
17
|
+
function printHelpForScript(script, f) {
|
|
18
|
+
const base = ` ${(0, ansi_1.bold)(padCmd(':' + script[0]), f)}${script[1].description}`;
|
|
19
|
+
if (script[1].aliases.length === 0) {
|
|
20
|
+
return base;
|
|
21
|
+
}
|
|
22
|
+
const aliases = script[1].aliases;
|
|
23
|
+
return `${base} (alias${aliases.length > 1 ? 'es' : ''}: ${aliases.map(a => (0, ansi_1.bold)(':' + a, f)).join(', ')})`;
|
|
24
|
+
}
|
|
25
|
+
exports.helpCommand = {
|
|
26
|
+
description: 'Show help information',
|
|
27
|
+
script: false,
|
|
28
|
+
usageExample: ':help',
|
|
29
|
+
aliases: ['h', '?'],
|
|
30
|
+
fn: output => {
|
|
31
|
+
initCommandMapping();
|
|
32
|
+
output.stdout(`
|
|
33
|
+
You can always just enter R expressions which get evaluated right away:
|
|
34
|
+
${prompt_1.rawPrompt} ${(0, ansi_1.bold)('1 + 1', output.formatter)}
|
|
35
|
+
${(0, ansi_1.italic)('[1] 2', output.formatter)}
|
|
36
|
+
|
|
37
|
+
Besides that, you can use the following commands. The scripts ${(0, ansi_1.italic)('can', output.formatter)} accept further arguments. There are the following basic commands:
|
|
38
|
+
${Array.from(Object.entries(commands())).filter(([, { script }]) => !script).map(c => printHelpForScript(c, output.formatter)).join('\n')}
|
|
39
|
+
|
|
40
|
+
Furthermore, you can directly call the following scripts which accept arguments. If you are unsure, try to add ${(0, ansi_1.italic)('--help', output.formatter)} after the command.
|
|
41
|
+
${Array.from(Object.entries(commands())).filter(([, { script }]) => script).map(([command, { description }]) => ` ${(0, ansi_1.bold)(padCmd(':' + command), output.formatter)}${description}`).join('\n')}
|
|
42
|
+
|
|
43
|
+
You can combine commands by separating them with a semicolon ${(0, ansi_1.bold)(';', output.formatter)}.
|
|
44
|
+
`);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* All commands that should be available in the REPL.
|
|
49
|
+
*/
|
|
50
|
+
const _commands = {
|
|
51
|
+
'help': exports.helpCommand,
|
|
52
|
+
'quit': quit_1.quitCommand,
|
|
53
|
+
'version': version_1.versionCommand,
|
|
54
|
+
'execute': execute_2.executeCommand,
|
|
55
|
+
'parse': parse_1.parseCommand,
|
|
56
|
+
'normalize': normalize_1.normalizeCommand,
|
|
57
|
+
'normalize*': normalize_1.normalizeStarCommand,
|
|
58
|
+
'dataflow': dataflow_1.dataflowCommand,
|
|
59
|
+
'dataflow*': dataflow_1.dataflowStarCommand,
|
|
60
|
+
'controlflow': cfg_1.controlflowCommand,
|
|
61
|
+
'controlflow*': cfg_1.controlflowStarCommand
|
|
62
|
+
};
|
|
63
|
+
let commandsInitialized = false;
|
|
64
|
+
function commands() {
|
|
65
|
+
if (commandsInitialized) {
|
|
66
|
+
return _commands;
|
|
67
|
+
}
|
|
68
|
+
commandsInitialized = true;
|
|
69
|
+
for (const [script, { target, description, type }] of Object.entries(scripts_info_1.scripts)) {
|
|
70
|
+
if (type === 'master script') {
|
|
71
|
+
_commands[script] = {
|
|
72
|
+
description,
|
|
73
|
+
aliases: [],
|
|
74
|
+
script: true,
|
|
75
|
+
usageExample: `:${script} --help`,
|
|
76
|
+
fn: async (output, _s, remainingLine) => {
|
|
77
|
+
await (0, execute_1.waitOnScript)(`${__dirname}/../../${target}`, (0, args_1.splitAtEscapeSensitive)(remainingLine), stdio => (0, execute_1.stdioCaptureProcessor)(stdio, msg => output.stdout(msg), msg => output.stderr(msg)));
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return _commands;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The names of all commands including their aliases (but without the leading `:`)
|
|
86
|
+
*/
|
|
87
|
+
function getCommandNames() {
|
|
88
|
+
if (commandNames === undefined) {
|
|
89
|
+
initCommandMapping();
|
|
90
|
+
}
|
|
91
|
+
return commandNames;
|
|
92
|
+
}
|
|
93
|
+
exports.getCommandNames = getCommandNames;
|
|
94
|
+
let commandNames = undefined;
|
|
95
|
+
// maps command names or aliases to the actual command name
|
|
96
|
+
let commandMapping = undefined;
|
|
97
|
+
function initCommandMapping() {
|
|
98
|
+
commandMapping = {};
|
|
99
|
+
commandNames = [];
|
|
100
|
+
for (const [command, { aliases }] of Object.entries(commands())) {
|
|
101
|
+
(0, assert_1.guard)(commandMapping[command] === undefined, `Command ${command} is already registered!`);
|
|
102
|
+
commandMapping[command] = command;
|
|
103
|
+
for (const alias of aliases) {
|
|
104
|
+
(0, assert_1.guard)(commandMapping[alias] === undefined, `Command (alias) ${alias} is already registered!`);
|
|
105
|
+
commandMapping[alias] = command;
|
|
106
|
+
}
|
|
107
|
+
commandNames.push(command);
|
|
108
|
+
commandNames.push(...aliases);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get the command for a given command name or alias.
|
|
113
|
+
* @param command - The name of the command (without the leading `:`)
|
|
114
|
+
*/
|
|
115
|
+
function getCommand(command) {
|
|
116
|
+
if (commandMapping === undefined) {
|
|
117
|
+
initCommandMapping();
|
|
118
|
+
}
|
|
119
|
+
return commands()[commandMapping[command]];
|
|
120
|
+
}
|
|
121
|
+
exports.getCommand = getCommand;
|
|
122
|
+
function asOptionName(argument) {
|
|
123
|
+
if (argument.length == 1) {
|
|
124
|
+
return `-${argument}`;
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
return `--${argument}`;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
exports.asOptionName = asOptionName;
|
|
131
|
+
let _longestCommandName = undefined;
|
|
132
|
+
function longestCommandName() {
|
|
133
|
+
if (_longestCommandName === undefined) {
|
|
134
|
+
_longestCommandName = Array.from(Object.keys(commands()), k => k.length).reduce((p, n) => Math.max(p, n), 0);
|
|
135
|
+
}
|
|
136
|
+
return _longestCommandName;
|
|
137
|
+
}
|
|
138
|
+
exports.longestCommandName = longestCommandName;
|
|
139
|
+
function padCmd(string) {
|
|
140
|
+
return String(string).padEnd(longestCommandName() + 2, ' ');
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.dataflowStarCommand = exports.dataflowCommand = void 0;
|
|
4
|
+
const pipeline_executor_1 = require("../../../core/pipeline-executor");
|
|
5
|
+
const default_pipelines_1 = require("../../../core/steps/pipeline/default-pipelines");
|
|
6
|
+
const retriever_1 = require("../../../r-bridge/retriever");
|
|
7
|
+
const dfg_1 = require("../../../util/mermaid/dfg");
|
|
8
|
+
async function dataflow(shell, remainingLine) {
|
|
9
|
+
return await new pipeline_executor_1.PipelineExecutor(default_pipelines_1.DEFAULT_DATAFLOW_PIPELINE, {
|
|
10
|
+
shell,
|
|
11
|
+
request: (0, retriever_1.requestFromInput)(remainingLine.trim())
|
|
12
|
+
}).allRemainingSteps();
|
|
13
|
+
}
|
|
14
|
+
exports.dataflowCommand = {
|
|
15
|
+
description: `Get mermaid code for the dataflow graph of R code, start with '${retriever_1.fileProtocol}' to indicate a file`,
|
|
16
|
+
usageExample: ':dataflow',
|
|
17
|
+
aliases: ['d', 'df'],
|
|
18
|
+
script: false,
|
|
19
|
+
fn: async (output, shell, remainingLine) => {
|
|
20
|
+
const result = await dataflow(shell, remainingLine);
|
|
21
|
+
output.stdout((0, dfg_1.graphToMermaid)({ graph: result.dataflow.graph, includeEnvironments: false }).string);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
exports.dataflowStarCommand = {
|
|
25
|
+
description: `Get a mermaid url of the dataflow graph of R code, start with '${retriever_1.fileProtocol}' to indicate a file`,
|
|
26
|
+
usageExample: ':dataflow*',
|
|
27
|
+
aliases: ['d*', 'df*'],
|
|
28
|
+
script: false,
|
|
29
|
+
fn: async (output, shell, remainingLine) => {
|
|
30
|
+
const result = await dataflow(shell, remainingLine);
|
|
31
|
+
output.stdout((0, dfg_1.graphToMermaidUrl)(result.dataflow.graph, false));
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=dataflow.js.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ReplCommand, ReplOutput } from './main';
|
|
2
|
+
import type { RShell } from '../../../r-bridge/shell';
|
|
3
|
+
export declare function executeRShellCommand(output: ReplOutput, shell: RShell, statement: string): Promise<void>;
|
|
4
|
+
export declare const executeCommand: ReplCommand;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.executeCommand = exports.executeRShellCommand = void 0;
|
|
4
|
+
const ansi_1 = require("../../../util/ansi");
|
|
5
|
+
async function executeRShellCommand(output, shell, statement) {
|
|
6
|
+
try {
|
|
7
|
+
const result = await shell.sendCommandWithOutput(statement, {
|
|
8
|
+
from: 'both',
|
|
9
|
+
automaticallyTrimOutput: true
|
|
10
|
+
});
|
|
11
|
+
output.stdout(`${(0, ansi_1.italic)(result.join('\n'), output.formatter)}\n`);
|
|
12
|
+
}
|
|
13
|
+
catch (e) {
|
|
14
|
+
output.stderr(`Error while executing '${statement}': ${e.message}`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.executeRShellCommand = executeRShellCommand;
|
|
18
|
+
exports.executeCommand = {
|
|
19
|
+
description: 'Execute the given code as R code (essentially similar to using now command)',
|
|
20
|
+
usageExample: ':execute',
|
|
21
|
+
aliases: ['e', 'r'],
|
|
22
|
+
script: false,
|
|
23
|
+
fn: async (output, shell, remainingLine) => {
|
|
24
|
+
await executeRShellCommand(output, shell, remainingLine);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=execute.js.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { OutputFormatter } from '../../../util/ansi';
|
|
2
|
+
import type { RShell } from '../../../r-bridge/shell';
|
|
3
|
+
/**
|
|
4
|
+
* Defines the main interface for output of the repl.
|
|
5
|
+
* This allows us to redirect it (e.g., in the case of a server connection or tests).
|
|
6
|
+
*
|
|
7
|
+
* The formatter allows to dynamically change the use of ansi escape sequences (see {@link OutputFormatter})
|
|
8
|
+
*
|
|
9
|
+
* @see standardReplOutput
|
|
10
|
+
*/
|
|
11
|
+
export interface ReplOutput {
|
|
12
|
+
formatter: OutputFormatter;
|
|
13
|
+
stdout(msg: string): void;
|
|
14
|
+
stderr(msg: string): void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Default repl output that redirects everything to the stdout and stderror channels (linked to `console`).
|
|
18
|
+
* @see ReplOutput
|
|
19
|
+
*/
|
|
20
|
+
export declare const standardReplOutput: ReplOutput;
|
|
21
|
+
/**
|
|
22
|
+
* Content of a single command in the repl.
|
|
23
|
+
* The command may execute an external script or simply call *flowR* functions.
|
|
24
|
+
*/
|
|
25
|
+
export interface ReplCommand {
|
|
26
|
+
/** Aliases of the command (without the leading colon), every alias must be unique (this is checked at runtime) */
|
|
27
|
+
aliases: string[];
|
|
28
|
+
/** A human-readable description of what the command does */
|
|
29
|
+
description: string;
|
|
30
|
+
/** Does the command invoke another script? this is mainly used to automatically generate two separate lists when asking for help */
|
|
31
|
+
script: boolean;
|
|
32
|
+
/** Example of how to use the command, for example `:slicer --help` */
|
|
33
|
+
usageExample: string;
|
|
34
|
+
/**
|
|
35
|
+
* Function to execute when the command is invoked, it must not write to the command line but instead use the output handler.
|
|
36
|
+
* Furthermore, it has to obey the formatter defined in the {@link ReplOutput}.
|
|
37
|
+
*/
|
|
38
|
+
fn: (output: ReplOutput, shell: RShell, remainingLine: string) => Promise<void> | void;
|
|
39
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.standardReplOutput = void 0;
|
|
4
|
+
const ansi_1 = require("../../../util/ansi");
|
|
5
|
+
/**
|
|
6
|
+
* Default repl output that redirects everything to the stdout and stderror channels (linked to `console`).
|
|
7
|
+
* @see ReplOutput
|
|
8
|
+
*/
|
|
9
|
+
exports.standardReplOutput = {
|
|
10
|
+
formatter: ansi_1.formatter,
|
|
11
|
+
stdout: console.log,
|
|
12
|
+
stderr: console.error
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeStarCommand = exports.normalizeCommand = void 0;
|
|
4
|
+
const pipeline_executor_1 = require("../../../core/pipeline-executor");
|
|
5
|
+
const default_pipelines_1 = require("../../../core/steps/pipeline/default-pipelines");
|
|
6
|
+
const retriever_1 = require("../../../r-bridge/retriever");
|
|
7
|
+
const ast_1 = require("../../../util/mermaid/ast");
|
|
8
|
+
async function normalize(shell, remainingLine) {
|
|
9
|
+
return await new pipeline_executor_1.PipelineExecutor(default_pipelines_1.DEFAULT_NORMALIZE_PIPELINE, {
|
|
10
|
+
shell,
|
|
11
|
+
request: (0, retriever_1.requestFromInput)(remainingLine.trim())
|
|
12
|
+
}).allRemainingSteps();
|
|
13
|
+
}
|
|
14
|
+
exports.normalizeCommand = {
|
|
15
|
+
description: `Get mermaid code for the normalized AST of R code, start with '${retriever_1.fileProtocol}' to indicate a file`,
|
|
16
|
+
usageExample: ':normalize',
|
|
17
|
+
aliases: ['n'],
|
|
18
|
+
script: false,
|
|
19
|
+
fn: async (output, shell, remainingLine) => {
|
|
20
|
+
const result = await normalize(shell, remainingLine);
|
|
21
|
+
output.stdout((0, ast_1.normalizedAstToMermaid)(result.normalize.ast));
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
exports.normalizeStarCommand = {
|
|
25
|
+
description: `Get a mermaid url of the normalized AST of R code, start with '${retriever_1.fileProtocol}' to indicate a file`,
|
|
26
|
+
usageExample: ':normalize',
|
|
27
|
+
aliases: ['n*'],
|
|
28
|
+
script: false,
|
|
29
|
+
fn: async (output, shell, remainingLine) => {
|
|
30
|
+
const result = await normalize(shell, remainingLine);
|
|
31
|
+
output.stdout((0, ast_1.normalizedAstToMermaidUrl)(result.normalize.ast));
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseCommand = void 0;
|
|
4
|
+
const pipeline_executor_1 = require("../../../core/pipeline-executor");
|
|
5
|
+
const format_1 = require("../../../r-bridge/lang-4.x/ast/parser/json/format");
|
|
6
|
+
const parser_1 = require("../../../r-bridge/lang-4.x/ast/parser/json/parser");
|
|
7
|
+
const input_format_1 = require("../../../r-bridge/lang-4.x/ast/parser/xml/input-format");
|
|
8
|
+
const normalize_meta_1 = require("../../../r-bridge/lang-4.x/ast/parser/xml/normalize-meta");
|
|
9
|
+
const default_pipelines_1 = require("../../../core/steps/pipeline/default-pipelines");
|
|
10
|
+
const retriever_1 = require("../../../r-bridge/retriever");
|
|
11
|
+
function toDepthMap(xml) {
|
|
12
|
+
const root = (0, input_format_1.getKeysGuarded)(xml, "exprlist" /* RawRType.ExpressionList */);
|
|
13
|
+
const visit = [{ depth: 0, node: root }];
|
|
14
|
+
const result = [];
|
|
15
|
+
while (visit.length > 0) {
|
|
16
|
+
const current = visit.pop();
|
|
17
|
+
if (current === undefined) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
const children = current.node[input_format_1.childrenKey] ?? [];
|
|
21
|
+
result.push({ ...current, leaf: children.length === 0 });
|
|
22
|
+
children.reverse();
|
|
23
|
+
const nextDepth = current.depth + 1;
|
|
24
|
+
visit.push(...children.map(c => ({ depth: nextDepth, node: c })));
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
function lastElementInNesting(i, list, depth) {
|
|
29
|
+
for (let j = i + 1; j < list.length; j++) {
|
|
30
|
+
if (list[j].depth < depth) {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
if (list[j].depth === depth) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// only more deeply nested come after
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
function initialIndentation(i, depth, deadDepths, nextDepth, list, f) {
|
|
41
|
+
let result = `${i === 0 ? '' : '\n'}${f.getFormatString({ style: 2 /* FontStyles.Faint */ })}`;
|
|
42
|
+
// we know there never is something on the same level as the expression list
|
|
43
|
+
for (let d = 1; d < depth; d++) {
|
|
44
|
+
result += deadDepths.has(d) ? ' ' : '│ ';
|
|
45
|
+
}
|
|
46
|
+
if (nextDepth < depth) {
|
|
47
|
+
result += '╰ ';
|
|
48
|
+
}
|
|
49
|
+
else if (i > 0) {
|
|
50
|
+
// check if we are maybe the last one with this depth until someone with a lower depth comes around
|
|
51
|
+
const isLast = lastElementInNesting(i, list, depth);
|
|
52
|
+
result += isLast ? '╰ ' : '├ ';
|
|
53
|
+
if (isLast) {
|
|
54
|
+
deadDepths.add(depth);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
function retrieveLocationString(locationRaw) {
|
|
60
|
+
const extracted = (0, normalize_meta_1.extractLocation)(locationRaw);
|
|
61
|
+
if (extracted[0] === extracted[2] && extracted[1] === extracted[3]) {
|
|
62
|
+
return ` (${extracted[0]}:${extracted[1]})`;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
return ` (${extracted[0]}:${extracted[1]}─${extracted[2]}:${extracted[3]})`;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function depthListToTextTree(list, f) {
|
|
69
|
+
let result = '';
|
|
70
|
+
const deadDepths = new Set();
|
|
71
|
+
let i = 0;
|
|
72
|
+
for (const { depth, node, leaf } of list) {
|
|
73
|
+
const nextDepth = i + 1 < list.length ? list[i + 1].depth : 0;
|
|
74
|
+
deadDepths.delete(depth);
|
|
75
|
+
result += initialIndentation(i, depth, deadDepths, nextDepth, list, f);
|
|
76
|
+
result += f.reset();
|
|
77
|
+
const raw = (0, normalize_meta_1.objectWithArrUnwrap)(node);
|
|
78
|
+
const content = raw[input_format_1.contentKey];
|
|
79
|
+
const locationRaw = raw[input_format_1.attributesKey];
|
|
80
|
+
let location = '';
|
|
81
|
+
if (locationRaw !== undefined) {
|
|
82
|
+
location = retrieveLocationString(locationRaw);
|
|
83
|
+
}
|
|
84
|
+
const type = (0, normalize_meta_1.getTokenType)(node);
|
|
85
|
+
if (leaf) {
|
|
86
|
+
const suffix = `${f.format(content ? JSON.stringify(content) : '', { style: 1 /* FontStyles.Bold */ })}${f.format(location, { style: 3 /* FontStyles.Italic */ })}`;
|
|
87
|
+
result += `${type} ${suffix}`;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
result += f.format(type, { style: 1 /* FontStyles.Bold */ });
|
|
91
|
+
}
|
|
92
|
+
i++;
|
|
93
|
+
}
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
exports.parseCommand = {
|
|
97
|
+
description: `Prints ASCII Art of the parsed, unmodified AST, start with '${retriever_1.fileProtocol}' to indicate a file`,
|
|
98
|
+
usageExample: ':parse',
|
|
99
|
+
aliases: ['p'],
|
|
100
|
+
script: false,
|
|
101
|
+
fn: async (output, shell, remainingLine) => {
|
|
102
|
+
const result = await new pipeline_executor_1.PipelineExecutor(default_pipelines_1.DEFAULT_PARSE_PIPELINE, {
|
|
103
|
+
shell,
|
|
104
|
+
request: (0, retriever_1.requestFromInput)((0, retriever_1.removeRQuotes)(remainingLine.trim()))
|
|
105
|
+
}).allRemainingSteps();
|
|
106
|
+
const object = (0, parser_1.convertPreparedParsedData)((0, format_1.prepareParsedData)(result.parse));
|
|
107
|
+
output.stdout(depthListToTextTree(toDepthMap(object), output.formatter));
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
//# sourceMappingURL=parse.js.map
|