@eagleoutice/flowr 2.6.2 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -34
- package/abstract-interpretation/data-frame/absint-visitor.d.ts +1 -1
- package/abstract-interpretation/data-frame/absint-visitor.js +6 -6
- package/abstract-interpretation/data-frame/dataframe-domain.d.ts +4 -7
- package/abstract-interpretation/data-frame/dataframe-domain.js +5 -11
- package/abstract-interpretation/data-frame/mappers/access-mapper.d.ts +3 -1
- package/abstract-interpretation/data-frame/mappers/access-mapper.js +3 -2
- package/abstract-interpretation/data-frame/mappers/arguments.js +2 -2
- package/abstract-interpretation/data-frame/mappers/assignment-mapper.d.ts +3 -1
- package/abstract-interpretation/data-frame/mappers/assignment-mapper.js +3 -2
- package/abstract-interpretation/data-frame/mappers/function-mapper.d.ts +7 -7
- package/abstract-interpretation/data-frame/mappers/function-mapper.js +28 -24
- package/abstract-interpretation/data-frame/mappers/replacement-mapper.d.ts +3 -1
- package/abstract-interpretation/data-frame/mappers/replacement-mapper.js +3 -2
- package/abstract-interpretation/data-frame/semantics.js +54 -41
- package/abstract-interpretation/data-frame/shape-inference.d.ts +3 -3
- package/abstract-interpretation/data-frame/shape-inference.js +3 -3
- package/abstract-interpretation/domains/abstract-domain.d.ts +1 -0
- package/abstract-interpretation/domains/abstract-domain.js +3 -2
- package/abstract-interpretation/domains/bounded-set-domain.js +1 -1
- package/abstract-interpretation/domains/interval-domain.d.ts +2 -2
- package/abstract-interpretation/domains/interval-domain.js +3 -6
- package/abstract-interpretation/domains/lattice.d.ts +2 -0
- package/abstract-interpretation/domains/lattice.js +3 -1
- package/abstract-interpretation/domains/positive-interval-domain.d.ts +1 -1
- package/abstract-interpretation/domains/positive-interval-domain.js +1 -1
- package/abstract-interpretation/domains/satisfiable-domain.d.ts +2 -2
- package/abstract-interpretation/domains/satisfiable-domain.js +2 -2
- package/abstract-interpretation/domains/set-range-domain.d.ts +98 -0
- package/abstract-interpretation/domains/set-range-domain.js +400 -0
- package/abstract-interpretation/domains/set-upper-bound-domain.js +2 -2
- package/abstract-interpretation/domains/singleton-domain.js +2 -2
- package/abstract-interpretation/normalized-ast-fold.d.ts +1 -1
- package/benchmark/slicer.d.ts +3 -1
- package/benchmark/slicer.js +50 -27
- package/benchmark/stats/print.js +8 -5
- package/benchmark/stats/stats.d.ts +3 -2
- package/benchmark/summarizer/data.d.ts +11 -8
- package/benchmark/summarizer/first-phase/process.js +12 -9
- package/benchmark/summarizer/second-phase/graph.d.ts +3 -1
- package/benchmark/summarizer/second-phase/graph.js +3 -1
- package/benchmark/summarizer/second-phase/process.js +24 -18
- package/cli/export-quads-app.js +1 -1
- package/cli/repl/commands/repl-dataflow.js +2 -1
- package/cli/repl/commands/repl-parse.js +16 -4
- package/cli/repl/commands/repl-query.js +1 -1
- package/cli/repl/core.js +16 -13
- package/cli/repl/server/connection.js +2 -1
- package/cli/script-core/statistics-helper-core.js +2 -1
- package/cli/slicer-app.js +3 -4
- package/cli/wiki.d.ts +4 -0
- package/cli/wiki.js +165 -0
- package/config.d.ts +4 -0
- package/config.js +6 -0
- package/control-flow/cfg-dead-code.js +14 -3
- package/control-flow/cfg-simplification.d.ts +5 -2
- package/control-flow/cfg-simplification.js +3 -0
- package/control-flow/extract-cfg.d.ts +9 -3
- package/control-flow/extract-cfg.js +44 -4
- package/control-flow/semantic-cfg-guided-visitor.d.ts +2 -2
- package/control-flow/simple-visitor.js +2 -2
- package/control-flow/useless-loop.d.ts +3 -3
- package/control-flow/useless-loop.js +16 -5
- package/core/pipeline-executor.d.ts +3 -6
- package/core/pipeline-executor.js +4 -7
- package/core/print/normalize-printer.d.ts +1 -1
- package/core/print/normalize-printer.js +2 -2
- package/core/steps/all/core/00-parse.d.ts +1 -1
- package/core/steps/all/core/00-parse.js +1 -1
- package/core/steps/all/core/10-normalize.d.ts +3 -9
- package/core/steps/all/core/10-normalize.js +1 -16
- package/core/steps/all/core/11-normalize-tree-sitter.d.ts +2 -3
- package/core/steps/all/core/11-normalize-tree-sitter.js +2 -3
- package/core/steps/all/core/20-dataflow.d.ts +3 -4
- package/core/steps/all/core/20-dataflow.js +2 -2
- package/core/steps/all/static-slicing/00-slice.d.ts +4 -2
- package/core/steps/all/static-slicing/00-slice.js +3 -2
- package/core/steps/all/static-slicing/10-reconstruct.d.ts +8 -0
- package/core/steps/all/static-slicing/10-reconstruct.js +4 -1
- package/core/steps/pipeline/default-pipelines.d.ts +94 -95
- package/core/steps/pipeline/default-pipelines.js +8 -8
- package/dataflow/cluster.js +2 -2
- package/dataflow/environments/append.d.ts +5 -0
- package/dataflow/environments/append.js +6 -20
- package/dataflow/environments/built-in.d.ts +2 -1
- package/dataflow/environments/clone.d.ts +1 -2
- package/dataflow/environments/clone.js +3 -17
- package/dataflow/environments/define.d.ts +7 -3
- package/dataflow/environments/define.js +9 -56
- package/dataflow/environments/diff.js +3 -3
- package/dataflow/environments/environment.d.ts +48 -28
- package/dataflow/environments/environment.js +187 -62
- package/dataflow/environments/overwrite.d.ts +1 -5
- package/dataflow/environments/overwrite.js +2 -61
- package/dataflow/environments/reference-to-maybe.d.ts +13 -0
- package/dataflow/environments/reference-to-maybe.js +54 -0
- package/dataflow/environments/resolve-by-name.d.ts +6 -1
- package/dataflow/environments/resolve-by-name.js +56 -4
- package/dataflow/environments/scoping.d.ts +8 -4
- package/dataflow/environments/scoping.js +13 -9
- package/dataflow/eval/resolve/alias-tracking.d.ts +10 -4
- package/dataflow/eval/resolve/alias-tracking.js +15 -13
- package/dataflow/eval/resolve/resolve-argument.d.ts +2 -1
- package/dataflow/eval/resolve/resolve-argument.js +10 -10
- package/dataflow/eval/resolve/resolve.d.ts +13 -11
- package/dataflow/eval/resolve/resolve.js +16 -15
- package/dataflow/eval/values/string/string-constants.d.ts +9 -3
- package/dataflow/eval/values/string/string-constants.js +9 -3
- package/dataflow/extractor.d.ts +2 -3
- package/dataflow/extractor.js +25 -28
- package/dataflow/fn/higher-order-function.d.ts +2 -1
- package/dataflow/fn/higher-order-function.js +4 -4
- package/dataflow/graph/dataflowgraph-builder.d.ts +9 -5
- package/dataflow/graph/dataflowgraph-builder.js +21 -11
- package/dataflow/graph/diff-dataflow-graph.js +2 -2
- package/dataflow/graph/graph.d.ts +13 -11
- package/dataflow/graph/graph.js +40 -24
- package/dataflow/graph/invert-dfg.d.ts +3 -2
- package/dataflow/graph/invert-dfg.js +3 -3
- package/dataflow/graph/resolve-graph.d.ts +2 -1
- package/dataflow/graph/resolve-graph.js +2 -2
- package/dataflow/graph/unknown-replacement.d.ts +4 -2
- package/dataflow/graph/unknown-replacement.js +4 -2
- package/dataflow/graph/vertex.d.ts +3 -3
- package/dataflow/graph/vertex.js +3 -3
- package/dataflow/info.d.ts +8 -1
- package/dataflow/info.js +21 -0
- package/dataflow/internal/linker.js +10 -11
- package/dataflow/internal/process/functions/call/argument/make-argument.d.ts +2 -2
- package/dataflow/internal/process/functions/call/argument/make-argument.js +2 -3
- package/dataflow/internal/process/functions/call/argument/unpack-argument.d.ts +7 -1
- package/dataflow/internal/process/functions/call/argument/unpack-argument.js +12 -3
- package/dataflow/internal/process/functions/call/built-in/built-in-access.d.ts +1 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-access.js +7 -7
- package/dataflow/internal/process/functions/call/built-in/built-in-apply.js +2 -2
- package/dataflow/internal/process/functions/call/built-in/built-in-assignment.d.ts +3 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-assignment.js +6 -6
- package/dataflow/internal/process/functions/call/built-in/built-in-eval.js +14 -14
- package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.js +10 -8
- package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.js +4 -4
- package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.d.ts +2 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.js +10 -14
- package/dataflow/internal/process/functions/call/built-in/built-in-get.d.ts +1 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-get.js +2 -2
- package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.d.ts +3 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.js +8 -6
- package/dataflow/internal/process/functions/call/built-in/built-in-library.js +1 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-list.js +2 -2
- package/dataflow/internal/process/functions/call/built-in/built-in-pipe.js +4 -4
- package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.d.ts +6 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.js +7 -2
- package/dataflow/internal/process/functions/call/built-in/built-in-replacement.js +5 -5
- package/dataflow/internal/process/functions/call/built-in/built-in-rm.js +6 -4
- package/dataflow/internal/process/functions/call/built-in/built-in-source.d.ts +15 -10
- package/dataflow/internal/process/functions/call/built-in/built-in-source.js +78 -75
- package/dataflow/internal/process/functions/call/built-in/built-in-special-bin-op.d.ts +3 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-special-bin-op.js +3 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-vector.js +2 -2
- package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.js +5 -5
- package/dataflow/internal/process/functions/call/common.d.ts +1 -1
- package/dataflow/internal/process/functions/call/common.js +6 -7
- package/dataflow/internal/process/functions/call/default-call-handling.d.ts +3 -1
- package/dataflow/internal/process/functions/call/default-call-handling.js +3 -1
- package/dataflow/internal/process/functions/call/known-call-handling.js +4 -4
- package/dataflow/internal/process/functions/call/named-call-handling.js +4 -4
- package/dataflow/internal/process/functions/call/unnamed-call-handling.js +1 -1
- package/dataflow/internal/process/functions/process-argument.js +1 -1
- package/dataflow/internal/process/functions/process-parameter.js +4 -4
- package/dataflow/internal/process/process-symbol.js +1 -1
- package/dataflow/internal/process/process-value.d.ts +1 -1
- package/dataflow/internal/process/process-value.js +7 -7
- package/dataflow/origin/dfg-get-symbol-refs.d.ts +1 -1
- package/dataflow/origin/dfg-get-symbol-refs.js +1 -1
- package/dataflow/processor.d.ts +7 -16
- package/documentation/data/dfg/doc-data-dfg-util.d.ts +0 -2
- package/documentation/data/faq/faqs.js +27 -18
- package/documentation/data/faq/recommended-configs.d.ts +36 -0
- package/documentation/data/faq/recommended-configs.js +40 -0
- package/documentation/data/faq/wiki-faq-store.d.ts +1 -0
- package/documentation/data/faq/wiki-faq-store.js +10 -2
- package/documentation/data/server/doc-data-server-messages.js +1 -1
- package/documentation/doc-capabilities.d.ts +9 -0
- package/documentation/{print-capabilities-markdown.js → doc-capabilities.js} +18 -21
- package/documentation/doc-readme.d.ts +9 -0
- package/documentation/{print-readme.js → doc-readme.js} +31 -35
- package/documentation/doc-util/doc-benchmarks.d.ts +6 -4
- package/documentation/doc-util/doc-benchmarks.js +6 -4
- package/documentation/doc-util/doc-cfg.js +5 -8
- package/documentation/doc-util/doc-dfg.d.ts +7 -7
- package/documentation/doc-util/doc-dfg.js +15 -14
- package/documentation/doc-util/doc-escape.d.ts +6 -0
- package/documentation/doc-util/doc-escape.js +11 -0
- package/documentation/doc-util/doc-general.d.ts +22 -2
- package/documentation/doc-util/doc-general.js +22 -2
- package/documentation/doc-util/doc-normalized-ast.d.ts +10 -5
- package/documentation/doc-util/doc-normalized-ast.js +14 -10
- package/documentation/doc-util/doc-query.d.ts +12 -4
- package/documentation/doc-util/doc-query.js +18 -11
- package/documentation/doc-util/doc-search.d.ts +0 -30
- package/documentation/doc-util/doc-search.js +2 -73
- package/documentation/doc-util/doc-server-message.d.ts +5 -5
- package/documentation/doc-util/doc-server-message.js +4 -4
- package/documentation/doc-util/doc-types.d.ts +69 -32
- package/documentation/doc-util/doc-types.js +109 -62
- package/documentation/index.d.ts +9 -9
- package/documentation/index.js +9 -9
- package/documentation/issue-linting-rule.d.ts +9 -0
- package/documentation/{print-linter-issue.js → issue-linting-rule.js} +20 -23
- package/documentation/wiki-analyzer.d.ts +9 -0
- package/documentation/wiki-analyzer.js +425 -0
- package/documentation/wiki-cfg.d.ts +9 -0
- package/documentation/{print-cfg-wiki.js → wiki-cfg.js} +144 -160
- package/documentation/wiki-core.d.ts +14 -0
- package/documentation/{print-core-wiki.js → wiki-core.js} +164 -175
- package/documentation/wiki-dataflow-graph.d.ts +9 -0
- package/documentation/{print-dataflow-graph-wiki.js → wiki-dataflow-graph.js} +146 -177
- package/documentation/wiki-engine.d.ts +9 -0
- package/documentation/{print-engines-wiki.js → wiki-engine.js} +27 -42
- package/documentation/wiki-faq.d.ts +8 -0
- package/documentation/wiki-faq.js +21 -0
- package/documentation/wiki-interface.d.ts +9 -0
- package/documentation/{print-interface-wiki.js → wiki-interface.js} +59 -56
- package/documentation/wiki-linter.d.ts +9 -0
- package/documentation/{print-linter-wiki.js → wiki-linter.js} +52 -48
- package/documentation/wiki-linting-and-testing.d.ts +9 -0
- package/documentation/{print-linting-and-testing-wiki.js → wiki-linting-and-testing.js} +25 -32
- package/documentation/wiki-mk/doc-context.d.ts +186 -0
- package/documentation/wiki-mk/doc-context.js +84 -0
- package/documentation/wiki-mk/doc-maker.d.ts +95 -0
- package/documentation/wiki-mk/doc-maker.js +134 -0
- package/documentation/wiki-normalized-ast.d.ts +9 -0
- package/documentation/{print-normalized-ast-wiki.js → wiki-normalized-ast.js} +64 -47
- package/documentation/wiki-onboarding.d.ts +8 -0
- package/documentation/{print-onboarding-wiki.js → wiki-onboarding.js} +18 -15
- package/documentation/wiki-query.d.ts +9 -0
- package/documentation/{print-query-wiki.js → wiki-query.js} +62 -47
- package/documentation/wiki-search.d.ts +9 -0
- package/documentation/wiki-search.js +61 -0
- package/linter/linter-executor.js +3 -2
- package/linter/linter-format.d.ts +2 -2
- package/linter/linter-rules.d.ts +15 -19
- package/linter/rules/absolute-path.d.ts +1 -2
- package/linter/rules/absolute-path.js +5 -5
- package/linter/rules/dataframe-access-validation.d.ts +2 -2
- package/linter/rules/dataframe-access-validation.js +13 -9
- package/linter/rules/dead-code.d.ts +1 -1
- package/linter/rules/deprecated-functions.d.ts +1 -5
- package/linter/rules/file-path-validity.d.ts +1 -1
- package/linter/rules/file-path-validity.js +4 -4
- package/linter/rules/function-finder-util.d.ts +3 -7
- package/linter/rules/function-finder-util.js +1 -1
- package/linter/rules/naming-convention.d.ts +2 -2
- package/linter/rules/naming-convention.js +1 -1
- package/linter/rules/network-functions.d.ts +1 -1
- package/linter/rules/network-functions.js +1 -1
- package/linter/rules/seeded-randomness.d.ts +4 -3
- package/linter/rules/seeded-randomness.js +38 -18
- package/linter/rules/unused-definition.d.ts +1 -1
- package/linter/rules/useless-loop.d.ts +2 -2
- package/linter/rules/useless-loop.js +2 -2
- package/package.json +5 -17
- package/project/cache/flowr-analyzer-cache.d.ts +7 -10
- package/project/cache/flowr-analyzer-cache.js +17 -38
- package/project/cache/flowr-analyzer-controlflow-cache.d.ts +34 -0
- package/project/cache/flowr-analyzer-controlflow-cache.js +79 -0
- package/project/context/flowr-analyzer-context.d.ts +37 -5
- package/project/context/flowr-analyzer-context.js +51 -4
- package/project/context/flowr-analyzer-environment-context.d.ts +47 -0
- package/project/context/flowr-analyzer-environment-context.js +50 -0
- package/project/context/flowr-analyzer-files-context.d.ts +63 -13
- package/project/context/flowr-analyzer-files-context.js +110 -39
- package/project/context/flowr-file.d.ts +32 -10
- package/project/context/flowr-file.js +30 -9
- package/project/flowr-analyzer-builder.d.ts +22 -28
- package/project/flowr-analyzer-builder.js +32 -70
- package/project/flowr-analyzer.d.ts +55 -14
- package/project/flowr-analyzer.js +53 -8
- package/project/plugins/file-plugins/flowr-analyzer-description-file-plugin.d.ts +7 -1
- package/project/plugins/file-plugins/flowr-analyzer-description-file-plugin.js +13 -5
- package/project/plugins/file-plugins/flowr-analyzer-file-plugin.d.ts +3 -3
- package/project/plugins/file-plugins/flowr-analyzer-file-plugin.js +11 -5
- package/project/plugins/file-plugins/flowr-description-file.d.ts +3 -3
- package/project/plugins/file-plugins/notebooks/flowr-analyzer-jupyter-file-plugin.d.ts +22 -0
- package/project/plugins/file-plugins/notebooks/flowr-analyzer-jupyter-file-plugin.js +33 -0
- package/project/plugins/file-plugins/notebooks/flowr-analyzer-qmd-file-plugin.d.ts +22 -0
- package/project/plugins/file-plugins/notebooks/flowr-analyzer-qmd-file-plugin.js +33 -0
- package/project/plugins/file-plugins/notebooks/flowr-analyzer-rmd-file-plugin.d.ts +22 -0
- package/project/plugins/file-plugins/notebooks/flowr-analyzer-rmd-file-plugin.js +33 -0
- package/project/plugins/file-plugins/notebooks/flowr-jupyter-file.d.ts +20 -0
- package/project/plugins/file-plugins/notebooks/flowr-jupyter-file.js +42 -0
- package/project/plugins/file-plugins/notebooks/flowr-rmarkdown-file.d.ts +59 -0
- package/project/plugins/file-plugins/notebooks/flowr-rmarkdown-file.js +132 -0
- package/project/plugins/file-plugins/notebooks/notebook.d.ts +0 -0
- package/project/plugins/file-plugins/notebooks/notebook.js +2 -0
- package/project/plugins/flowr-analyzer-plugin-defaults.d.ts +5 -0
- package/project/plugins/flowr-analyzer-plugin-defaults.js +23 -0
- package/project/plugins/flowr-analyzer-plugin.d.ts +2 -0
- package/project/plugins/flowr-analyzer-plugin.js +2 -0
- package/project/plugins/loading-order-plugins/flowr-analyzer-loading-order-description-file-plugin.js +1 -1
- package/project/plugins/package-version-plugins/flowr-analyzer-package-versions-description-file-plugin.js +1 -1
- package/project/plugins/plugin-registry.d.ts +34 -0
- package/project/plugins/plugin-registry.js +62 -0
- package/project/plugins/project-discovery/flowr-analyzer-project-discovery-plugin.js +7 -1
- package/queries/catalog/call-context-query/call-context-query-executor.js +5 -6
- package/queries/catalog/call-context-query/identify-link-to-last-call-relation.d.ts +5 -2
- package/queries/catalog/call-context-query/identify-link-to-last-call-relation.js +25 -18
- package/queries/catalog/cluster-query/cluster-query-format.d.ts +1 -1
- package/queries/catalog/control-flow-query/control-flow-query-format.d.ts +1 -1
- package/queries/catalog/control-flow-query/control-flow-query-format.js +3 -2
- package/queries/catalog/dataflow-lens-query/dataflow-lens-query-executor.js +1 -1
- package/queries/catalog/dataflow-lens-query/dataflow-lens-query-format.d.ts +1 -1
- package/queries/catalog/dataflow-query/dataflow-query-format.d.ts +1 -1
- package/queries/catalog/dependencies-query/dependencies-query-executor.d.ts +1 -1
- package/queries/catalog/dependencies-query/dependencies-query-executor.js +5 -5
- package/queries/catalog/dependencies-query/dependencies-query-format.d.ts +1 -1
- package/queries/catalog/dependencies-query/dependencies-query-format.js +1 -1
- package/queries/catalog/df-shape-query/df-shape-query-executor.d.ts +1 -1
- package/queries/catalog/df-shape-query/df-shape-query-executor.js +2 -2
- package/queries/catalog/df-shape-query/df-shape-query-format.d.ts +6 -6
- package/queries/catalog/df-shape-query/df-shape-query-format.js +8 -7
- package/queries/catalog/happens-before-query/happens-before-query-executor.d.ts +2 -1
- package/queries/catalog/happens-before-query/happens-before-query-executor.js +2 -1
- package/queries/catalog/happens-before-query/happens-before-query-format.d.ts +1 -1
- package/queries/catalog/id-map-query/id-map-query-format.d.ts +1 -1
- package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-executor.d.ts +1 -1
- package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-executor.js +4 -4
- package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-format.d.ts +1 -1
- package/queries/catalog/linter-query/linter-query-format.d.ts +1 -1
- package/queries/catalog/linter-query/linter-query-format.js +13 -2
- package/queries/catalog/location-map-query/location-map-query-executor.js +2 -1
- package/queries/catalog/location-map-query/location-map-query-format.d.ts +1 -1
- package/queries/catalog/location-map-query/location-map-query-format.js +1 -1
- package/queries/catalog/normalized-ast-query/normalized-ast-query-format.d.ts +1 -1
- package/queries/catalog/origin-query/origin-query-format.d.ts +1 -1
- package/queries/catalog/project-query/project-query-executor.js +3 -1
- package/queries/catalog/project-query/project-query-format.d.ts +1 -1
- package/queries/catalog/resolve-value-query/resolve-value-query-executor.d.ts +2 -2
- package/queries/catalog/resolve-value-query/resolve-value-query-executor.js +3 -3
- package/queries/catalog/resolve-value-query/resolve-value-query-format.d.ts +1 -1
- package/queries/catalog/search-query/search-query-format.d.ts +1 -1
- package/queries/catalog/static-slice-query/static-slice-query-executor.js +2 -2
- package/queries/catalog/static-slice-query/static-slice-query-format.d.ts +1 -1
- package/queries/catalog/static-slice-query/static-slice-query-format.js +13 -1
- package/queries/query.d.ts +26 -18
- package/queries/query.js +21 -1
- package/r-bridge/lang-4.x/ast/model/collect.d.ts +2 -1
- package/r-bridge/lang-4.x/ast/model/collect.js +4 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-project.d.ts +29 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-project.js +15 -0
- package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +5 -7
- package/r-bridge/lang-4.x/ast/model/processing/decorate.js +24 -11
- package/r-bridge/lang-4.x/ast/model/type.d.ts +2 -0
- package/r-bridge/lang-4.x/ast/model/type.js +2 -0
- package/r-bridge/lang-4.x/ast/parser/json/format.js +1 -1
- package/r-bridge/lang-4.x/ast/parser/json/parser.d.ts +9 -8
- package/r-bridge/lang-4.x/ast/parser/json/parser.js +11 -10
- package/r-bridge/lang-4.x/ast/parser/main/internal/structure/normalize-root.d.ts +4 -3
- package/r-bridge/lang-4.x/ast/parser/main/internal/structure/normalize-root.js +20 -11
- package/r-bridge/lang-4.x/tree-sitter/tree-sitter-executor.d.ts +3 -3
- package/r-bridge/lang-4.x/tree-sitter/tree-sitter-executor.js +5 -4
- package/r-bridge/lang-4.x/tree-sitter/tree-sitter-normalize.d.ts +3 -2
- package/r-bridge/lang-4.x/tree-sitter/tree-sitter-normalize.js +14 -5
- package/r-bridge/parser.d.ts +15 -5
- package/r-bridge/parser.js +27 -13
- package/r-bridge/retriever.d.ts +9 -15
- package/r-bridge/retriever.js +14 -5
- package/r-bridge/shell.d.ts +1 -1
- package/r-bridge/shell.js +1 -1
- package/reconstruct/auto-select/auto-select-defaults.d.ts +0 -1
- package/reconstruct/auto-select/magic-comments.js +1 -1
- package/reconstruct/reconstruct.d.ts +17 -9
- package/reconstruct/reconstruct.js +19 -8
- package/search/flowr-search.d.ts +12 -0
- package/search/search-executor/search-enrichers.d.ts +9 -2
- package/search/search-executor/search-enrichers.js +1 -3
- package/search/search-executor/search-generators.d.ts +1 -1
- package/search/search-executor/search-generators.js +9 -4
- package/slicing/criterion/collect-all.d.ts +3 -2
- package/slicing/criterion/collect-all.js +1 -1
- package/slicing/criterion/parse.js +4 -4
- package/slicing/static/slice-call.d.ts +3 -2
- package/slicing/static/slice-call.js +4 -4
- package/slicing/static/static-slicer.d.ts +3 -1
- package/slicing/static/static-slicer.js +6 -7
- package/statistics/features/supported/assignments/assignments.js +1 -1
- package/statistics/features/supported/control-flow/control-flow.js +2 -2
- package/statistics/features/supported/data-access/data-access.js +1 -1
- package/statistics/features/supported/defined-functions/defined-functions.js +1 -1
- package/statistics/features/supported/expression-list/statistics-expression-list.js +1 -1
- package/statistics/features/supported/loops/loops.js +1 -1
- package/statistics/features/supported/used-functions/used-functions.js +2 -2
- package/statistics/features/supported/variables/variables.js +3 -2
- package/statistics/statistics.js +3 -2
- package/util/assert.d.ts +4 -0
- package/util/assert.js +4 -0
- package/util/containers.js +1 -1
- package/util/files.d.ts +1 -1
- package/util/files.js +1 -1
- package/util/mermaid/ast.d.ts +4 -3
- package/util/mermaid/ast.js +36 -8
- package/util/mermaid/cfg.js +1 -1
- package/util/mermaid/dfg.d.ts +1 -0
- package/util/mermaid/dfg.js +3 -3
- package/util/simple-df/dfg-view.d.ts +2 -1
- package/util/simple-df/dfg-view.js +2 -2
- package/util/version.js +1 -1
- package/dataflow/environments/remove.d.ts +0 -12
- package/dataflow/environments/remove.js +0 -52
- package/documentation/print-analyzer-wiki.d.ts +0 -1
- package/documentation/print-analyzer-wiki.js +0 -141
- package/documentation/print-capabilities-markdown.d.ts +0 -1
- package/documentation/print-cfg-wiki.d.ts +0 -1
- package/documentation/print-core-wiki.d.ts +0 -5
- package/documentation/print-dataflow-graph-wiki.d.ts +0 -1
- package/documentation/print-engines-wiki.d.ts +0 -1
- package/documentation/print-faq-wiki.d.ts +0 -1
- package/documentation/print-faq-wiki.js +0 -18
- package/documentation/print-interface-wiki.d.ts +0 -1
- package/documentation/print-linter-issue.d.ts +0 -1
- package/documentation/print-linter-wiki.d.ts +0 -1
- package/documentation/print-linting-and-testing-wiki.d.ts +0 -1
- package/documentation/print-normalized-ast-wiki.d.ts +0 -1
- package/documentation/print-onboarding-wiki.d.ts +0 -1
- package/documentation/print-query-wiki.d.ts +0 -1
- package/documentation/print-readme.d.ts +0 -1
- package/documentation/print-search-wiki.d.ts +0 -1
- package/documentation/print-search-wiki.js +0 -74
- package/util/formats/adapter-format.d.ts +0 -6
- package/util/formats/adapter-format.js +0 -3
- package/util/formats/adapter.d.ts +0 -27
- package/util/formats/adapter.js +0 -58
- package/util/formats/adapters/r-adapter.d.ts +0 -4
- package/util/formats/adapters/r-adapter.js +0 -7
- package/util/formats/adapters/rmd-adapter.d.ts +0 -35
- package/util/formats/adapters/rmd-adapter.js +0 -100
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { PathLike } from 'fs';
|
|
2
|
+
import type { RParseRequest } from '../../r-bridge/retriever';
|
|
2
3
|
/**
|
|
3
4
|
* Just a readable alias for file paths, mostly for documentation purposes.
|
|
4
5
|
* We separate {@link PathLike} types from string paths that are used for project paths.
|
|
@@ -9,16 +10,26 @@ export type FilePath = string;
|
|
|
9
10
|
* This list may be extended in the future and reflects files that the {@link FlowrAnalyzer} can do something interesting with.
|
|
10
11
|
* If you add an interesting file that is only part of your plugin infrastructure, please use the `other` role.
|
|
11
12
|
*/
|
|
12
|
-
export declare enum
|
|
13
|
+
export declare enum FileRole {
|
|
13
14
|
/** The `DESCRIPTION` file in R packages, this is the only currently supported special file. */
|
|
14
15
|
Description = "description",
|
|
15
16
|
/** The `NAMESPACE` file in R packages, currently not specially supported. */
|
|
16
17
|
Namespace = "namespace",
|
|
17
18
|
/** Data files, e.g., `R/sysdata.rda`, currently not specially supported. */
|
|
18
19
|
Data = "data",
|
|
20
|
+
/**
|
|
21
|
+
* Catch-all for any file that provides usable R source code to incorporate into the analysis.
|
|
22
|
+
* Please note, that the loading order/inclusion and even potential relevance of these source files
|
|
23
|
+
* is determined by the loading order plugins (cf. {@link PluginType.LoadingOrder})
|
|
24
|
+
* in the {@link FlowrAnalyzerLoadingOrderContext}.
|
|
25
|
+
*/
|
|
26
|
+
Source = "source",
|
|
19
27
|
/** Other special files that are not specifically supported by flowR but may be interesting for some analyses. */
|
|
20
28
|
Other = "other"
|
|
21
29
|
}
|
|
30
|
+
export type StringableContent = {
|
|
31
|
+
toString(): string;
|
|
32
|
+
};
|
|
22
33
|
/**
|
|
23
34
|
* This is the basic interface for all files known to the FlowrAnalyzer.
|
|
24
35
|
* You can implement this interface to provide custom file loading mechanisms.
|
|
@@ -30,19 +41,23 @@ export declare enum SpecialFileRole {
|
|
|
30
41
|
* If you want to pass in inline text files, see {@link FlowrInlineTextFile}.
|
|
31
42
|
* @typeParam Content - The type of the content returned by the `content()` method.
|
|
32
43
|
*/
|
|
33
|
-
export interface FlowrFileProvider<Content
|
|
44
|
+
export interface FlowrFileProvider<Content extends {
|
|
45
|
+
toString(): string;
|
|
46
|
+
} = {
|
|
47
|
+
toString(): string;
|
|
48
|
+
}> {
|
|
34
49
|
/**
|
|
35
50
|
* The role of this file, if any, in general your file should _not_ decide for itself what role it has in the project context,
|
|
36
51
|
* this is for the loaders plugins to decide (cf. {@link PluginType}) as they can, e.g., respect ignore files, updated mappings, etc.
|
|
37
52
|
* However, they will 1) set this role as soon as they decide on it (using {@link assignRole}) and 2) try to respect an already assigned role (however, user configurations may override this).
|
|
38
53
|
*/
|
|
39
|
-
role?:
|
|
54
|
+
role?: FileRole;
|
|
40
55
|
/**
|
|
41
56
|
* The path to the file, this is used for identification and logging purposes.
|
|
42
57
|
* If the file does not exist on disk, this can be a virtual path (e.g. for inline files).
|
|
43
58
|
* Even though this is a getter, please make sure that the operation is cheap and deterministic (some decorators may overwrite the path, e.g., because they support other protocols).
|
|
44
59
|
*/
|
|
45
|
-
path():
|
|
60
|
+
path(): string;
|
|
46
61
|
/**
|
|
47
62
|
* The content of the file, this may be cached by the implementation and does not have to be expensive.
|
|
48
63
|
* You can used stream based implementations but right now there is no external, project-wide expressions of life cycles for files.
|
|
@@ -53,22 +68,29 @@ export interface FlowrFileProvider<Content = unknown> {
|
|
|
53
68
|
* Assign a role to this file, this should be done by the loader plugins (cf. {@link PluginType}).
|
|
54
69
|
* **Do not call this method yourself unless you are a file-loader plugin and/or really know what you are doing, this may break plugin assumptions!**
|
|
55
70
|
*/
|
|
56
|
-
assignRole(role:
|
|
71
|
+
assignRole(role: FileRole): void;
|
|
57
72
|
}
|
|
58
73
|
/**
|
|
59
74
|
* A basic implementation of the {@link FlowrFileProvider} interface that caches the content after the first load (i.e., updates on disk are ignored).
|
|
60
75
|
*
|
|
61
76
|
* See {@link FlowrTextFile} for a text-file specific implementation and {@link FlowrInlineTextFile} for inline text files.
|
|
62
77
|
*/
|
|
63
|
-
export declare abstract class FlowrFile<Content =
|
|
78
|
+
export declare abstract class FlowrFile<Content extends StringableContent = StringableContent> implements FlowrFileProvider<Content> {
|
|
64
79
|
private contentCache;
|
|
65
80
|
protected filePath: PathLike;
|
|
66
|
-
readonly role?:
|
|
67
|
-
|
|
68
|
-
|
|
81
|
+
readonly role?: FileRole;
|
|
82
|
+
static readonly INLINE_PATH = "@inline";
|
|
83
|
+
constructor(filePath: PathLike, role?: FileRole);
|
|
84
|
+
path(): string;
|
|
69
85
|
content(): Content;
|
|
70
86
|
protected abstract loadContent(): Content;
|
|
71
|
-
assignRole(role:
|
|
87
|
+
assignRole(role: FileRole): void;
|
|
88
|
+
/**
|
|
89
|
+
* Creates a {@link FlowrFile} from a given {@link RParseRequest}.
|
|
90
|
+
* @see {@link FlowrTextFile}
|
|
91
|
+
* @see {@link FlowrInlineTextFile}
|
|
92
|
+
*/
|
|
93
|
+
static fromRequest(request: RParseRequest): FlowrFile<string>;
|
|
72
94
|
}
|
|
73
95
|
/**
|
|
74
96
|
* A basic implementation of the {@link FlowrFileProvider} interface for text files that caches the content after the first load (i.e., updates on disk are ignored).
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.FlowrInlineTextFile = exports.FlowrTextFile = exports.FlowrFile = exports.
|
|
6
|
+
exports.FlowrInlineTextFile = exports.FlowrTextFile = exports.FlowrFile = exports.FileRole = void 0;
|
|
7
7
|
const fs_1 = __importDefault(require("fs"));
|
|
8
8
|
const assert_1 = require("../../util/assert");
|
|
9
9
|
/**
|
|
@@ -11,17 +11,24 @@ const assert_1 = require("../../util/assert");
|
|
|
11
11
|
* This list may be extended in the future and reflects files that the {@link FlowrAnalyzer} can do something interesting with.
|
|
12
12
|
* If you add an interesting file that is only part of your plugin infrastructure, please use the `other` role.
|
|
13
13
|
*/
|
|
14
|
-
var
|
|
15
|
-
(function (
|
|
14
|
+
var FileRole;
|
|
15
|
+
(function (FileRole) {
|
|
16
16
|
/** The `DESCRIPTION` file in R packages, this is the only currently supported special file. */
|
|
17
|
-
|
|
17
|
+
FileRole["Description"] = "description";
|
|
18
18
|
/** The `NAMESPACE` file in R packages, currently not specially supported. */
|
|
19
|
-
|
|
19
|
+
FileRole["Namespace"] = "namespace";
|
|
20
20
|
/** Data files, e.g., `R/sysdata.rda`, currently not specially supported. */
|
|
21
|
-
|
|
21
|
+
FileRole["Data"] = "data";
|
|
22
|
+
/**
|
|
23
|
+
* Catch-all for any file that provides usable R source code to incorporate into the analysis.
|
|
24
|
+
* Please note, that the loading order/inclusion and even potential relevance of these source files
|
|
25
|
+
* is determined by the loading order plugins (cf. {@link PluginType.LoadingOrder})
|
|
26
|
+
* in the {@link FlowrAnalyzerLoadingOrderContext}.
|
|
27
|
+
*/
|
|
28
|
+
FileRole["Source"] = "source";
|
|
22
29
|
/** Other special files that are not specifically supported by flowR but may be interesting for some analyses. */
|
|
23
|
-
|
|
24
|
-
})(
|
|
30
|
+
FileRole["Other"] = "other";
|
|
31
|
+
})(FileRole || (exports.FileRole = FileRole = {}));
|
|
25
32
|
/**
|
|
26
33
|
* A basic implementation of the {@link FlowrFileProvider} interface that caches the content after the first load (i.e., updates on disk are ignored).
|
|
27
34
|
*
|
|
@@ -31,12 +38,13 @@ class FlowrFile {
|
|
|
31
38
|
contentCache;
|
|
32
39
|
filePath;
|
|
33
40
|
role;
|
|
41
|
+
static INLINE_PATH = '@inline';
|
|
34
42
|
constructor(filePath, role) {
|
|
35
43
|
this.filePath = filePath;
|
|
36
44
|
this.role = role;
|
|
37
45
|
}
|
|
38
46
|
path() {
|
|
39
|
-
return this.filePath;
|
|
47
|
+
return this.filePath.toString();
|
|
40
48
|
}
|
|
41
49
|
content() {
|
|
42
50
|
if (this.contentCache === undefined) {
|
|
@@ -48,6 +56,19 @@ class FlowrFile {
|
|
|
48
56
|
(0, assert_1.guard)(this.role === undefined || this.role === role, `File ${this.filePath.toString()} already has a role assigned: ${this.role}`);
|
|
49
57
|
this.role = role;
|
|
50
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Creates a {@link FlowrFile} from a given {@link RParseRequest}.
|
|
61
|
+
* @see {@link FlowrTextFile}
|
|
62
|
+
* @see {@link FlowrInlineTextFile}
|
|
63
|
+
*/
|
|
64
|
+
static fromRequest(request) {
|
|
65
|
+
if (request.request === 'file') {
|
|
66
|
+
return new FlowrTextFile(request.content);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
return new FlowrInlineTextFile(FlowrFile.INLINE_PATH, request.content);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
51
72
|
}
|
|
52
73
|
exports.FlowrFile = FlowrFile;
|
|
53
74
|
/**
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
import { type EngineConfig, type FlowrConfigOptions } from '../config';
|
|
2
2
|
import type { DeepWritable } from 'ts-essentials';
|
|
3
|
-
import { fileProtocol, requestFromInput } from '../r-bridge/retriever';
|
|
4
3
|
import { FlowrAnalyzer } from './flowr-analyzer';
|
|
5
4
|
import type { KnownParser } from '../r-bridge/parser';
|
|
6
5
|
import type { FlowrAnalyzerPlugin } from './plugins/flowr-analyzer-plugin';
|
|
7
6
|
import type { NormalizeRequiredInput } from '../core/steps/all/core/10-normalize';
|
|
8
|
-
import type {
|
|
7
|
+
import type { BuiltInFlowrPluginName, PluginToRegister } from './plugins/plugin-registry';
|
|
9
8
|
/**
|
|
10
9
|
* Builder for the {@link FlowrAnalyzer}, use it to configure all analysis aspects before creating the analyzer instance
|
|
11
10
|
* with {@link FlowrAnalyzerBuilder#build|`.build()`} or {@link FlowrAnalyzerBuilder#buildSync|`.buildSync()`}.
|
|
12
11
|
*
|
|
13
|
-
* You can add new files and folders to analyze using the
|
|
12
|
+
* You can add new files and folders to analyze using the {@link FlowrAnalyzer#addRequest|`.addRequest()`} method on the resulting analyzer.
|
|
14
13
|
* @example Let's create an analyzer for a single R script file:
|
|
15
14
|
*
|
|
16
15
|
* ```ts
|
|
17
16
|
* const analyzer = new FlowrAnalyzerBuilder()
|
|
18
|
-
* .add('file:///path/to/script.R')
|
|
19
17
|
* .setParser(new TreeSitterExecutor())
|
|
20
|
-
* .buildSync()
|
|
18
|
+
* .buildSync()
|
|
19
|
+
* .addRequest('file:///path/to/script.R')
|
|
20
|
+
*
|
|
21
21
|
* ```
|
|
22
22
|
*
|
|
23
23
|
* If you now want to get the dataflow information for the file, you can do this:
|
|
@@ -26,33 +26,22 @@ import type { RAnalysisRequest } from './context/flowr-analyzer-files-context';
|
|
|
26
26
|
* const dfInfo = await analyzer.dataflow();
|
|
27
27
|
* console.log(dfInfo);
|
|
28
28
|
* ```
|
|
29
|
+
* @see https://github.com/flowr-analysis/flowr/wiki/Analyzer
|
|
29
30
|
*/
|
|
30
31
|
export declare class FlowrAnalyzerBuilder {
|
|
31
32
|
private flowrConfig;
|
|
32
33
|
private parser?;
|
|
33
|
-
private request;
|
|
34
34
|
private input?;
|
|
35
35
|
private plugins;
|
|
36
36
|
/**
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
*
|
|
43
|
-
* This is a convenience method that uses {@link addRequest} and {@link addRequestFromInput} internally.
|
|
44
|
-
* @param request - One or multiple requests or a file path (with the `file://` protocol). If you just enter a string, it will be interpreted as R code.
|
|
45
|
-
*/
|
|
46
|
-
add(request: RAnalysisRequest | readonly RAnalysisRequest[] | `${typeof fileProtocol}${string}` | string): this;
|
|
47
|
-
/**
|
|
48
|
-
* Add one or multiple requests to analyze the builder.
|
|
49
|
-
*/
|
|
50
|
-
addRequest(request: RAnalysisRequest | readonly RAnalysisRequest[]): this;
|
|
51
|
-
/**
|
|
52
|
-
* Add a request created from the given input.
|
|
53
|
-
* This is a convenience method that uses {@link requestFromInput} internally.
|
|
37
|
+
* Creates a new builder for the {@link FlowrAnalyzer}.
|
|
38
|
+
* By default, the standard set of plugins as returned by {@link FlowrAnalyzerPluginDefaults} are registered.
|
|
39
|
+
* @param withDefaultPlugins - Whether to register the default plugins upon creation. Default is `true`.
|
|
40
|
+
* @see {@link FlowrAnalyzerPluginDefaults} - for the default plugin set.
|
|
41
|
+
* @see {@link FlowrAnalyzerBuilder#registerPlugins} - to add more plugins.
|
|
42
|
+
* @see {@link FlowrAnalyzerBuilder#unregisterPlugins} - to remove plugins.
|
|
54
43
|
*/
|
|
55
|
-
|
|
44
|
+
constructor(withDefaultPlugins?: boolean);
|
|
56
45
|
/**
|
|
57
46
|
* Apply an amendment to the configuration the builder currently holds.
|
|
58
47
|
* Per default, the {@link defaultConfigOptions} are used.
|
|
@@ -79,21 +68,26 @@ export declare class FlowrAnalyzerBuilder {
|
|
|
79
68
|
* Additional parameters for the analyses.
|
|
80
69
|
* @param input - The input.
|
|
81
70
|
*/
|
|
82
|
-
setInput(input: Omit<NormalizeRequiredInput, '
|
|
71
|
+
setInput(input: Omit<NormalizeRequiredInput, 'context'>): this;
|
|
83
72
|
/**
|
|
84
73
|
* Register one or multiple additional plugins.
|
|
74
|
+
* For the default plugin set, please refer to {@link FlowrAnalyzerPluginDefaults}, they can be registered
|
|
75
|
+
* by passing `true` to the {@link FlowrAnalyzerBuilder} constructor.
|
|
76
|
+
* @param plugin - One or multiple plugins to register.
|
|
85
77
|
* @see {@link FlowrAnalyzerBuilder#unregisterPlugins} to remove plugins.
|
|
86
78
|
*/
|
|
87
|
-
registerPlugins(...plugin: readonly
|
|
79
|
+
registerPlugins<T extends BuiltInFlowrPluginName | string>(...plugin: readonly PluginToRegister<T>[]): this;
|
|
88
80
|
/**
|
|
89
81
|
* Remove one or multiple plugins.
|
|
82
|
+
* @see {@link FlowrAnalyzerBuilder#registerPlugins} to add plugins.
|
|
90
83
|
*/
|
|
91
|
-
unregisterPlugins(...plugin: readonly FlowrAnalyzerPlugin[]): this;
|
|
84
|
+
unregisterPlugins(...plugin: readonly (FlowrAnalyzerPlugin | string | BuiltInFlowrPluginName)[]): this;
|
|
92
85
|
/**
|
|
93
86
|
* Create the {@link FlowrAnalyzer} instance using the given information.
|
|
94
87
|
* Please note that the only reason this is `async` is that if no parser is set,
|
|
95
88
|
* we need to retrieve the default engine instance which is an async operation.
|
|
96
|
-
* If you
|
|
89
|
+
* If you have already initialized the engine (e.g., with {@link TreeSitterExecutor#initTreeSitter}),
|
|
90
|
+
* you can use the synchronous version {@link FlowrAnalyzerBuilder#buildSync} instead.
|
|
97
91
|
*/
|
|
98
92
|
build(): Promise<FlowrAnalyzer>;
|
|
99
93
|
/**
|
|
@@ -2,25 +2,26 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FlowrAnalyzerBuilder = void 0;
|
|
4
4
|
const config_1 = require("../config");
|
|
5
|
-
const retriever_1 = require("../r-bridge/retriever");
|
|
6
5
|
const flowr_analyzer_1 = require("./flowr-analyzer");
|
|
7
6
|
const engines_1 = require("../engines");
|
|
8
7
|
const assert_1 = require("../util/assert");
|
|
9
|
-
const files_1 = require("../util/files");
|
|
10
8
|
const flowr_analyzer_context_1 = require("./context/flowr-analyzer-context");
|
|
11
9
|
const flowr_analyzer_cache_1 = require("./cache/flowr-analyzer-cache");
|
|
10
|
+
const flowr_analyzer_plugin_defaults_1 = require("./plugins/flowr-analyzer-plugin-defaults");
|
|
11
|
+
const plugin_registry_1 = require("./plugins/plugin-registry");
|
|
12
12
|
/**
|
|
13
13
|
* Builder for the {@link FlowrAnalyzer}, use it to configure all analysis aspects before creating the analyzer instance
|
|
14
14
|
* with {@link FlowrAnalyzerBuilder#build|`.build()`} or {@link FlowrAnalyzerBuilder#buildSync|`.buildSync()`}.
|
|
15
15
|
*
|
|
16
|
-
* You can add new files and folders to analyze using the
|
|
16
|
+
* You can add new files and folders to analyze using the {@link FlowrAnalyzer#addRequest|`.addRequest()`} method on the resulting analyzer.
|
|
17
17
|
* @example Let's create an analyzer for a single R script file:
|
|
18
18
|
*
|
|
19
19
|
* ```ts
|
|
20
20
|
* const analyzer = new FlowrAnalyzerBuilder()
|
|
21
|
-
* .add('file:///path/to/script.R')
|
|
22
21
|
* .setParser(new TreeSitterExecutor())
|
|
23
|
-
* .buildSync()
|
|
22
|
+
* .buildSync()
|
|
23
|
+
* .addRequest('file:///path/to/script.R')
|
|
24
|
+
*
|
|
24
25
|
* ```
|
|
25
26
|
*
|
|
26
27
|
* If you now want to get the dataflow information for the file, you can do this:
|
|
@@ -29,63 +30,25 @@ const flowr_analyzer_cache_1 = require("./cache/flowr-analyzer-cache");
|
|
|
29
30
|
* const dfInfo = await analyzer.dataflow();
|
|
30
31
|
* console.log(dfInfo);
|
|
31
32
|
* ```
|
|
33
|
+
* @see https://github.com/flowr-analysis/flowr/wiki/Analyzer
|
|
32
34
|
*/
|
|
33
35
|
class FlowrAnalyzerBuilder {
|
|
34
36
|
flowrConfig = (0, config_1.cloneConfig)(config_1.defaultConfigOptions);
|
|
35
37
|
parser;
|
|
36
|
-
request;
|
|
37
38
|
input;
|
|
38
39
|
plugins = new Map();
|
|
39
40
|
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Add one or multiple requests to analyze.
|
|
48
|
-
* This is a convenience method that uses {@link addRequest} and {@link addRequestFromInput} internally.
|
|
49
|
-
* @param request - One or multiple requests or a file path (with the `file://` protocol). If you just enter a string, it will be interpreted as R code.
|
|
41
|
+
* Creates a new builder for the {@link FlowrAnalyzer}.
|
|
42
|
+
* By default, the standard set of plugins as returned by {@link FlowrAnalyzerPluginDefaults} are registered.
|
|
43
|
+
* @param withDefaultPlugins - Whether to register the default plugins upon creation. Default is `true`.
|
|
44
|
+
* @see {@link FlowrAnalyzerPluginDefaults} - for the default plugin set.
|
|
45
|
+
* @see {@link FlowrAnalyzerBuilder#registerPlugins} - to add more plugins.
|
|
46
|
+
* @see {@link FlowrAnalyzerBuilder#unregisterPlugins} - to remove plugins.
|
|
50
47
|
*/
|
|
51
|
-
|
|
52
|
-
if (
|
|
53
|
-
this.
|
|
48
|
+
constructor(withDefaultPlugins = true) {
|
|
49
|
+
if (withDefaultPlugins) {
|
|
50
|
+
this.registerPlugins(...(0, flowr_analyzer_plugin_defaults_1.FlowrAnalyzerPluginDefaults)());
|
|
54
51
|
}
|
|
55
|
-
else if (typeof request === 'string') {
|
|
56
|
-
const trimmed = request.substring(retriever_1.fileProtocol.length);
|
|
57
|
-
if (request.startsWith(retriever_1.fileProtocol) && !(0, files_1.isFilePath)(trimmed)) {
|
|
58
|
-
this.addRequest({ request: 'project', content: trimmed });
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
this.addRequestFromInput(request);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
this.addRequest(request);
|
|
66
|
-
}
|
|
67
|
-
return this;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Add one or multiple requests to analyze the builder.
|
|
71
|
-
*/
|
|
72
|
-
addRequest(request) {
|
|
73
|
-
const r = Array.isArray(request) ? request : [request];
|
|
74
|
-
if (this.request) {
|
|
75
|
-
this.request = this.request.concat(request);
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
this.request = r;
|
|
79
|
-
}
|
|
80
|
-
return this;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Add a request created from the given input.
|
|
84
|
-
* This is a convenience method that uses {@link requestFromInput} internally.
|
|
85
|
-
*/
|
|
86
|
-
addRequestFromInput(input) {
|
|
87
|
-
this.addRequest((0, retriever_1.requestFromInput)(input));
|
|
88
|
-
return this;
|
|
89
52
|
}
|
|
90
53
|
/**
|
|
91
54
|
* Apply an amendment to the configuration the builder currently holds.
|
|
@@ -132,28 +95,29 @@ class FlowrAnalyzerBuilder {
|
|
|
132
95
|
}
|
|
133
96
|
/**
|
|
134
97
|
* Register one or multiple additional plugins.
|
|
98
|
+
* For the default plugin set, please refer to {@link FlowrAnalyzerPluginDefaults}, they can be registered
|
|
99
|
+
* by passing `true` to the {@link FlowrAnalyzerBuilder} constructor.
|
|
100
|
+
* @param plugin - One or multiple plugins to register.
|
|
135
101
|
* @see {@link FlowrAnalyzerBuilder#unregisterPlugins} to remove plugins.
|
|
136
102
|
*/
|
|
137
103
|
registerPlugins(...plugin) {
|
|
138
104
|
for (const p of plugin) {
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
else {
|
|
144
|
-
g.push(p);
|
|
145
|
-
}
|
|
105
|
+
const s = (0, plugin_registry_1.makePlugin)(p);
|
|
106
|
+
const g = this.plugins.get(s.type) ?? [];
|
|
107
|
+
g.push(s);
|
|
108
|
+
this.plugins.set(s.type, g);
|
|
146
109
|
}
|
|
147
110
|
return this;
|
|
148
111
|
}
|
|
149
112
|
/**
|
|
150
113
|
* Remove one or multiple plugins.
|
|
114
|
+
* @see {@link FlowrAnalyzerBuilder#registerPlugins} to add plugins.
|
|
151
115
|
*/
|
|
152
116
|
unregisterPlugins(...plugin) {
|
|
153
117
|
for (const p of plugin) {
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
this.plugins.set(
|
|
118
|
+
const name = typeof p === 'string' ? p : p.name;
|
|
119
|
+
for (const [type, plugins] of this.plugins) {
|
|
120
|
+
this.plugins.set(type, plugins.filter((pl) => pl.name !== name));
|
|
157
121
|
}
|
|
158
122
|
}
|
|
159
123
|
return this;
|
|
@@ -162,7 +126,8 @@ class FlowrAnalyzerBuilder {
|
|
|
162
126
|
* Create the {@link FlowrAnalyzer} instance using the given information.
|
|
163
127
|
* Please note that the only reason this is `async` is that if no parser is set,
|
|
164
128
|
* we need to retrieve the default engine instance which is an async operation.
|
|
165
|
-
* If you
|
|
129
|
+
* If you have already initialized the engine (e.g., with {@link TreeSitterExecutor#initTreeSitter}),
|
|
130
|
+
* you can use the synchronous version {@link FlowrAnalyzerBuilder#buildSync} instead.
|
|
166
131
|
*/
|
|
167
132
|
async build() {
|
|
168
133
|
if (!this.parser) {
|
|
@@ -177,16 +142,13 @@ class FlowrAnalyzerBuilder {
|
|
|
177
142
|
*/
|
|
178
143
|
buildSync() {
|
|
179
144
|
(0, assert_1.guard)(this.parser !== undefined, 'No parser set, please use the setParser or setEngine method to set a parser before building the analyzer');
|
|
180
|
-
|
|
181
|
-
const context = new flowr_analyzer_context_1.FlowrAnalyzerContext(this.plugins);
|
|
145
|
+
const context = new flowr_analyzer_context_1.FlowrAnalyzerContext(this.flowrConfig, this.plugins);
|
|
182
146
|
const cache = flowr_analyzer_cache_1.FlowrAnalyzerCache.create({
|
|
183
147
|
parser: this.parser,
|
|
184
|
-
|
|
185
|
-
request: context.files.computeLoadingOrder(),
|
|
148
|
+
context,
|
|
186
149
|
...(this.input ?? {})
|
|
187
150
|
});
|
|
188
|
-
const analyzer = new flowr_analyzer_1.FlowrAnalyzer(this.
|
|
189
|
-
analyzer.addRequests(this.request);
|
|
151
|
+
const analyzer = new flowr_analyzer_1.FlowrAnalyzer(this.parser, context, cache);
|
|
190
152
|
// we do it here to save time later if the analyzer is to be duplicated
|
|
191
153
|
context.resolvePreAnalysis();
|
|
192
154
|
return analyzer;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { FlowrConfigOptions } from '../config';
|
|
2
|
-
import type { KnownParser, KnownParserInformation
|
|
2
|
+
import type { KnownParser, KnownParserInformation } from '../r-bridge/parser';
|
|
3
3
|
import { type Queries, type QueryResults, type SupportedQueryTypes } from '../queries/query';
|
|
4
4
|
import type { ControlFlowInformation } from '../control-flow/control-flow-graph';
|
|
5
5
|
import type { NormalizedAst } from '../r-bridge/lang-4.x/ast/model/processing/decorate';
|
|
@@ -12,10 +12,13 @@ import { type GetSearchElements } from '../search/flowr-search-executor';
|
|
|
12
12
|
import type { FlowrAnalyzerContext, ReadOnlyFlowrAnalyzerContext } from './context/flowr-analyzer-context';
|
|
13
13
|
import { CfgKind } from './cfg-kind';
|
|
14
14
|
import type { RAnalysisRequest } from './context/flowr-analyzer-files-context';
|
|
15
|
+
import type { RParseRequestFromFile } from '../r-bridge/retriever';
|
|
16
|
+
import { fileProtocol } from '../r-bridge/retriever';
|
|
17
|
+
import type { FlowrFileProvider } from './context/flowr-file';
|
|
15
18
|
/**
|
|
16
19
|
* Extends the {@link ReadonlyFlowrAnalysisProvider} with methods that allow modifying the analyzer state.
|
|
17
20
|
*/
|
|
18
|
-
export interface FlowrAnalysisProvider extends ReadonlyFlowrAnalysisProvider {
|
|
21
|
+
export interface FlowrAnalysisProvider<Parser extends KnownParser = KnownParser> extends ReadonlyFlowrAnalysisProvider<Parser> {
|
|
19
22
|
/**
|
|
20
23
|
* Returns project context information.
|
|
21
24
|
* If you are a user that wants to inspect the context, prefer {@link inspectContext} instead.
|
|
@@ -23,13 +26,18 @@ export interface FlowrAnalysisProvider extends ReadonlyFlowrAnalysisProvider {
|
|
|
23
26
|
*/
|
|
24
27
|
context(): FlowrAnalyzerContext;
|
|
25
28
|
/**
|
|
26
|
-
* Add multiple
|
|
29
|
+
* Add one or multiple requests to analyze.
|
|
30
|
+
* @param request - One or multiple requests or a file path (with the `file://` protocol). If you just enter a string without the {@link fileProtocol}, it will be interpreted as R code.
|
|
31
|
+
* @see {@link FlowrAnalysisProvider.addFile|addFile} - for adding files to the analyzer's context.
|
|
27
32
|
*/
|
|
28
|
-
|
|
33
|
+
addRequest(...request: (RAnalysisRequest | `${typeof fileProtocol}${string}` | string)[]): void;
|
|
29
34
|
/**
|
|
30
|
-
* Add
|
|
35
|
+
* Add one or multiple files to the analyzer's context.
|
|
36
|
+
* @param f - One or multiple file paths, file providers, or parse requests from file.
|
|
37
|
+
* @see {@link FlowrFileProvider} - for creating custom file providers.
|
|
38
|
+
* @see {@link FlowrAnalysisProvider.addRequest|addRequest} - for adding analysis requests to the analyzer.
|
|
31
39
|
*/
|
|
32
|
-
|
|
40
|
+
addFile(...f: (string | FlowrFileProvider<string> | RParseRequestFromFile)[]): void;
|
|
33
41
|
/**
|
|
34
42
|
* Reset the analyzer state, including the context and the cache.
|
|
35
43
|
*/
|
|
@@ -39,7 +47,7 @@ export interface FlowrAnalysisProvider extends ReadonlyFlowrAnalysisProvider {
|
|
|
39
47
|
* Exposes the central analyses and information provided by the {@link FlowrAnalyzer} to the linter, search, and query APIs.
|
|
40
48
|
* This allows us to exchange the underlying implementation of the analyzer without affecting the APIs.
|
|
41
49
|
*/
|
|
42
|
-
export interface ReadonlyFlowrAnalysisProvider {
|
|
50
|
+
export interface ReadonlyFlowrAnalysisProvider<Parser extends KnownParser = KnownParser> {
|
|
43
51
|
/**
|
|
44
52
|
* Returns a set of additional data and helper functions exposed by the underlying {@link KnownParser},
|
|
45
53
|
* including the parser's {@link BaseParserInformation.name} and corresponding version information.
|
|
@@ -55,25 +63,45 @@ export interface ReadonlyFlowrAnalysisProvider {
|
|
|
55
63
|
*
|
|
56
64
|
* The parse result type depends on the {@link KnownParser} used by the analyzer.
|
|
57
65
|
* @param force - Do not use the cache, instead force a new parse.
|
|
66
|
+
* @see {@link ReadonlyFlowrAnalysisProvider#peekParse} - to get the parse output if already available without triggering a new computation.
|
|
58
67
|
*/
|
|
59
|
-
parse(force?: boolean): Promise<
|
|
68
|
+
parse(force?: boolean): Promise<NonNullable<AnalyzerCacheType<Parser>['parse']>>;
|
|
69
|
+
/**
|
|
70
|
+
* Peek at the parse output for the request, if it was already computed.
|
|
71
|
+
*/
|
|
72
|
+
peekParse(): NonNullable<AnalyzerCacheType<Parser>['parse']> | undefined;
|
|
60
73
|
/**
|
|
61
74
|
* Get the normalized abstract syntax tree for the request.
|
|
62
75
|
* @param force - Do not use the cache, instead force new analyses.
|
|
76
|
+
* @see {@link ReadonlyFlowrAnalysisProvider#peekNormalize} - to get the normalized AST if already available without triggering a new computation.
|
|
63
77
|
*/
|
|
64
78
|
normalize(force?: boolean): Promise<NormalizedAst & PipelinePerStepMetaInformation>;
|
|
79
|
+
/**
|
|
80
|
+
* Peek at the normalized abstract syntax tree for the request, if it was already computed.
|
|
81
|
+
*/
|
|
82
|
+
peekNormalize(): NormalizedAst & PipelinePerStepMetaInformation | undefined;
|
|
65
83
|
/**
|
|
66
84
|
* Get the dataflow graph for the request.
|
|
67
85
|
* @param force - Do not use the cache, instead force new analyses.
|
|
86
|
+
* @see {@link ReadonlyFlowrAnalysisProvider#peekDataflow} - to get the dataflow graph if already available without triggering a new computation.
|
|
68
87
|
*/
|
|
69
88
|
dataflow(force?: boolean): Promise<DataflowInformation & PipelinePerStepMetaInformation>;
|
|
89
|
+
/**
|
|
90
|
+
* Peek at the dataflow graph for the request, if it was already computed.
|
|
91
|
+
*/
|
|
92
|
+
peekDataflow(): DataflowInformation & PipelinePerStepMetaInformation | undefined;
|
|
70
93
|
/**
|
|
71
94
|
* Get the control flow graph (CFG) for the request.
|
|
72
95
|
* @param simplifications - Simplification passes to be applied to the CFG.
|
|
73
96
|
* @param kind - The kind of CFG that is requested. By default, the CFG without dataflow information is returned.
|
|
74
97
|
* @param force - Do not use the cache, instead force new analyses.
|
|
98
|
+
* @see {@link ReadonlyFlowrAnalysisProvider#peekControlflow} - to get the CFG if already available without triggering a new computation.
|
|
75
99
|
*/
|
|
76
100
|
controlflow(simplifications?: readonly CfgSimplificationPassName[], kind?: CfgKind, force?: boolean): Promise<ControlFlowInformation>;
|
|
101
|
+
/**
|
|
102
|
+
* Peek at the control flow graph (CFG) for the request, if it was already computed.
|
|
103
|
+
*/
|
|
104
|
+
peekControlflow(simplifications?: readonly CfgSimplificationPassName[], kind?: CfgKind): ControlFlowInformation | undefined;
|
|
77
105
|
/**
|
|
78
106
|
* Access the query API for the request.
|
|
79
107
|
* @param query - The list of queries.
|
|
@@ -97,9 +125,9 @@ export interface ReadonlyFlowrAnalysisProvider {
|
|
|
97
125
|
* If you want the original pattern of creating a pipeline and running all steps, you can still do this with {@link FlowrAnalyzer#runFull}.
|
|
98
126
|
*
|
|
99
127
|
* To inspect the context of the analyzer, use {@link FlowrAnalyzer#inspectContext} (if you are a plugin and need to modify it, use {@link FlowrAnalyzer#context} instead).
|
|
128
|
+
* @see https://github.com/flowr-analysis/flowr/wiki/Analyzer
|
|
100
129
|
*/
|
|
101
|
-
export declare class FlowrAnalyzer<Parser extends KnownParser = KnownParser> implements ReadonlyFlowrAnalysisProvider {
|
|
102
|
-
readonly flowrConfig: FlowrConfigOptions;
|
|
130
|
+
export declare class FlowrAnalyzer<Parser extends KnownParser = KnownParser> implements ReadonlyFlowrAnalysisProvider<Parser> {
|
|
103
131
|
/** The parser and engine backend */
|
|
104
132
|
private readonly parser;
|
|
105
133
|
/** The cache used for storing analysis results */
|
|
@@ -109,23 +137,36 @@ export declare class FlowrAnalyzer<Parser extends KnownParser = KnownParser> imp
|
|
|
109
137
|
/**
|
|
110
138
|
* Create a new analyzer instance.
|
|
111
139
|
* **Prefer the use of the {@link FlowrAnalyzerBuilder} instead of calling this constructor directly.**
|
|
112
|
-
* @param config - The FlowR config to use for the analyses
|
|
113
140
|
* @param parser - The parser to use for parsing the given request.
|
|
114
141
|
* @param ctx - The context to use for the analyses.
|
|
115
142
|
* @param cache - The caching layer to use for storing analysis results.
|
|
116
143
|
*/
|
|
117
|
-
constructor(
|
|
144
|
+
constructor(parser: Parser, ctx: FlowrAnalyzerContext, cache: FlowrAnalyzerCache<Parser>);
|
|
145
|
+
get flowrConfig(): FlowrConfigOptions;
|
|
118
146
|
context(): FlowrAnalyzerContext;
|
|
119
147
|
parserInformation(): KnownParserInformation;
|
|
120
148
|
inspectContext(): ReadOnlyFlowrAnalyzerContext;
|
|
121
149
|
reset(): void;
|
|
122
|
-
|
|
123
|
-
|
|
150
|
+
addRequest(...request: (RAnalysisRequest | readonly RAnalysisRequest[] | `${typeof fileProtocol}${string}` | string)[]): this;
|
|
151
|
+
addFile(...f: (string | FlowrFileProvider | RParseRequestFromFile)[]): this;
|
|
152
|
+
/**
|
|
153
|
+
* Add a request created from the given input.
|
|
154
|
+
* This is a convenience method that uses {@link requestFromInput} internally.
|
|
155
|
+
*/
|
|
156
|
+
private addRequestFromInput;
|
|
157
|
+
/**
|
|
158
|
+
* Add one or multiple requests to analyze the builder.
|
|
159
|
+
*/
|
|
160
|
+
private addAnalysisRequest;
|
|
124
161
|
parse(force?: boolean): Promise<NonNullable<AnalyzerCacheType<Parser>['parse']>>;
|
|
162
|
+
peekParse(): NonNullable<AnalyzerCacheType<Parser>['parse']> | undefined;
|
|
125
163
|
normalize(force?: boolean): Promise<NonNullable<AnalyzerCacheType<Parser>['normalize']>>;
|
|
164
|
+
peekNormalize(): NonNullable<AnalyzerCacheType<Parser>['normalize']> | undefined;
|
|
126
165
|
dataflow(force?: boolean): Promise<NonNullable<AnalyzerCacheType<Parser>['dataflow']>>;
|
|
166
|
+
peekDataflow(): NonNullable<AnalyzerCacheType<Parser>['dataflow']> | undefined;
|
|
127
167
|
runFull(force?: boolean): Promise<void>;
|
|
128
168
|
controlflow(simplifications?: readonly CfgSimplificationPassName[], kind?: CfgKind, force?: boolean): Promise<ControlFlowInformation>;
|
|
169
|
+
peekControlflow(simplifications?: readonly CfgSimplificationPassName[], kind?: CfgKind): ControlFlowInformation | undefined;
|
|
129
170
|
query<Types extends SupportedQueryTypes = SupportedQueryTypes>(query: Queries<Types>): Promise<QueryResults<Types>>;
|
|
130
171
|
runSearch<Search extends FlowrSearchLike>(search: Search): Promise<GetSearchElements<SearchOutput<Search>>>;
|
|
131
172
|
/**
|