@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
|
@@ -15,7 +15,7 @@ export interface SearchQueryResult extends BaseQueryResult {
|
|
|
15
15
|
}
|
|
16
16
|
export declare const SearchQueryDefinition: {
|
|
17
17
|
readonly executor: typeof executeSearch;
|
|
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
|
};
|
|
@@ -37,7 +37,7 @@ async function executeStaticSliceQuery({ analyzer }, queries) {
|
|
|
37
37
|
}
|
|
38
38
|
else {
|
|
39
39
|
const reconstructStart = Date.now();
|
|
40
|
-
const reconstruct = (0, reconstruct_1.reconstructToCode)(await analyzer.normalize(), slice.result, noMagicComments ? auto_select_defaults_1.doNotAutoSelect : (0, magic_comments_1.makeMagicCommentHandler)(auto_select_defaults_1.doNotAutoSelect));
|
|
40
|
+
const reconstruct = (0, reconstruct_1.reconstructToCode)(await analyzer.normalize(), { nodes: slice.result }, noMagicComments ? auto_select_defaults_1.doNotAutoSelect : (0, magic_comments_1.makeMagicCommentHandler)(auto_select_defaults_1.doNotAutoSelect));
|
|
41
41
|
const reconstructEnd = Date.now();
|
|
42
42
|
results[key] = {
|
|
43
43
|
slice: { ...slice, '.meta': { timing: sliceEnd - sliceStart } },
|
|
@@ -34,7 +34,7 @@ export interface StaticSliceQueryResult extends BaseQueryResult {
|
|
|
34
34
|
declare function sliceQueryLineParser(output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions): ParsedQueryLine<'static-slice'>;
|
|
35
35
|
export declare const StaticSliceQueryDefinition: {
|
|
36
36
|
readonly executor: typeof executeStaticSliceQuery;
|
|
37
|
-
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider
|
|
37
|
+
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
38
38
|
readonly fromLine: typeof sliceQueryLineParser;
|
|
39
39
|
readonly schema: Joi.ObjectSchema<any>;
|
|
40
40
|
readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
|
|
@@ -30,6 +30,17 @@ exports.StaticSliceQueryDefinition = {
|
|
|
30
30
|
executor: static_slice_query_executor_1.executeStaticSliceQuery,
|
|
31
31
|
asciiSummarizer: (formatter, _analyzer, queryResults, result) => {
|
|
32
32
|
const out = queryResults;
|
|
33
|
+
if (Object.keys(out.results).length === 1) {
|
|
34
|
+
// just print the single result without fingerprint
|
|
35
|
+
const [, obj] = Object.entries(out.results)[0];
|
|
36
|
+
if ('reconstruct' in obj) {
|
|
37
|
+
const code = Array.isArray(obj.reconstruct.code) ? obj.reconstruct.code : [obj.reconstruct.code];
|
|
38
|
+
if (code.length === 1) {
|
|
39
|
+
result.push(code[0]);
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
33
44
|
result.push(`Query: ${(0, ansi_1.bold)('static-slice', formatter)} (${(0, time_1.printAsMs)(out['.meta'].timing, 0)})`);
|
|
34
45
|
for (const [fingerprint, obj] of Object.entries(out.results)) {
|
|
35
46
|
const { criteria, noMagicComments, noReconstruction } = JSON.parse(fingerprint);
|
|
@@ -42,7 +53,8 @@ exports.StaticSliceQueryDefinition = {
|
|
|
42
53
|
}
|
|
43
54
|
result.push(` ╰ Slice for {${criteria.join(', ')}} ${addons.join(', ')}`);
|
|
44
55
|
if ('reconstruct' in obj) {
|
|
45
|
-
|
|
56
|
+
const code = Array.isArray(obj.reconstruct.code) ? obj.reconstruct.code : [obj.reconstruct.code];
|
|
57
|
+
result.push(' ╰ Code (newline as <code>\n</code>): <code>' + code.flatMap(c => c.split('\n')).join('\\n') + '</code>');
|
|
46
58
|
}
|
|
47
59
|
else {
|
|
48
60
|
result.push(` ╰ Id List: {${(0, query_print_1.summarizeIdsIfTooLong)(formatter, [...obj.slice.result])}}`);
|
package/queries/query.d.ts
CHANGED
|
@@ -51,6 +51,10 @@ export interface SupportedQuery<QueryType extends BaseQueryFormat['type'] = Base
|
|
|
51
51
|
completer?: (splitLine: readonly string[], startingNewArg: boolean, config: FlowrConfigOptions) => CommandCompletions;
|
|
52
52
|
/** optional query construction from an, e.g., repl line */
|
|
53
53
|
fromLine?: (output: ReplOutput, splitLine: readonly string[], config: FlowrConfigOptions) => ParsedQueryLine<QueryType>;
|
|
54
|
+
/**
|
|
55
|
+
* Generates an ASCII summary of the query result to be printed in, e.g., the REPL.
|
|
56
|
+
* @returns whether a summary was produced (`true` if so, `false` if not, in this case a default/generic summary will be created)
|
|
57
|
+
*/
|
|
54
58
|
asciiSummarizer: (formatter: OutputFormatter, analyzer: ReadonlyFlowrAnalysisProvider, queryResults: BaseQueryResult, resultStrings: string[], query: readonly Query[]) => AsyncOrSync<boolean>;
|
|
55
59
|
jsonFormatter?: (queryResults: BaseQueryResult) => object;
|
|
56
60
|
schema: Joi.ObjectSchema;
|
|
@@ -77,109 +81,109 @@ export declare const SupportedQueries: {
|
|
|
77
81
|
};
|
|
78
82
|
readonly 'control-flow': {
|
|
79
83
|
readonly executor: typeof import("./catalog/control-flow-query/control-flow-query-executor").executeControlFlowQuery;
|
|
80
|
-
readonly asciiSummarizer: (formatter: OutputFormatter, analyzer: ReadonlyFlowrAnalysisProvider
|
|
84
|
+
readonly asciiSummarizer: (formatter: OutputFormatter, analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => Promise<boolean>;
|
|
81
85
|
readonly schema: Joi.ObjectSchema<any>;
|
|
82
86
|
readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
|
|
83
87
|
};
|
|
84
88
|
readonly dataflow: {
|
|
85
89
|
readonly executor: typeof import("./catalog/dataflow-query/dataflow-query-executor").executeDataflowQuery;
|
|
86
|
-
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider
|
|
90
|
+
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
87
91
|
readonly schema: Joi.ObjectSchema<any>;
|
|
88
92
|
readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
|
|
89
93
|
};
|
|
90
94
|
readonly 'dataflow-lens': {
|
|
91
95
|
readonly executor: typeof import("./catalog/dataflow-lens-query/dataflow-lens-query-executor").executeDataflowLensQuery;
|
|
92
|
-
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider
|
|
96
|
+
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
93
97
|
readonly schema: Joi.ObjectSchema<any>;
|
|
94
98
|
readonly flattenInvolvedNodes: () => never[];
|
|
95
99
|
};
|
|
96
100
|
readonly 'df-shape': {
|
|
97
101
|
readonly executor: typeof import("./catalog/df-shape-query/df-shape-query-executor").executeDfShapeQuery;
|
|
98
|
-
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider
|
|
102
|
+
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
99
103
|
readonly jsonFormatter: (queryResults: BaseQueryResult) => object;
|
|
100
|
-
readonly fromLine: (
|
|
104
|
+
readonly fromLine: (_output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions) => ParsedQueryLine<"df-shape">;
|
|
101
105
|
readonly schema: Joi.ObjectSchema<any>;
|
|
102
106
|
readonly flattenInvolvedNodes: () => never[];
|
|
103
107
|
};
|
|
104
108
|
readonly 'id-map': {
|
|
105
109
|
readonly executor: typeof import("./catalog/id-map-query/id-map-query-executor").executeIdMapQuery;
|
|
106
|
-
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider
|
|
110
|
+
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
107
111
|
readonly schema: Joi.ObjectSchema<any>;
|
|
108
112
|
readonly flattenInvolvedNodes: () => never[];
|
|
109
113
|
};
|
|
110
114
|
readonly 'normalized-ast': {
|
|
111
115
|
readonly executor: typeof import("./catalog/normalized-ast-query/normalized-ast-query-executor").executeNormalizedAstQuery;
|
|
112
|
-
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider
|
|
116
|
+
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
113
117
|
readonly schema: Joi.ObjectSchema<any>;
|
|
114
118
|
readonly flattenInvolvedNodes: () => never[];
|
|
115
119
|
};
|
|
116
120
|
readonly 'dataflow-cluster': {
|
|
117
121
|
readonly executor: typeof import("./catalog/cluster-query/cluster-query-executor").executeDataflowClusterQuery;
|
|
118
|
-
readonly asciiSummarizer: (formatter: OutputFormatter, analyzer: ReadonlyFlowrAnalysisProvider
|
|
122
|
+
readonly asciiSummarizer: (formatter: OutputFormatter, analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => Promise<boolean>;
|
|
119
123
|
readonly schema: Joi.ObjectSchema<any>;
|
|
120
124
|
readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
|
|
121
125
|
};
|
|
122
126
|
readonly 'static-slice': {
|
|
123
127
|
readonly executor: typeof import("./catalog/static-slice-query/static-slice-query-executor").executeStaticSliceQuery;
|
|
124
|
-
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider
|
|
128
|
+
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
125
129
|
readonly fromLine: (output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions) => ParsedQueryLine<"static-slice">;
|
|
126
130
|
readonly schema: Joi.ObjectSchema<any>;
|
|
127
131
|
readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
|
|
128
132
|
};
|
|
129
133
|
readonly dependencies: {
|
|
130
134
|
readonly executor: typeof import("./catalog/dependencies-query/dependencies-query-executor").executeDependenciesQuery;
|
|
131
|
-
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider
|
|
135
|
+
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[], queries: readonly Query[]) => true;
|
|
132
136
|
readonly schema: Joi.ObjectSchema<any>;
|
|
133
137
|
readonly flattenInvolvedNodes: (queryResults: BaseQueryResult, query: readonly Query[]) => NodeId[];
|
|
134
138
|
};
|
|
135
139
|
readonly 'location-map': {
|
|
136
140
|
readonly executor: typeof import("./catalog/location-map-query/location-map-query-executor").executeLocationMapQuery;
|
|
137
141
|
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: unknown, queryResults: BaseQueryResult, result: string[]) => true;
|
|
138
|
-
readonly fromLine: (
|
|
142
|
+
readonly fromLine: (_output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions) => ParsedQueryLine<"location-map">;
|
|
139
143
|
readonly schema: Joi.ObjectSchema<any>;
|
|
140
144
|
readonly flattenInvolvedNodes: () => never[];
|
|
141
145
|
};
|
|
142
146
|
readonly search: {
|
|
143
147
|
readonly executor: typeof import("./catalog/search-query/search-query-executor").executeSearch;
|
|
144
|
-
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider
|
|
148
|
+
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
145
149
|
readonly schema: Joi.ObjectSchema<any>;
|
|
146
150
|
readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
|
|
147
151
|
};
|
|
148
152
|
readonly 'happens-before': {
|
|
149
153
|
readonly executor: typeof import("./catalog/happens-before-query/happens-before-query-executor").executeHappensBefore;
|
|
150
|
-
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider
|
|
154
|
+
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
151
155
|
readonly schema: Joi.ObjectSchema<any>;
|
|
152
156
|
readonly flattenInvolvedNodes: () => never[];
|
|
153
157
|
};
|
|
154
158
|
readonly 'inspect-higher-order': {
|
|
155
159
|
readonly executor: typeof import("./catalog/inspect-higher-order-query/inspect-higher-order-query-executor").executeHigherOrderQuery;
|
|
156
|
-
readonly asciiSummarizer: (formatter: OutputFormatter, processed: ReadonlyFlowrAnalysisProvider
|
|
160
|
+
readonly asciiSummarizer: (formatter: OutputFormatter, processed: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => Promise<boolean>;
|
|
157
161
|
readonly schema: Joi.ObjectSchema<any>;
|
|
158
162
|
readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
|
|
159
163
|
};
|
|
160
164
|
readonly 'resolve-value': {
|
|
161
165
|
readonly executor: typeof import("./catalog/resolve-value-query/resolve-value-query-executor").executeResolveValueQuery;
|
|
162
|
-
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider
|
|
166
|
+
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
163
167
|
readonly fromLine: (output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions) => ParsedQueryLine<"resolve-value">;
|
|
164
168
|
readonly schema: Joi.ObjectSchema<any>;
|
|
165
169
|
readonly flattenInvolvedNodes: () => never[];
|
|
166
170
|
};
|
|
167
171
|
readonly project: {
|
|
168
172
|
readonly executor: typeof import("./catalog/project-query/project-query-executor").executeProjectQuery;
|
|
169
|
-
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider
|
|
173
|
+
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
170
174
|
readonly schema: Joi.ObjectSchema<any>;
|
|
171
175
|
readonly flattenInvolvedNodes: () => never[];
|
|
172
176
|
};
|
|
173
177
|
readonly origin: {
|
|
174
178
|
readonly executor: typeof import("./catalog/origin-query/origin-query-executor").executeResolveValueQuery;
|
|
175
|
-
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider
|
|
179
|
+
readonly asciiSummarizer: (formatter: OutputFormatter, _analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
176
180
|
readonly fromLine: (output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions) => ParsedQueryLine<"origin">;
|
|
177
181
|
readonly schema: Joi.ObjectSchema<any>;
|
|
178
182
|
readonly flattenInvolvedNodes: (queryResults: BaseQueryResult) => NodeId[];
|
|
179
183
|
};
|
|
180
184
|
readonly linter: {
|
|
181
185
|
readonly executor: typeof import("./catalog/linter-query/linter-query-executor").executeLinterQuery;
|
|
182
|
-
readonly asciiSummarizer: (formatter: OutputFormatter,
|
|
186
|
+
readonly asciiSummarizer: (formatter: OutputFormatter, analyzer: ReadonlyFlowrAnalysisProvider<import("../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[]) => true;
|
|
183
187
|
readonly completer: (line: readonly string[], startingNewArg: boolean, _config: FlowrConfigOptions) => CommandCompletions;
|
|
184
188
|
readonly fromLine: (output: ReplOutput, line: readonly string[], _config: FlowrConfigOptions) => ParsedQueryLine<"linter">;
|
|
185
189
|
readonly schema: Joi.ObjectSchema<any>;
|
|
@@ -224,4 +228,8 @@ export declare function AnyQuerySchema(): Joi.AlternativesSchema<any>;
|
|
|
224
228
|
* Produces a Joi schema representing an array of supported queries.
|
|
225
229
|
*/
|
|
226
230
|
export declare function QueriesSchema(): Joi.ArraySchema<any[]>;
|
|
231
|
+
/**
|
|
232
|
+
* Wraps a function that executes a REPL query and, if it fails, checks whether there were any requests to analyze.
|
|
233
|
+
*/
|
|
234
|
+
export declare function genericWrapReplFailIfNoRequest<T>(fn: () => Promise<T>, output: ReplOutput, analyzer: ReadonlyFlowrAnalysisProvider): Promise<T | undefined>;
|
|
227
235
|
export {};
|
package/queries/query.js
CHANGED
|
@@ -10,6 +10,7 @@ exports.SupportedQueriesSchema = SupportedQueriesSchema;
|
|
|
10
10
|
exports.VirtualQuerySchema = VirtualQuerySchema;
|
|
11
11
|
exports.AnyQuerySchema = AnyQuerySchema;
|
|
12
12
|
exports.QueriesSchema = QueriesSchema;
|
|
13
|
+
exports.genericWrapReplFailIfNoRequest = genericWrapReplFailIfNoRequest;
|
|
13
14
|
const call_context_query_format_1 = require("./catalog/call-context-query/call-context-query-format");
|
|
14
15
|
const assert_1 = require("../util/assert");
|
|
15
16
|
const virtual_queries_1 = require("./virtual-query/virtual-queries");
|
|
@@ -19,6 +20,7 @@ const normalized_ast_query_format_1 = require("./catalog/normalized-ast-query/no
|
|
|
19
20
|
const static_slice_query_format_1 = require("./catalog/static-slice-query/static-slice-query-format");
|
|
20
21
|
const cluster_query_format_1 = require("./catalog/cluster-query/cluster-query-format");
|
|
21
22
|
const dependencies_query_format_1 = require("./catalog/dependencies-query/dependencies-query-format");
|
|
23
|
+
const ansi_1 = require("../util/text/ansi");
|
|
22
24
|
const joi_1 = __importDefault(require("joi"));
|
|
23
25
|
const location_map_query_format_1 = require("./catalog/location-map-query/location-map-query-format");
|
|
24
26
|
const config_query_format_1 = require("./catalog/config-query/config-query-format");
|
|
@@ -105,7 +107,7 @@ async function executeQueries(data, queries) {
|
|
|
105
107
|
results.push([type, result]);
|
|
106
108
|
}
|
|
107
109
|
catch (e) {
|
|
108
|
-
log_1.log.
|
|
110
|
+
log_1.log.warn(e);
|
|
109
111
|
results.push([type, undefined]);
|
|
110
112
|
}
|
|
111
113
|
}
|
|
@@ -145,4 +147,22 @@ function AnyQuerySchema() {
|
|
|
145
147
|
function QueriesSchema() {
|
|
146
148
|
return joi_1.default.array().items(AnyQuerySchema()).description('Queries to run on the file analysis information (in the form of an array)');
|
|
147
149
|
}
|
|
150
|
+
/**
|
|
151
|
+
* Wraps a function that executes a REPL query and, if it fails, checks whether there were any requests to analyze.
|
|
152
|
+
*/
|
|
153
|
+
async function genericWrapReplFailIfNoRequest(fn, output, analyzer) {
|
|
154
|
+
try {
|
|
155
|
+
return await fn();
|
|
156
|
+
}
|
|
157
|
+
catch (e) {
|
|
158
|
+
if (analyzer.inspectContext().files.loadingOrder.getUnorderedRequests().length === 0) {
|
|
159
|
+
output.stderr(output.formatter.format('No requests to analyze were found.', { color: 1 /* Colors.Red */, style: 1 /* FontStyles.Bold */, effect: ansi_1.ColorEffect.Foreground })
|
|
160
|
+
+ '\nIf you consider this an error, please report a bug: '
|
|
161
|
+
+ (0, assert_1.getGuardIssueUrl)('analyzer found no requests to analyze'));
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
throw e;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
148
168
|
//# sourceMappingURL=query.js.map
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { RNode } from './model';
|
|
2
2
|
import type { NodeId } from './processing/node-id';
|
|
3
3
|
import type { ParentInformation } from './processing/decorate';
|
|
4
|
+
import type { RProject } from './nodes/r-project';
|
|
4
5
|
/**
|
|
5
6
|
* Collects all node ids within a tree given by a respective root node
|
|
6
7
|
* @param nodes - The root id nodes to start collecting from
|
|
7
8
|
* @param stop - A function that determines whether to stop collecting at a given node, does not stop by default
|
|
8
9
|
*/
|
|
9
|
-
export declare function collectAllIds<OtherInfo>(nodes: RNode<OtherInfo & ParentInformation> | (RNode<OtherInfo & ParentInformation> | null | undefined)[] | undefined, stop?: (node: RNode<OtherInfo & ParentInformation>) => boolean): Set<NodeId>;
|
|
10
|
+
export declare function collectAllIds<OtherInfo>(nodes: RProject<OtherInfo & ParentInformation> | RNode<OtherInfo & ParentInformation> | (RNode<OtherInfo & ParentInformation> | null | undefined)[] | undefined, stop?: (node: RNode<OtherInfo & ParentInformation>) => boolean): Set<NodeId>;
|
|
@@ -2,12 +2,16 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.collectAllIds = collectAllIds;
|
|
4
4
|
const visitor_1 = require("./processing/visitor");
|
|
5
|
+
const type_1 = require("./type");
|
|
5
6
|
/**
|
|
6
7
|
* Collects all node ids within a tree given by a respective root node
|
|
7
8
|
* @param nodes - The root id nodes to start collecting from
|
|
8
9
|
* @param stop - A function that determines whether to stop collecting at a given node, does not stop by default
|
|
9
10
|
*/
|
|
10
11
|
function collectAllIds(nodes, stop = () => false) {
|
|
12
|
+
if (nodes && 'type' in nodes && nodes.type === type_1.RType.Project) {
|
|
13
|
+
nodes = nodes.files.map(f => f.root);
|
|
14
|
+
}
|
|
11
15
|
const ids = new Set();
|
|
12
16
|
(0, visitor_1.visitAst)(nodes, (node) => {
|
|
13
17
|
if (stop(node)) {
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { NoInfo } from '../model';
|
|
2
|
+
import { RType } from '../type';
|
|
3
|
+
import type { RExpressionList } from './r-expression-list';
|
|
4
|
+
import type { NodeId } from '../processing/node-id';
|
|
5
|
+
/**
|
|
6
|
+
* Holds a single R file starting with an expression list.
|
|
7
|
+
*/
|
|
8
|
+
export interface RProjectFile<Info = NoInfo> {
|
|
9
|
+
readonly filePath?: string;
|
|
10
|
+
readonly root: RExpressionList<Info>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Holds a collection of files (started with the expression list)
|
|
14
|
+
* @see {@link RExpressionList} - for the root of each file
|
|
15
|
+
* @see {@link mergeProjects} - to merge multiple projects into a single one
|
|
16
|
+
* @see {@link RProjectFile} - for each file in the project
|
|
17
|
+
*/
|
|
18
|
+
export interface RProject<Info = NoInfo> {
|
|
19
|
+
readonly type: RType.Project;
|
|
20
|
+
readonly files: RProjectFile<Info>[];
|
|
21
|
+
readonly info?: {
|
|
22
|
+
id: NodeId;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Merge multiple projects into a single one by concatenating their files.
|
|
27
|
+
* This will remove the `info` property of the resulting project.
|
|
28
|
+
*/
|
|
29
|
+
export declare function mergeProjects<Info = NoInfo>(projects: RProject<Info>[]): RProject<Info>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mergeProjects = mergeProjects;
|
|
4
|
+
const type_1 = require("../type");
|
|
5
|
+
/**
|
|
6
|
+
* Merge multiple projects into a single one by concatenating their files.
|
|
7
|
+
* This will remove the `info` property of the resulting project.
|
|
8
|
+
*/
|
|
9
|
+
function mergeProjects(projects) {
|
|
10
|
+
return {
|
|
11
|
+
type: type_1.RType.Project,
|
|
12
|
+
files: projects.flatMap(p => p.files)
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=r-project.js.map
|
|
@@ -14,12 +14,13 @@ import type { MergeableRecord } from '../../../../../util/objects';
|
|
|
14
14
|
import { RoleInParent } from './role';
|
|
15
15
|
import type { NodeId } from './node-id';
|
|
16
16
|
import type { RDelimiter } from '../nodes/info/r-delimiter';
|
|
17
|
+
import type { RProject } from '../nodes/r-project';
|
|
17
18
|
/**
|
|
18
19
|
* A function that given an RNode returns a (guaranteed) unique id for it
|
|
19
20
|
* @param data - the node to generate an id for
|
|
20
21
|
* @returns a unique id for the given node
|
|
21
22
|
*/
|
|
22
|
-
export type IdGenerator<OtherInfo> = (data: RNode<OtherInfo>) => NodeId;
|
|
23
|
+
export type IdGenerator<OtherInfo> = (data: RProject<OtherInfo> | RNode<OtherInfo>) => NodeId;
|
|
23
24
|
/**
|
|
24
25
|
* The simplest id generator which just increments a number on each call.
|
|
25
26
|
*/
|
|
@@ -71,7 +72,7 @@ export type AstIdMap<OtherInfo = NoInfo> = BiMap<NodeId, RNodeWithParent<OtherIn
|
|
|
71
72
|
* Contains the normalized AST as a doubly linked tree
|
|
72
73
|
* and a map from ids to nodes so that parent links can be chased easily.
|
|
73
74
|
*/
|
|
74
|
-
export interface NormalizedAst<OtherInfo = ParentInformation, Node =
|
|
75
|
+
export interface NormalizedAst<OtherInfo = ParentInformation, Node = RProject<OtherInfo & ParentInformation>> {
|
|
75
76
|
/** Bidirectional mapping of ids to the corresponding nodes and the other way */
|
|
76
77
|
idMap: AstIdMap<OtherInfo>;
|
|
77
78
|
/** The root of the AST with parent information */
|
|
@@ -82,15 +83,12 @@ export interface NormalizedAst<OtherInfo = ParentInformation, Node = RNode<Other
|
|
|
82
83
|
export interface NormalizedAstDecorationConfiguration<OtherInfo> {
|
|
83
84
|
/** The id generator: must generate a unique id für each passed node */
|
|
84
85
|
getId?: IdGenerator<OtherInfo>;
|
|
85
|
-
/** the path to the file this AST was extracted from will be added to the nodes */
|
|
86
|
-
file?: string;
|
|
87
86
|
}
|
|
88
87
|
/**
|
|
89
88
|
* Covert the given AST into a doubly linked tree while assigning ids (so it stays serializable).
|
|
90
|
-
* @param
|
|
89
|
+
* @param project - The AST to decorate
|
|
91
90
|
* @param getId - The id generator: must generate a unique id für each passed node
|
|
92
|
-
* @param file - the path to the file this AST was extracted from will be added to the nodes
|
|
93
91
|
* @typeParam OtherInfo - The original decoration of the ast nodes (probably is nothing as the id decoration is most likely the first step to be performed after extraction)
|
|
94
92
|
* @returns A decorated AST based on the input and the id provider.
|
|
95
93
|
*/
|
|
96
|
-
export declare function decorateAst<OtherInfo = NoInfo>(
|
|
94
|
+
export declare function decorateAst<OtherInfo = NoInfo>(project: RProject<OtherInfo>, { getId }: NormalizedAstDecorationConfiguration<OtherInfo>): NormalizedAst<OtherInfo & ParentInformation>;
|
|
@@ -58,7 +58,7 @@ function nodeToLocationId(data) {
|
|
|
58
58
|
*/
|
|
59
59
|
function deterministicLocationIdGenerator(start = 0) {
|
|
60
60
|
let id = start;
|
|
61
|
-
return (data) => data.location !== undefined ? nodeToLocationId(data) : `${id++}`;
|
|
61
|
+
return (data) => 'location' in data && data.location !== undefined ? nodeToLocationId(data) : `${id++}`;
|
|
62
62
|
}
|
|
63
63
|
const defaultParentContext = {
|
|
64
64
|
role: "root" /* RoleInParent.Root */,
|
|
@@ -69,21 +69,19 @@ const nestForElement = new Set([
|
|
|
69
69
|
]);
|
|
70
70
|
/**
|
|
71
71
|
* Covert the given AST into a doubly linked tree while assigning ids (so it stays serializable).
|
|
72
|
-
* @param
|
|
72
|
+
* @param project - The AST to decorate
|
|
73
73
|
* @param getId - The id generator: must generate a unique id für each passed node
|
|
74
|
-
* @param file - the path to the file this AST was extracted from will be added to the nodes
|
|
75
74
|
* @typeParam OtherInfo - The original decoration of the ast nodes (probably is nothing as the id decoration is most likely the first step to be performed after extraction)
|
|
76
75
|
* @returns A decorated AST based on the input and the id provider.
|
|
77
76
|
*/
|
|
78
|
-
function decorateAst(
|
|
77
|
+
function decorateAst(project, { getId = deterministicCountingIdGenerator(0) }) {
|
|
79
78
|
const idMap = new bimap_1.BiMap();
|
|
80
|
-
const info = { idMap, getId, file };
|
|
79
|
+
const info = { idMap, getId, file: undefined };
|
|
81
80
|
/* Please note, that all fold processors do not re-create copies in higher-folding steps so that the idMap stays intact. */
|
|
82
81
|
const foldLeaf = createFoldForLeaf(info);
|
|
83
82
|
const foldBinaryOp = createFoldForBinaryOp(info);
|
|
84
83
|
const unaryOp = createFoldForUnaryOp(info);
|
|
85
|
-
|
|
86
|
-
const decoratedAst = (0, stateful_fold_1.foldAstStateful)(ast, 0, {
|
|
84
|
+
const folds = {
|
|
87
85
|
down: (n, nesting) => {
|
|
88
86
|
if (nestForElement.has(n.type)) {
|
|
89
87
|
return nesting + 1;
|
|
@@ -119,11 +117,26 @@ function decorateAst(ast, { getId = deterministicCountingIdGenerator(0), file })
|
|
|
119
117
|
foldArgument: createFoldForFunctionArgument(info),
|
|
120
118
|
foldParameter: createFoldForFunctionParameter(info)
|
|
121
119
|
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
|
|
120
|
+
};
|
|
121
|
+
// we return the project by mapping over the files
|
|
122
|
+
const decoratedProject = {
|
|
123
|
+
...project,
|
|
124
|
+
files: project.files.map(file => {
|
|
125
|
+
info.file = file.filePath;
|
|
126
|
+
const decoratedAst = (0, stateful_fold_1.foldAstStateful)(file.root, 0, folds);
|
|
127
|
+
decoratedAst.info.role = "root" /* RoleInParent.Root */;
|
|
128
|
+
decoratedAst.info.index = 0;
|
|
129
|
+
return {
|
|
130
|
+
root: decoratedAst,
|
|
131
|
+
filePath: file.filePath
|
|
132
|
+
};
|
|
133
|
+
}),
|
|
134
|
+
info: {
|
|
135
|
+
id: getId(project)
|
|
136
|
+
}
|
|
137
|
+
};
|
|
125
138
|
return {
|
|
126
|
-
ast:
|
|
139
|
+
ast: decoratedProject,
|
|
127
140
|
idMap
|
|
128
141
|
};
|
|
129
142
|
}
|
|
@@ -204,6 +204,8 @@ var RType;
|
|
|
204
204
|
/** {@link RSymbol} */
|
|
205
205
|
RType["Symbol"] = "RSymbol";
|
|
206
206
|
/* ------ special types ------ */
|
|
207
|
+
/** {@link RProject} */
|
|
208
|
+
RType["Project"] = "RProject";
|
|
207
209
|
/**
|
|
208
210
|
* {@link RDelimiter}.
|
|
209
211
|
* Is not part of the normalized AST but can be found in
|
|
@@ -61,7 +61,7 @@ function convertPreparedParsedData(roots) {
|
|
|
61
61
|
};
|
|
62
62
|
}
|
|
63
63
|
// Locate start, end of a source file (order children in advance).
|
|
64
|
-
const rootEntries =
|
|
64
|
+
const rootEntries = roots.slice().sort(orderOf);
|
|
65
65
|
const start = rootEntries[0];
|
|
66
66
|
const end = rootEntries[rootEntries.length - 1];
|
|
67
67
|
// Construct CsvEntry for the root, handling empty input.
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
import { type IdGenerator, type NormalizedAst } from '../../model/processing/decorate';
|
|
2
|
-
import type { NoInfo
|
|
3
|
-
import type { ParseStepOutput } from '../../../../parser';
|
|
2
|
+
import type { NoInfo } from '../../model/model';
|
|
3
|
+
import type { ParseStepOutput, ParseStepOutputSingleFile } from '../../../../parser';
|
|
4
4
|
import { type FlowrConfigOptions } from '../../../../../config';
|
|
5
5
|
import type { Tree } from 'web-tree-sitter';
|
|
6
|
+
import type { RProject } from '../../model/nodes/r-project';
|
|
6
7
|
export declare const parseLog: import("tslog").Logger<import("tslog").ILogObj>;
|
|
7
8
|
/**
|
|
8
9
|
* Take the output as produced by the parse step and normalize the AST from the R parser.
|
|
9
|
-
* @see {@link normalizeButNotDecorated} for a version that does not decorate the AST
|
|
10
|
-
* @see {@link normalizeTreeSitter} for a version that normalizes the AST from the TreeSitter parser
|
|
10
|
+
* @see {@link normalizeButNotDecorated} - for a version that does not decorate the AST
|
|
11
|
+
* @see {@link normalizeTreeSitter} - for a version that normalizes the AST from the TreeSitter parser
|
|
11
12
|
*/
|
|
12
|
-
export declare function normalize(parsed: ParseStepOutput<string>, getId?: IdGenerator<NoInfo
|
|
13
|
+
export declare function normalize(parsed: ParseStepOutput<string>, getId?: IdGenerator<NoInfo>): NormalizedAst;
|
|
13
14
|
/**
|
|
14
15
|
* Take the output as produced by the parse step and normalize the AST from the R parser.
|
|
15
|
-
* For additional decoration with
|
|
16
|
+
* For additional decoration with {@link decorateAst} use {@link normalize}.
|
|
16
17
|
*/
|
|
17
|
-
export declare function normalizeButNotDecorated({ parsed }:
|
|
18
|
+
export declare function normalizeButNotDecorated({ parsed, filePath }: ParseStepOutputSingleFile<string>): RProject;
|
|
18
19
|
/**
|
|
19
20
|
* Tree-Sitter pendant to {@link normalize}.
|
|
20
21
|
*/
|
|
21
|
-
export declare function normalizeTreeSitter(
|
|
22
|
+
export declare function normalizeTreeSitter(parsed: ParseStepOutput<Tree>, getId: IdGenerator<NoInfo> | undefined, config: FlowrConfigOptions): NormalizedAst;
|
|
@@ -10,31 +10,32 @@ const decorate_1 = require("../../model/processing/decorate");
|
|
|
10
10
|
const normalize_root_1 = require("../main/internal/structure/normalize-root");
|
|
11
11
|
const tree_sitter_normalize_1 = require("../../../tree-sitter/tree-sitter-normalize");
|
|
12
12
|
const config_1 = require("../../../../../config");
|
|
13
|
+
const r_project_1 = require("../../model/nodes/r-project");
|
|
13
14
|
exports.parseLog = log_1.log.getSubLogger({ name: 'ast-parser' });
|
|
14
15
|
/**
|
|
15
16
|
* Take the output as produced by the parse step and normalize the AST from the R parser.
|
|
16
|
-
* @see {@link normalizeButNotDecorated} for a version that does not decorate the AST
|
|
17
|
-
* @see {@link normalizeTreeSitter} for a version that normalizes the AST from the TreeSitter parser
|
|
17
|
+
* @see {@link normalizeButNotDecorated} - for a version that does not decorate the AST
|
|
18
|
+
* @see {@link normalizeTreeSitter} - for a version that normalizes the AST from the TreeSitter parser
|
|
18
19
|
*/
|
|
19
|
-
function normalize(parsed, getId = (0, decorate_1.deterministicCountingIdGenerator)(0)
|
|
20
|
-
return (0, decorate_1.decorateAst)(
|
|
20
|
+
function normalize(parsed, getId = (0, decorate_1.deterministicCountingIdGenerator)(0)) {
|
|
21
|
+
return (0, decorate_1.decorateAst)((0, r_project_1.mergeProjects)(parsed.files.map(normalizeButNotDecorated)), { getId });
|
|
21
22
|
}
|
|
22
23
|
/**
|
|
23
24
|
* Take the output as produced by the parse step and normalize the AST from the R parser.
|
|
24
|
-
* For additional decoration with
|
|
25
|
+
* For additional decoration with {@link decorateAst} use {@link normalize}.
|
|
25
26
|
*/
|
|
26
|
-
function normalizeButNotDecorated({ parsed }) {
|
|
27
|
+
function normalizeButNotDecorated({ parsed, filePath }) {
|
|
27
28
|
const data = { currentRange: undefined, currentLexeme: undefined };
|
|
28
29
|
const object = (0, format_1.convertPreparedParsedData)((0, format_1.prepareParsedData)(parsed));
|
|
29
|
-
return (0, normalize_root_1.normalizeRootObjToAst)(data, object);
|
|
30
|
+
return (0, normalize_root_1.normalizeRootObjToAst)(data, object, filePath);
|
|
30
31
|
}
|
|
31
32
|
/**
|
|
32
33
|
* Tree-Sitter pendant to {@link normalize}.
|
|
33
34
|
*/
|
|
34
|
-
function normalizeTreeSitter(
|
|
35
|
+
function normalizeTreeSitter(parsed, getId = (0, decorate_1.deterministicCountingIdGenerator)(0), config) {
|
|
35
36
|
const lax = (0, config_1.getEngineConfig)(config, 'tree-sitter')?.lax;
|
|
36
|
-
const result = (0, decorate_1.decorateAst)((0, tree_sitter_normalize_1.normalizeTreeSitterTreeToAst)(parsed, lax), { getId
|
|
37
|
-
result.hasError = parsed.rootNode.hasError;
|
|
37
|
+
const result = (0, decorate_1.decorateAst)((0, tree_sitter_normalize_1.normalizeTreeSitterTreeToAst)(parsed.files, lax), { getId });
|
|
38
|
+
result.hasError = parsed.files.some(p => p.parsed.rootNode.hasError);
|
|
38
39
|
return result;
|
|
39
40
|
}
|
|
40
41
|
//# sourceMappingURL=parser.js.map
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { NormalizerData } from '../../normalizer-data';
|
|
2
|
-
import type { RExpressionList } from '../../../../model/nodes/r-expression-list';
|
|
3
2
|
import type { JsonEntry } from '../../../json/format';
|
|
3
|
+
import type { RProject } from '../../../../model/nodes/r-project';
|
|
4
4
|
/**
|
|
5
|
-
* Takes the parse
|
|
5
|
+
* Takes the parse data as object and produces an undecorated, normalized AST.
|
|
6
|
+
* @see {@link normalize} - for a version that also decorates the AST
|
|
6
7
|
*/
|
|
7
|
-
export declare function normalizeRootObjToAst(data: NormalizerData, obj: JsonEntry):
|
|
8
|
+
export declare function normalizeRootObjToAst(data: NormalizerData, obj: JsonEntry, filePath?: string): RProject;
|
|
@@ -7,9 +7,10 @@ const log_1 = require("../../../../../../../util/log");
|
|
|
7
7
|
const arrays_1 = require("../../../../../../../util/collections/arrays");
|
|
8
8
|
const type_1 = require("../../../../model/type");
|
|
9
9
|
/**
|
|
10
|
-
* Takes the parse
|
|
10
|
+
* Takes the parse data as object and produces an undecorated, normalized AST.
|
|
11
|
+
* @see {@link normalize} - for a version that also decorates the AST
|
|
11
12
|
*/
|
|
12
|
-
function normalizeRootObjToAst(data, obj) {
|
|
13
|
+
function normalizeRootObjToAst(data, obj, filePath) {
|
|
13
14
|
const exprContent = obj.token;
|
|
14
15
|
(0, normalize_meta_1.assureTokenType)(exprContent, type_1.RawRType.ExpressionList);
|
|
15
16
|
let parsedChildren = [];
|
|
@@ -22,15 +23,23 @@ function normalizeRootObjToAst(data, obj) {
|
|
|
22
23
|
}
|
|
23
24
|
const [delimiters, nodes] = (0, arrays_1.partition)(parsedChildren, x => x.type === type_1.RType.Delimiter || x.type === type_1.RType.Comment);
|
|
24
25
|
return {
|
|
25
|
-
type: type_1.RType.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
26
|
+
type: type_1.RType.Project,
|
|
27
|
+
files: [
|
|
28
|
+
{
|
|
29
|
+
filePath,
|
|
30
|
+
root: {
|
|
31
|
+
type: type_1.RType.ExpressionList,
|
|
32
|
+
children: nodes,
|
|
33
|
+
grouping: undefined,
|
|
34
|
+
lexeme: undefined,
|
|
35
|
+
info: {
|
|
36
|
+
fullRange: data.currentRange,
|
|
37
|
+
additionalTokens: delimiters,
|
|
38
|
+
fullLexeme: data.currentLexeme
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
]
|
|
34
43
|
};
|
|
35
44
|
}
|
|
36
45
|
//# sourceMappingURL=normalize-root.js.map
|