@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
|
@@ -0,0 +1,132 @@
|
|
|
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.FlowrRMarkdownFile = void 0;
|
|
7
|
+
exports.parseRMarkdownFile = parseRMarkdownFile;
|
|
8
|
+
exports.isRCodeBlock = isRCodeBlock;
|
|
9
|
+
exports.restoreBlocksWithoutMd = restoreBlocksWithoutMd;
|
|
10
|
+
exports.parseCodeBlockOptions = parseCodeBlockOptions;
|
|
11
|
+
const flowr_file_1 = require("../../../context/flowr-file");
|
|
12
|
+
const assert_1 = require("../../../../util/assert");
|
|
13
|
+
const commonmark_1 = require("commonmark");
|
|
14
|
+
const gray_matter_1 = __importDefault(require("gray-matter"));
|
|
15
|
+
/**
|
|
16
|
+
* This decorates a text file and parses its contents as a R Markdown file.
|
|
17
|
+
* Finnaly, it provides access to the single cells, and all cells fused together as one R file.
|
|
18
|
+
*/
|
|
19
|
+
class FlowrRMarkdownFile extends flowr_file_1.FlowrFile {
|
|
20
|
+
data;
|
|
21
|
+
wrapped;
|
|
22
|
+
/**
|
|
23
|
+
* Prefer the static {@link FlowrRMarkdownFile.from} method
|
|
24
|
+
* @param file - the file to load as R Markdown
|
|
25
|
+
*/
|
|
26
|
+
constructor(file) {
|
|
27
|
+
super(file.path(), flowr_file_1.FileRole.Source);
|
|
28
|
+
this.wrapped = file;
|
|
29
|
+
}
|
|
30
|
+
get rmd() {
|
|
31
|
+
if (!this.data) {
|
|
32
|
+
this.loadContent();
|
|
33
|
+
}
|
|
34
|
+
(0, assert_1.guard)(this.data);
|
|
35
|
+
return this.data;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Loads and parses the content of the wrapped file.
|
|
39
|
+
* @returns RmdInfo
|
|
40
|
+
*/
|
|
41
|
+
loadContent() {
|
|
42
|
+
this.data = parseRMarkdownFile(this.wrapped.content());
|
|
43
|
+
return this.data.content;
|
|
44
|
+
}
|
|
45
|
+
static from(file) {
|
|
46
|
+
return file instanceof FlowrRMarkdownFile ? file : new FlowrRMarkdownFile(file);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.FlowrRMarkdownFile = FlowrRMarkdownFile;
|
|
50
|
+
/**
|
|
51
|
+
* Parse the contents of a RMarkdown file into complete code and blocks
|
|
52
|
+
* @param raw - the raw file content
|
|
53
|
+
* @returns Rmd Info
|
|
54
|
+
*/
|
|
55
|
+
function parseRMarkdownFile(raw) {
|
|
56
|
+
// Read and Parse Markdown
|
|
57
|
+
const parser = new commonmark_1.Parser();
|
|
58
|
+
const ast = parser.parse(raw);
|
|
59
|
+
// Parse Frontmatter
|
|
60
|
+
const frontmatter = (0, gray_matter_1.default)(raw);
|
|
61
|
+
// Parse Codeblocks
|
|
62
|
+
const walker = ast.walker();
|
|
63
|
+
const blocks = [];
|
|
64
|
+
let e;
|
|
65
|
+
while ((e = walker.next())) {
|
|
66
|
+
const node = e.node;
|
|
67
|
+
if (!isRCodeBlock(node)) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
blocks.push({
|
|
71
|
+
code: node.literal,
|
|
72
|
+
options: parseCodeBlockOptions(node.info, node.literal),
|
|
73
|
+
startpos: { line: node.sourcepos[0][0] + 1, col: 0 }
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
content: restoreBlocksWithoutMd(blocks, countNewlines(raw)),
|
|
78
|
+
// eslint-disable-next-line unused-imports/no-unused-vars
|
|
79
|
+
blocks: blocks.map(({ startpos, ...block }) => block),
|
|
80
|
+
options: frontmatter.data
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
const RTagRegex = /{[rR](?:[\s,][^}]*)?}/;
|
|
84
|
+
/**
|
|
85
|
+
* Checks whether a CommonMark node is an R code block
|
|
86
|
+
*/
|
|
87
|
+
function isRCodeBlock(node) {
|
|
88
|
+
return node.type === 'code_block' && node.literal !== null && node.info !== null && RTagRegex.test(node.info);
|
|
89
|
+
}
|
|
90
|
+
const LineRegex = /\r\n|\r|\n/;
|
|
91
|
+
function countNewlines(str) {
|
|
92
|
+
return str.split(LineRegex).length - 1;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Restores an Rmd file from code blocks, filling non-code lines with empty lines
|
|
96
|
+
*/
|
|
97
|
+
function restoreBlocksWithoutMd(blocks, totalLines) {
|
|
98
|
+
let line = 1;
|
|
99
|
+
let output = '';
|
|
100
|
+
const goToLine = (n) => {
|
|
101
|
+
const diff = n - line;
|
|
102
|
+
(0, assert_1.guard)(diff >= 0);
|
|
103
|
+
line += diff;
|
|
104
|
+
output += '\n'.repeat(diff);
|
|
105
|
+
};
|
|
106
|
+
for (const block of blocks) {
|
|
107
|
+
goToLine(block.startpos.line);
|
|
108
|
+
output += block.code;
|
|
109
|
+
line += countNewlines(block.code);
|
|
110
|
+
}
|
|
111
|
+
// Add remainder of file
|
|
112
|
+
goToLine(totalLines + 1);
|
|
113
|
+
return output;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Parses the options of an R code block from its header and content
|
|
117
|
+
*/
|
|
118
|
+
function parseCodeBlockOptions(header, content) {
|
|
119
|
+
let opts = header.length === 3 // '{r}' => header.length=3 (no options in header)
|
|
120
|
+
? ''
|
|
121
|
+
: header.substring(3, header.length - 1).trim();
|
|
122
|
+
const lines = content.split('\n');
|
|
123
|
+
for (const line of lines) {
|
|
124
|
+
if (!line.trim().startsWith('#|')) {
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
const opt = line.substring(3);
|
|
128
|
+
opts += opts.length === 0 ? opt : `, ${opt}`;
|
|
129
|
+
}
|
|
130
|
+
return opts;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=flowr-rmarkdown-file.js.map
|
|
File without changes
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FlowrAnalyzerPluginDefaults = FlowrAnalyzerPluginDefaults;
|
|
4
|
+
const flowr_analyzer_description_file_plugin_1 = require("./file-plugins/flowr-analyzer-description-file-plugin");
|
|
5
|
+
const flowr_analyzer_package_versions_description_file_plugin_1 = require("./package-version-plugins/flowr-analyzer-package-versions-description-file-plugin");
|
|
6
|
+
const flowr_analyzer_loading_order_description_file_plugin_1 = require("./loading-order-plugins/flowr-analyzer-loading-order-description-file-plugin");
|
|
7
|
+
const flowr_analyzer_rmd_file_plugin_1 = require("./file-plugins/notebooks/flowr-analyzer-rmd-file-plugin");
|
|
8
|
+
const flowr_analyzer_qmd_file_plugin_1 = require("./file-plugins/notebooks/flowr-analyzer-qmd-file-plugin");
|
|
9
|
+
const flowr_analyzer_jupyter_file_plugin_1 = require("./file-plugins/notebooks/flowr-analyzer-jupyter-file-plugin");
|
|
10
|
+
/**
|
|
11
|
+
* Provides the default set of Flowr Analyzer plugins.
|
|
12
|
+
*/
|
|
13
|
+
function FlowrAnalyzerPluginDefaults() {
|
|
14
|
+
return [
|
|
15
|
+
new flowr_analyzer_description_file_plugin_1.FlowrAnalyzerDescriptionFilePlugin(),
|
|
16
|
+
new flowr_analyzer_package_versions_description_file_plugin_1.FlowrAnalyzerPackageVersionsDescriptionFilePlugin(),
|
|
17
|
+
new flowr_analyzer_loading_order_description_file_plugin_1.FlowrAnalyzerLoadingOrderDescriptionFilePlugin(),
|
|
18
|
+
new flowr_analyzer_rmd_file_plugin_1.FlowrAnalyzerRmdFilePlugin(),
|
|
19
|
+
new flowr_analyzer_qmd_file_plugin_1.FlowrAnalyzerQmdFilePlugin(),
|
|
20
|
+
new flowr_analyzer_jupyter_file_plugin_1.FlowrAnalyzerJupyterFilePlugin(),
|
|
21
|
+
];
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=flowr-analyzer-plugin-defaults.js.map
|
|
@@ -72,6 +72,8 @@ export interface FlowrAnalyzerPluginInterface<In = unknown, Out = In> {
|
|
|
72
72
|
* **Please do not create plugins directly based on this class, but use the classes referenced alongside the {@link PluginType} values!**
|
|
73
73
|
* For example, if you want to create a plugin that determines the loading order of files, extend {@link FlowrAnalyzerLoadingOrderPlugin} instead.
|
|
74
74
|
* These classes also provide sensible overrides of {@link FlowrAnalyzerPlugin.defaultPlugin} to be used when no plugin of this type is registered or triggered.
|
|
75
|
+
*
|
|
76
|
+
* For a collection of default plugins, see {@link FlowrAnalyzerPluginDefaults}.
|
|
75
77
|
*/
|
|
76
78
|
export declare abstract class FlowrAnalyzerPlugin<In = unknown, Out extends AsyncOrSync<unknown> = In> implements FlowrAnalyzerPluginInterface<In, Out> {
|
|
77
79
|
abstract readonly name: string;
|
|
@@ -52,6 +52,8 @@ const generalPluginLog = log_1.log.getSubLogger({ name: 'plugins' });
|
|
|
52
52
|
* **Please do not create plugins directly based on this class, but use the classes referenced alongside the {@link PluginType} values!**
|
|
53
53
|
* For example, if you want to create a plugin that determines the loading order of files, extend {@link FlowrAnalyzerLoadingOrderPlugin} instead.
|
|
54
54
|
* These classes also provide sensible overrides of {@link FlowrAnalyzerPlugin.defaultPlugin} to be used when no plugin of this type is registered or triggered.
|
|
55
|
+
*
|
|
56
|
+
* For a collection of default plugins, see {@link FlowrAnalyzerPluginDefaults}.
|
|
55
57
|
*/
|
|
56
58
|
class FlowrAnalyzerPlugin {
|
|
57
59
|
/**
|
|
@@ -15,7 +15,7 @@ class FlowrAnalyzerLoadingOrderDescriptionFilePlugin extends flowr_analyzer_load
|
|
|
15
15
|
description = 'This plugin determines loading order based on the Collate field in DESCRIPTION files.';
|
|
16
16
|
version = new semver_1.SemVer('0.1.0');
|
|
17
17
|
process(ctx) {
|
|
18
|
-
const descFiles = ctx.files.getFilesByRole(flowr_file_1.
|
|
18
|
+
const descFiles = ctx.files.getFilesByRole(flowr_file_1.FileRole.Description);
|
|
19
19
|
if (descFiles.length !== 1) {
|
|
20
20
|
flowr_analyzer_description_file_plugin_1.descriptionFileLog.warn(`Supporting only exactly one DESCRIPTION file, found ${descFiles.length}`);
|
|
21
21
|
return;
|
|
@@ -16,7 +16,7 @@ class FlowrAnalyzerPackageVersionsDescriptionFilePlugin extends flowr_analyzer_p
|
|
|
16
16
|
description = 'This plugin does...';
|
|
17
17
|
version = new semver_1.SemVer('0.1.0');
|
|
18
18
|
process(ctx) {
|
|
19
|
-
const descFiles = ctx.files.getFilesByRole(flowr_file_1.
|
|
19
|
+
const descFiles = ctx.files.getFilesByRole(flowr_file_1.FileRole.Description);
|
|
20
20
|
if (descFiles.length !== 1) {
|
|
21
21
|
flowr_analyzer_description_file_plugin_1.descriptionFileLog.warn(`Supporting only exactly one DESCRIPTION file, found ${descFiles.length}`);
|
|
22
22
|
return;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { FlowrAnalyzerPlugin } from './flowr-analyzer-plugin';
|
|
2
|
+
import { FlowrAnalyzerDescriptionFilePlugin } from './file-plugins/flowr-analyzer-description-file-plugin';
|
|
3
|
+
import { FlowrAnalyzerPackageVersionsDescriptionFilePlugin } from './package-version-plugins/flowr-analyzer-package-versions-description-file-plugin';
|
|
4
|
+
import { FlowrAnalyzerLoadingOrderDescriptionFilePlugin } from './loading-order-plugins/flowr-analyzer-loading-order-description-file-plugin';
|
|
5
|
+
import { FlowrAnalyzerRmdFilePlugin } from './file-plugins/notebooks/flowr-analyzer-rmd-file-plugin';
|
|
6
|
+
import { FlowrAnalyzerQmdFilePlugin } from './file-plugins/notebooks/flowr-analyzer-qmd-file-plugin';
|
|
7
|
+
import { FlowrAnalyzerJupyterFilePlugin } from './file-plugins/notebooks/flowr-analyzer-jupyter-file-plugin';
|
|
8
|
+
/**
|
|
9
|
+
* The built-in Flowr Analyzer plugins that are always available.
|
|
10
|
+
*/
|
|
11
|
+
export declare const BuiltInPlugins: [["file:description", typeof FlowrAnalyzerDescriptionFilePlugin], ["versions:description", typeof FlowrAnalyzerPackageVersionsDescriptionFilePlugin], ["loading-order:description", typeof FlowrAnalyzerLoadingOrderDescriptionFilePlugin], ["file:rmd", typeof FlowrAnalyzerRmdFilePlugin], ["file:qmd", typeof FlowrAnalyzerQmdFilePlugin], ["file:ipynb", typeof FlowrAnalyzerJupyterFilePlugin]];
|
|
12
|
+
export type BuiltInFlowrPluginName = typeof BuiltInPlugins[number][0];
|
|
13
|
+
export type BuiltInFlowrPluginArgs<N extends BuiltInFlowrPluginName> = N extends typeof BuiltInPlugins[number][0] ? ConstructorParameters<Extract<typeof BuiltInPlugins[number], [N, PluginProducer]>[1]> : never;
|
|
14
|
+
type PluginProducer = new (...args: never[]) => FlowrAnalyzerPlugin;
|
|
15
|
+
/**
|
|
16
|
+
* Register a new Flowr Analyzer plugin for the registry,
|
|
17
|
+
* to be used by the {@link FlowrAnalyzerBuilder} and {@link FlowrAnalyzer}.
|
|
18
|
+
*/
|
|
19
|
+
export declare function registerPluginMaker(plugin: PluginProducer, name?: Exclude<string, BuiltInFlowrPluginName>): void;
|
|
20
|
+
export declare function getPlugin(name: BuiltInFlowrPluginName, args: BuiltInFlowrPluginArgs<typeof name>): FlowrAnalyzerPlugin;
|
|
21
|
+
export declare function getPlugin(name: string, args?: unknown[]): FlowrAnalyzerPlugin | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* The type used to register a plugin with the {@link FlowrAnalyzerBuilder}.
|
|
24
|
+
* @see {@link makePlugin}
|
|
25
|
+
*/
|
|
26
|
+
export type PluginToRegister<T extends BuiltInFlowrPluginName | string> = FlowrAnalyzerPlugin | T | string | (T extends BuiltInFlowrPluginName ? [
|
|
27
|
+
T,
|
|
28
|
+
BuiltInFlowrPluginArgs<T>
|
|
29
|
+
] : [string, unknown[]]);
|
|
30
|
+
/**
|
|
31
|
+
* Create a Flowr Analyzer plugin from a {@link PluginToRegister} specification.
|
|
32
|
+
*/
|
|
33
|
+
export declare function makePlugin<T extends BuiltInFlowrPluginName | string>(toRegister: PluginToRegister<T>): FlowrAnalyzerPlugin;
|
|
34
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BuiltInPlugins = void 0;
|
|
4
|
+
exports.registerPluginMaker = registerPluginMaker;
|
|
5
|
+
exports.getPlugin = getPlugin;
|
|
6
|
+
exports.makePlugin = makePlugin;
|
|
7
|
+
const flowr_analyzer_description_file_plugin_1 = require("./file-plugins/flowr-analyzer-description-file-plugin");
|
|
8
|
+
const flowr_analyzer_package_versions_description_file_plugin_1 = require("./package-version-plugins/flowr-analyzer-package-versions-description-file-plugin");
|
|
9
|
+
const flowr_analyzer_loading_order_description_file_plugin_1 = require("./loading-order-plugins/flowr-analyzer-loading-order-description-file-plugin");
|
|
10
|
+
const flowr_analyzer_rmd_file_plugin_1 = require("./file-plugins/notebooks/flowr-analyzer-rmd-file-plugin");
|
|
11
|
+
const flowr_analyzer_qmd_file_plugin_1 = require("./file-plugins/notebooks/flowr-analyzer-qmd-file-plugin");
|
|
12
|
+
const assert_1 = require("../../util/assert");
|
|
13
|
+
const flowr_analyzer_jupyter_file_plugin_1 = require("./file-plugins/notebooks/flowr-analyzer-jupyter-file-plugin");
|
|
14
|
+
/**
|
|
15
|
+
* The built-in Flowr Analyzer plugins that are always available.
|
|
16
|
+
*/
|
|
17
|
+
exports.BuiltInPlugins = [
|
|
18
|
+
['file:description', flowr_analyzer_description_file_plugin_1.FlowrAnalyzerDescriptionFilePlugin],
|
|
19
|
+
['versions:description', flowr_analyzer_package_versions_description_file_plugin_1.FlowrAnalyzerPackageVersionsDescriptionFilePlugin],
|
|
20
|
+
['loading-order:description', flowr_analyzer_loading_order_description_file_plugin_1.FlowrAnalyzerLoadingOrderDescriptionFilePlugin],
|
|
21
|
+
['file:rmd', flowr_analyzer_rmd_file_plugin_1.FlowrAnalyzerRmdFilePlugin],
|
|
22
|
+
['file:qmd', flowr_analyzer_qmd_file_plugin_1.FlowrAnalyzerQmdFilePlugin],
|
|
23
|
+
['file:ipynb', flowr_analyzer_jupyter_file_plugin_1.FlowrAnalyzerJupyterFilePlugin],
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* The registry of built-in and user-registered Flowr Analyzer plugins.
|
|
27
|
+
* Used by the {@link FlowrAnalyzerBuilder} and {@link FlowrAnalyzer} to instantiate plugins by name.
|
|
28
|
+
*/
|
|
29
|
+
const PluginRegistry = new Map(exports.BuiltInPlugins);
|
|
30
|
+
/**
|
|
31
|
+
* Register a new Flowr Analyzer plugin for the registry,
|
|
32
|
+
* to be used by the {@link FlowrAnalyzerBuilder} and {@link FlowrAnalyzer}.
|
|
33
|
+
*/
|
|
34
|
+
function registerPluginMaker(plugin, name = plugin.name) {
|
|
35
|
+
PluginRegistry.set(name, plugin);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Retrieve a registered Flowr Analyzer plugin by its name.
|
|
39
|
+
* @see {@link PluginToRegister}
|
|
40
|
+
*/
|
|
41
|
+
function getPlugin(name, args) {
|
|
42
|
+
const plugin = PluginRegistry.get(name);
|
|
43
|
+
return plugin ? new plugin(...args) : undefined;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create a Flowr Analyzer plugin from a {@link PluginToRegister} specification.
|
|
47
|
+
*/
|
|
48
|
+
function makePlugin(toRegister) {
|
|
49
|
+
if (toRegister instanceof Object && 'process' in toRegister) {
|
|
50
|
+
return toRegister;
|
|
51
|
+
}
|
|
52
|
+
if (Array.isArray(toRegister)) {
|
|
53
|
+
const [name, args] = toRegister;
|
|
54
|
+
const plugin = getPlugin(name, args);
|
|
55
|
+
(0, assert_1.guard)(plugin !== undefined, () => `Unknown Flowr Analyzer plugin: ${name.toString()}`);
|
|
56
|
+
return plugin;
|
|
57
|
+
}
|
|
58
|
+
const plugin = getPlugin(toRegister, []);
|
|
59
|
+
(0, assert_1.guard)(plugin !== undefined, () => `Unknown Flowr Analyzer plugin: ${toRegister.toString()}`);
|
|
60
|
+
return plugin;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=plugin-registry.js.map
|
|
@@ -19,6 +19,7 @@ class FlowrAnalyzerProjectDiscoveryPlugin extends flowr_analyzer_plugin_1.FlowrA
|
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
exports.FlowrAnalyzerProjectDiscoveryPlugin = FlowrAnalyzerProjectDiscoveryPlugin;
|
|
22
|
+
const discoverRSourcesRegex = /\.(r|rmd|ipynb|qmd)$/i;
|
|
22
23
|
/**
|
|
23
24
|
* This is the default dummy implementation of the {@link FlowrAnalyzerProjectDiscoveryPlugin}.
|
|
24
25
|
* It simply collects all files in the given folder and returns them as either {@link RParseRequest} (for R and Rmd files) or {@link FlowrTextFile} (for all other files).
|
|
@@ -27,11 +28,16 @@ class DefaultFlowrAnalyzerProjectDiscoveryPlugin extends FlowrAnalyzerProjectDis
|
|
|
27
28
|
name = 'default-project-discovery-plugin';
|
|
28
29
|
description = 'This is the default project discovery plugin that does nothing.';
|
|
29
30
|
version = new semver_1.SemVer('0.0.0');
|
|
31
|
+
supportedExtensions;
|
|
32
|
+
constructor(triggerOnExtensions = discoverRSourcesRegex) {
|
|
33
|
+
super();
|
|
34
|
+
this.supportedExtensions = triggerOnExtensions;
|
|
35
|
+
}
|
|
30
36
|
process(_context, args) {
|
|
31
37
|
const requests = [];
|
|
32
38
|
/* the dummy approach of collecting all files, group R and Rmd files, and be done with it */
|
|
33
39
|
for (const file of (0, files_1.getAllFilesSync)(args.content)) {
|
|
34
|
-
if (
|
|
40
|
+
if (this.supportedExtensions.test(file)) {
|
|
35
41
|
requests.push({ content: file, request: 'file' });
|
|
36
42
|
}
|
|
37
43
|
else {
|
|
@@ -9,6 +9,7 @@ const two_layer_collector_1 = require("../../two-layer-collector");
|
|
|
9
9
|
const objects_1 = require("../../../util/objects");
|
|
10
10
|
const identify_link_to_last_call_relation_1 = require("./identify-link-to-last-call-relation");
|
|
11
11
|
const cfg_kind_1 = require("../../../project/cfg-kind");
|
|
12
|
+
const extract_cfg_1 = require("../../../control-flow/extract-cfg");
|
|
12
13
|
/* if the node is effected by nse, we have an ingoing nse edge */
|
|
13
14
|
function isQuoted(node, graph) {
|
|
14
15
|
const vertex = graph.ingoingEdges(node);
|
|
@@ -191,10 +192,7 @@ async function executeCallContextQueries({ analyzer }, queries) {
|
|
|
191
192
|
cfg = await analyzer.controlflow([], cfg_kind_1.CfgKind.WithDataflow);
|
|
192
193
|
}
|
|
193
194
|
const queriesWhichWantAliases = promotedQueries.filter(q => q.includeAliases);
|
|
194
|
-
for (const [nodeId, info] of dataflow.graph.
|
|
195
|
-
if (info.tag !== vertex_1.VertexType.FunctionCall) {
|
|
196
|
-
continue;
|
|
197
|
-
}
|
|
195
|
+
for (const [nodeId, info] of dataflow.graph.verticesOfType(vertex_1.VertexType.FunctionCall)) {
|
|
198
196
|
/* if we have a vertex, and we check for aliased calls, we want to know if we define this as desired! */
|
|
199
197
|
if (queriesWhichWantAliases.length > 0) {
|
|
200
198
|
/*
|
|
@@ -211,6 +209,7 @@ async function executeCallContextQueries({ analyzer }, queries) {
|
|
|
211
209
|
}
|
|
212
210
|
}
|
|
213
211
|
}
|
|
212
|
+
const calls = cfg ? (0, extract_cfg_1.getCallsInCfg)(cfg, dataflow.graph) : undefined;
|
|
214
213
|
for (const query of promotedQueries.filter(q => !q.includeAliases && (q.callName instanceof RegExp ? q.callName.test(info.name) : q.callName.has(info.name)))) {
|
|
215
214
|
const file = ast.idMap.get(nodeId)?.info.file;
|
|
216
215
|
if (!doesFilepathMatch(file, query.fileFilter)) {
|
|
@@ -218,7 +217,7 @@ async function executeCallContextQueries({ analyzer }, queries) {
|
|
|
218
217
|
}
|
|
219
218
|
let targets = undefined;
|
|
220
219
|
if (query.callTargets) {
|
|
221
|
-
targets = (0, identify_link_to_last_call_relation_1.satisfiesCallTargets)(
|
|
220
|
+
targets = (0, identify_link_to_last_call_relation_1.satisfiesCallTargets)(info, dataflow.graph, query.callTargets);
|
|
222
221
|
if (targets === 'no') {
|
|
223
222
|
continue;
|
|
224
223
|
}
|
|
@@ -235,7 +234,7 @@ async function executeCallContextQueries({ analyzer }, queries) {
|
|
|
235
234
|
const linked = Array.isArray(query.linkTo) ? query.linkTo : [query.linkTo];
|
|
236
235
|
for (const link of linked) {
|
|
237
236
|
/* if we have a linkTo query, we have to find the last call */
|
|
238
|
-
const lastCall = (0, identify_link_to_last_call_relation_1.identifyLinkToLastCallRelation)(nodeId, cfg.graph, dataflow.graph, link);
|
|
237
|
+
const lastCall = (0, identify_link_to_last_call_relation_1.identifyLinkToLastCallRelation)(nodeId, cfg.graph, dataflow.graph, link, calls);
|
|
239
238
|
if (lastCall) {
|
|
240
239
|
linkedIds ??= new Set();
|
|
241
240
|
for (const l of lastCall) {
|
|
@@ -21,7 +21,7 @@ export declare enum CallTargets {
|
|
|
21
21
|
/**
|
|
22
22
|
* Determines whether the given function call node satisfies the specified call target condition.
|
|
23
23
|
*/
|
|
24
|
-
export declare function satisfiesCallTargets(
|
|
24
|
+
export declare function satisfiesCallTargets(info: DataflowGraphVertexFunctionCall, graph: DataflowGraph, callTarget: CallTargets): NodeId[] | 'no';
|
|
25
25
|
/**
|
|
26
26
|
* Gets the value node of the specified argument in the given function call, if it exists and matches the allowed types.
|
|
27
27
|
*/
|
|
@@ -33,5 +33,8 @@ export declare function getValueOfArgument<Types extends readonly RType[] = read
|
|
|
33
33
|
}) | undefined;
|
|
34
34
|
/**
|
|
35
35
|
* Identifies nodes that link to the last call of a specified function from a given starting node in the control flow graph.
|
|
36
|
+
* If you pass on `knownCalls` (e.g., produced by {@link getCallsInCfg}), this will only respect the functions
|
|
37
|
+
* listed there and ignore any other calls. This can be also used to speed up the process if you already have
|
|
38
|
+
* the known calls available.
|
|
36
39
|
*/
|
|
37
|
-
export declare function identifyLinkToLastCallRelation(from: NodeId, cfg: ControlFlowGraph, graph: DataflowGraph, { callName, ignoreIf, cascadeIf }: LinkTo<RegExp> | PromotedLinkTo): NodeId[];
|
|
40
|
+
export declare function identifyLinkToLastCallRelation(from: NodeId, cfg: ControlFlowGraph, graph: DataflowGraph, { callName, ignoreIf, cascadeIf }: LinkTo<RegExp> | PromotedLinkTo, knownCalls?: Map<NodeId, Required<DataflowGraphVertexFunctionCall>>): NodeId[];
|
|
@@ -31,25 +31,22 @@ var CallTargets;
|
|
|
31
31
|
/**
|
|
32
32
|
* Determines whether the given function call node satisfies the specified call target condition.
|
|
33
33
|
*/
|
|
34
|
-
function satisfiesCallTargets(
|
|
35
|
-
const
|
|
36
|
-
if (callVertex === undefined || callVertex.tag !== vertex_1.VertexType.FunctionCall) {
|
|
37
|
-
return 'no';
|
|
38
|
-
}
|
|
39
|
-
const outgoing = graph.outgoingEdges(id);
|
|
34
|
+
function satisfiesCallTargets(info, graph, callTarget) {
|
|
35
|
+
const outgoing = graph.outgoingEdges(info.id);
|
|
40
36
|
if (outgoing === undefined) {
|
|
41
37
|
return 'no';
|
|
42
38
|
}
|
|
43
|
-
const callTargets =
|
|
39
|
+
const callTargets = outgoing.entries()
|
|
44
40
|
.filter(([, { types }]) => (0, edge_1.edgeIncludesType)(types, edge_1.EdgeType.Calls))
|
|
45
|
-
.map(([t]) => t)
|
|
41
|
+
.map(([t]) => t)
|
|
42
|
+
.toArray();
|
|
46
43
|
let builtIn = false;
|
|
47
|
-
if (
|
|
44
|
+
if (info.environment !== undefined) {
|
|
48
45
|
/*
|
|
49
46
|
* for performance and scoping reasons, flowR will not identify the global linkage,
|
|
50
47
|
* including any potential built-in mapping.
|
|
51
48
|
*/
|
|
52
|
-
const reResolved = (0, resolve_by_name_1.resolveByName)(
|
|
49
|
+
const reResolved = (0, resolve_by_name_1.resolveByName)(info.name, info.environment, identifier_1.ReferenceType.Unknown);
|
|
53
50
|
if (reResolved?.some(t => (0, built_in_1.isBuiltIn)(t.definedAt))) {
|
|
54
51
|
builtIn = true;
|
|
55
52
|
}
|
|
@@ -115,31 +112,41 @@ function getValueOfArgument(graph, call, argument, additionalAllowedTypes) {
|
|
|
115
112
|
}
|
|
116
113
|
/**
|
|
117
114
|
* Identifies nodes that link to the last call of a specified function from a given starting node in the control flow graph.
|
|
115
|
+
* If you pass on `knownCalls` (e.g., produced by {@link getCallsInCfg}), this will only respect the functions
|
|
116
|
+
* listed there and ignore any other calls. This can be also used to speed up the process if you already have
|
|
117
|
+
* the known calls available.
|
|
118
118
|
*/
|
|
119
|
-
function identifyLinkToLastCallRelation(from, cfg, graph, { callName, ignoreIf, cascadeIf }) {
|
|
119
|
+
function identifyLinkToLastCallRelation(from, cfg, graph, { callName, ignoreIf, cascadeIf }, knownCalls) {
|
|
120
120
|
if (ignoreIf?.(from, graph)) {
|
|
121
121
|
return [];
|
|
122
122
|
}
|
|
123
123
|
const found = [];
|
|
124
|
+
const cNameCheck = callName instanceof RegExp ? ({ name }) => callName.test(name)
|
|
125
|
+
: ({ name }) => callName.has(name);
|
|
126
|
+
const getVertex = knownCalls ?
|
|
127
|
+
(node) => knownCalls.get(node) :
|
|
128
|
+
(node) => {
|
|
129
|
+
const v = graph.getVertex(node, true);
|
|
130
|
+
return (0, vertex_1.isFunctionCallVertex)(v) ? v : undefined;
|
|
131
|
+
};
|
|
124
132
|
(0, simple_visitor_1.visitCfgInReverseOrder)(cfg, [from], node => {
|
|
125
133
|
/* we ignore the start id as it cannot be the last call */
|
|
126
134
|
if (node === from) {
|
|
127
135
|
return;
|
|
128
136
|
}
|
|
129
|
-
const vertex =
|
|
130
|
-
if (vertex === undefined
|
|
137
|
+
const vertex = getVertex(node);
|
|
138
|
+
if (vertex === undefined) {
|
|
131
139
|
return;
|
|
132
140
|
}
|
|
133
|
-
if (
|
|
141
|
+
if (cNameCheck(vertex)) {
|
|
134
142
|
const act = cascadeIf ? cascadeIf(vertex, from, graph) : cascade_action_1.CascadeAction.Stop;
|
|
135
143
|
if (act === cascade_action_1.CascadeAction.Skip) {
|
|
136
144
|
return;
|
|
137
145
|
}
|
|
138
|
-
const tar = satisfiesCallTargets(vertex
|
|
139
|
-
if (tar
|
|
140
|
-
|
|
146
|
+
const tar = satisfiesCallTargets(vertex, graph, CallTargets.MustIncludeGlobal);
|
|
147
|
+
if (tar !== 'no') {
|
|
148
|
+
found.push(node);
|
|
141
149
|
}
|
|
142
|
-
found.push(node);
|
|
143
150
|
return act === cascade_action_1.CascadeAction.Stop;
|
|
144
151
|
}
|
|
145
152
|
});
|
|
@@ -15,7 +15,7 @@ export interface DataflowClusterQueryResult extends BaseQueryResult {
|
|
|
15
15
|
}
|
|
16
16
|
export declare const ClusterQueryDefinition: {
|
|
17
17
|
readonly executor: typeof executeDataflowClusterQuery;
|
|
18
|
-
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider
|
|
18
|
+
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => Promise<boolean>;
|
|
19
19
|
readonly schema: Joi.ObjectSchema<any>;
|
|
20
20
|
readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
|
|
21
21
|
};
|
|
@@ -22,7 +22,7 @@ export interface ControlFlowQueryResult extends BaseQueryResult {
|
|
|
22
22
|
}
|
|
23
23
|
export declare const ControlFlowQueryDefinition: {
|
|
24
24
|
readonly executor: typeof executeControlFlowQuery;
|
|
25
|
-
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider
|
|
25
|
+
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => Promise<boolean>;
|
|
26
26
|
readonly schema: Joi.ObjectSchema<any>;
|
|
27
27
|
readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
|
|
28
28
|
};
|
|
@@ -26,9 +26,10 @@ exports.ControlFlowQueryDefinition = {
|
|
|
26
26
|
}).description('The control flow query provides the control flow graph of the analysis, optionally simplified.'),
|
|
27
27
|
flattenInvolvedNodes: (queryResults) => {
|
|
28
28
|
const out = queryResults;
|
|
29
|
-
return
|
|
29
|
+
return out.controlFlow.graph.vertices(true).entries()
|
|
30
30
|
.filter(([, v]) => v.type !== control_flow_graph_1.CfgVertexType.Block)
|
|
31
|
-
.map(v => v[0])
|
|
31
|
+
.map(v => v[0])
|
|
32
|
+
.toArray();
|
|
32
33
|
}
|
|
33
34
|
};
|
|
34
35
|
//# sourceMappingURL=control-flow-query-format.js.map
|
|
@@ -20,7 +20,7 @@ async function executeDataflowLensQuery({ analyzer }, queries) {
|
|
|
20
20
|
nameRegex: '<-|<<-|->|->>|=|+|-|*|/|\\|>|function|repeat|if|next|break',
|
|
21
21
|
blacklistWithName: true
|
|
22
22
|
}
|
|
23
|
-
});
|
|
23
|
+
}, analyzer.inspectContext().env.makeCleanEnv());
|
|
24
24
|
const timing = Date.now() - now;
|
|
25
25
|
return {
|
|
26
26
|
'.meta': {
|
|
@@ -14,7 +14,7 @@ export interface DataflowLensQueryResult extends BaseQueryResult {
|
|
|
14
14
|
}
|
|
15
15
|
export declare const DataflowLensQueryDefinition: {
|
|
16
16
|
readonly executor: typeof executeDataflowLensQuery;
|
|
17
|
-
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider
|
|
17
|
+
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
18
18
|
readonly schema: Joi.ObjectSchema<any>;
|
|
19
19
|
readonly flattenInvolvedNodes: () => never[];
|
|
20
20
|
};
|
|
@@ -15,7 +15,7 @@ export interface DataflowQueryResult extends BaseQueryResult {
|
|
|
15
15
|
}
|
|
16
16
|
export declare const DataflowQueryDefinition: {
|
|
17
17
|
readonly executor: typeof executeDataflowQuery;
|
|
18
|
-
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider
|
|
18
|
+
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
19
19
|
readonly schema: Joi.ObjectSchema<any>;
|
|
20
20
|
readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
|
|
21
21
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type DependenciesQuery, type DependenciesQueryResult } from './dependencies-query-format';
|
|
2
2
|
import type { BasicQueryData } from '../../base-query-format';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Executes a dependencies query.
|
|
5
5
|
*/
|
|
6
6
|
export declare function executeDependenciesQuery({ analyzer, }: BasicQueryData, queries: readonly DependenciesQuery[]): Promise<DependenciesQueryResult>;
|
|
@@ -12,7 +12,7 @@ const identify_link_to_last_call_relation_1 = require("../call-context-query/ide
|
|
|
12
12
|
const resolve_argument_1 = require("../../../dataflow/eval/resolve/resolve-argument");
|
|
13
13
|
const assert_1 = require("../../../util/assert");
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* Executes a dependencies query.
|
|
16
16
|
*/
|
|
17
17
|
async function executeDependenciesQuery({ analyzer, }, queries) {
|
|
18
18
|
if (queries.length !== 1) {
|
|
@@ -76,8 +76,8 @@ function getResults(queries, { dataflow, config, normalize }, results, kind, fun
|
|
|
76
76
|
return kindEntries.flatMap(([name, results]) => results.flatMap(({ id, linkedIds }) => {
|
|
77
77
|
const vertex = dataflow.graph.getVertex(id);
|
|
78
78
|
const info = functionMap.get(name);
|
|
79
|
-
const args = (0, resolve_argument_1.getArgumentStringValue)(config.solver.variables, dataflow.graph, vertex, info.argIdx, info.argName, info.resolveValue);
|
|
80
|
-
const linkedArgs = collectValuesFromLinks(args, { dataflow, config }, linkedIds);
|
|
79
|
+
const args = (0, resolve_argument_1.getArgumentStringValue)(config.solver.variables, dataflow.graph, vertex, info.argIdx, info.argName, info.resolveValue, data.analyzer.inspectContext());
|
|
80
|
+
const linkedArgs = collectValuesFromLinks(args, { dataflow, config, ctx: data.analyzer.inspectContext() }, linkedIds);
|
|
81
81
|
const linked = dropInfoOnLinkedIds(linkedIds);
|
|
82
82
|
const foundValues = linkedArgs ?? args;
|
|
83
83
|
if (!foundValues) {
|
|
@@ -97,7 +97,7 @@ function getResults(queries, { dataflow, config, normalize }, results, kind, fun
|
|
|
97
97
|
(0, assert_1.guard)('mode' in (info.additionalArgs ?? {}), 'Need additional argument mode when checking for mode');
|
|
98
98
|
const margs = info.additionalArgs?.mode;
|
|
99
99
|
(0, assert_1.guard)(margs, 'Need additional argument mode when checking for mode');
|
|
100
|
-
const modeArgs = (0, resolve_argument_1.getArgumentStringValue)(config.solver.variables, dataflow.graph, vertex, margs.argIdx, margs.argName, margs.resolveValue);
|
|
100
|
+
const modeArgs = (0, resolve_argument_1.getArgumentStringValue)(config.solver.variables, dataflow.graph, vertex, margs.argIdx, margs.argName, margs.resolveValue, data?.analyzer.inspectContext());
|
|
101
101
|
const modeValues = modeArgs?.values().flatMap(v => [...v]) ?? [];
|
|
102
102
|
if (info.ignoreIf === 'mode-only-read' && modeValues.every(m => m && readOnlyModes.has(m))) {
|
|
103
103
|
// all modes are read-only, so we can ignore this
|
|
@@ -159,7 +159,7 @@ function collectValuesFromLinks(args, data, linkedIds) {
|
|
|
159
159
|
if (vertex === undefined || vertex.tag !== vertex_1.VertexType.FunctionCall) {
|
|
160
160
|
continue;
|
|
161
161
|
}
|
|
162
|
-
const args = (0, resolve_argument_1.getArgumentStringValue)(data.config.solver.variables, data.dataflow.graph, vertex, info.argIdx, info.argName, info.resolveValue);
|
|
162
|
+
const args = (0, resolve_argument_1.getArgumentStringValue)(data.config.solver.variables, data.dataflow.graph, vertex, info.argIdx, info.argName, info.resolveValue, data.ctx);
|
|
163
163
|
if (args === undefined) {
|
|
164
164
|
continue;
|
|
165
165
|
}
|
|
@@ -70,7 +70,7 @@ export interface DependencyInfo extends Record<string, unknown> {
|
|
|
70
70
|
export declare function getAllCategories(queries: readonly DependenciesQuery[]): Record<DependencyCategoryName, DependencyCategorySettings>;
|
|
71
71
|
export declare const DependenciesQueryDefinition: {
|
|
72
72
|
readonly executor: typeof executeDependenciesQuery;
|
|
73
|
-
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider
|
|
73
|
+
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[], queries: readonly import("../../query").Query[]) => true;
|
|
74
74
|
readonly schema: Joi.ObjectSchema<any>;
|
|
75
75
|
readonly flattenInvolvedNodes: (queryResults: BaseQueryResult, query: readonly import("../../query").Query[]) => NodeId[];
|
|
76
76
|
};
|
|
@@ -25,7 +25,7 @@ exports.DefaultDependencyCategories = {
|
|
|
25
25
|
/* for libraries, we have to additionally track all uses of `::` and `:::`, for this we currently simply traverse all uses */
|
|
26
26
|
additionalAnalysis: async (data, ignoreDefault, _functions, _queryResults, result) => {
|
|
27
27
|
if (!ignoreDefault) {
|
|
28
|
-
(0, visitor_1.visitAst)((await data.analyzer.normalize()).ast, n => {
|
|
28
|
+
(0, visitor_1.visitAst)((await data.analyzer.normalize()).ast.files.map(f => f.root), n => {
|
|
29
29
|
if (n.type === type_1.RType.Symbol && n.namespace) {
|
|
30
30
|
const dep = data.analyzer.inspectContext().deps.getDependency(n.namespace);
|
|
31
31
|
/* we should improve the identification of ':::' */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { BasicQueryData } from '../../base-query-format';
|
|
2
2
|
import type { DfShapeQuery, DfShapeQueryResult } from './df-shape-query-format';
|
|
3
3
|
/**
|
|
4
|
-
* Executes the given
|
|
4
|
+
* Executes the given data frame shape queries using the provided analyzer.
|
|
5
5
|
*/
|
|
6
6
|
export declare function executeDfShapeQuery({ analyzer }: BasicQueryData, queries: readonly DfShapeQuery[]): Promise<DfShapeQueryResult>;
|