@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/README.md
CHANGED
|
@@ -24,7 +24,7 @@ It offers a wide variety of features, for example:
|
|
|
24
24
|
|
|
25
25
|
```shell
|
|
26
26
|
$ docker run -it --rm eagleoutice/flowr # or npm run flowr
|
|
27
|
-
flowR repl using flowR v2.6.
|
|
27
|
+
flowR repl using flowR v2.6.3, R grammar v14 (tree-sitter engine)
|
|
28
28
|
R> :query @linter "read.csv(\"/root/x.txt\")"
|
|
29
29
|
```
|
|
30
30
|
|
|
@@ -33,15 +33,15 @@ It offers a wide variety of features, for example:
|
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
```text
|
|
36
|
-
Query: [;1mlinter[0m (
|
|
36
|
+
Query: [;1mlinter[0m (2 ms)
|
|
37
37
|
╰ **Deprecated Functions** (deprecated-functions):
|
|
38
|
-
╰ _Metadata_: <code>{"totalCalls":0,"totalFunctionDefinitions":0,"searchTimeMs":
|
|
38
|
+
╰ _Metadata_: <code>{"totalCalls":0,"totalFunctionDefinitions":0,"searchTimeMs":1,"processTimeMs":0}</code>
|
|
39
39
|
╰ **File Path Validity** (file-path-validity):
|
|
40
40
|
╰ certain:
|
|
41
41
|
╰ Path `/root/x.txt` at 1.1-23
|
|
42
|
-
╰ _Metadata_: <code>{"totalReads":1,"totalUnknown":0,"totalWritesBeforeAlways":0,"totalValid":0,"searchTimeMs":
|
|
42
|
+
╰ _Metadata_: <code>{"totalReads":1,"totalUnknown":0,"totalWritesBeforeAlways":0,"totalValid":0,"searchTimeMs":0,"processTimeMs":0}</code>
|
|
43
43
|
╰ **Seeded Randomness** (seeded-randomness):
|
|
44
|
-
╰ _Metadata_: <code>{"consumerCalls":0,"callsWithFunctionProducers":0,"callsWithAssignmentProducers":0,"callsWithNonConstantProducers":0,"searchTimeMs":0,"processTimeMs":0}</code>
|
|
44
|
+
╰ _Metadata_: <code>{"consumerCalls":0,"callsWithFunctionProducers":0,"callsWithAssignmentProducers":0,"callsWithNonConstantProducers":0,"callsWithOtherBranchProducers":0,"searchTimeMs":0,"processTimeMs":0}</code>
|
|
45
45
|
╰ **Absolute Paths** (absolute-file-paths):
|
|
46
46
|
╰ certain:
|
|
47
47
|
╰ Path `/root/x.txt` at 1.1-23
|
|
@@ -53,12 +53,12 @@ It offers a wide variety of features, for example:
|
|
|
53
53
|
╰ **Network Functions** (network-functions):
|
|
54
54
|
╰ _Metadata_: <code>{"totalCalls":0,"totalFunctionDefinitions":0,"searchTimeMs":0,"processTimeMs":0}</code>
|
|
55
55
|
╰ **Dataframe Access Validation** (dataframe-access-validation):
|
|
56
|
-
╰ _Metadata_: <code>{"numOperations":0,"numAccesses":0,"totalAccessed":0,"searchTimeMs":0,"processTimeMs":
|
|
56
|
+
╰ _Metadata_: <code>{"numOperations":0,"numAccesses":0,"totalAccessed":0,"searchTimeMs":0,"processTimeMs":0}</code>
|
|
57
57
|
╰ **Dead Code** (dead-code):
|
|
58
58
|
╰ _Metadata_: <code>{"consideredNodes":5,"searchTimeMs":0,"processTimeMs":0}</code>
|
|
59
59
|
╰ **Useless Loops** (useless-loop):
|
|
60
60
|
╰ _Metadata_: <code>{"numOfUselessLoops":0,"searchTimeMs":0,"processTimeMs":0}</code>
|
|
61
|
-
[;3mAll queries together required ≈
|
|
61
|
+
[;3mAll queries together required ≈2 ms (1ms accuracy, total 2 ms)[0m[0m
|
|
62
62
|
```
|
|
63
63
|
|
|
64
64
|
|
|
@@ -80,36 +80,36 @@ It offers a wide variety of features, for example:
|
|
|
80
80
|
|
|
81
81
|
_Results (prettified and summarized):_
|
|
82
82
|
|
|
83
|
-
Query: **linter** (
|
|
83
|
+
Query: **linter** (3 ms)\
|
|
84
84
|
╰ **Deprecated Functions** (deprecated-functions):\
|
|
85
|
-
╰ _Metadata_: <code>{"totalCalls":0,"totalFunctionDefinitions":0,"searchTimeMs":
|
|
85
|
+
╰ _Metadata_: <code>{"totalCalls":0,"totalFunctionDefinitions":0,"searchTimeMs":1,"processTimeMs":0}</code>\
|
|
86
86
|
╰ **File Path Validity** (file-path-validity):\
|
|
87
87
|
╰ certain:\
|
|
88
88
|
╰ Path `/root/x.txt` at 1.1-23\
|
|
89
|
-
╰ _Metadata_: <code>{"totalReads":1,"totalUnknown":0,"totalWritesBeforeAlways":0,"totalValid":0,"searchTimeMs":
|
|
89
|
+
╰ _Metadata_: <code>{"totalReads":1,"totalUnknown":0,"totalWritesBeforeAlways":0,"totalValid":0,"searchTimeMs":1,"processTimeMs":0}</code>\
|
|
90
90
|
╰ **Seeded Randomness** (seeded-randomness):\
|
|
91
|
-
╰ _Metadata_: <code>{"consumerCalls":0,"callsWithFunctionProducers":0,"callsWithAssignmentProducers":0,"callsWithNonConstantProducers":0,"searchTimeMs":0,"processTimeMs":0}</code>\
|
|
91
|
+
╰ _Metadata_: <code>{"consumerCalls":0,"callsWithFunctionProducers":0,"callsWithAssignmentProducers":0,"callsWithNonConstantProducers":0,"callsWithOtherBranchProducers":0,"searchTimeMs":0,"processTimeMs":0}</code>\
|
|
92
92
|
╰ **Absolute Paths** (absolute-file-paths):\
|
|
93
93
|
╰ certain:\
|
|
94
94
|
╰ Path `/root/x.txt` at 1.1-23\
|
|
95
|
-
╰ _Metadata_: <code>{"totalConsidered":1,"totalUnknown":0,"searchTimeMs":
|
|
95
|
+
╰ _Metadata_: <code>{"totalConsidered":1,"totalUnknown":0,"searchTimeMs":1,"processTimeMs":0}</code>\
|
|
96
96
|
╰ **Unused Definitions** (unused-definitions):\
|
|
97
97
|
╰ _Metadata_: <code>{"totalConsidered":0,"searchTimeMs":0,"processTimeMs":0}</code>\
|
|
98
98
|
╰ **Naming Convention** (naming-convention):\
|
|
99
99
|
╰ _Metadata_: <code>{"numMatches":0,"numBreak":0,"searchTimeMs":0,"processTimeMs":0}</code>\
|
|
100
100
|
╰ **Network Functions** (network-functions):\
|
|
101
|
-
╰ _Metadata_: <code>{"totalCalls":0,"totalFunctionDefinitions":0,"searchTimeMs":0,"processTimeMs":
|
|
101
|
+
╰ _Metadata_: <code>{"totalCalls":0,"totalFunctionDefinitions":0,"searchTimeMs":0,"processTimeMs":0}</code>\
|
|
102
102
|
╰ **Dataframe Access Validation** (dataframe-access-validation):\
|
|
103
|
-
╰ _Metadata_: <code>{"numOperations":0,"numAccesses":0,"totalAccessed":0,"searchTimeMs":0,"processTimeMs":
|
|
103
|
+
╰ _Metadata_: <code>{"numOperations":0,"numAccesses":0,"totalAccessed":0,"searchTimeMs":0,"processTimeMs":0}</code>\
|
|
104
104
|
╰ **Dead Code** (dead-code):\
|
|
105
|
-
╰ _Metadata_: <code>{"consideredNodes":5,"searchTimeMs":0,"processTimeMs":
|
|
105
|
+
╰ _Metadata_: <code>{"consideredNodes":5,"searchTimeMs":0,"processTimeMs":0}</code>\
|
|
106
106
|
╰ **Useless Loops** (useless-loop):\
|
|
107
107
|
╰ _Metadata_: <code>{"numOfUselessLoops":0,"searchTimeMs":0,"processTimeMs":0}</code>\
|
|
108
|
-
_All queries together required ≈
|
|
108
|
+
_All queries together required ≈3 ms (1ms accuracy, total 3 ms)_
|
|
109
109
|
|
|
110
110
|
<details> <summary style="color:gray">Show Detailed Results as Json</summary>
|
|
111
111
|
|
|
112
|
-
The analysis required
|
|
112
|
+
The analysis required _3.2 ms_ (including parsing and normalization and the query) within the generation environment.
|
|
113
113
|
|
|
114
114
|
In general, the JSON contains the Ids of the nodes in question as they are present in the normalized AST or the dataflow graph of flowR.
|
|
115
115
|
Please consult the [Interface](https://github.com/flowr-analysis/flowr/wiki/Interface) wiki page for more information on how to get those.
|
|
@@ -126,7 +126,7 @@ It offers a wide variety of features, for example:
|
|
|
126
126
|
".meta": {
|
|
127
127
|
"totalCalls": 0,
|
|
128
128
|
"totalFunctionDefinitions": 0,
|
|
129
|
-
"searchTimeMs":
|
|
129
|
+
"searchTimeMs": 1,
|
|
130
130
|
"processTimeMs": 0
|
|
131
131
|
}
|
|
132
132
|
},
|
|
@@ -148,8 +148,8 @@ It offers a wide variety of features, for example:
|
|
|
148
148
|
"totalUnknown": 0,
|
|
149
149
|
"totalWritesBeforeAlways": 0,
|
|
150
150
|
"totalValid": 0,
|
|
151
|
-
"searchTimeMs":
|
|
152
|
-
"processTimeMs":
|
|
151
|
+
"searchTimeMs": 1,
|
|
152
|
+
"processTimeMs": 0
|
|
153
153
|
}
|
|
154
154
|
},
|
|
155
155
|
"seeded-randomness": {
|
|
@@ -159,6 +159,7 @@ It offers a wide variety of features, for example:
|
|
|
159
159
|
"callsWithFunctionProducers": 0,
|
|
160
160
|
"callsWithAssignmentProducers": 0,
|
|
161
161
|
"callsWithNonConstantProducers": 0,
|
|
162
|
+
"callsWithOtherBranchProducers": 0,
|
|
162
163
|
"searchTimeMs": 0,
|
|
163
164
|
"processTimeMs": 0
|
|
164
165
|
}
|
|
@@ -179,8 +180,8 @@ It offers a wide variety of features, for example:
|
|
|
179
180
|
".meta": {
|
|
180
181
|
"totalConsidered": 1,
|
|
181
182
|
"totalUnknown": 0,
|
|
182
|
-
"searchTimeMs":
|
|
183
|
-
"processTimeMs":
|
|
183
|
+
"searchTimeMs": 1,
|
|
184
|
+
"processTimeMs": 0
|
|
184
185
|
}
|
|
185
186
|
},
|
|
186
187
|
"unused-definitions": {
|
|
@@ -206,7 +207,7 @@ It offers a wide variety of features, for example:
|
|
|
206
207
|
"totalCalls": 0,
|
|
207
208
|
"totalFunctionDefinitions": 0,
|
|
208
209
|
"searchTimeMs": 0,
|
|
209
|
-
"processTimeMs":
|
|
210
|
+
"processTimeMs": 0
|
|
210
211
|
}
|
|
211
212
|
},
|
|
212
213
|
"dataframe-access-validation": {
|
|
@@ -216,7 +217,7 @@ It offers a wide variety of features, for example:
|
|
|
216
217
|
"numAccesses": 0,
|
|
217
218
|
"totalAccessed": 0,
|
|
218
219
|
"searchTimeMs": 0,
|
|
219
|
-
"processTimeMs":
|
|
220
|
+
"processTimeMs": 0
|
|
220
221
|
}
|
|
221
222
|
},
|
|
222
223
|
"dead-code": {
|
|
@@ -224,7 +225,7 @@ It offers a wide variety of features, for example:
|
|
|
224
225
|
".meta": {
|
|
225
226
|
"consideredNodes": 5,
|
|
226
227
|
"searchTimeMs": 0,
|
|
227
|
-
"processTimeMs":
|
|
228
|
+
"processTimeMs": 0
|
|
228
229
|
}
|
|
229
230
|
},
|
|
230
231
|
"useless-loop": {
|
|
@@ -237,11 +238,11 @@ It offers a wide variety of features, for example:
|
|
|
237
238
|
}
|
|
238
239
|
},
|
|
239
240
|
".meta": {
|
|
240
|
-
"timing":
|
|
241
|
+
"timing": 3
|
|
241
242
|
}
|
|
242
243
|
},
|
|
243
244
|
".meta": {
|
|
244
|
-
"timing":
|
|
245
|
+
"timing": 3
|
|
245
246
|
}
|
|
246
247
|
}
|
|
247
248
|
```
|
|
@@ -306,8 +307,8 @@ It offers a wide variety of features, for example:
|
|
|
306
307
|
|
|
307
308
|
```shell
|
|
308
309
|
$ docker run -it --rm eagleoutice/flowr # or npm run flowr
|
|
309
|
-
flowR repl using flowR v2.6.
|
|
310
|
-
R> :
|
|
310
|
+
flowR repl using flowR v2.6.3, R grammar v14 (tree-sitter engine)
|
|
311
|
+
R> :query @static-slice (11@sum) file://test/testfiles/example.R
|
|
311
312
|
```
|
|
312
313
|
|
|
313
314
|
<details>
|
|
@@ -320,6 +321,7 @@ It offers a wide variety of features, for example:
|
|
|
320
321
|
N <- 10
|
|
321
322
|
for(i in 1:(N-1)) sum <- sum + i + w
|
|
322
323
|
sum
|
|
324
|
+
[;3mAll queries together required ≈2 ms (1ms accuracy, total 2 ms)[0m[0m
|
|
323
325
|
```
|
|
324
326
|
|
|
325
327
|
|
|
@@ -353,7 +355,7 @@ It offers a wide variety of features, for example:
|
|
|
353
355
|
|
|
354
356
|
|
|
355
357
|
* 🚀 **fast data- and control-flow graphs**\
|
|
356
|
-
Within just <i><span title="This measurement is automatically fetched from the latest benchmark!">
|
|
358
|
+
Within just <i><span title="This measurement is automatically fetched from the latest benchmark!">125 ms</span></i> (as of Nov 25, 2025),
|
|
357
359
|
_flowR_ can analyze the data- and control-flow of the average real-world R script. See the [benchmarks](https://flowr-analysis.github.io/flowr/wiki/stats/benchmark) for more information,
|
|
358
360
|
and consult the [wiki pages](https://github.com/flowr-analysis/flowr/wiki/Dataflow-Graph) for more details on the dataflow graph.
|
|
359
361
|
|
|
@@ -389,7 +391,7 @@ It offers a wide variety of features, for example:
|
|
|
389
391
|
|
|
390
392
|
```shell
|
|
391
393
|
$ docker run -it --rm eagleoutice/flowr # or npm run flowr
|
|
392
|
-
flowR repl using flowR v2.6.
|
|
394
|
+
flowR repl using flowR v2.6.3, R grammar v14 (tree-sitter engine)
|
|
393
395
|
R> :dataflow* test/testfiles/example.R
|
|
394
396
|
```
|
|
395
397
|
|
|
@@ -694,7 +696,7 @@ It offers a wide variety of features, for example:
|
|
|
694
696
|
```
|
|
695
697
|
|
|
696
698
|
|
|
697
|
-
(The analysis required
|
|
699
|
+
(The analysis required _2.1 ms_ (including parse and normalize, using the [tree-sitter](https://github.com/flowr-analysis/flowr/wiki/Engines) engine) within the generation environment.)
|
|
698
700
|
|
|
699
701
|
|
|
700
702
|
|
|
@@ -873,6 +875,6 @@ It is partially supported by the German Research Foundation (DFG) under the gran
|
|
|
873
875
|
|
|
874
876
|
### Generation Notice
|
|
875
877
|
|
|
876
|
-
Please notice that this file was generated automatically using the file [src/documentation/
|
|
878
|
+
Please notice that this file was generated automatically using the file [src/documentation/doc-readme.ts](https://github.com/flowr-analysis/flowr/tree/main//src/documentation/doc-readme.ts) as a source.\
|
|
877
879
|
If you want to make changes please edit the source file (the CI will take care of the rest).
|
|
878
|
-
In fact, many files in the [wiki](https://github.com/flowr-analysis/flowr/wiki) are generated, so make sure to check for the source file if you want to make changes.
|
|
880
|
+
In fact, many files in the [wiki](https://github.com/flowr-analysis/flowr/wiki) are generated, so make sure to check for the source file if you want to make changes.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type CfgBasicBlockVertex, type CfgSimpleVertex, type ControlFlowInformation } from '../../control-flow/control-flow-graph';
|
|
2
|
-
import { type SemanticCfgGuidedVisitorConfiguration
|
|
2
|
+
import { SemanticCfgGuidedVisitor, type SemanticCfgGuidedVisitorConfiguration } from '../../control-flow/semantic-cfg-guided-visitor';
|
|
3
3
|
import type { DataflowGraph } from '../../dataflow/graph/graph';
|
|
4
4
|
import type { DataflowGraphVertexFunctionCall, DataflowGraphVertexVariableDefinition } from '../../dataflow/graph/vertex';
|
|
5
5
|
import type { NoInfo } from '../../r-bridge/lang-4.x/ast/model/model';
|
|
@@ -72,7 +72,7 @@ class DataFrameShapeInferenceVisitor extends semantic_cfg_guided_visitor_1.Seman
|
|
|
72
72
|
const targetNode = this.getNormalizedAst(target);
|
|
73
73
|
const sourceNode = this.getNormalizedAst(source);
|
|
74
74
|
if (node !== undefined && (0, assignment_mapper_1.isAssignmentTarget)(targetNode) && sourceNode !== undefined) {
|
|
75
|
-
node.info.dataFrame = (0, assignment_mapper_1.mapDataFrameVariableAssignment)(targetNode, sourceNode, this.config.dfg);
|
|
75
|
+
node.info.dataFrame = (0, assignment_mapper_1.mapDataFrameVariableAssignment)(targetNode, sourceNode, this.config.dfg, this.config.ctx);
|
|
76
76
|
this.applyDataFrameAssignment(node);
|
|
77
77
|
this.clearUnassignedInfo(targetNode);
|
|
78
78
|
}
|
|
@@ -80,14 +80,14 @@ class DataFrameShapeInferenceVisitor extends semantic_cfg_guided_visitor_1.Seman
|
|
|
80
80
|
onAccessCall({ call }) {
|
|
81
81
|
const node = this.getNormalizedAst(call.id);
|
|
82
82
|
if (node !== undefined) {
|
|
83
|
-
node.info.dataFrame = (0, access_mapper_1.mapDataFrameAccess)(node, this.config.dfg);
|
|
83
|
+
node.info.dataFrame = (0, access_mapper_1.mapDataFrameAccess)(node, this.config.dfg, this.config.ctx);
|
|
84
84
|
this.applyDataFrameExpression(node);
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
onDefaultFunctionCall({ call }) {
|
|
88
88
|
const node = this.getNormalizedAst(call.id);
|
|
89
89
|
if (node !== undefined) {
|
|
90
|
-
node.info.dataFrame = (0, function_mapper_1.mapDataFrameFunctionCall)(node, this.config.dfg, this.config.
|
|
90
|
+
node.info.dataFrame = (0, function_mapper_1.mapDataFrameFunctionCall)(node, this.config.dfg, this.config.ctx);
|
|
91
91
|
this.applyDataFrameExpression(node);
|
|
92
92
|
}
|
|
93
93
|
}
|
|
@@ -96,7 +96,7 @@ class DataFrameShapeInferenceVisitor extends semantic_cfg_guided_visitor_1.Seman
|
|
|
96
96
|
const targetNode = this.getNormalizedAst(target);
|
|
97
97
|
const sourceNode = this.getNormalizedAst(source);
|
|
98
98
|
if (node !== undefined && targetNode !== undefined && sourceNode !== undefined) {
|
|
99
|
-
node.info.dataFrame = (0, replacement_mapper_1.mapDataFrameReplacementFunction)(node, sourceNode, this.config.dfg);
|
|
99
|
+
node.info.dataFrame = (0, replacement_mapper_1.mapDataFrameReplacementFunction)(node, sourceNode, this.config.dfg, this.config.ctx);
|
|
100
100
|
this.applyDataFrameExpression(node);
|
|
101
101
|
this.clearUnassignedInfo(targetNode);
|
|
102
102
|
}
|
|
@@ -119,7 +119,7 @@ class DataFrameShapeInferenceVisitor extends semantic_cfg_guided_visitor_1.Seman
|
|
|
119
119
|
if (!(0, absint_info_1.hasDataFrameExpressionInfo)(node)) {
|
|
120
120
|
return;
|
|
121
121
|
}
|
|
122
|
-
const maxColNames = this.config.
|
|
122
|
+
const maxColNames = this.config.ctx.config.abstractInterpretation.dataFrame.maxColNames;
|
|
123
123
|
let value = dataframe_domain_1.DataFrameDomain.top(maxColNames);
|
|
124
124
|
for (const { operation, operand, type, options, ...args } of node.info.dataFrame.operations) {
|
|
125
125
|
const operandValue = operand !== undefined ? (0, shape_inference_1.resolveIdToDataFrameShape)(operand, this.config.dfg, this.newDomain) : value;
|
|
@@ -159,7 +159,7 @@ class DataFrameShapeInferenceVisitor extends semantic_cfg_guided_visitor_1.Seman
|
|
|
159
159
|
.toArray() ?? [];
|
|
160
160
|
}
|
|
161
161
|
shouldWiden(vertex) {
|
|
162
|
-
return (this.visited.get(vertex.id) ?? 0) >= this.config.
|
|
162
|
+
return (this.visited.get(vertex.id) ?? 0) >= this.config.ctx.config.abstractInterpretation.dataFrame.wideningThreshold;
|
|
163
163
|
}
|
|
164
164
|
clearUnassignedInfo(node) {
|
|
165
165
|
if ((0, absint_info_1.hasDataFrameInfoMarker)(node, absint_info_1.DataFrameInfoMarker.Unassigned)) {
|
|
@@ -2,11 +2,12 @@ import type { NodeId } from '../../r-bridge/lang-4.x/ast/model/processing/node-i
|
|
|
2
2
|
import type { AbstractDomainValue } from '../domains/abstract-domain';
|
|
3
3
|
import { PosIntervalDomain } from '../domains/positive-interval-domain';
|
|
4
4
|
import { ProductDomain } from '../domains/product-domain';
|
|
5
|
-
import {
|
|
5
|
+
import type { SetRangeLimit } from '../domains/set-range-domain';
|
|
6
|
+
import { SetRangeDomain } from '../domains/set-range-domain';
|
|
6
7
|
import { StateAbstractDomain } from '../domains/state-abstract-domain';
|
|
7
8
|
/** The type of the abstract product representing the shape of data frames */
|
|
8
9
|
export type AbstractDataFrameShape = {
|
|
9
|
-
colnames:
|
|
10
|
+
colnames: SetRangeDomain<string>;
|
|
10
11
|
cols: PosIntervalDomain;
|
|
11
12
|
rows: PosIntervalDomain;
|
|
12
13
|
};
|
|
@@ -16,7 +17,7 @@ export type DataFrameShapeProperty<Property extends keyof AbstractDataFrameShape
|
|
|
16
17
|
* The data frame abstract domain as product domain of a column names domain, column count domain, and row count domain.
|
|
17
18
|
*/
|
|
18
19
|
export declare class DataFrameDomain extends ProductDomain<AbstractDataFrameShape> {
|
|
19
|
-
constructor(value: AbstractDataFrameShape, maxColNames?: number);
|
|
20
|
+
constructor(value: AbstractDataFrameShape, maxColNames?: SetRangeLimit | number);
|
|
20
21
|
create(value: AbstractDataFrameShape): this;
|
|
21
22
|
/**
|
|
22
23
|
* The current abstract value of the column names domain.
|
|
@@ -30,10 +31,6 @@ export declare class DataFrameDomain extends ProductDomain<AbstractDataFrameShap
|
|
|
30
31
|
* The current abstract value of the row count domain.
|
|
31
32
|
*/
|
|
32
33
|
get rows(): AbstractDataFrameShape['rows'];
|
|
33
|
-
/**
|
|
34
|
-
* The maximum number of inferred column names of the column names domain.
|
|
35
|
-
*/
|
|
36
|
-
get maxColNames(): number;
|
|
37
34
|
static bottom(maxColNames?: number): DataFrameDomain;
|
|
38
35
|
static top(maxColNames?: number): DataFrameDomain;
|
|
39
36
|
}
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DataFrameStateDomain = exports.DataFrameDomain = void 0;
|
|
4
4
|
const positive_interval_domain_1 = require("../domains/positive-interval-domain");
|
|
5
5
|
const product_domain_1 = require("../domains/product-domain");
|
|
6
|
-
const
|
|
6
|
+
const set_range_domain_1 = require("../domains/set-range-domain");
|
|
7
7
|
const state_abstract_domain_1 = require("../domains/state-abstract-domain");
|
|
8
8
|
/**
|
|
9
9
|
* The data frame abstract domain as product domain of a column names domain, column count domain, and row count domain.
|
|
@@ -11,13 +11,13 @@ const state_abstract_domain_1 = require("../domains/state-abstract-domain");
|
|
|
11
11
|
class DataFrameDomain extends product_domain_1.ProductDomain {
|
|
12
12
|
constructor(value, maxColNames) {
|
|
13
13
|
super({
|
|
14
|
-
colnames: new
|
|
14
|
+
colnames: new set_range_domain_1.SetRangeDomain(value.colnames.value, maxColNames ?? value.colnames.limit),
|
|
15
15
|
cols: new positive_interval_domain_1.PosIntervalDomain(value.cols.value),
|
|
16
16
|
rows: new positive_interval_domain_1.PosIntervalDomain(value.rows.value)
|
|
17
17
|
});
|
|
18
18
|
}
|
|
19
19
|
create(value) {
|
|
20
|
-
return new DataFrameDomain(value, this.
|
|
20
|
+
return new DataFrameDomain(value, this.colnames.limit);
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
23
|
* The current abstract value of the column names domain.
|
|
@@ -37,22 +37,16 @@ class DataFrameDomain extends product_domain_1.ProductDomain {
|
|
|
37
37
|
get rows() {
|
|
38
38
|
return this.value.rows;
|
|
39
39
|
}
|
|
40
|
-
/**
|
|
41
|
-
* The maximum number of inferred column names of the column names domain.
|
|
42
|
-
*/
|
|
43
|
-
get maxColNames() {
|
|
44
|
-
return this.value.colnames.limit;
|
|
45
|
-
}
|
|
46
40
|
static bottom(maxColNames) {
|
|
47
41
|
return new DataFrameDomain({
|
|
48
|
-
colnames:
|
|
42
|
+
colnames: set_range_domain_1.SetRangeDomain.bottom(maxColNames),
|
|
49
43
|
cols: positive_interval_domain_1.PosIntervalDomain.bottom(),
|
|
50
44
|
rows: positive_interval_domain_1.PosIntervalDomain.bottom()
|
|
51
45
|
});
|
|
52
46
|
}
|
|
53
47
|
static top(maxColNames) {
|
|
54
48
|
return new DataFrameDomain({
|
|
55
|
-
colnames:
|
|
49
|
+
colnames: set_range_domain_1.SetRangeDomain.top(maxColNames),
|
|
56
50
|
cols: positive_interval_domain_1.PosIntervalDomain.top(),
|
|
57
51
|
rows: positive_interval_domain_1.PosIntervalDomain.top()
|
|
58
52
|
});
|
|
@@ -3,13 +3,15 @@ import type { RNode } from '../../../r-bridge/lang-4.x/ast/model/model';
|
|
|
3
3
|
import type { RAccess, RNamedAccess } from '../../../r-bridge/lang-4.x/ast/model/nodes/r-access';
|
|
4
4
|
import type { ParentInformation } from '../../../r-bridge/lang-4.x/ast/model/processing/decorate';
|
|
5
5
|
import type { DataFrameExpressionInfo } from '../absint-info';
|
|
6
|
+
import type { ReadOnlyFlowrAnalyzerContext } from '../../../project/context/flowr-analyzer-context';
|
|
6
7
|
/**
|
|
7
8
|
* Maps a concrete data frame access to abstract data frame operations.
|
|
8
9
|
* @param node - The R node of the access
|
|
9
10
|
* @param dfg - The data flow graph for resolving the arguments
|
|
11
|
+
* @param ctx - The read-only Flowr analyzer context
|
|
10
12
|
* @returns Data frame expression info containing the mapped abstract data frame operations, or `undefined` if the node does not represent a data frame access
|
|
11
13
|
*/
|
|
12
|
-
export declare function mapDataFrameAccess(node: RNode<ParentInformation>, dfg: DataflowGraph): DataFrameExpressionInfo | undefined;
|
|
14
|
+
export declare function mapDataFrameAccess(node: RNode<ParentInformation>, dfg: DataflowGraph, ctx: ReadOnlyFlowrAnalyzerContext): DataFrameExpressionInfo | undefined;
|
|
13
15
|
/**
|
|
14
16
|
* Checks whether an access node represents a string-based access (`$` or `@`), and no index-based access (`[` or `[[`).
|
|
15
17
|
*/
|
|
@@ -18,13 +18,14 @@ const SpecialAccessArgumentsMapper = {
|
|
|
18
18
|
* Maps a concrete data frame access to abstract data frame operations.
|
|
19
19
|
* @param node - The R node of the access
|
|
20
20
|
* @param dfg - The data flow graph for resolving the arguments
|
|
21
|
+
* @param ctx - The read-only Flowr analyzer context
|
|
21
22
|
* @returns Data frame expression info containing the mapped abstract data frame operations, or `undefined` if the node does not represent a data frame access
|
|
22
23
|
*/
|
|
23
|
-
function mapDataFrameAccess(node, dfg) {
|
|
24
|
+
function mapDataFrameAccess(node, dfg, ctx) {
|
|
24
25
|
if (node.type !== type_1.RType.Access) {
|
|
25
26
|
return;
|
|
26
27
|
}
|
|
27
|
-
const resolveInfo = { graph: dfg, idMap: dfg.idMap, full: true, resolve: config_1.VariableResolve.Alias };
|
|
28
|
+
const resolveInfo = { graph: dfg, idMap: dfg.idMap, full: true, resolve: config_1.VariableResolve.Alias, ctx };
|
|
28
29
|
let operations;
|
|
29
30
|
if (isStringBasedAccess(node)) {
|
|
30
31
|
operations = mapDataFrameNamedColumnAccess(node, resolveInfo);
|
|
@@ -15,11 +15,11 @@ exports.isValidColName = isValidColName;
|
|
|
15
15
|
const vertex_1 = require("../../../dataflow/graph/vertex");
|
|
16
16
|
const make_argument_1 = require("../../../dataflow/internal/process/functions/call/argument/make-argument");
|
|
17
17
|
const r_function_call_1 = require("../../../r-bridge/lang-4.x/ast/model/nodes/r-function-call");
|
|
18
|
+
const visitor_1 = require("../../../r-bridge/lang-4.x/ast/model/processing/visitor");
|
|
18
19
|
const type_1 = require("../../../r-bridge/lang-4.x/ast/model/type");
|
|
19
20
|
const convert_values_1 = require("../../../r-bridge/lang-4.x/convert-values");
|
|
20
|
-
const shape_inference_1 = require("../shape-inference");
|
|
21
21
|
const resolve_args_1 = require("../resolve-args");
|
|
22
|
-
const
|
|
22
|
+
const shape_inference_1 = require("../shape-inference");
|
|
23
23
|
/** Regular expression representing valid columns names, e.g. for `data.frame` */
|
|
24
24
|
const ColNamesRegex = /^[A-Za-z.][A-Za-z0-9_.]*$/;
|
|
25
25
|
/**
|
|
@@ -4,15 +4,17 @@ import type { RString } from '../../../r-bridge/lang-4.x/ast/model/nodes/r-strin
|
|
|
4
4
|
import type { RSymbol } from '../../../r-bridge/lang-4.x/ast/model/nodes/r-symbol';
|
|
5
5
|
import type { ParentInformation } from '../../../r-bridge/lang-4.x/ast/model/processing/decorate';
|
|
6
6
|
import type { DataFrameAssignmentInfo } from '../absint-info';
|
|
7
|
+
import type { ReadOnlyFlowrAnalyzerContext } from '../../../project/context/flowr-analyzer-context';
|
|
7
8
|
/**
|
|
8
9
|
* Maps a concrete data frame assignment to data frame assignment info containing the ids of the identifier and assigned expression.
|
|
9
10
|
* We currently do not support function assignments dealing with data frames.
|
|
10
11
|
* @param identifier - The R node of the variable identifier
|
|
11
12
|
* @param expression - The R node of the assigned expression
|
|
12
13
|
* @param dfg - The data flow graph for resolving the arguments
|
|
14
|
+
* @param ctx - The analysis context
|
|
13
15
|
* @returns Data frame assignment info containing the IDs of the identifier and expression, or `undefined` if the node does not represent a data frame assignment
|
|
14
16
|
*/
|
|
15
|
-
export declare function mapDataFrameVariableAssignment(identifier: RSymbol<ParentInformation> | RString<ParentInformation>, expression: RNode<ParentInformation>, dfg: DataflowGraph): DataFrameAssignmentInfo | undefined;
|
|
17
|
+
export declare function mapDataFrameVariableAssignment(identifier: RSymbol<ParentInformation> | RString<ParentInformation>, expression: RNode<ParentInformation>, dfg: DataflowGraph, ctx: ReadOnlyFlowrAnalyzerContext): DataFrameAssignmentInfo | undefined;
|
|
16
18
|
/**
|
|
17
19
|
* Checks whether a R node represents an assignment target, i.e. is a `RSymbol` or `RString`.
|
|
18
20
|
*/
|
|
@@ -11,10 +11,11 @@ const arguments_1 = require("./arguments");
|
|
|
11
11
|
* @param identifier - The R node of the variable identifier
|
|
12
12
|
* @param expression - The R node of the assigned expression
|
|
13
13
|
* @param dfg - The data flow graph for resolving the arguments
|
|
14
|
+
* @param ctx - The analysis context
|
|
14
15
|
* @returns Data frame assignment info containing the IDs of the identifier and expression, or `undefined` if the node does not represent a data frame assignment
|
|
15
16
|
*/
|
|
16
|
-
function mapDataFrameVariableAssignment(identifier, expression, dfg) {
|
|
17
|
-
const resolveInfo = { graph: dfg, idMap: dfg.idMap, full: true, resolve: config_1.VariableResolve.Alias };
|
|
17
|
+
function mapDataFrameVariableAssignment(identifier, expression, dfg, ctx) {
|
|
18
|
+
const resolveInfo = { graph: dfg, idMap: dfg.idMap, full: true, resolve: config_1.VariableResolve.Alias, ctx };
|
|
18
19
|
if (!(0, arguments_1.isDataFrameArgument)(expression, resolveInfo)) {
|
|
19
20
|
return;
|
|
20
21
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type FlowrConfigOptions } from '../../../config';
|
|
2
1
|
import { type ResolveInfo } from '../../../dataflow/eval/resolve/alias-tracking';
|
|
3
2
|
import type { DataflowGraph } from '../../../dataflow/graph/graph';
|
|
3
|
+
import type { ReadOnlyFlowrAnalyzerContext } from '../../../project/context/flowr-analyzer-context';
|
|
4
4
|
import type { RNode } from '../../../r-bridge/lang-4.x/ast/model/model';
|
|
5
5
|
import { type RFunctionArgument } from '../../../r-bridge/lang-4.x/ast/model/nodes/r-function-call';
|
|
6
6
|
import type { ParentInformation } from '../../../r-bridge/lang-4.x/ast/model/processing/decorate';
|
|
@@ -179,12 +179,12 @@ declare const DataFrameFunctionMapper: {
|
|
|
179
179
|
type DataFrameFunction = keyof typeof DataFrameFunctionMapper;
|
|
180
180
|
/**
|
|
181
181
|
* Maps a concrete data frame function call to abstract data frame operations.
|
|
182
|
-
* @param node
|
|
183
|
-
* @param dfg
|
|
184
|
-
* @param
|
|
182
|
+
* @param node - The R node of the function call
|
|
183
|
+
* @param dfg - The data flow graph for resolving the arguments
|
|
184
|
+
* @param ctx - The current flowR analyzer context
|
|
185
185
|
* @returns Data frame expression info containing the mapped abstract data frame operations, or `undefined` if the node does not represent a data frame function call
|
|
186
186
|
*/
|
|
187
|
-
export declare function mapDataFrameFunctionCall<Name extends DataFrameFunction>(node: RNode<ParentInformation>, dfg: DataflowGraph,
|
|
187
|
+
export declare function mapDataFrameFunctionCall<Name extends DataFrameFunction>(node: RNode<ParentInformation>, dfg: DataflowGraph, ctx: ReadOnlyFlowrAnalyzerContext): DataFrameExpressionInfo | undefined;
|
|
188
188
|
declare function mapDataFrameCreate(args: readonly RFunctionArgument<ParentInformation>[], params: {
|
|
189
189
|
checkNames: FunctionParameterLocation<boolean>;
|
|
190
190
|
noDupNames: FunctionParameterLocation<boolean>;
|
|
@@ -204,7 +204,7 @@ declare function mapDataFrameRead(args: readonly RFunctionArgument<ParentInforma
|
|
|
204
204
|
checkNames: FunctionParameterLocation<boolean>;
|
|
205
205
|
noDupNames: FunctionParameterLocation<boolean>;
|
|
206
206
|
noEmptyNames?: boolean;
|
|
207
|
-
}, info: ResolveInfo,
|
|
207
|
+
}, info: ResolveInfo, ctx: ReadOnlyFlowrAnalyzerContext): DataFrameOperation[];
|
|
208
208
|
declare function mapDataFrameColBind(args: readonly RFunctionArgument<ParentInformation>[], params: {
|
|
209
209
|
special: string[];
|
|
210
210
|
}, info: ResolveInfo): DataFrameOperation[] | undefined;
|
|
@@ -251,7 +251,7 @@ declare function mapDataFrameJoin(args: readonly RFunctionArgument<ParentInforma
|
|
|
251
251
|
joinAll: FunctionParameterLocation<boolean>;
|
|
252
252
|
joinLeft: FunctionParameterLocation<boolean>;
|
|
253
253
|
joinRight: FunctionParameterLocation<boolean>;
|
|
254
|
-
}, info: ResolveInfo,
|
|
254
|
+
}, info: ResolveInfo, ctx: ReadOnlyFlowrAnalyzerContext): DataFrameOperation[] | undefined;
|
|
255
255
|
declare function mapDataFrameIdentity(args: readonly RFunctionArgument<ParentInformation>[], params: {
|
|
256
256
|
dataFrame: FunctionParameterLocation;
|
|
257
257
|
special: string[];
|