@eagleoutice/flowr 2.6.2 → 2.6.3
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.js +3 -3
- package/abstract-interpretation/data-frame/mappers/function-mapper.d.ts +7 -7
- package/abstract-interpretation/data-frame/mappers/function-mapper.js +20 -16
- package/abstract-interpretation/data-frame/semantics.js +8 -0
- package/abstract-interpretation/data-frame/shape-inference.d.ts +3 -3
- package/abstract-interpretation/data-frame/shape-inference.js +3 -3
- package/abstract-interpretation/normalized-ast-fold.d.ts +1 -1
- package/benchmark/slicer.d.ts +1 -0
- package/benchmark/slicer.js +13 -12
- package/benchmark/summarizer/first-phase/process.js +1 -1
- package/benchmark/summarizer/second-phase/graph.d.ts +3 -1
- package/benchmark/summarizer/second-phase/graph.js +3 -1
- 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 +13 -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 +14 -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 +1 -2
- package/core/steps/all/static-slicing/00-slice.js +1 -1
- 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 +55 -56
- package/core/steps/pipeline/default-pipelines.js +8 -8
- package/dataflow/environments/clone.d.ts +0 -1
- package/dataflow/environments/clone.js +12 -2
- package/dataflow/environments/diff.js +2 -2
- package/dataflow/environments/overwrite.d.ts +1 -5
- package/dataflow/environments/overwrite.js +3 -19
- package/dataflow/environments/scoping.d.ts +6 -2
- package/dataflow/environments/scoping.js +6 -2
- package/dataflow/eval/resolve/resolve-argument.js +2 -2
- 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 -22
- package/dataflow/graph/graph.d.ts +3 -9
- package/dataflow/graph/graph.js +0 -13
- package/dataflow/graph/unknown-replacement.d.ts +4 -2
- package/dataflow/graph/unknown-replacement.js +4 -2
- package/dataflow/info.d.ts +7 -0
- package/dataflow/info.js +21 -0
- package/dataflow/internal/linker.js +7 -4
- 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/built-in/built-in-access.d.ts +1 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-access.js +4 -4
- package/dataflow/internal/process/functions/call/built-in/built-in-apply.js +1 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-assignment.js +4 -4
- package/dataflow/internal/process/functions/call/built-in/built-in-eval.js +6 -6
- package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.js +1 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.js +1 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.js +1 -1
- 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 +1 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.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 +3 -3
- 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 +6 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-replacement.js +2 -2
- 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 +1 -1
- package/dataflow/internal/process/functions/call/common.d.ts +1 -1
- package/dataflow/internal/process/functions/call/common.js +4 -4
- 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 +3 -3
- package/dataflow/internal/process/functions/call/named-call-handling.js +4 -4
- package/dataflow/internal/process/functions/process-parameter.js +4 -4
- 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 +6 -11
- 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 +13 -13
- 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 +12 -9
- 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 +108 -61
- 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 +412 -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} +142 -172
- 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 +22 -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 +133 -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 +13 -17
- package/linter/rules/absolute-path.d.ts +1 -2
- package/linter/rules/absolute-path.js +2 -2
- package/linter/rules/dataframe-access-validation.d.ts +1 -1
- package/linter/rules/dataframe-access-validation.js +12 -8
- 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 +1 -5
- 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 +3 -2
- package/linter/rules/seeded-randomness.js +33 -13
- 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 +6 -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 +30 -5
- package/project/context/flowr-analyzer-context.js +48 -4
- 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 +4 -2
- 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/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 +1 -1
- 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.js +1 -1
- package/queries/catalog/df-shape-query/df-shape-query-format.d.ts +2 -2
- package/queries/catalog/df-shape-query/df-shape-query-format.js +6 -5
- 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 +1 -1
- 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 +2 -2
- 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 +1 -1
- 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/statistics/features/supported/assignments/assignments.js +1 -1
- package/statistics/features/supported/control-flow/control-flow.js +1 -1
- 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 +1 -1
- package/statistics/features/supported/variables/variables.js +1 -1
- package/statistics/statistics.js +3 -2
- package/util/assert.d.ts +4 -0
- package/util/assert.js +4 -0
- 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/version.js +1 -1
- 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,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);
|
|
@@ -211,6 +212,7 @@ async function executeCallContextQueries({ analyzer }, queries) {
|
|
|
211
212
|
}
|
|
212
213
|
}
|
|
213
214
|
}
|
|
215
|
+
const calls = cfg ? (0, extract_cfg_1.getCallsInCfg)(cfg, dataflow.graph) : undefined;
|
|
214
216
|
for (const query of promotedQueries.filter(q => !q.includeAliases && (q.callName instanceof RegExp ? q.callName.test(info.name) : q.callName.has(info.name)))) {
|
|
215
217
|
const file = ast.idMap.get(nodeId)?.info.file;
|
|
216
218
|
if (!doesFilepathMatch(file, query.fileFilter)) {
|
|
@@ -218,7 +220,7 @@ async function executeCallContextQueries({ analyzer }, queries) {
|
|
|
218
220
|
}
|
|
219
221
|
let targets = undefined;
|
|
220
222
|
if (query.callTargets) {
|
|
221
|
-
targets = (0, identify_link_to_last_call_relation_1.satisfiesCallTargets)(
|
|
223
|
+
targets = (0, identify_link_to_last_call_relation_1.satisfiesCallTargets)(info, dataflow.graph, query.callTargets);
|
|
222
224
|
if (targets === 'no') {
|
|
223
225
|
continue;
|
|
224
226
|
}
|
|
@@ -235,7 +237,7 @@ async function executeCallContextQueries({ analyzer }, queries) {
|
|
|
235
237
|
const linked = Array.isArray(query.linkTo) ? query.linkTo : [query.linkTo];
|
|
236
238
|
for (const link of linked) {
|
|
237
239
|
/* 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);
|
|
240
|
+
const lastCall = (0, identify_link_to_last_call_relation_1.identifyLinkToLastCallRelation)(nodeId, cfg.graph, dataflow.graph, link, calls);
|
|
239
241
|
if (lastCall) {
|
|
240
242
|
linkedIds ??= new Set();
|
|
241
243
|
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
|
};
|
|
@@ -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) {
|
|
@@ -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 ':::' */
|
|
@@ -16,7 +16,7 @@ async function executeDfShapeQuery({ analyzer }, queries) {
|
|
|
16
16
|
const dfg = (await analyzer.dataflow()).graph;
|
|
17
17
|
const cfg = await analyzer.controlflow();
|
|
18
18
|
const start = Date.now();
|
|
19
|
-
const domains = (0, shape_inference_1.inferDataFrameShapes)(cfg, dfg, ast, analyzer.
|
|
19
|
+
const domains = (0, shape_inference_1.inferDataFrameShapes)(cfg, dfg, ast, analyzer.inspectContext());
|
|
20
20
|
if (queries.length === 1 && queries[0].criterion === undefined) {
|
|
21
21
|
return {
|
|
22
22
|
'.meta': {
|
|
@@ -14,10 +14,10 @@ export interface DfShapeQuery extends BaseQueryFormat {
|
|
|
14
14
|
export interface DfShapeQueryResult extends BaseQueryResult {
|
|
15
15
|
domains: DataFrameStateDomain | Map<SingleSlicingCriterion, DataFrameDomain | undefined>;
|
|
16
16
|
}
|
|
17
|
-
declare function dfShapeQueryLineParser(
|
|
17
|
+
declare function dfShapeQueryLineParser(_output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions): ParsedQueryLine<'df-shape'>;
|
|
18
18
|
export declare const DfShapeQueryDefinition: {
|
|
19
19
|
readonly executor: typeof executeDfShapeQuery;
|
|
20
|
-
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider
|
|
20
|
+
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
21
21
|
readonly jsonFormatter: (queryResults: BaseQueryResult) => object;
|
|
22
22
|
readonly fromLine: typeof dfShapeQueryLineParser;
|
|
23
23
|
readonly schema: Joi.ObjectSchema<any>;
|
|
@@ -10,7 +10,7 @@ const time_1 = require("../../../util/text/time");
|
|
|
10
10
|
const df_shape_query_executor_1 = require("./df-shape-query-executor");
|
|
11
11
|
const slice_query_parser_1 = require("../../../cli/repl/parser/slice-query-parser");
|
|
12
12
|
const joi_1 = __importDefault(require("joi"));
|
|
13
|
-
function dfShapeQueryLineParser(
|
|
13
|
+
function dfShapeQueryLineParser(_output, line, _config) {
|
|
14
14
|
const criterion = (0, slice_query_parser_1.sliceCriterionParser)(line[0]);
|
|
15
15
|
return {
|
|
16
16
|
query: {
|
|
@@ -35,10 +35,11 @@ exports.DfShapeQueryDefinition = {
|
|
|
35
35
|
return true;
|
|
36
36
|
},
|
|
37
37
|
jsonFormatter: (queryResults) => {
|
|
38
|
-
const out = queryResults;
|
|
39
|
-
const
|
|
40
|
-
const json = Object.fromEntries(
|
|
41
|
-
|
|
38
|
+
const { domains, ...out } = queryResults;
|
|
39
|
+
const state = domains instanceof dataframe_domain_1.DataFrameStateDomain ? domains.value : domains;
|
|
40
|
+
const json = Object.fromEntries(state.entries().map(([key, domain]) => [key, domain?.toJson() ?? null]));
|
|
41
|
+
const result = { domains: json, ...out };
|
|
42
|
+
return result;
|
|
42
43
|
},
|
|
43
44
|
fromLine: dfShapeQueryLineParser,
|
|
44
45
|
schema: joi_1.default.object({
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { BasicQueryData } from '../../base-query-format';
|
|
2
2
|
import type { HappensBeforeQuery, HappensBeforeQueryResult } from './happens-before-query-format';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Execute happens-before queries on the given analyzer.
|
|
5
|
+
* This checks, whether for two given slicing criteria `a` and `b`, `a` happens before `b` in the control flow graph.
|
|
5
6
|
*/
|
|
6
7
|
export declare function executeHappensBefore({ analyzer }: BasicQueryData, queries: readonly HappensBeforeQuery[]): Promise<HappensBeforeQueryResult>;
|
|
@@ -7,7 +7,8 @@ const extract_cfg_1 = require("../../../control-flow/extract-cfg");
|
|
|
7
7
|
const happens_before_1 = require("../../../control-flow/happens-before");
|
|
8
8
|
const parse_1 = require("../../../slicing/criterion/parse");
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* Execute happens-before queries on the given analyzer.
|
|
11
|
+
* This checks, whether for two given slicing criteria `a` and `b`, `a` happens before `b` in the control flow graph.
|
|
11
12
|
*/
|
|
12
13
|
async function executeHappensBefore({ analyzer }, queries) {
|
|
13
14
|
const start = Date.now();
|
|
@@ -13,7 +13,7 @@ export interface HappensBeforeQueryResult extends BaseQueryResult {
|
|
|
13
13
|
}
|
|
14
14
|
export declare const HappensBeforeQueryDefinition: {
|
|
15
15
|
readonly executor: typeof executeHappensBefore;
|
|
16
|
-
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider
|
|
16
|
+
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
17
17
|
readonly schema: Joi.ObjectSchema<any>;
|
|
18
18
|
readonly flattenInvolvedNodes: () => never[];
|
|
19
19
|
};
|
|
@@ -10,7 +10,7 @@ export interface IdMapQueryResult extends BaseQueryResult {
|
|
|
10
10
|
}
|
|
11
11
|
export declare const IdMapQueryDefinition: {
|
|
12
12
|
readonly executor: typeof executeIdMapQuery;
|
|
13
|
-
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider
|
|
13
|
+
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
14
14
|
readonly schema: Joi.ObjectSchema<any>;
|
|
15
15
|
readonly flattenInvolvedNodes: () => never[];
|
|
16
16
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { InspectHigherOrderQuery, InspectHigherOrderQueryResult } from './inspect-higher-order-query-format';
|
|
2
2
|
import type { BasicQueryData } from '../../base-query-format';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Execute higher-order function inspection queries on the given analyzer.
|
|
5
5
|
*/
|
|
6
6
|
export declare function executeHigherOrderQuery({ analyzer }: BasicQueryData, queries: readonly InspectHigherOrderQuery[]): Promise<InspectHigherOrderQueryResult>;
|
|
@@ -5,7 +5,7 @@ const parse_1 = require("../../../slicing/criterion/parse");
|
|
|
5
5
|
const vertex_1 = require("../../../dataflow/graph/vertex");
|
|
6
6
|
const higher_order_function_1 = require("../../../dataflow/fn/higher-order-function");
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* Execute higher-order function inspection queries on the given analyzer.
|
|
9
9
|
*/
|
|
10
10
|
async function executeHigherOrderQuery({ analyzer }, queries) {
|
|
11
11
|
const start = Date.now();
|
|
@@ -16,7 +16,7 @@ export interface InspectHigherOrderQueryResult extends BaseQueryResult {
|
|
|
16
16
|
}
|
|
17
17
|
export declare const InspectHigherOrderQueryDefinition: {
|
|
18
18
|
readonly executor: typeof executeHigherOrderQuery;
|
|
19
|
-
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, processed: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider
|
|
19
|
+
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, processed: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => Promise<boolean>;
|
|
20
20
|
readonly schema: Joi.ObjectSchema<any>;
|
|
21
21
|
readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
|
|
22
22
|
};
|
|
@@ -27,7 +27,7 @@ declare function linterQueryLineParser(output: ReplOutput, line: readonly string
|
|
|
27
27
|
declare function linterQueryCompleter(line: readonly string[], startingNewArg: boolean, _config: FlowrConfigOptions): CommandCompletions;
|
|
28
28
|
export declare const LinterQueryDefinition: {
|
|
29
29
|
readonly executor: typeof executeLinterQuery;
|
|
30
|
-
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter,
|
|
30
|
+
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
31
31
|
readonly completer: typeof linterQueryCompleter;
|
|
32
32
|
readonly fromLine: typeof linterQueryLineParser;
|
|
33
33
|
readonly schema: Joi.ObjectSchema<any>;
|
|
@@ -12,6 +12,7 @@ const ansi_1 = require("../../../util/text/ansi");
|
|
|
12
12
|
const time_1 = require("../../../util/text/time");
|
|
13
13
|
const doc_code_1 = require("../../../documentation/doc-util/doc-code");
|
|
14
14
|
const retriever_1 = require("../../../r-bridge/retriever");
|
|
15
|
+
const assert_1 = require("../../../util/assert");
|
|
15
16
|
function rulesFromInput(output, rulesPart) {
|
|
16
17
|
return rulesPart
|
|
17
18
|
.reduce((acc, ruleName) => {
|
|
@@ -78,9 +79,18 @@ function linterQueryCompleter(line, startingNewArg, _config) {
|
|
|
78
79
|
}
|
|
79
80
|
exports.LinterQueryDefinition = {
|
|
80
81
|
executor: linter_query_executor_1.executeLinterQuery,
|
|
81
|
-
asciiSummarizer: (formatter,
|
|
82
|
+
asciiSummarizer: (formatter, analyzer, queryResults, result) => {
|
|
82
83
|
const out = queryResults;
|
|
83
84
|
result.push(`Query: ${(0, ansi_1.bold)('linter', formatter)} (${(0, time_1.printAsMs)(out['.meta'].timing, 0)})`);
|
|
85
|
+
const allDidFail = Object.values(out.results).every(r => (0, linter_format_1.isLintingResultsError)(r));
|
|
86
|
+
if (allDidFail) {
|
|
87
|
+
result.push('All linting rules failed to execute.');
|
|
88
|
+
if (analyzer.inspectContext().files.loadingOrder.getUnorderedRequests().length === 0) {
|
|
89
|
+
result.push(formatter.format('No requests to lint for were found in the analysis.', { color: 1 /* Colors.Red */, effect: ansi_1.ColorEffect.Foreground, style: 1 /* FontStyles.Bold */ }));
|
|
90
|
+
result.push('If you consider this an error, please report a bug: ' + (0, assert_1.getGuardIssueUrl)('analyzer found no requests to lint for'));
|
|
91
|
+
}
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
84
94
|
for (const [ruleName, results] of Object.entries(out.results)) {
|
|
85
95
|
addLintingRuleResult(ruleName, results, result);
|
|
86
96
|
}
|
|
@@ -101,7 +111,8 @@ function addLintingRuleResult(ruleName, results, result) {
|
|
|
101
111
|
const rule = linter_rules_1.LintingRules[ruleName];
|
|
102
112
|
result.push(` ╰ **${rule.info.name}** (${ruleName}):`);
|
|
103
113
|
if ((0, linter_format_1.isLintingResultsError)(results)) {
|
|
104
|
-
|
|
114
|
+
const error = results.error.includes('At least one request must be set') ? 'No requests to lint for were found in the analysis.' : 'Error during execution of rule: ' + results.error;
|
|
115
|
+
result.push(` ╰ ${error}`);
|
|
105
116
|
return;
|
|
106
117
|
}
|
|
107
118
|
for (const certainty of [linter_format_1.LintingResultCertainty.Certain, linter_format_1.LintingResultCertainty.Uncertain]) {
|
|
@@ -39,7 +39,8 @@ async function executeLocationMapQuery({ analyzer }, queries) {
|
|
|
39
39
|
};
|
|
40
40
|
let count = 0;
|
|
41
41
|
const inverseMap = new Map();
|
|
42
|
-
|
|
42
|
+
await analyzer.dataflow(); // ensure all files are considered
|
|
43
|
+
for (const file of analyzer.inspectContext().files.consideredFilesList()) {
|
|
43
44
|
locationMap.files[count] = file;
|
|
44
45
|
inverseMap.set(file, count);
|
|
45
46
|
count++;
|
|
@@ -25,7 +25,7 @@ export interface LocationMapQueryResult extends BaseQueryResult {
|
|
|
25
25
|
ids: Record<NodeId, [FileId, SourceRange]>;
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
|
-
declare function locationMapLineParser(
|
|
28
|
+
declare function locationMapLineParser(_output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions): ParsedQueryLine<'location-map'>;
|
|
29
29
|
export declare const LocationMapQueryDefinition: {
|
|
30
30
|
readonly executor: typeof executeLocationMapQuery;
|
|
31
31
|
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: unknown, queryResults: BaseQueryResult, result: string[]) => true;
|
|
@@ -10,7 +10,7 @@ const time_1 = require("../../../util/text/time");
|
|
|
10
10
|
const joi_1 = __importDefault(require("joi"));
|
|
11
11
|
const query_print_1 = require("../../query-print");
|
|
12
12
|
const slice_query_parser_1 = require("../../../cli/repl/parser/slice-query-parser");
|
|
13
|
-
function locationMapLineParser(
|
|
13
|
+
function locationMapLineParser(_output, line, _config) {
|
|
14
14
|
const criteria = (0, slice_query_parser_1.sliceCriteriaParser)(line[0]);
|
|
15
15
|
return {
|
|
16
16
|
query: {
|
|
@@ -13,7 +13,7 @@ export interface NormalizedAstQueryResult extends BaseQueryResult {
|
|
|
13
13
|
}
|
|
14
14
|
export declare const NormalizedAstQueryDefinition: {
|
|
15
15
|
readonly executor: typeof executeNormalizedAstQuery;
|
|
16
|
-
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider
|
|
16
|
+
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
17
17
|
readonly schema: Joi.ObjectSchema<any>;
|
|
18
18
|
readonly flattenInvolvedNodes: () => never[];
|
|
19
19
|
};
|
|
@@ -18,7 +18,7 @@ export interface OriginQueryResult extends BaseQueryResult {
|
|
|
18
18
|
declare function originQueryLineParser(output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions): ParsedQueryLine<'origin'>;
|
|
19
19
|
export declare const OriginQueryDefinition: {
|
|
20
20
|
readonly executor: typeof executeResolveValueQuery;
|
|
21
|
-
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider
|
|
21
|
+
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
22
22
|
readonly fromLine: typeof originQueryLineParser;
|
|
23
23
|
readonly schema: Joi.ObjectSchema<any>;
|
|
24
24
|
readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
|
|
@@ -9,12 +9,14 @@ async function executeProjectQuery({ analyzer }, queries) {
|
|
|
9
9
|
if (queries.length !== 1) {
|
|
10
10
|
log_1.log.warn('Project query expects only up to one query, but got', queries.length);
|
|
11
11
|
}
|
|
12
|
+
// we need to know what is considered by the analyzer
|
|
13
|
+
await analyzer.dataflow();
|
|
12
14
|
return {
|
|
13
15
|
'.meta': {
|
|
14
16
|
/* there is no sense in measuring a get */
|
|
15
17
|
timing: 0
|
|
16
18
|
},
|
|
17
|
-
files:
|
|
19
|
+
files: [...analyzer.inspectContext().files.consideredFilesList()]
|
|
18
20
|
};
|
|
19
21
|
}
|
|
20
22
|
//# sourceMappingURL=project-query-executor.js.map
|
|
@@ -9,7 +9,7 @@ export interface ProjectQueryResult extends BaseQueryResult {
|
|
|
9
9
|
}
|
|
10
10
|
export declare const ProjectQueryDefinition: {
|
|
11
11
|
readonly executor: typeof executeProjectQuery;
|
|
12
|
-
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider
|
|
12
|
+
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
13
13
|
readonly schema: Joi.ObjectSchema<any>;
|
|
14
14
|
readonly flattenInvolvedNodes: () => never[];
|
|
15
15
|
};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { ResolveValueQuery, ResolveValueQueryResult } from './resolve-value-query-format';
|
|
2
2
|
import type { BasicQueryData } from '../../base-query-format';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Naive fingerprint to filter out duplicate queries.
|
|
5
5
|
*/
|
|
6
6
|
export declare function fingerPrintOfQuery(query: ResolveValueQuery): string;
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* Executes a resolve-value query.
|
|
9
9
|
*/
|
|
10
10
|
export declare function executeResolveValueQuery({ analyzer }: BasicQueryData, queries: readonly ResolveValueQuery[]): Promise<ResolveValueQueryResult>;
|
|
@@ -6,13 +6,13 @@ const log_1 = require("../../../util/log");
|
|
|
6
6
|
const parse_1 = require("../../../slicing/criterion/parse");
|
|
7
7
|
const alias_tracking_1 = require("../../../dataflow/eval/resolve/alias-tracking");
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* Naive fingerprint to filter out duplicate queries.
|
|
10
10
|
*/
|
|
11
11
|
function fingerPrintOfQuery(query) {
|
|
12
12
|
return JSON.stringify(query);
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* Executes a resolve-value query.
|
|
16
16
|
*/
|
|
17
17
|
async function executeResolveValueQuery({ analyzer }, queries) {
|
|
18
18
|
const start = Date.now();
|
|
@@ -19,7 +19,7 @@ export interface ResolveValueQueryResult extends BaseQueryResult {
|
|
|
19
19
|
declare function resolveValueLineParser(output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions): ParsedQueryLine<'resolve-value'>;
|
|
20
20
|
export declare const ResolveValueQueryDefinition: {
|
|
21
21
|
readonly executor: typeof executeResolveValueQuery;
|
|
22
|
-
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider
|
|
22
|
+
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
23
23
|
readonly fromLine: typeof resolveValueLineParser;
|
|
24
24
|
readonly schema: Joi.ObjectSchema<any>;
|
|
25
25
|
readonly flattenInvolvedNodes: () => never[];
|