@eagleoutice/flowr 2.6.2 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -34
- package/abstract-interpretation/data-frame/absint-visitor.d.ts +1 -1
- package/abstract-interpretation/data-frame/absint-visitor.js +6 -6
- package/abstract-interpretation/data-frame/dataframe-domain.d.ts +4 -7
- package/abstract-interpretation/data-frame/dataframe-domain.js +5 -11
- package/abstract-interpretation/data-frame/mappers/access-mapper.d.ts +3 -1
- package/abstract-interpretation/data-frame/mappers/access-mapper.js +3 -2
- package/abstract-interpretation/data-frame/mappers/arguments.js +2 -2
- package/abstract-interpretation/data-frame/mappers/assignment-mapper.d.ts +3 -1
- package/abstract-interpretation/data-frame/mappers/assignment-mapper.js +3 -2
- package/abstract-interpretation/data-frame/mappers/function-mapper.d.ts +7 -7
- package/abstract-interpretation/data-frame/mappers/function-mapper.js +28 -24
- package/abstract-interpretation/data-frame/mappers/replacement-mapper.d.ts +3 -1
- package/abstract-interpretation/data-frame/mappers/replacement-mapper.js +3 -2
- package/abstract-interpretation/data-frame/semantics.js +54 -41
- package/abstract-interpretation/data-frame/shape-inference.d.ts +3 -3
- package/abstract-interpretation/data-frame/shape-inference.js +3 -3
- package/abstract-interpretation/domains/abstract-domain.d.ts +1 -0
- package/abstract-interpretation/domains/abstract-domain.js +3 -2
- package/abstract-interpretation/domains/bounded-set-domain.js +1 -1
- package/abstract-interpretation/domains/interval-domain.d.ts +2 -2
- package/abstract-interpretation/domains/interval-domain.js +3 -6
- package/abstract-interpretation/domains/lattice.d.ts +2 -0
- package/abstract-interpretation/domains/lattice.js +3 -1
- package/abstract-interpretation/domains/positive-interval-domain.d.ts +1 -1
- package/abstract-interpretation/domains/positive-interval-domain.js +1 -1
- package/abstract-interpretation/domains/satisfiable-domain.d.ts +2 -2
- package/abstract-interpretation/domains/satisfiable-domain.js +2 -2
- package/abstract-interpretation/domains/set-range-domain.d.ts +98 -0
- package/abstract-interpretation/domains/set-range-domain.js +400 -0
- package/abstract-interpretation/domains/set-upper-bound-domain.js +2 -2
- package/abstract-interpretation/domains/singleton-domain.js +2 -2
- package/abstract-interpretation/normalized-ast-fold.d.ts +1 -1
- package/benchmark/slicer.d.ts +3 -1
- package/benchmark/slicer.js +50 -27
- package/benchmark/stats/print.js +8 -5
- package/benchmark/stats/stats.d.ts +3 -2
- package/benchmark/summarizer/data.d.ts +11 -8
- package/benchmark/summarizer/first-phase/process.js +12 -9
- package/benchmark/summarizer/second-phase/graph.d.ts +3 -1
- package/benchmark/summarizer/second-phase/graph.js +3 -1
- package/benchmark/summarizer/second-phase/process.js +24 -18
- package/cli/export-quads-app.js +1 -1
- package/cli/repl/commands/repl-dataflow.js +2 -1
- package/cli/repl/commands/repl-parse.js +16 -4
- package/cli/repl/commands/repl-query.js +1 -1
- package/cli/repl/core.js +16 -13
- package/cli/repl/server/connection.js +2 -1
- package/cli/script-core/statistics-helper-core.js +2 -1
- package/cli/slicer-app.js +3 -4
- package/cli/wiki.d.ts +4 -0
- package/cli/wiki.js +165 -0
- package/config.d.ts +4 -0
- package/config.js +6 -0
- package/control-flow/cfg-dead-code.js +14 -3
- package/control-flow/cfg-simplification.d.ts +5 -2
- package/control-flow/cfg-simplification.js +3 -0
- package/control-flow/extract-cfg.d.ts +9 -3
- package/control-flow/extract-cfg.js +44 -4
- package/control-flow/semantic-cfg-guided-visitor.d.ts +2 -2
- package/control-flow/simple-visitor.js +2 -2
- package/control-flow/useless-loop.d.ts +3 -3
- package/control-flow/useless-loop.js +16 -5
- package/core/pipeline-executor.d.ts +3 -6
- package/core/pipeline-executor.js +4 -7
- package/core/print/normalize-printer.d.ts +1 -1
- package/core/print/normalize-printer.js +2 -2
- package/core/steps/all/core/00-parse.d.ts +1 -1
- package/core/steps/all/core/00-parse.js +1 -1
- package/core/steps/all/core/10-normalize.d.ts +3 -9
- package/core/steps/all/core/10-normalize.js +1 -16
- package/core/steps/all/core/11-normalize-tree-sitter.d.ts +2 -3
- package/core/steps/all/core/11-normalize-tree-sitter.js +2 -3
- package/core/steps/all/core/20-dataflow.d.ts +3 -4
- package/core/steps/all/core/20-dataflow.js +2 -2
- package/core/steps/all/static-slicing/00-slice.d.ts +4 -2
- package/core/steps/all/static-slicing/00-slice.js +3 -2
- package/core/steps/all/static-slicing/10-reconstruct.d.ts +8 -0
- package/core/steps/all/static-slicing/10-reconstruct.js +4 -1
- package/core/steps/pipeline/default-pipelines.d.ts +94 -95
- package/core/steps/pipeline/default-pipelines.js +8 -8
- package/dataflow/cluster.js +2 -2
- package/dataflow/environments/append.d.ts +5 -0
- package/dataflow/environments/append.js +6 -20
- package/dataflow/environments/built-in.d.ts +2 -1
- package/dataflow/environments/clone.d.ts +1 -2
- package/dataflow/environments/clone.js +3 -17
- package/dataflow/environments/define.d.ts +7 -3
- package/dataflow/environments/define.js +9 -56
- package/dataflow/environments/diff.js +3 -3
- package/dataflow/environments/environment.d.ts +48 -28
- package/dataflow/environments/environment.js +187 -62
- package/dataflow/environments/overwrite.d.ts +1 -5
- package/dataflow/environments/overwrite.js +2 -61
- package/dataflow/environments/reference-to-maybe.d.ts +13 -0
- package/dataflow/environments/reference-to-maybe.js +54 -0
- package/dataflow/environments/resolve-by-name.d.ts +6 -1
- package/dataflow/environments/resolve-by-name.js +56 -4
- package/dataflow/environments/scoping.d.ts +8 -4
- package/dataflow/environments/scoping.js +13 -9
- package/dataflow/eval/resolve/alias-tracking.d.ts +10 -4
- package/dataflow/eval/resolve/alias-tracking.js +15 -13
- package/dataflow/eval/resolve/resolve-argument.d.ts +2 -1
- package/dataflow/eval/resolve/resolve-argument.js +10 -10
- package/dataflow/eval/resolve/resolve.d.ts +13 -11
- package/dataflow/eval/resolve/resolve.js +16 -15
- package/dataflow/eval/values/string/string-constants.d.ts +9 -3
- package/dataflow/eval/values/string/string-constants.js +9 -3
- package/dataflow/extractor.d.ts +2 -3
- package/dataflow/extractor.js +25 -28
- package/dataflow/fn/higher-order-function.d.ts +2 -1
- package/dataflow/fn/higher-order-function.js +4 -4
- package/dataflow/graph/dataflowgraph-builder.d.ts +9 -5
- package/dataflow/graph/dataflowgraph-builder.js +21 -11
- package/dataflow/graph/diff-dataflow-graph.js +2 -2
- package/dataflow/graph/graph.d.ts +13 -11
- package/dataflow/graph/graph.js +40 -24
- package/dataflow/graph/invert-dfg.d.ts +3 -2
- package/dataflow/graph/invert-dfg.js +3 -3
- package/dataflow/graph/resolve-graph.d.ts +2 -1
- package/dataflow/graph/resolve-graph.js +2 -2
- package/dataflow/graph/unknown-replacement.d.ts +4 -2
- package/dataflow/graph/unknown-replacement.js +4 -2
- package/dataflow/graph/vertex.d.ts +3 -3
- package/dataflow/graph/vertex.js +3 -3
- package/dataflow/info.d.ts +8 -1
- package/dataflow/info.js +21 -0
- package/dataflow/internal/linker.js +10 -11
- package/dataflow/internal/process/functions/call/argument/make-argument.d.ts +2 -2
- package/dataflow/internal/process/functions/call/argument/make-argument.js +2 -3
- package/dataflow/internal/process/functions/call/argument/unpack-argument.d.ts +7 -1
- package/dataflow/internal/process/functions/call/argument/unpack-argument.js +12 -3
- package/dataflow/internal/process/functions/call/built-in/built-in-access.d.ts +1 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-access.js +7 -7
- package/dataflow/internal/process/functions/call/built-in/built-in-apply.js +2 -2
- package/dataflow/internal/process/functions/call/built-in/built-in-assignment.d.ts +3 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-assignment.js +6 -6
- package/dataflow/internal/process/functions/call/built-in/built-in-eval.js +14 -14
- package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.js +10 -8
- package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.js +4 -4
- package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.d.ts +2 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.js +10 -14
- package/dataflow/internal/process/functions/call/built-in/built-in-get.d.ts +1 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-get.js +2 -2
- package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.d.ts +3 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.js +8 -6
- package/dataflow/internal/process/functions/call/built-in/built-in-library.js +1 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-list.js +2 -2
- package/dataflow/internal/process/functions/call/built-in/built-in-pipe.js +4 -4
- package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.d.ts +6 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.js +7 -2
- package/dataflow/internal/process/functions/call/built-in/built-in-replacement.js +5 -5
- package/dataflow/internal/process/functions/call/built-in/built-in-rm.js +6 -4
- package/dataflow/internal/process/functions/call/built-in/built-in-source.d.ts +15 -10
- package/dataflow/internal/process/functions/call/built-in/built-in-source.js +78 -75
- package/dataflow/internal/process/functions/call/built-in/built-in-special-bin-op.d.ts +3 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-special-bin-op.js +3 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-vector.js +2 -2
- package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.js +5 -5
- package/dataflow/internal/process/functions/call/common.d.ts +1 -1
- package/dataflow/internal/process/functions/call/common.js +6 -7
- package/dataflow/internal/process/functions/call/default-call-handling.d.ts +3 -1
- package/dataflow/internal/process/functions/call/default-call-handling.js +3 -1
- package/dataflow/internal/process/functions/call/known-call-handling.js +4 -4
- package/dataflow/internal/process/functions/call/named-call-handling.js +4 -4
- package/dataflow/internal/process/functions/call/unnamed-call-handling.js +1 -1
- package/dataflow/internal/process/functions/process-argument.js +1 -1
- package/dataflow/internal/process/functions/process-parameter.js +4 -4
- package/dataflow/internal/process/process-symbol.js +1 -1
- package/dataflow/internal/process/process-value.d.ts +1 -1
- package/dataflow/internal/process/process-value.js +7 -7
- package/dataflow/origin/dfg-get-symbol-refs.d.ts +1 -1
- package/dataflow/origin/dfg-get-symbol-refs.js +1 -1
- package/dataflow/processor.d.ts +7 -16
- package/documentation/data/dfg/doc-data-dfg-util.d.ts +0 -2
- package/documentation/data/faq/faqs.js +27 -18
- package/documentation/data/faq/recommended-configs.d.ts +36 -0
- package/documentation/data/faq/recommended-configs.js +40 -0
- package/documentation/data/faq/wiki-faq-store.d.ts +1 -0
- package/documentation/data/faq/wiki-faq-store.js +10 -2
- package/documentation/data/server/doc-data-server-messages.js +1 -1
- package/documentation/doc-capabilities.d.ts +9 -0
- package/documentation/{print-capabilities-markdown.js → doc-capabilities.js} +18 -21
- package/documentation/doc-readme.d.ts +9 -0
- package/documentation/{print-readme.js → doc-readme.js} +31 -35
- package/documentation/doc-util/doc-benchmarks.d.ts +6 -4
- package/documentation/doc-util/doc-benchmarks.js +6 -4
- package/documentation/doc-util/doc-cfg.js +5 -8
- package/documentation/doc-util/doc-dfg.d.ts +7 -7
- package/documentation/doc-util/doc-dfg.js +15 -14
- package/documentation/doc-util/doc-escape.d.ts +6 -0
- package/documentation/doc-util/doc-escape.js +11 -0
- package/documentation/doc-util/doc-general.d.ts +22 -2
- package/documentation/doc-util/doc-general.js +22 -2
- package/documentation/doc-util/doc-normalized-ast.d.ts +10 -5
- package/documentation/doc-util/doc-normalized-ast.js +14 -10
- package/documentation/doc-util/doc-query.d.ts +12 -4
- package/documentation/doc-util/doc-query.js +18 -11
- package/documentation/doc-util/doc-search.d.ts +0 -30
- package/documentation/doc-util/doc-search.js +2 -73
- package/documentation/doc-util/doc-server-message.d.ts +5 -5
- package/documentation/doc-util/doc-server-message.js +4 -4
- package/documentation/doc-util/doc-types.d.ts +69 -32
- package/documentation/doc-util/doc-types.js +109 -62
- package/documentation/index.d.ts +9 -9
- package/documentation/index.js +9 -9
- package/documentation/issue-linting-rule.d.ts +9 -0
- package/documentation/{print-linter-issue.js → issue-linting-rule.js} +20 -23
- package/documentation/wiki-analyzer.d.ts +9 -0
- package/documentation/wiki-analyzer.js +425 -0
- package/documentation/wiki-cfg.d.ts +9 -0
- package/documentation/{print-cfg-wiki.js → wiki-cfg.js} +144 -160
- package/documentation/wiki-core.d.ts +14 -0
- package/documentation/{print-core-wiki.js → wiki-core.js} +164 -175
- package/documentation/wiki-dataflow-graph.d.ts +9 -0
- package/documentation/{print-dataflow-graph-wiki.js → wiki-dataflow-graph.js} +146 -177
- package/documentation/wiki-engine.d.ts +9 -0
- package/documentation/{print-engines-wiki.js → wiki-engine.js} +27 -42
- package/documentation/wiki-faq.d.ts +8 -0
- package/documentation/wiki-faq.js +21 -0
- package/documentation/wiki-interface.d.ts +9 -0
- package/documentation/{print-interface-wiki.js → wiki-interface.js} +59 -56
- package/documentation/wiki-linter.d.ts +9 -0
- package/documentation/{print-linter-wiki.js → wiki-linter.js} +52 -48
- package/documentation/wiki-linting-and-testing.d.ts +9 -0
- package/documentation/{print-linting-and-testing-wiki.js → wiki-linting-and-testing.js} +25 -32
- package/documentation/wiki-mk/doc-context.d.ts +186 -0
- package/documentation/wiki-mk/doc-context.js +84 -0
- package/documentation/wiki-mk/doc-maker.d.ts +95 -0
- package/documentation/wiki-mk/doc-maker.js +134 -0
- package/documentation/wiki-normalized-ast.d.ts +9 -0
- package/documentation/{print-normalized-ast-wiki.js → wiki-normalized-ast.js} +64 -47
- package/documentation/wiki-onboarding.d.ts +8 -0
- package/documentation/{print-onboarding-wiki.js → wiki-onboarding.js} +18 -15
- package/documentation/wiki-query.d.ts +9 -0
- package/documentation/{print-query-wiki.js → wiki-query.js} +62 -47
- package/documentation/wiki-search.d.ts +9 -0
- package/documentation/wiki-search.js +61 -0
- package/linter/linter-executor.js +3 -2
- package/linter/linter-format.d.ts +2 -2
- package/linter/linter-rules.d.ts +15 -19
- package/linter/rules/absolute-path.d.ts +1 -2
- package/linter/rules/absolute-path.js +5 -5
- package/linter/rules/dataframe-access-validation.d.ts +2 -2
- package/linter/rules/dataframe-access-validation.js +13 -9
- package/linter/rules/dead-code.d.ts +1 -1
- package/linter/rules/deprecated-functions.d.ts +1 -5
- package/linter/rules/file-path-validity.d.ts +1 -1
- package/linter/rules/file-path-validity.js +4 -4
- package/linter/rules/function-finder-util.d.ts +3 -7
- package/linter/rules/function-finder-util.js +1 -1
- package/linter/rules/naming-convention.d.ts +2 -2
- package/linter/rules/naming-convention.js +1 -1
- package/linter/rules/network-functions.d.ts +1 -1
- package/linter/rules/network-functions.js +1 -1
- package/linter/rules/seeded-randomness.d.ts +4 -3
- package/linter/rules/seeded-randomness.js +38 -18
- package/linter/rules/unused-definition.d.ts +1 -1
- package/linter/rules/useless-loop.d.ts +2 -2
- package/linter/rules/useless-loop.js +2 -2
- package/package.json +5 -17
- package/project/cache/flowr-analyzer-cache.d.ts +7 -10
- package/project/cache/flowr-analyzer-cache.js +17 -38
- package/project/cache/flowr-analyzer-controlflow-cache.d.ts +34 -0
- package/project/cache/flowr-analyzer-controlflow-cache.js +79 -0
- package/project/context/flowr-analyzer-context.d.ts +37 -5
- package/project/context/flowr-analyzer-context.js +51 -4
- package/project/context/flowr-analyzer-environment-context.d.ts +47 -0
- package/project/context/flowr-analyzer-environment-context.js +50 -0
- package/project/context/flowr-analyzer-files-context.d.ts +63 -13
- package/project/context/flowr-analyzer-files-context.js +110 -39
- package/project/context/flowr-file.d.ts +32 -10
- package/project/context/flowr-file.js +30 -9
- package/project/flowr-analyzer-builder.d.ts +22 -28
- package/project/flowr-analyzer-builder.js +32 -70
- package/project/flowr-analyzer.d.ts +55 -14
- package/project/flowr-analyzer.js +53 -8
- package/project/plugins/file-plugins/flowr-analyzer-description-file-plugin.d.ts +7 -1
- package/project/plugins/file-plugins/flowr-analyzer-description-file-plugin.js +13 -5
- package/project/plugins/file-plugins/flowr-analyzer-file-plugin.d.ts +3 -3
- package/project/plugins/file-plugins/flowr-analyzer-file-plugin.js +11 -5
- package/project/plugins/file-plugins/flowr-description-file.d.ts +3 -3
- package/project/plugins/file-plugins/notebooks/flowr-analyzer-jupyter-file-plugin.d.ts +22 -0
- package/project/plugins/file-plugins/notebooks/flowr-analyzer-jupyter-file-plugin.js +33 -0
- package/project/plugins/file-plugins/notebooks/flowr-analyzer-qmd-file-plugin.d.ts +22 -0
- package/project/plugins/file-plugins/notebooks/flowr-analyzer-qmd-file-plugin.js +33 -0
- package/project/plugins/file-plugins/notebooks/flowr-analyzer-rmd-file-plugin.d.ts +22 -0
- package/project/plugins/file-plugins/notebooks/flowr-analyzer-rmd-file-plugin.js +33 -0
- package/project/plugins/file-plugins/notebooks/flowr-jupyter-file.d.ts +20 -0
- package/project/plugins/file-plugins/notebooks/flowr-jupyter-file.js +42 -0
- package/project/plugins/file-plugins/notebooks/flowr-rmarkdown-file.d.ts +59 -0
- package/project/plugins/file-plugins/notebooks/flowr-rmarkdown-file.js +132 -0
- package/project/plugins/file-plugins/notebooks/notebook.d.ts +0 -0
- package/project/plugins/file-plugins/notebooks/notebook.js +2 -0
- package/project/plugins/flowr-analyzer-plugin-defaults.d.ts +5 -0
- package/project/plugins/flowr-analyzer-plugin-defaults.js +23 -0
- package/project/plugins/flowr-analyzer-plugin.d.ts +2 -0
- package/project/plugins/flowr-analyzer-plugin.js +2 -0
- package/project/plugins/loading-order-plugins/flowr-analyzer-loading-order-description-file-plugin.js +1 -1
- package/project/plugins/package-version-plugins/flowr-analyzer-package-versions-description-file-plugin.js +1 -1
- package/project/plugins/plugin-registry.d.ts +34 -0
- package/project/plugins/plugin-registry.js +62 -0
- package/project/plugins/project-discovery/flowr-analyzer-project-discovery-plugin.js +7 -1
- package/queries/catalog/call-context-query/call-context-query-executor.js +5 -6
- package/queries/catalog/call-context-query/identify-link-to-last-call-relation.d.ts +5 -2
- package/queries/catalog/call-context-query/identify-link-to-last-call-relation.js +25 -18
- package/queries/catalog/cluster-query/cluster-query-format.d.ts +1 -1
- package/queries/catalog/control-flow-query/control-flow-query-format.d.ts +1 -1
- package/queries/catalog/control-flow-query/control-flow-query-format.js +3 -2
- package/queries/catalog/dataflow-lens-query/dataflow-lens-query-executor.js +1 -1
- package/queries/catalog/dataflow-lens-query/dataflow-lens-query-format.d.ts +1 -1
- package/queries/catalog/dataflow-query/dataflow-query-format.d.ts +1 -1
- package/queries/catalog/dependencies-query/dependencies-query-executor.d.ts +1 -1
- package/queries/catalog/dependencies-query/dependencies-query-executor.js +5 -5
- package/queries/catalog/dependencies-query/dependencies-query-format.d.ts +1 -1
- package/queries/catalog/dependencies-query/dependencies-query-format.js +1 -1
- package/queries/catalog/df-shape-query/df-shape-query-executor.d.ts +1 -1
- package/queries/catalog/df-shape-query/df-shape-query-executor.js +2 -2
- package/queries/catalog/df-shape-query/df-shape-query-format.d.ts +6 -6
- package/queries/catalog/df-shape-query/df-shape-query-format.js +8 -7
- package/queries/catalog/happens-before-query/happens-before-query-executor.d.ts +2 -1
- package/queries/catalog/happens-before-query/happens-before-query-executor.js +2 -1
- package/queries/catalog/happens-before-query/happens-before-query-format.d.ts +1 -1
- package/queries/catalog/id-map-query/id-map-query-format.d.ts +1 -1
- package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-executor.d.ts +1 -1
- package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-executor.js +4 -4
- package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-format.d.ts +1 -1
- package/queries/catalog/linter-query/linter-query-format.d.ts +1 -1
- package/queries/catalog/linter-query/linter-query-format.js +13 -2
- package/queries/catalog/location-map-query/location-map-query-executor.js +2 -1
- package/queries/catalog/location-map-query/location-map-query-format.d.ts +1 -1
- package/queries/catalog/location-map-query/location-map-query-format.js +1 -1
- package/queries/catalog/normalized-ast-query/normalized-ast-query-format.d.ts +1 -1
- package/queries/catalog/origin-query/origin-query-format.d.ts +1 -1
- package/queries/catalog/project-query/project-query-executor.js +3 -1
- package/queries/catalog/project-query/project-query-format.d.ts +1 -1
- package/queries/catalog/resolve-value-query/resolve-value-query-executor.d.ts +2 -2
- package/queries/catalog/resolve-value-query/resolve-value-query-executor.js +3 -3
- package/queries/catalog/resolve-value-query/resolve-value-query-format.d.ts +1 -1
- package/queries/catalog/search-query/search-query-format.d.ts +1 -1
- package/queries/catalog/static-slice-query/static-slice-query-executor.js +2 -2
- package/queries/catalog/static-slice-query/static-slice-query-format.d.ts +1 -1
- package/queries/catalog/static-slice-query/static-slice-query-format.js +13 -1
- package/queries/query.d.ts +26 -18
- package/queries/query.js +21 -1
- package/r-bridge/lang-4.x/ast/model/collect.d.ts +2 -1
- package/r-bridge/lang-4.x/ast/model/collect.js +4 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-project.d.ts +29 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-project.js +15 -0
- package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +5 -7
- package/r-bridge/lang-4.x/ast/model/processing/decorate.js +24 -11
- package/r-bridge/lang-4.x/ast/model/type.d.ts +2 -0
- package/r-bridge/lang-4.x/ast/model/type.js +2 -0
- package/r-bridge/lang-4.x/ast/parser/json/format.js +1 -1
- package/r-bridge/lang-4.x/ast/parser/json/parser.d.ts +9 -8
- package/r-bridge/lang-4.x/ast/parser/json/parser.js +11 -10
- package/r-bridge/lang-4.x/ast/parser/main/internal/structure/normalize-root.d.ts +4 -3
- package/r-bridge/lang-4.x/ast/parser/main/internal/structure/normalize-root.js +20 -11
- package/r-bridge/lang-4.x/tree-sitter/tree-sitter-executor.d.ts +3 -3
- package/r-bridge/lang-4.x/tree-sitter/tree-sitter-executor.js +5 -4
- package/r-bridge/lang-4.x/tree-sitter/tree-sitter-normalize.d.ts +3 -2
- package/r-bridge/lang-4.x/tree-sitter/tree-sitter-normalize.js +14 -5
- package/r-bridge/parser.d.ts +15 -5
- package/r-bridge/parser.js +27 -13
- package/r-bridge/retriever.d.ts +9 -15
- package/r-bridge/retriever.js +14 -5
- package/r-bridge/shell.d.ts +1 -1
- package/r-bridge/shell.js +1 -1
- package/reconstruct/auto-select/auto-select-defaults.d.ts +0 -1
- package/reconstruct/auto-select/magic-comments.js +1 -1
- package/reconstruct/reconstruct.d.ts +17 -9
- package/reconstruct/reconstruct.js +19 -8
- package/search/flowr-search.d.ts +12 -0
- package/search/search-executor/search-enrichers.d.ts +9 -2
- package/search/search-executor/search-enrichers.js +1 -3
- package/search/search-executor/search-generators.d.ts +1 -1
- package/search/search-executor/search-generators.js +9 -4
- package/slicing/criterion/collect-all.d.ts +3 -2
- package/slicing/criterion/collect-all.js +1 -1
- package/slicing/criterion/parse.js +4 -4
- package/slicing/static/slice-call.d.ts +3 -2
- package/slicing/static/slice-call.js +4 -4
- package/slicing/static/static-slicer.d.ts +3 -1
- package/slicing/static/static-slicer.js +6 -7
- package/statistics/features/supported/assignments/assignments.js +1 -1
- package/statistics/features/supported/control-flow/control-flow.js +2 -2
- package/statistics/features/supported/data-access/data-access.js +1 -1
- package/statistics/features/supported/defined-functions/defined-functions.js +1 -1
- package/statistics/features/supported/expression-list/statistics-expression-list.js +1 -1
- package/statistics/features/supported/loops/loops.js +1 -1
- package/statistics/features/supported/used-functions/used-functions.js +2 -2
- package/statistics/features/supported/variables/variables.js +3 -2
- package/statistics/statistics.js +3 -2
- package/util/assert.d.ts +4 -0
- package/util/assert.js +4 -0
- package/util/containers.js +1 -1
- package/util/files.d.ts +1 -1
- package/util/files.js +1 -1
- package/util/mermaid/ast.d.ts +4 -3
- package/util/mermaid/ast.js +36 -8
- package/util/mermaid/cfg.js +1 -1
- package/util/mermaid/dfg.d.ts +1 -0
- package/util/mermaid/dfg.js +3 -3
- package/util/simple-df/dfg-view.d.ts +2 -1
- package/util/simple-df/dfg-view.js +2 -2
- package/util/version.js +1 -1
- package/dataflow/environments/remove.d.ts +0 -12
- package/dataflow/environments/remove.js +0 -52
- package/documentation/print-analyzer-wiki.d.ts +0 -1
- package/documentation/print-analyzer-wiki.js +0 -141
- package/documentation/print-capabilities-markdown.d.ts +0 -1
- package/documentation/print-cfg-wiki.d.ts +0 -1
- package/documentation/print-core-wiki.d.ts +0 -5
- package/documentation/print-dataflow-graph-wiki.d.ts +0 -1
- package/documentation/print-engines-wiki.d.ts +0 -1
- package/documentation/print-faq-wiki.d.ts +0 -1
- package/documentation/print-faq-wiki.js +0 -18
- package/documentation/print-interface-wiki.d.ts +0 -1
- package/documentation/print-linter-issue.d.ts +0 -1
- package/documentation/print-linter-wiki.d.ts +0 -1
- package/documentation/print-linting-and-testing-wiki.d.ts +0 -1
- package/documentation/print-normalized-ast-wiki.d.ts +0 -1
- package/documentation/print-onboarding-wiki.d.ts +0 -1
- package/documentation/print-query-wiki.d.ts +0 -1
- package/documentation/print-readme.d.ts +0 -1
- package/documentation/print-search-wiki.d.ts +0 -1
- package/documentation/print-search-wiki.js +0 -74
- package/util/formats/adapter-format.d.ts +0 -6
- package/util/formats/adapter-format.js +0 -3
- package/util/formats/adapter.d.ts +0 -27
- package/util/formats/adapter.js +0 -58
- package/util/formats/adapters/r-adapter.d.ts +0 -4
- package/util/formats/adapters/r-adapter.js +0 -7
- package/util/formats/adapters/rmd-adapter.d.ts +0 -35
- package/util/formats/adapters/rmd-adapter.js +0 -100
package/cli/slicer-app.js
CHANGED
|
@@ -15,7 +15,6 @@ const print_1 = require("../benchmark/stats/print");
|
|
|
15
15
|
const magic_comments_1 = require("../reconstruct/auto-select/magic-comments");
|
|
16
16
|
const auto_select_defaults_1 = require("../reconstruct/auto-select/auto-select-defaults");
|
|
17
17
|
const config_1 = require("../config");
|
|
18
|
-
const adapter_1 = require("../util/formats/adapter");
|
|
19
18
|
const options = (0, script_1.processCommandLineArgs)('slicer', ['input', 'criterion'], {
|
|
20
19
|
subtitle: 'Slice R code based on a given slicing criterion',
|
|
21
20
|
examples: [
|
|
@@ -32,8 +31,8 @@ async function getSlice() {
|
|
|
32
31
|
(0, assert_1.guard)(options.criterion !== undefined, 'a slicing criterion must be given');
|
|
33
32
|
const config = (0, config_1.getConfig)();
|
|
34
33
|
await slicer.init(options['input-is-text']
|
|
35
|
-
?
|
|
36
|
-
:
|
|
34
|
+
? { request: 'text', content: options.input.replaceAll('\\n', '\n') }
|
|
35
|
+
: { request: 'file', content: options.input }, config, options['no-magic-comments'] ? auto_select_defaults_1.doNotAutoSelect : (0, magic_comments_1.makeMagicCommentHandler)(auto_select_defaults_1.doNotAutoSelect));
|
|
37
36
|
let mappedSlices = [];
|
|
38
37
|
let reconstruct = undefined;
|
|
39
38
|
const doSlicing = options.criterion.trim() !== '';
|
|
@@ -77,7 +76,7 @@ async function getSlice() {
|
|
|
77
76
|
if (doSlicing && options.diff) {
|
|
78
77
|
let originalCode = options.input;
|
|
79
78
|
if (!options['input-is-text']) {
|
|
80
|
-
const request =
|
|
79
|
+
const request = { request: 'file', content: options.input };
|
|
81
80
|
originalCode = request.request === 'text' ? request.content : fs_1.default.readFileSync(request.content).toString();
|
|
82
81
|
}
|
|
83
82
|
console.log((0, slice_diff_ansi_1.sliceDiffAnsi)(slice.result, normalize, new Set(mappedSlices.map(({ id }) => id)), originalCode));
|
package/cli/wiki.d.ts
ADDED
package/cli/wiki.js
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
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.makeAllWikis = makeAllWikis;
|
|
7
|
+
const doc_context_1 = require("../documentation/wiki-mk/doc-context");
|
|
8
|
+
const shell_1 = require("../r-bridge/shell");
|
|
9
|
+
const tree_sitter_executor_1 = require("../r-bridge/lang-4.x/tree-sitter/tree-sitter-executor");
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
const log_1 = require("../../test/functionality/_helper/log");
|
|
12
|
+
const command_line_usage_1 = __importDefault(require("command-line-usage"));
|
|
13
|
+
const command_line_args_1 = __importDefault(require("command-line-args"));
|
|
14
|
+
const version_1 = require("../util/version");
|
|
15
|
+
const wiki_faq_1 = require("../documentation/wiki-faq");
|
|
16
|
+
const ansi_1 = require("../util/text/ansi");
|
|
17
|
+
const documentation_1 = require("../documentation");
|
|
18
|
+
const wiki_cfg_1 = require("../documentation/wiki-cfg");
|
|
19
|
+
const wiki_onboarding_1 = require("../documentation/wiki-onboarding");
|
|
20
|
+
const wiki_analyzer_1 = require("../documentation/wiki-analyzer");
|
|
21
|
+
const issue_linting_rule_1 = require("../documentation/issue-linting-rule");
|
|
22
|
+
const doc_readme_1 = require("../documentation/doc-readme");
|
|
23
|
+
const wiki_linter_1 = require("../documentation/wiki-linter");
|
|
24
|
+
const os_1 = __importDefault(require("os"));
|
|
25
|
+
const Documents = [
|
|
26
|
+
new wiki_faq_1.WikiFaq(),
|
|
27
|
+
new documentation_1.WikiSearch(),
|
|
28
|
+
new wiki_cfg_1.WikiCfg(),
|
|
29
|
+
new documentation_1.WikiQuery(),
|
|
30
|
+
new wiki_onboarding_1.WikiOnboarding(),
|
|
31
|
+
new wiki_analyzer_1.WikiAnalyzer(),
|
|
32
|
+
new documentation_1.WikiEngine(),
|
|
33
|
+
new documentation_1.WikiNormalizedAst(),
|
|
34
|
+
new documentation_1.WikiCore(),
|
|
35
|
+
new documentation_1.WikiInterface(),
|
|
36
|
+
new documentation_1.WikiDataflowGraph(),
|
|
37
|
+
new documentation_1.WikiLintingAndTesting(),
|
|
38
|
+
new wiki_linter_1.WikiLinter(),
|
|
39
|
+
new issue_linting_rule_1.IssueLintingRule(),
|
|
40
|
+
new doc_readme_1.DocReadme(),
|
|
41
|
+
new documentation_1.DocCapabilities()
|
|
42
|
+
];
|
|
43
|
+
function sortByLeastRecentChanged(wikis) {
|
|
44
|
+
return wikis.slice().sort((a, b) => {
|
|
45
|
+
const aStat = fs_1.default.existsSync(a.getProducer()) ? fs_1.default.statSync(a.getProducer()) : undefined;
|
|
46
|
+
const bStat = fs_1.default.existsSync(b.getProducer()) ? fs_1.default.statSync(b.getProducer()) : undefined;
|
|
47
|
+
const aMTime = aStat ? aStat.mtime.getTime() : 0;
|
|
48
|
+
const bMTime = bStat ? bStat.mtime.getTime() : 0;
|
|
49
|
+
return bMTime - aMTime;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Updates and optionally re-creates all flowR wikis.
|
|
54
|
+
*/
|
|
55
|
+
async function makeAllWikis(force, filter) {
|
|
56
|
+
const setupStart = new Date();
|
|
57
|
+
console.log('Setting up wiki generation...');
|
|
58
|
+
const shell = new shell_1.RShell();
|
|
59
|
+
console.log(' * R shell initialized');
|
|
60
|
+
await tree_sitter_executor_1.TreeSitterExecutor.initTreeSitter();
|
|
61
|
+
const treeSitter = new tree_sitter_executor_1.TreeSitterExecutor();
|
|
62
|
+
console.log(' * Tree-sitter parser initialized');
|
|
63
|
+
const ctx = (0, doc_context_1.makeDocContextForTypes)(shell);
|
|
64
|
+
console.log(' * Wiki context prepared');
|
|
65
|
+
if (force) {
|
|
66
|
+
console.log(ansi_1.ansiFormatter.format('Forcing wiki regeneration (existing files will be overwritten)', { style: 1 /* FontStyles.Bold */, color: 3 /* Colors.Yellow */, effect: ansi_1.ColorEffect.Foreground }));
|
|
67
|
+
}
|
|
68
|
+
const info = {
|
|
69
|
+
ctx,
|
|
70
|
+
shell, treeSitter,
|
|
71
|
+
force,
|
|
72
|
+
readFileSync(f) {
|
|
73
|
+
try {
|
|
74
|
+
return fs_1.default.readFileSync(f);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
writeFileSync: fs_1.default.writeFileSync
|
|
81
|
+
};
|
|
82
|
+
console.log(`Setup for wiki generation took ${(new Date().getTime() - setupStart.getTime())}ms`);
|
|
83
|
+
const changedWikis = new Set();
|
|
84
|
+
try {
|
|
85
|
+
const sortedDocs = sortByLeastRecentChanged(Documents);
|
|
86
|
+
console.log(`Generating ${sortedDocs.length} wikis/docs, sorted by most recently updated...`);
|
|
87
|
+
for (const doc of sortedDocs) {
|
|
88
|
+
const type = doc.getTarget().toLowerCase().includes('wiki') ? 'Wiki' : 'Doc';
|
|
89
|
+
if (filter && !filter.some(f => doc.getTarget().includes(f))) {
|
|
90
|
+
console.log(` * Skipping ${type} (filtered out): ${doc.getTarget()}`);
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
const now = new Date();
|
|
94
|
+
console.log(ansi_1.ansiFormatter.format(` [${doc.getTarget()}] Updating ${type}...`, { style: 1 /* FontStyles.Bold */, color: 6 /* Colors.Cyan */, effect: ansi_1.ColorEffect.Foreground }));
|
|
95
|
+
const changed = await doc.make(info);
|
|
96
|
+
const text = changed ? `${type} updated` : `${type} identical, no changes made`;
|
|
97
|
+
if (changed) {
|
|
98
|
+
changedWikis.add(doc.getTarget());
|
|
99
|
+
}
|
|
100
|
+
const color = changed ? 2 /* Colors.Green */ : 7 /* Colors.White */;
|
|
101
|
+
console.log(ansi_1.ansiFormatter.format(` [${doc.getTarget()}] ${text}: ${doc.getTarget()} (took ${new Date().getTime() - now.getTime()}ms)`, { color, effect: ansi_1.ColorEffect.Foreground }));
|
|
102
|
+
for (const out of doc.getWrittenSubfiles()) {
|
|
103
|
+
changedWikis.add(out);
|
|
104
|
+
console.log(` - Also updated: ${out}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
console.error('Error while generating documents:', error);
|
|
110
|
+
}
|
|
111
|
+
finally {
|
|
112
|
+
shell.close();
|
|
113
|
+
}
|
|
114
|
+
console.log('All wikis processed in ' + (new Date().getTime() - setupStart.getTime()) + 'ms');
|
|
115
|
+
console.log(` * Changed ${changedWikis.size} wiki/doc files.`);
|
|
116
|
+
// write a temp file in the os temp dir with the changed wikis
|
|
117
|
+
const filename = `${os_1.default.tmpdir()}/flowr-wiki-changed-files.txt`;
|
|
118
|
+
fs_1.default.writeFileSync(`${filename}`, Array.from(changedWikis).join('\n'));
|
|
119
|
+
console.log(` * List of changed wikis/docs written to ${filename}`);
|
|
120
|
+
}
|
|
121
|
+
if (require.main === module) {
|
|
122
|
+
const wikiOptions = [
|
|
123
|
+
{ name: 'force', alias: 'F', type: Boolean, description: 'Overwrite existing wiki files, even if nothing changes' },
|
|
124
|
+
{ name: 'filter', alias: 'f', type: String, multiple: true, description: 'Only generate wikis whose target path contains the given string' },
|
|
125
|
+
{ name: 'help', alias: 'h', type: Boolean, description: 'Print this usage guide for the wiki generator' },
|
|
126
|
+
{ name: 'keep-alive', type: Boolean, description: 'Keep-alive wiki generator (only sensible with a reloading script like ts-node-dev)' },
|
|
127
|
+
];
|
|
128
|
+
const optionHelp = [
|
|
129
|
+
{
|
|
130
|
+
header: `flowR (version ${(0, version_1.flowrVersion)().toString()})`,
|
|
131
|
+
content: 'Documentation (wiki, issue, ...) generator for flowR'
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
header: 'Synopsis',
|
|
135
|
+
content: [
|
|
136
|
+
'$ wiki {bold --help}',
|
|
137
|
+
'$ wiki {bold --force}',
|
|
138
|
+
'$ wiki {bold --filter} {italic "dataflow"}'
|
|
139
|
+
]
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
header: 'Options',
|
|
143
|
+
optionList: wikiOptions
|
|
144
|
+
}
|
|
145
|
+
];
|
|
146
|
+
(0, log_1.setMinLevelOfAllLogs)(6 /* LogLevel.Fatal */);
|
|
147
|
+
// parse args
|
|
148
|
+
const options = (0, command_line_args_1.default)(wikiOptions);
|
|
149
|
+
if (options.help) {
|
|
150
|
+
console.log((0, command_line_usage_1.default)(optionHelp));
|
|
151
|
+
process.exit(0);
|
|
152
|
+
}
|
|
153
|
+
void makeAllWikis(options.force, options.filter).catch(err => {
|
|
154
|
+
console.error('Error while generating wikis:', err);
|
|
155
|
+
process.exit(1);
|
|
156
|
+
}).then(() => {
|
|
157
|
+
if (options['keep-alive']) {
|
|
158
|
+
console.log('Wiki generator running in keep-alive mode...');
|
|
159
|
+
setInterval(() => {
|
|
160
|
+
// do nothing, just keep alive
|
|
161
|
+
}, 100);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=wiki.js.map
|
package/config.d.ts
CHANGED
|
@@ -98,6 +98,10 @@ export interface FlowrConfigOptions extends MergeableRecord {
|
|
|
98
98
|
};
|
|
99
99
|
};
|
|
100
100
|
};
|
|
101
|
+
readonly project: {
|
|
102
|
+
/** Whether to resolve unknown paths loaded by the r project disk when trying to source/analyze files */
|
|
103
|
+
resolveUnknownPathsOnDisk: boolean;
|
|
104
|
+
};
|
|
101
105
|
/**
|
|
102
106
|
* The engines to use for interacting with R code. Currently, supports {@link TreeSitterEngineConfig} and {@link RShellEngineConfig}.
|
|
103
107
|
* An empty array means all available engines will be used.
|
package/config.js
CHANGED
|
@@ -65,6 +65,9 @@ exports.defaultConfigOptions = {
|
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
},
|
|
68
|
+
project: {
|
|
69
|
+
resolveUnknownPathsOnDisk: true
|
|
70
|
+
},
|
|
68
71
|
engines: [],
|
|
69
72
|
defaultEngine: 'tree-sitter',
|
|
70
73
|
solver: {
|
|
@@ -103,6 +106,9 @@ exports.flowrConfigFileSchema = joi_1.default.object({
|
|
|
103
106
|
}).optional().description('Do you want to overwrite (parts) of the builtin definition?')
|
|
104
107
|
}).optional().description('Semantics regarding how to handle the R environment.')
|
|
105
108
|
}).description('Configure language semantics and how flowR handles them.'),
|
|
109
|
+
project: joi_1.default.object({
|
|
110
|
+
resolveUnknownPathsOnDisk: joi_1.default.boolean().optional().description('Whether to resolve unknown paths loaded by the r project disk when trying to source/analyze files.')
|
|
111
|
+
}).description('Project specific configuration options.'),
|
|
106
112
|
engines: joi_1.default.array().items(joi_1.default.alternatives(joi_1.default.object({
|
|
107
113
|
type: joi_1.default.string().required().valid('tree-sitter').description('Use the tree sitter engine.'),
|
|
108
114
|
wasmPath: joi_1.default.string().optional().description('The path to the tree-sitter-r WASM binary to use. If this is undefined, this uses the default path.'),
|
|
@@ -54,7 +54,13 @@ class CfgConditionalDeadCodeRemoval extends semantic_cfg_guided_visitor_1.Semant
|
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
handleValuesFor(id, valueId) {
|
|
57
|
-
const values = (0, general_1.valueSetGuard)((0, alias_tracking_1.resolveIdToValue)(valueId, {
|
|
57
|
+
const values = (0, general_1.valueSetGuard)((0, alias_tracking_1.resolveIdToValue)(valueId, {
|
|
58
|
+
graph: this.config.dfg,
|
|
59
|
+
full: true,
|
|
60
|
+
idMap: this.config.normalizedAst.idMap,
|
|
61
|
+
resolve: this.config.ctx.config.solver.variables,
|
|
62
|
+
ctx: this.config.ctx,
|
|
63
|
+
}));
|
|
58
64
|
if (values === undefined || values.elements.length !== 1 || values.elements[0].type != 'logical' || !(0, r_value_1.isValue)(values.elements[0].value)) {
|
|
59
65
|
this.unableToCalculateValue(id);
|
|
60
66
|
return;
|
|
@@ -74,7 +80,12 @@ class CfgConditionalDeadCodeRemoval extends semantic_cfg_guided_visitor_1.Semant
|
|
|
74
80
|
if (data.call.args.length !== 1 || data.call.args[0] === r_function_call_1.EmptyArgument) {
|
|
75
81
|
return undefined;
|
|
76
82
|
}
|
|
77
|
-
const values = (0, general_1.valueSetGuard)((0, alias_tracking_1.resolveIdToValue)(data.call.args[0].nodeId, {
|
|
83
|
+
const values = (0, general_1.valueSetGuard)((0, alias_tracking_1.resolveIdToValue)(data.call.args[0].nodeId, {
|
|
84
|
+
graph: this.config.dfg,
|
|
85
|
+
full: true,
|
|
86
|
+
idMap: this.config.normalizedAst.idMap,
|
|
87
|
+
ctx: this.config.ctx,
|
|
88
|
+
}));
|
|
78
89
|
if (values === undefined || values.elements.length !== 1 || values.elements[0].type != 'logical' || !(0, r_value_1.isValue)(values.elements[0].value)) {
|
|
79
90
|
return undefined;
|
|
80
91
|
}
|
|
@@ -115,7 +126,7 @@ function cfgAnalyzeDeadCode(cfg, info) {
|
|
|
115
126
|
controlFlow: cfg,
|
|
116
127
|
normalizedAst: info.ast,
|
|
117
128
|
dfg: info.dfg,
|
|
118
|
-
|
|
129
|
+
ctx: info.ctx,
|
|
119
130
|
defaultVisitingOrder: 'forward',
|
|
120
131
|
});
|
|
121
132
|
visitor.start();
|
|
@@ -3,13 +3,16 @@ import type { NormalizedAst } from '../r-bridge/lang-4.x/ast/model/processing/de
|
|
|
3
3
|
import type { DataflowGraph } from '../dataflow/graph/graph';
|
|
4
4
|
import type { NodeId } from '../r-bridge/lang-4.x/ast/model/processing/node-id';
|
|
5
5
|
import { cfgAnalyzeDeadCode } from './cfg-dead-code';
|
|
6
|
-
import type {
|
|
6
|
+
import type { ReadOnlyFlowrAnalyzerContext } from '../project/context/flowr-analyzer-context';
|
|
7
7
|
export interface CfgPassInfo {
|
|
8
8
|
ast?: NormalizedAst;
|
|
9
9
|
dfg?: DataflowGraph;
|
|
10
|
-
|
|
10
|
+
ctx: ReadOnlyFlowrAnalyzerContext;
|
|
11
11
|
}
|
|
12
12
|
export type CfgSimplificationPass = (cfg: ControlFlowInformation, info: CfgPassInfo) => ControlFlowInformation;
|
|
13
|
+
/**
|
|
14
|
+
* All available control flow graph simplification passes.
|
|
15
|
+
*/
|
|
13
16
|
export declare const CfgSimplificationPasses: {
|
|
14
17
|
readonly 'unique-cf-sets': typeof uniqueControlFlowSets;
|
|
15
18
|
readonly 'analyze-dead-code': typeof cfgAnalyzeDeadCode;
|
|
@@ -6,6 +6,9 @@ exports.cfgFindAllReachable = cfgFindAllReachable;
|
|
|
6
6
|
const cfg_to_basic_blocks_1 = require("./cfg-to-basic-blocks");
|
|
7
7
|
const simple_visitor_1 = require("./simple-visitor");
|
|
8
8
|
const cfg_dead_code_1 = require("./cfg-dead-code");
|
|
9
|
+
/**
|
|
10
|
+
* All available control flow graph simplification passes.
|
|
11
|
+
*/
|
|
9
12
|
exports.CfgSimplificationPasses = {
|
|
10
13
|
'unique-cf-sets': uniqueControlFlowSets,
|
|
11
14
|
'analyze-dead-code': cfg_dead_code_1.cfgAnalyzeDeadCode,
|
|
@@ -1,24 +1,30 @@
|
|
|
1
1
|
import { type QuadSerializationConfiguration } from '../util/quads';
|
|
2
|
+
import type { NodeId } from '../r-bridge/lang-4.x/ast/model/processing/node-id';
|
|
2
3
|
import type { NormalizedAst, ParentInformation } from '../r-bridge/lang-4.x/ast/model/processing/decorate';
|
|
3
4
|
import type { DataflowGraph } from '../dataflow/graph/graph';
|
|
5
|
+
import type { DataflowGraphVertexFunctionCall } from '../dataflow/graph/vertex';
|
|
4
6
|
import { type ControlFlowInformation } from './control-flow-graph';
|
|
5
7
|
import { type CfgSimplificationPassName } from './cfg-simplification';
|
|
6
|
-
import type {
|
|
8
|
+
import type { ReadOnlyFlowrAnalyzerContext } from '../project/context/flowr-analyzer-context';
|
|
7
9
|
/**
|
|
8
10
|
* Given a normalized AST, this approximates the control flow graph of the program.
|
|
9
11
|
* This view is different from the computation of the dataflow graph and may differ,
|
|
10
12
|
* especially because it focuses on intra-procedural analysis.
|
|
11
13
|
* @param ast - the normalized AST
|
|
12
|
-
* @param
|
|
14
|
+
* @param ctx - the flowR context
|
|
13
15
|
* @param graph - additional dataflow facts to consider by the control flow extraction
|
|
14
16
|
* @param simplifications - a list of simplification passes to apply to the control flow graph
|
|
15
17
|
* @see {@link extractCfgQuick} - for a simplified version of this function
|
|
16
18
|
*/
|
|
17
|
-
export declare function extractCfg<Info = ParentInformation>(ast: NormalizedAst<Info & ParentInformation>,
|
|
19
|
+
export declare function extractCfg<Info = ParentInformation>(ast: NormalizedAst<Info & ParentInformation>, ctx: ReadOnlyFlowrAnalyzerContext, graph?: DataflowGraph, simplifications?: readonly CfgSimplificationPassName[]): ControlFlowInformation;
|
|
18
20
|
/**
|
|
19
21
|
* A version of {@link extractCfg} that is much quicker and does not apply any simplifications or dataflow information.
|
|
20
22
|
*/
|
|
21
23
|
export declare function extractCfgQuick<Info = ParentInformation>(ast: NormalizedAst<Info>): ControlFlowInformation<import("./control-flow-graph").CfgSimpleVertex>;
|
|
24
|
+
/**
|
|
25
|
+
* Extracts all function call vertices from the given control flow information and dataflow graph.
|
|
26
|
+
*/
|
|
27
|
+
export declare function getCallsInCfg(cfg: ControlFlowInformation, graph: DataflowGraph): Map<NodeId, Required<DataflowGraphVertexFunctionCall>>;
|
|
22
28
|
export declare const ResolvedCallSuffix = "-resolved-call-exit";
|
|
23
29
|
/**
|
|
24
30
|
* Convert a cfg to RDF quads.
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ResolvedCallSuffix = void 0;
|
|
4
4
|
exports.extractCfg = extractCfg;
|
|
5
5
|
exports.extractCfgQuick = extractCfgQuick;
|
|
6
|
+
exports.getCallsInCfg = getCallsInCfg;
|
|
6
7
|
exports.cfg2quads = cfg2quads;
|
|
7
8
|
const quads_1 = require("../util/quads");
|
|
8
9
|
const fold_1 = require("../r-bridge/lang-4.x/ast/model/processing/fold");
|
|
@@ -56,19 +57,58 @@ function dataflowCfgFolds(dataflowGraph) {
|
|
|
56
57
|
* This view is different from the computation of the dataflow graph and may differ,
|
|
57
58
|
* especially because it focuses on intra-procedural analysis.
|
|
58
59
|
* @param ast - the normalized AST
|
|
59
|
-
* @param
|
|
60
|
+
* @param ctx - the flowR context
|
|
60
61
|
* @param graph - additional dataflow facts to consider by the control flow extraction
|
|
61
62
|
* @param simplifications - a list of simplification passes to apply to the control flow graph
|
|
62
63
|
* @see {@link extractCfgQuick} - for a simplified version of this function
|
|
63
64
|
*/
|
|
64
|
-
function extractCfg(ast,
|
|
65
|
-
return (0, cfg_simplification_1.simplifyControlFlowInformation)((
|
|
65
|
+
function extractCfg(ast, ctx, graph, simplifications) {
|
|
66
|
+
return (0, cfg_simplification_1.simplifyControlFlowInformation)(cfgFoldProject(ast.ast, graph ? dataflowCfgFolds(graph) : cfgFolds), { ast, dfg: graph, ctx }, simplifications);
|
|
66
67
|
}
|
|
67
68
|
/**
|
|
68
69
|
* A version of {@link extractCfg} that is much quicker and does not apply any simplifications or dataflow information.
|
|
69
70
|
*/
|
|
70
71
|
function extractCfgQuick(ast) {
|
|
71
|
-
return (
|
|
72
|
+
return cfgFoldProject(ast.ast, cfgFolds);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Extracts all function call vertices from the given control flow information and dataflow graph.
|
|
76
|
+
*/
|
|
77
|
+
function getCallsInCfg(cfg, graph) {
|
|
78
|
+
const calls = new Map();
|
|
79
|
+
for (const vertexId of cfg.graph.vertices().keys()) {
|
|
80
|
+
const vertex = graph.getVertex(vertexId, true);
|
|
81
|
+
if ((0, vertex_1.isFunctionCallVertex)(vertex)) {
|
|
82
|
+
calls.set(vertexId, vertex);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return calls;
|
|
86
|
+
}
|
|
87
|
+
function cfgFoldProject(proj, folds) {
|
|
88
|
+
if (proj.files.length === 0) {
|
|
89
|
+
return (0, control_flow_graph_1.emptyControlFlowInformation)();
|
|
90
|
+
}
|
|
91
|
+
else if (proj.files.length === 1) {
|
|
92
|
+
return (0, fold_1.foldAst)(proj.files[0].root, folds);
|
|
93
|
+
}
|
|
94
|
+
const perProject = proj.files.map(file => (0, fold_1.foldAst)(file.root, folds));
|
|
95
|
+
const finalGraph = perProject[0].graph;
|
|
96
|
+
for (let i = 1; i < perProject.length; i++) {
|
|
97
|
+
finalGraph.mergeWith(perProject[i].graph);
|
|
98
|
+
for (const exitPoint of perProject[i - 1].exitPoints) {
|
|
99
|
+
for (const entryPoint of perProject[i].entryPoints) {
|
|
100
|
+
finalGraph.addEdge(entryPoint, exitPoint, { label: 0 /* CfgEdgeType.Fd */ });
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
breaks: perProject.flatMap(e => e.breaks),
|
|
106
|
+
nexts: perProject.flatMap(e => e.nexts),
|
|
107
|
+
returns: perProject.flatMap(e => e.returns),
|
|
108
|
+
exitPoints: perProject[perProject.length - 1].exitPoints,
|
|
109
|
+
entryPoints: perProject[0].entryPoints,
|
|
110
|
+
graph: finalGraph
|
|
111
|
+
};
|
|
72
112
|
}
|
|
73
113
|
function cfgLeaf(type) {
|
|
74
114
|
return ({ info: { id } }) => {
|
|
@@ -13,9 +13,9 @@ import type { NoInfo, RNode } from '../r-bridge/lang-4.x/ast/model/model';
|
|
|
13
13
|
import type { RSymbol } from '../r-bridge/lang-4.x/ast/model/nodes/r-symbol';
|
|
14
14
|
import type { BuiltInProcessorMapper } from '../dataflow/environments/built-in';
|
|
15
15
|
import type { RExpressionList } from '../r-bridge/lang-4.x/ast/model/nodes/r-expression-list';
|
|
16
|
-
import type {
|
|
16
|
+
import type { ReadOnlyFlowrAnalyzerContext } from '../project/context/flowr-analyzer-context';
|
|
17
17
|
export interface SemanticCfgGuidedVisitorConfiguration<OtherInfo = NoInfo, ControlFlow extends ControlFlowInformation = ControlFlowInformation, Ast extends NormalizedAst<OtherInfo> = NormalizedAst<OtherInfo>, Dfg extends DataflowGraph = DataflowGraph> extends DataflowCfgGuidedVisitorConfiguration<ControlFlow, Dfg>, SyntaxCfgGuidedVisitorConfiguration<OtherInfo, ControlFlow, Ast> {
|
|
18
|
-
readonly
|
|
18
|
+
readonly ctx: ReadOnlyFlowrAnalyzerContext;
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
21
|
* This visitor extends on the {@link DataflowAwareCfgGuidedVisitor} by dispatching visitors for separate function calls as well,
|
|
@@ -17,7 +17,7 @@ function visitCfgInReverseOrder(graph, startNodes,
|
|
|
17
17
|
// eslint-disable-next-line @typescript-eslint/no-invalid-void-type -- void is used to indicate that the return value is ignored/we never stop
|
|
18
18
|
visitor) {
|
|
19
19
|
const visited = new Set();
|
|
20
|
-
let queue =
|
|
20
|
+
let queue = startNodes.slice();
|
|
21
21
|
const hasBb = graph.mayHaveBasicBlocks();
|
|
22
22
|
while (queue.length > 0) {
|
|
23
23
|
const current = queue.pop();
|
|
@@ -36,7 +36,7 @@ visitor) {
|
|
|
36
36
|
}
|
|
37
37
|
const incoming = graph.outgoingEdges(current);
|
|
38
38
|
if (incoming) {
|
|
39
|
-
queue.
|
|
39
|
+
queue = queue.concat(incoming.keys().toArray());
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { FlowrConfigOptions } from '../config';
|
|
2
1
|
import type { DataflowGraph } from '../dataflow/graph/graph';
|
|
3
2
|
import type { NormalizedAst } from '../r-bridge/lang-4.x/ast/model/processing/decorate';
|
|
4
3
|
import type { NodeId } from '../r-bridge/lang-4.x/ast/model/processing/node-id';
|
|
5
4
|
import type { ControlFlowInformation } from './control-flow-graph';
|
|
5
|
+
import type { ReadOnlyFlowrAnalyzerContext } from '../project/context/flowr-analyzer-context';
|
|
6
6
|
export declare const loopyFunctions: Set<"builtin:default" | "builtin:eval" | "builtin:apply" | "builtin:expression-list" | "builtin:source" | "builtin:access" | "builtin:if-then-else" | "builtin:get" | "builtin:rm" | "builtin:library" | "builtin:assignment" | "builtin:special-bin-op" | "builtin:pipe" | "builtin:function-definition" | "builtin:quote" | "builtin:for-loop" | "builtin:repeat-loop" | "builtin:while-loop" | "builtin:replacement" | "builtin:list" | "builtin:vector">;
|
|
7
7
|
/**
|
|
8
8
|
* Checks whether a loop only loops once
|
|
@@ -10,7 +10,7 @@ export declare const loopyFunctions: Set<"builtin:default" | "builtin:eval" | "b
|
|
|
10
10
|
* @param dataflow - dataflow graph
|
|
11
11
|
* @param controlflow - control flow graph
|
|
12
12
|
* @param ast - normalized ast
|
|
13
|
-
* @param
|
|
13
|
+
* @param ctx - current flowr analyzer context
|
|
14
14
|
* @returns true if the given loop only iterates once
|
|
15
15
|
*/
|
|
16
|
-
export declare function onlyLoopsOnce(loop: NodeId, dataflow: DataflowGraph, controlflow: ControlFlowInformation, ast: NormalizedAst,
|
|
16
|
+
export declare function onlyLoopsOnce(loop: NodeId, dataflow: DataflowGraph, controlflow: ControlFlowInformation, ast: NormalizedAst, ctx: ReadOnlyFlowrAnalyzerContext): boolean | undefined;
|
|
@@ -17,10 +17,10 @@ exports.loopyFunctions = new Set(['builtin:for-loop', 'builtin:while-loop', 'bui
|
|
|
17
17
|
* @param dataflow - dataflow graph
|
|
18
18
|
* @param controlflow - control flow graph
|
|
19
19
|
* @param ast - normalized ast
|
|
20
|
-
* @param
|
|
20
|
+
* @param ctx - current flowr analyzer context
|
|
21
21
|
* @returns true if the given loop only iterates once
|
|
22
22
|
*/
|
|
23
|
-
function onlyLoopsOnce(loop, dataflow, controlflow, ast,
|
|
23
|
+
function onlyLoopsOnce(loop, dataflow, controlflow, ast, ctx) {
|
|
24
24
|
const vertex = dataflow.getVertex(loop);
|
|
25
25
|
if (!vertex) {
|
|
26
26
|
return undefined;
|
|
@@ -36,7 +36,12 @@ function onlyLoopsOnce(loop, dataflow, controlflow, ast, config) {
|
|
|
36
36
|
if (vectorOfLoop === r_function_call_1.EmptyArgument) {
|
|
37
37
|
return undefined;
|
|
38
38
|
}
|
|
39
|
-
const values = (0, general_1.valueSetGuard)((0, alias_tracking_1.resolveIdToValue)(vectorOfLoop.nodeId, {
|
|
39
|
+
const values = (0, general_1.valueSetGuard)((0, alias_tracking_1.resolveIdToValue)(vectorOfLoop.nodeId, {
|
|
40
|
+
graph: dataflow,
|
|
41
|
+
idMap: dataflow.idMap,
|
|
42
|
+
resolve: ctx.config.solver.variables,
|
|
43
|
+
ctx: ctx
|
|
44
|
+
}));
|
|
40
45
|
if (values === undefined || values.elements.length !== 1 || values.elements[0].type !== 'vector' || !(0, r_value_1.isValue)(values.elements[0].elements)) {
|
|
41
46
|
return undefined;
|
|
42
47
|
}
|
|
@@ -49,7 +54,7 @@ function onlyLoopsOnce(loop, dataflow, controlflow, ast, config) {
|
|
|
49
54
|
controlFlow: controlflow,
|
|
50
55
|
normalizedAst: ast,
|
|
51
56
|
dfg: dataflow,
|
|
52
|
-
|
|
57
|
+
ctx: ctx,
|
|
53
58
|
defaultVisitingOrder: 'forward'
|
|
54
59
|
});
|
|
55
60
|
return visitor.loopsOnlyOnce();
|
|
@@ -67,7 +72,13 @@ class CfgSingleIterationLoopDetector extends semantic_cfg_guided_visitor_1.Seman
|
|
|
67
72
|
if (data.call.args.length !== 1 || data.call.args[0] === r_function_call_1.EmptyArgument) {
|
|
68
73
|
return undefined;
|
|
69
74
|
}
|
|
70
|
-
const values = (0, general_1.valueSetGuard)((0, alias_tracking_1.resolveIdToValue)(data.call.args[0].nodeId, {
|
|
75
|
+
const values = (0, general_1.valueSetGuard)((0, alias_tracking_1.resolveIdToValue)(data.call.args[0].nodeId, {
|
|
76
|
+
graph: this.config.dfg,
|
|
77
|
+
full: true,
|
|
78
|
+
idMap: this.config.normalizedAst.idMap,
|
|
79
|
+
resolve: this.config.ctx.config.solver.variables,
|
|
80
|
+
ctx: this.config.ctx
|
|
81
|
+
}));
|
|
71
82
|
if (values === undefined || values.elements.length !== 1 || values.elements[0].type != 'logical' || !(0, r_value_1.isValue)(values.elements[0].value)) {
|
|
72
83
|
return undefined;
|
|
73
84
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { type PipelineStepName, PipelineStepStage } from './steps/pipeline-step';
|
|
2
2
|
import type { Pipeline, PipelineInput, PipelineOutput, PipelinePerRequestInput, PipelineStepOutputWithName } from './steps/pipeline/pipeline';
|
|
3
|
-
import type { FlowrConfigOptions } from '../config';
|
|
4
3
|
/**
|
|
5
4
|
* **Please note:** The {@link PipelineExecutor} is now considered to be a rather low-level API for flowR. While it still works
|
|
6
5
|
* and is the basis for all other layers, we strongly recommend using the {@link FlowrAnalyzer} and its {@link FlowrAnalyzerBuilder|builder}
|
|
@@ -93,18 +92,16 @@ export declare class PipelineExecutor<P extends Pipeline> {
|
|
|
93
92
|
private output;
|
|
94
93
|
private currentExecutionStage;
|
|
95
94
|
private stepCounter;
|
|
96
|
-
private readonly flowrConfig;
|
|
97
95
|
/**
|
|
98
96
|
* Construct a new pipeline executor.
|
|
99
97
|
* The required additional input is specified by the {@link IPipelineStep#requiredInput|required input configuration} of each step in the `pipeline`.
|
|
100
98
|
*
|
|
101
99
|
* Please see {@link createDataflowPipeline} and friends for engine agnostic shortcuts to create a pipeline executor.
|
|
102
100
|
* And in general, please prefer using the {@link FlowrAnalyzer} and its {@link FlowrAnalyzerBuilder|builder} to create and use an analyzer instance.
|
|
103
|
-
* @param pipeline
|
|
104
|
-
* @param input
|
|
105
|
-
* @param flowrConfig - The flowr config containing the built-in definitions
|
|
101
|
+
* @param pipeline - The {@link Pipeline} to execute, probably created with {@link createPipeline}.
|
|
102
|
+
* @param input - External {@link PipelineInput|configuration and input} required to execute the given pipeline.
|
|
106
103
|
*/
|
|
107
|
-
constructor(pipeline: P, input: PipelineInput<P
|
|
104
|
+
constructor(pipeline: P, input: PipelineInput<P>);
|
|
108
105
|
/**
|
|
109
106
|
* Retrieve the {@link Pipeline|pipeline} that is currently being.
|
|
110
107
|
*/
|
|
@@ -94,22 +94,19 @@ class PipelineExecutor {
|
|
|
94
94
|
output = {};
|
|
95
95
|
currentExecutionStage = 0 /* PipelineStepStage.OncePerFile */;
|
|
96
96
|
stepCounter = 0;
|
|
97
|
-
flowrConfig;
|
|
98
97
|
/**
|
|
99
98
|
* Construct a new pipeline executor.
|
|
100
99
|
* The required additional input is specified by the {@link IPipelineStep#requiredInput|required input configuration} of each step in the `pipeline`.
|
|
101
100
|
*
|
|
102
101
|
* Please see {@link createDataflowPipeline} and friends for engine agnostic shortcuts to create a pipeline executor.
|
|
103
102
|
* And in general, please prefer using the {@link FlowrAnalyzer} and its {@link FlowrAnalyzerBuilder|builder} to create and use an analyzer instance.
|
|
104
|
-
* @param pipeline
|
|
105
|
-
* @param input
|
|
106
|
-
* @param flowrConfig - The flowr config containing the built-in definitions
|
|
103
|
+
* @param pipeline - The {@link Pipeline} to execute, probably created with {@link createPipeline}.
|
|
104
|
+
* @param input - External {@link PipelineInput|configuration and input} required to execute the given pipeline.
|
|
107
105
|
*/
|
|
108
|
-
constructor(pipeline, input
|
|
106
|
+
constructor(pipeline, input) {
|
|
109
107
|
this.pipeline = pipeline;
|
|
110
108
|
this.length = pipeline.order.length;
|
|
111
109
|
this.input = input;
|
|
112
|
-
this.flowrConfig = flowrConfig;
|
|
113
110
|
}
|
|
114
111
|
/**
|
|
115
112
|
* Retrieve the {@link Pipeline|pipeline} that is currently being.
|
|
@@ -181,7 +178,7 @@ class PipelineExecutor {
|
|
|
181
178
|
if (expectedStepName !== undefined) {
|
|
182
179
|
(0, assert_1.guard)(step.name === expectedStepName, () => `Cannot execute next step, expected step ${JSON.stringify(expectedStepName)} but got ${step.name}.`);
|
|
183
180
|
}
|
|
184
|
-
return [step.name, step.processor(this.output, this.input
|
|
181
|
+
return [step.name, step.processor(this.output, this.input)];
|
|
185
182
|
}
|
|
186
183
|
/**
|
|
187
184
|
* This only makes sense if you have already run a request and want to re-use the per-file results for a new one.
|
|
@@ -3,7 +3,7 @@ import type { NormalizedAst } from '../../r-bridge/lang-4.x/ast/model/processing
|
|
|
3
3
|
/** Should work with larger things as well */
|
|
4
4
|
export declare function normalizedAstToJson(ast: NormalizedAst): string;
|
|
5
5
|
/**
|
|
6
|
-
* Normalized AST to quads serialization
|
|
6
|
+
* Normalized AST to quads serialization this does not have multi-file support
|
|
7
7
|
* @see {@link serialize2quads}
|
|
8
8
|
* @see {@link QuadSerializationConfiguration}
|
|
9
9
|
* @see {@link normalizedAstToMermaid}
|
|
@@ -18,7 +18,7 @@ function normalizedAstToJson(ast) {
|
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
|
-
* Normalized AST to quads serialization
|
|
21
|
+
* Normalized AST to quads serialization this does not have multi-file support
|
|
22
22
|
* @see {@link serialize2quads}
|
|
23
23
|
* @see {@link QuadSerializationConfiguration}
|
|
24
24
|
* @see {@link normalizedAstToMermaid}
|
|
@@ -26,7 +26,7 @@ function normalizedAstToJson(ast) {
|
|
|
26
26
|
* @see {@link printNormalizedAstToMermaidUrl}
|
|
27
27
|
*/
|
|
28
28
|
function normalizedAstToQuads(ast, config) {
|
|
29
|
-
return (0, quads_1.serialize2quads)(ast.ast, config);
|
|
29
|
+
return (0, quads_1.serialize2quads)(ast.ast.files[0].root, config);
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
32
|
* Serialize the normalized AST to mermaid format
|
|
@@ -14,7 +14,7 @@ export declare const PARSE_WITH_R_SHELL_STEP: {
|
|
|
14
14
|
(value: any, replacer?: (this: any, key: string, value: any) => any, space?: string | number): string;
|
|
15
15
|
(value: any, replacer?: (number | string)[] | null, space?: string | number): string;
|
|
16
16
|
};
|
|
17
|
-
readonly 5: (
|
|
17
|
+
readonly 5: (p: import("../../../../r-bridge/parser").ParseStepOutput<string>, config: QuadSerializationConfiguration) => string;
|
|
18
18
|
};
|
|
19
19
|
readonly dependencies: readonly [];
|
|
20
20
|
readonly requiredInput: ParseRequiredInput<string>;
|
|
@@ -13,7 +13,7 @@ exports.PARSE_WITH_R_SHELL_STEP = {
|
|
|
13
13
|
printer: {
|
|
14
14
|
[0 /* StepOutputFormat.Internal */]: print_1.internalPrinter,
|
|
15
15
|
[2 /* StepOutputFormat.Json */]: JSON.stringify,
|
|
16
|
-
[5 /* StepOutputFormat.RdfQuads */]: (
|
|
16
|
+
[5 /* StepOutputFormat.RdfQuads */]: (p, config) => (0, parse_printer_1.parseToQuads)(p.files[0].parsed, config)
|
|
17
17
|
},
|
|
18
18
|
dependencies: [],
|
|
19
19
|
requiredInput: undefined
|