@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,6 +1,11 @@
|
|
|
1
|
-
import { type RAnalysisRequest, type ReadOnlyFlowrAnalyzerFilesContext
|
|
2
|
-
import { type ReadOnlyFlowrAnalyzerDependenciesContext
|
|
1
|
+
import { FlowrAnalyzerFilesContext, type RAnalysisRequest, type ReadOnlyFlowrAnalyzerFilesContext } from './flowr-analyzer-files-context';
|
|
2
|
+
import { FlowrAnalyzerDependenciesContext, type ReadOnlyFlowrAnalyzerDependenciesContext } from './flowr-analyzer-dependencies-context';
|
|
3
3
|
import { type FlowrAnalyzerPlugin, PluginType } from '../plugins/flowr-analyzer-plugin';
|
|
4
|
+
import type { fileProtocol, RParseRequestFromFile, RParseRequests } from '../../r-bridge/retriever';
|
|
5
|
+
import type { FlowrConfigOptions } from '../../config';
|
|
6
|
+
import type { FlowrFileProvider } from './flowr-file';
|
|
7
|
+
import type { ReadOnlyFlowrAnalyzerEnvironmentContext } from './flowr-analyzer-environment-context';
|
|
8
|
+
import { FlowrAnalyzerEnvironmentContext } from './flowr-analyzer-environment-context';
|
|
4
9
|
/**
|
|
5
10
|
* This is a read-only interface to the {@link FlowrAnalyzerContext}.
|
|
6
11
|
* It prevents you from modifying the context, but allows you to inspect it (which is probably what you want when using the {@link FlowrAnalyzer}).
|
|
@@ -15,6 +20,14 @@ export interface ReadOnlyFlowrAnalyzerContext {
|
|
|
15
20
|
* The dependencies context provides access to the identified dependencies and their versions.
|
|
16
21
|
*/
|
|
17
22
|
readonly deps: ReadOnlyFlowrAnalyzerDependenciesContext;
|
|
23
|
+
/**
|
|
24
|
+
* The environment context provides access to the environment information used during analysis.
|
|
25
|
+
*/
|
|
26
|
+
readonly env: ReadOnlyFlowrAnalyzerEnvironmentContext;
|
|
27
|
+
/**
|
|
28
|
+
* The configuration options used by the analyzer.
|
|
29
|
+
*/
|
|
30
|
+
readonly config: FlowrConfigOptions;
|
|
18
31
|
}
|
|
19
32
|
/**
|
|
20
33
|
* This summarizes the other context layers used by the {@link FlowrAnalyzer}.
|
|
@@ -31,11 +44,13 @@ export interface ReadOnlyFlowrAnalyzerContext {
|
|
|
31
44
|
export declare class FlowrAnalyzerContext implements ReadOnlyFlowrAnalyzerContext {
|
|
32
45
|
readonly files: FlowrAnalyzerFilesContext;
|
|
33
46
|
readonly deps: FlowrAnalyzerDependenciesContext;
|
|
34
|
-
|
|
47
|
+
readonly env: FlowrAnalyzerEnvironmentContext;
|
|
48
|
+
readonly config: FlowrConfigOptions;
|
|
49
|
+
constructor(config: FlowrConfigOptions, plugins: ReadonlyMap<PluginType, readonly FlowrAnalyzerPlugin[]>);
|
|
35
50
|
/** delegate request addition */
|
|
36
51
|
addRequests(requests: readonly RAnalysisRequest[]): void;
|
|
37
|
-
|
|
38
|
-
|
|
52
|
+
addFile(f: string | FlowrFileProvider | RParseRequestFromFile): void;
|
|
53
|
+
addFiles(f: (string | FlowrFileProvider | RParseRequestFromFile)[]): void;
|
|
39
54
|
/** this conducts all the step that can be done before the main analysis run */
|
|
40
55
|
resolvePreAnalysis(): void;
|
|
41
56
|
/**
|
|
@@ -49,3 +64,20 @@ export declare class FlowrAnalyzerContext implements ReadOnlyFlowrAnalyzerContex
|
|
|
49
64
|
*/
|
|
50
65
|
reset(): void;
|
|
51
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Lifting {@link requestFromInput} to create a full {@link FlowrAnalyzerContext} from input requests.
|
|
69
|
+
* Please use this only for a "quick" setup, or to have compatibility with the pre-project flowR era.
|
|
70
|
+
* Otherwise, refer to a {@link FlowrAnalyzerBuilder} to create a fully customized {@link FlowrAnalyzer} instance.
|
|
71
|
+
* @see {@link requestFromInput} - for details on how inputs are processed into requests.
|
|
72
|
+
* @see {@link contextFromSources} - to create a context from source code strings directly.
|
|
73
|
+
*/
|
|
74
|
+
export declare function contextFromInput(input: `${typeof fileProtocol}${string}` | string | readonly string[] | RParseRequests, config?: FlowrConfigOptions, plugins?: FlowrAnalyzerPlugin[]): FlowrAnalyzerContext;
|
|
75
|
+
/**
|
|
76
|
+
* Create a {@link FlowrAnalyzerContext} from a set of source code strings.
|
|
77
|
+
* @param sources - A record mapping file paths to their source code content.
|
|
78
|
+
* @param config - Configuration options for the analyzer.
|
|
79
|
+
* @param plugins - Optional plugins to extend the analyzer's functionality.
|
|
80
|
+
* @see {@link contextFromInput} - to create a context from input requests.
|
|
81
|
+
* @see {@link FlowrInlineTextFile} - to create inline text files for the sources.
|
|
82
|
+
*/
|
|
83
|
+
export declare function contextFromSources(sources: Record<string, string>, config?: FlowrConfigOptions, plugins?: FlowrAnalyzerPlugin[]): FlowrAnalyzerContext;
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FlowrAnalyzerContext = void 0;
|
|
4
|
+
exports.contextFromInput = contextFromInput;
|
|
5
|
+
exports.contextFromSources = contextFromSources;
|
|
4
6
|
const flowr_analyzer_files_context_1 = require("./flowr-analyzer-files-context");
|
|
5
7
|
const flowr_analyzer_dependencies_context_1 = require("./flowr-analyzer-dependencies-context");
|
|
6
8
|
const flowr_analyzer_plugin_1 = require("../plugins/flowr-analyzer-plugin");
|
|
7
9
|
const flowr_analyzer_loading_order_context_1 = require("./flowr-analyzer-loading-order-context");
|
|
10
|
+
const arrays_1 = require("../../util/collections/arrays");
|
|
11
|
+
const retriever_1 = require("../../r-bridge/retriever");
|
|
12
|
+
const config_1 = require("../../config");
|
|
13
|
+
const flowr_file_1 = require("./flowr-file");
|
|
14
|
+
const flowr_analyzer_environment_context_1 = require("./flowr-analyzer-environment-context");
|
|
8
15
|
/**
|
|
9
16
|
* This summarizes the other context layers used by the {@link FlowrAnalyzer}.
|
|
10
17
|
* Have a look at the attributes and layers listed below (e.g., {@link files} and {@link deps})
|
|
@@ -20,18 +27,24 @@ const flowr_analyzer_loading_order_context_1 = require("./flowr-analyzer-loading
|
|
|
20
27
|
class FlowrAnalyzerContext {
|
|
21
28
|
files;
|
|
22
29
|
deps;
|
|
23
|
-
|
|
30
|
+
env;
|
|
31
|
+
config;
|
|
32
|
+
constructor(config, plugins) {
|
|
33
|
+
this.config = config;
|
|
24
34
|
const loadingOrder = new flowr_analyzer_loading_order_context_1.FlowrAnalyzerLoadingOrderContext(this, plugins.get(flowr_analyzer_plugin_1.PluginType.LoadingOrder));
|
|
25
35
|
this.files = new flowr_analyzer_files_context_1.FlowrAnalyzerFilesContext(loadingOrder, (plugins.get(flowr_analyzer_plugin_1.PluginType.ProjectDiscovery) ?? []), (plugins.get(flowr_analyzer_plugin_1.PluginType.FileLoad) ?? []));
|
|
26
36
|
this.deps = new flowr_analyzer_dependencies_context_1.FlowrAnalyzerDependenciesContext(this, (plugins.get(flowr_analyzer_plugin_1.PluginType.DependencyIdentification) ?? []));
|
|
37
|
+
this.env = new flowr_analyzer_environment_context_1.FlowrAnalyzerEnvironmentContext(this);
|
|
27
38
|
}
|
|
28
39
|
/** delegate request addition */
|
|
29
40
|
addRequests(requests) {
|
|
30
41
|
this.files.addRequests(requests);
|
|
31
42
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
43
|
+
addFile(f) {
|
|
44
|
+
this.files.addFile(f);
|
|
45
|
+
}
|
|
46
|
+
addFiles(f) {
|
|
47
|
+
this.files.addFiles(f);
|
|
35
48
|
}
|
|
36
49
|
/** this conducts all the step that can be done before the main analysis run */
|
|
37
50
|
resolvePreAnalysis() {
|
|
@@ -55,4 +68,38 @@ class FlowrAnalyzerContext {
|
|
|
55
68
|
}
|
|
56
69
|
}
|
|
57
70
|
exports.FlowrAnalyzerContext = FlowrAnalyzerContext;
|
|
71
|
+
/**
|
|
72
|
+
* Lifting {@link requestFromInput} to create a full {@link FlowrAnalyzerContext} from input requests.
|
|
73
|
+
* Please use this only for a "quick" setup, or to have compatibility with the pre-project flowR era.
|
|
74
|
+
* Otherwise, refer to a {@link FlowrAnalyzerBuilder} to create a fully customized {@link FlowrAnalyzer} instance.
|
|
75
|
+
* @see {@link requestFromInput} - for details on how inputs are processed into requests.
|
|
76
|
+
* @see {@link contextFromSources} - to create a context from source code strings directly.
|
|
77
|
+
*/
|
|
78
|
+
function contextFromInput(input, config = config_1.defaultConfigOptions, plugins) {
|
|
79
|
+
const context = new FlowrAnalyzerContext(config, (0, arrays_1.arraysGroupBy)(plugins ?? [], (p) => p.type));
|
|
80
|
+
if (typeof input === 'string' || Array.isArray(input) && input.every(i => typeof i === 'string')) {
|
|
81
|
+
const requests = (0, retriever_1.requestFromInput)(input);
|
|
82
|
+
context.addRequests(Array.isArray(requests) ? requests : [requests]);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
const requests = Array.isArray(input) ? input : [input];
|
|
86
|
+
context.addRequests(requests);
|
|
87
|
+
}
|
|
88
|
+
return context;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Create a {@link FlowrAnalyzerContext} from a set of source code strings.
|
|
92
|
+
* @param sources - A record mapping file paths to their source code content.
|
|
93
|
+
* @param config - Configuration options for the analyzer.
|
|
94
|
+
* @param plugins - Optional plugins to extend the analyzer's functionality.
|
|
95
|
+
* @see {@link contextFromInput} - to create a context from input requests.
|
|
96
|
+
* @see {@link FlowrInlineTextFile} - to create inline text files for the sources.
|
|
97
|
+
*/
|
|
98
|
+
function contextFromSources(sources, config = config_1.defaultConfigOptions, plugins) {
|
|
99
|
+
const context = new FlowrAnalyzerContext(config, (0, arrays_1.arraysGroupBy)(plugins ?? [], (p) => p.type));
|
|
100
|
+
for (const [p, c] of Object.entries(sources)) {
|
|
101
|
+
context.addFile(new flowr_file_1.FlowrInlineTextFile(p, c));
|
|
102
|
+
}
|
|
103
|
+
return context;
|
|
104
|
+
}
|
|
58
105
|
//# sourceMappingURL=flowr-analyzer-context.js.map
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { FlowrAnalyzerContext } from './flowr-analyzer-context';
|
|
2
|
+
import type { IEnvironment, REnvironmentInformation } from '../../dataflow/environments/environment';
|
|
3
|
+
import type { DeepReadonly } from 'ts-essentials';
|
|
4
|
+
import type { Fingerprint } from '../../slicing/static/fingerprint';
|
|
5
|
+
/**
|
|
6
|
+
* This is the read-only interface to the {@link FlowrAnalyzerEnvironmentContext},
|
|
7
|
+
* which provides access to the built-in environment used during analysis.
|
|
8
|
+
*/
|
|
9
|
+
export interface ReadOnlyFlowrAnalyzerEnvironmentContext {
|
|
10
|
+
/**
|
|
11
|
+
* Get the built-in environment used during analysis.
|
|
12
|
+
*/
|
|
13
|
+
get builtInEnvironment(): DeepReadonly<IEnvironment>;
|
|
14
|
+
/**
|
|
15
|
+
* Get the empty built-in environment used during analysis.
|
|
16
|
+
* The empty built-in environment only contains primitive definitions.
|
|
17
|
+
*/
|
|
18
|
+
get emptyBuiltInEnvironment(): DeepReadonly<IEnvironment>;
|
|
19
|
+
/**
|
|
20
|
+
* Create a new {@link REnvironmentInformation|environment} with the configured built-in environment as base.
|
|
21
|
+
*/
|
|
22
|
+
makeCleanEnv(): REnvironmentInformation;
|
|
23
|
+
/**
|
|
24
|
+
* Get the fingerprint of the clean environment with the configured built-in environment as base.
|
|
25
|
+
*/
|
|
26
|
+
getCleanEnvFingerprint(): Fingerprint;
|
|
27
|
+
/**
|
|
28
|
+
* Create a new {@link REnvironmentInformation|environment} with an empty built-in environment as base.
|
|
29
|
+
*/
|
|
30
|
+
makeCleanEnvWithEmptyBuiltIns(): REnvironmentInformation;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* This context is responsible for providing the built-in environment.
|
|
34
|
+
* It creates the built-in environment based on the configuration provided in the {@link FlowrAnalyzerContext}.
|
|
35
|
+
*/
|
|
36
|
+
export declare class FlowrAnalyzerEnvironmentContext implements ReadOnlyFlowrAnalyzerEnvironmentContext {
|
|
37
|
+
readonly name = "flowr-analyzer-environment-context";
|
|
38
|
+
private readonly builtInEnv;
|
|
39
|
+
private readonly emptyBuiltInEnv;
|
|
40
|
+
private builtInEnvFingerprint;
|
|
41
|
+
constructor(ctx: FlowrAnalyzerContext);
|
|
42
|
+
get builtInEnvironment(): DeepReadonly<IEnvironment>;
|
|
43
|
+
get emptyBuiltInEnvironment(): DeepReadonly<IEnvironment>;
|
|
44
|
+
makeCleanEnv(): REnvironmentInformation;
|
|
45
|
+
getCleanEnvFingerprint(): Fingerprint;
|
|
46
|
+
makeCleanEnvWithEmptyBuiltIns(): REnvironmentInformation;
|
|
47
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FlowrAnalyzerEnvironmentContext = void 0;
|
|
4
|
+
const environment_1 = require("../../dataflow/environments/environment");
|
|
5
|
+
const built_in_config_1 = require("../../dataflow/environments/built-in-config");
|
|
6
|
+
const fingerprint_1 = require("../../slicing/static/fingerprint");
|
|
7
|
+
/**
|
|
8
|
+
* This context is responsible for providing the built-in environment.
|
|
9
|
+
* It creates the built-in environment based on the configuration provided in the {@link FlowrAnalyzerContext}.
|
|
10
|
+
*/
|
|
11
|
+
class FlowrAnalyzerEnvironmentContext {
|
|
12
|
+
name = 'flowr-analyzer-environment-context';
|
|
13
|
+
builtInEnv;
|
|
14
|
+
emptyBuiltInEnv;
|
|
15
|
+
builtInEnvFingerprint;
|
|
16
|
+
constructor(ctx) {
|
|
17
|
+
const builtInsConfig = ctx.config.semantics.environment.overwriteBuiltIns;
|
|
18
|
+
const builtIns = (0, built_in_config_1.getBuiltInDefinitions)(builtInsConfig.definitions, builtInsConfig.loadDefaults);
|
|
19
|
+
this.builtInEnv = new environment_1.Environment(undefined, true);
|
|
20
|
+
this.builtInEnv.memory = builtIns.builtInMemory;
|
|
21
|
+
this.emptyBuiltInEnv = new environment_1.Environment(undefined, true);
|
|
22
|
+
this.emptyBuiltInEnv.memory = builtIns.emptyBuiltInMemory;
|
|
23
|
+
}
|
|
24
|
+
get builtInEnvironment() {
|
|
25
|
+
return this.builtInEnv;
|
|
26
|
+
}
|
|
27
|
+
get emptyBuiltInEnvironment() {
|
|
28
|
+
return this.emptyBuiltInEnv;
|
|
29
|
+
}
|
|
30
|
+
makeCleanEnv() {
|
|
31
|
+
return {
|
|
32
|
+
current: new environment_1.Environment(this.builtInEnv),
|
|
33
|
+
level: 0
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
getCleanEnvFingerprint() {
|
|
37
|
+
if (!this.builtInEnvFingerprint) {
|
|
38
|
+
this.builtInEnvFingerprint = (0, fingerprint_1.envFingerprint)(this.makeCleanEnv());
|
|
39
|
+
}
|
|
40
|
+
return this.builtInEnvFingerprint;
|
|
41
|
+
}
|
|
42
|
+
makeCleanEnvWithEmptyBuiltIns() {
|
|
43
|
+
return {
|
|
44
|
+
current: new environment_1.Environment(this.emptyBuiltInEnv),
|
|
45
|
+
level: 0
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.FlowrAnalyzerEnvironmentContext = FlowrAnalyzerEnvironmentContext;
|
|
50
|
+
//# sourceMappingURL=flowr-analyzer-environment-context.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { AbstractFlowrAnalyzerContext } from './abstract-flowr-analyzer-context';
|
|
2
|
-
import {
|
|
2
|
+
import type { RParseRequestFromText, RParseRequest, RParseRequestFromFile } from '../../r-bridge/retriever';
|
|
3
3
|
import type { FlowrAnalyzerLoadingOrderContext, ReadOnlyFlowrAnalyzerLoadingOrderContext } from './flowr-analyzer-loading-order-context';
|
|
4
4
|
import { FlowrAnalyzerProjectDiscoveryPlugin } from '../plugins/project-discovery/flowr-analyzer-project-discovery-plugin';
|
|
5
5
|
import { FlowrAnalyzerFilePlugin } from '../plugins/file-plugins/flowr-analyzer-file-plugin';
|
|
6
|
-
import {
|
|
6
|
+
import { FlowrFile, type FlowrFileProvider, FileRole } from './flowr-file';
|
|
7
7
|
import type { FlowrDescriptionFile } from '../plugins/file-plugins/flowr-description-file';
|
|
8
8
|
/**
|
|
9
9
|
* This is a request to process a folder as a project, which will be expanded by the registered {@link FlowrAnalyzerProjectDiscoveryPlugin}s.
|
|
@@ -16,11 +16,12 @@ export interface RProjectAnalysisRequest {
|
|
|
16
16
|
readonly content: string;
|
|
17
17
|
}
|
|
18
18
|
export type RAnalysisRequest = RParseRequest | RProjectAnalysisRequest;
|
|
19
|
-
export type
|
|
20
|
-
[
|
|
21
|
-
[
|
|
22
|
-
[
|
|
23
|
-
[
|
|
19
|
+
export type RoleBasedFiles = {
|
|
20
|
+
[FileRole.Description]: FlowrDescriptionFile[];
|
|
21
|
+
[FileRole.Namespace]: FlowrFileProvider[];
|
|
22
|
+
[FileRole.Source]: FlowrFileProvider[];
|
|
23
|
+
[FileRole.Data]: FlowrFileProvider[];
|
|
24
|
+
[FileRole.Other]: FlowrFileProvider[];
|
|
24
25
|
};
|
|
25
26
|
/**
|
|
26
27
|
* This is the read-only interface for the files context, which is used to manage all files known to the {@link FlowrAnalyzer}.
|
|
@@ -43,7 +44,37 @@ export interface ReadOnlyFlowrAnalyzerFilesContext {
|
|
|
43
44
|
* getFilesByRole(SpecialFileRole.Description)
|
|
44
45
|
* ```
|
|
45
46
|
*/
|
|
46
|
-
getFilesByRole<Role extends
|
|
47
|
+
getFilesByRole<Role extends FileRole>(role: Role): RoleBasedFiles[Role];
|
|
48
|
+
/**
|
|
49
|
+
* Check if the context has a file with the given path.
|
|
50
|
+
* Please note, that this may also check the file system, depending on the configuration
|
|
51
|
+
* (see {@link FlowrConfigOptions.project.resolveUnknownPathsOnDisk}).
|
|
52
|
+
* @param path - The path to the file.
|
|
53
|
+
*
|
|
54
|
+
* If you do not know the exact path or, e.g., casing of the file, use {@link exists} instead.
|
|
55
|
+
*/
|
|
56
|
+
hasFile(path: string): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Check if a file exists at the given path, optionally ignoring case.
|
|
59
|
+
* @param path - The path to the file.
|
|
60
|
+
* @param ignoreCase - Whether to ignore case when checking for the file.
|
|
61
|
+
*
|
|
62
|
+
* Please note that this method checks the file system based on the configuration (see {@link FlowrConfigOptions.project.resolveUnknownPathsOnDisk}).
|
|
63
|
+
* @returns The actual path of the file if it exists, otherwise `undefined`.
|
|
64
|
+
*/
|
|
65
|
+
exists(path: string, ignoreCase: boolean): string | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* Until parsers support multiple request types from the virtual context system,
|
|
68
|
+
* we resolve their contents.
|
|
69
|
+
*/
|
|
70
|
+
resolveRequest(r: RParseRequest): {
|
|
71
|
+
r: RParseRequestFromText;
|
|
72
|
+
path?: string;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Get all files that have been considered during dataflow analysis.
|
|
76
|
+
*/
|
|
77
|
+
consideredFilesList(): readonly string[];
|
|
47
78
|
}
|
|
48
79
|
/**
|
|
49
80
|
* This is the analyzer file context to be modified by all plugins that affect the files.
|
|
@@ -54,10 +85,21 @@ export declare class FlowrAnalyzerFilesContext extends AbstractFlowrAnalyzerCont
|
|
|
54
85
|
readonly name = "flowr-analyzer-files-context";
|
|
55
86
|
readonly loadingOrder: FlowrAnalyzerLoadingOrderContext;
|
|
56
87
|
private files;
|
|
88
|
+
private inlineFiles;
|
|
57
89
|
private readonly fileLoaders;
|
|
58
|
-
|
|
90
|
+
/** these are all the paths of files that have been considered by the dataflow graph (even if not added) */
|
|
91
|
+
private readonly consideredFiles;
|
|
92
|
+
private byRole;
|
|
59
93
|
constructor(loadingOrder: FlowrAnalyzerLoadingOrderContext, plugins: readonly FlowrAnalyzerProjectDiscoveryPlugin[], fileLoaders: readonly FlowrAnalyzerFilePlugin[]);
|
|
60
94
|
reset(): void;
|
|
95
|
+
/**
|
|
96
|
+
* Record that a file has been considered during dataflow analysis.
|
|
97
|
+
*/
|
|
98
|
+
addConsideredFile(path: string): void;
|
|
99
|
+
/**
|
|
100
|
+
* Get all files that have been considered during dataflow analysis.
|
|
101
|
+
*/
|
|
102
|
+
consideredFilesList(): readonly string[];
|
|
61
103
|
/**
|
|
62
104
|
* Add multiple requests to the context. This is just a convenience method that calls {@link addRequest} for each request.
|
|
63
105
|
*/
|
|
@@ -65,21 +107,29 @@ export declare class FlowrAnalyzerFilesContext extends AbstractFlowrAnalyzerCont
|
|
|
65
107
|
/**
|
|
66
108
|
* Add a request to the context. If the request is of type `project`, it will be expanded using the registered {@link FlowrAnalyzerProjectDiscoveryPlugin}s.
|
|
67
109
|
*/
|
|
68
|
-
addRequest
|
|
110
|
+
private addRequest;
|
|
69
111
|
/**
|
|
70
112
|
* Add multiple files to the context. This is just a convenience method that calls {@link addFile} for each file.
|
|
71
113
|
*/
|
|
72
|
-
addFiles(
|
|
114
|
+
addFiles(files: (string | FlowrFileProvider | RParseRequestFromFile)[]): void;
|
|
73
115
|
/**
|
|
74
116
|
* Add a file to the context. If the file has a special role, it will be added to the corresponding list of special files.
|
|
75
117
|
* This method also applies any registered {@link FlowrAnalyzerFilePlugin}s to the file before adding it to the context.
|
|
76
118
|
*/
|
|
77
|
-
addFile(file: string | FlowrFileProvider
|
|
119
|
+
addFile(file: string | FlowrFileProvider | RParseRequestFromFile, role?: FileRole): FlowrFileProvider<{
|
|
120
|
+
toString(): string;
|
|
121
|
+
}>;
|
|
122
|
+
hasFile(path: string): boolean;
|
|
123
|
+
exists(p: string, ignoreCase: boolean): string | undefined;
|
|
78
124
|
private fileLoadPlugins;
|
|
125
|
+
resolveRequest(r: RParseRequest): {
|
|
126
|
+
r: RParseRequestFromText;
|
|
127
|
+
path?: string;
|
|
128
|
+
};
|
|
79
129
|
/**
|
|
80
130
|
* Get all requests that have been added to this context.
|
|
81
131
|
* This is a convenience method that calls {@link FlowrAnalyzerLoadingOrderContext.getLoadingOrder}.
|
|
82
132
|
*/
|
|
83
133
|
computeLoadingOrder(): readonly RParseRequest[];
|
|
84
|
-
getFilesByRole<Role extends
|
|
134
|
+
getFilesByRole<Role extends FileRole>(role: Role): RoleBasedFiles[Role];
|
|
85
135
|
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.FlowrAnalyzerFilesContext = void 0;
|
|
4
7
|
const abstract_flowr_analyzer_context_1 = require("./abstract-flowr-analyzer-context");
|
|
@@ -8,23 +11,19 @@ const flowr_analyzer_project_discovery_plugin_1 = require("../plugins/project-di
|
|
|
8
11
|
const flowr_analyzer_file_plugin_1 = require("../plugins/file-plugins/flowr-analyzer-file-plugin");
|
|
9
12
|
const flowr_file_1 = require("./flowr-file");
|
|
10
13
|
const log_1 = require("../../util/log");
|
|
14
|
+
const fs_1 = __importDefault(require("fs"));
|
|
15
|
+
const path_1 = __importDefault(require("path"));
|
|
11
16
|
const fileLog = log_1.log.getSubLogger({ name: 'flowr-analyzer-files-context' });
|
|
12
|
-
function
|
|
13
|
-
let f;
|
|
14
|
-
let p;
|
|
17
|
+
function wrapFile(file, role) {
|
|
15
18
|
if (typeof file === 'string') {
|
|
16
|
-
|
|
17
|
-
p = file;
|
|
19
|
+
return new flowr_file_1.FlowrTextFile(file, role);
|
|
18
20
|
}
|
|
19
21
|
else if ('request' in file) {
|
|
20
|
-
|
|
21
|
-
p = file.content;
|
|
22
|
+
return flowr_file_1.FlowrFile.fromRequest(file);
|
|
22
23
|
}
|
|
23
24
|
else {
|
|
24
|
-
|
|
25
|
-
p = file.path().toString();
|
|
25
|
+
return file;
|
|
26
26
|
}
|
|
27
|
-
return { f, p };
|
|
28
27
|
}
|
|
29
28
|
/**
|
|
30
29
|
* This is the analyzer file context to be modified by all plugins that affect the files.
|
|
@@ -34,15 +33,19 @@ function obtainFileAndPath(file, role) {
|
|
|
34
33
|
class FlowrAnalyzerFilesContext extends abstract_flowr_analyzer_context_1.AbstractFlowrAnalyzerContext {
|
|
35
34
|
name = 'flowr-analyzer-files-context';
|
|
36
35
|
loadingOrder;
|
|
37
|
-
/* all project files etc., this contains *all* files, loading orders etc. are to be handled by plugins */
|
|
36
|
+
/* all project files etc., this contains *all* (non-inline) files, loading orders etc. are to be handled by plugins */
|
|
38
37
|
files = new Map();
|
|
38
|
+
inlineFiles = [];
|
|
39
39
|
fileLoaders;
|
|
40
|
+
/** these are all the paths of files that have been considered by the dataflow graph (even if not added) */
|
|
41
|
+
consideredFiles = [];
|
|
40
42
|
/* files that are part of the analysis, e.g. source files */
|
|
41
|
-
|
|
42
|
-
[flowr_file_1.
|
|
43
|
-
[flowr_file_1.
|
|
44
|
-
[flowr_file_1.
|
|
45
|
-
[flowr_file_1.
|
|
43
|
+
byRole = {
|
|
44
|
+
[flowr_file_1.FileRole.Description]: [],
|
|
45
|
+
[flowr_file_1.FileRole.Namespace]: [],
|
|
46
|
+
[flowr_file_1.FileRole.Source]: [],
|
|
47
|
+
[flowr_file_1.FileRole.Data]: [],
|
|
48
|
+
[flowr_file_1.FileRole.Other]: []
|
|
46
49
|
};
|
|
47
50
|
constructor(loadingOrder, plugins, fileLoaders) {
|
|
48
51
|
super(loadingOrder.getAttachedContext(), flowr_analyzer_project_discovery_plugin_1.FlowrAnalyzerProjectDiscoveryPlugin.defaultPlugin(), plugins);
|
|
@@ -53,6 +56,18 @@ class FlowrAnalyzerFilesContext extends abstract_flowr_analyzer_context_1.Abstra
|
|
|
53
56
|
this.loadingOrder.reset();
|
|
54
57
|
this.files = new Map();
|
|
55
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Record that a file has been considered during dataflow analysis.
|
|
61
|
+
*/
|
|
62
|
+
addConsideredFile(path) {
|
|
63
|
+
this.consideredFiles.push(path);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get all files that have been considered during dataflow analysis.
|
|
67
|
+
*/
|
|
68
|
+
consideredFilesList() {
|
|
69
|
+
return this.consideredFiles;
|
|
70
|
+
}
|
|
56
71
|
/**
|
|
57
72
|
* Add multiple requests to the context. This is just a convenience method that calls {@link addRequest} for each request.
|
|
58
73
|
*/
|
|
@@ -67,9 +82,6 @@ class FlowrAnalyzerFilesContext extends abstract_flowr_analyzer_context_1.Abstra
|
|
|
67
82
|
addRequest(request) {
|
|
68
83
|
if (request.request !== 'project') {
|
|
69
84
|
this.loadingOrder.addRequest(request);
|
|
70
|
-
if (request.request === 'file') {
|
|
71
|
-
this.files.set(request.content, request);
|
|
72
|
-
}
|
|
73
85
|
return;
|
|
74
86
|
}
|
|
75
87
|
const expandedRequests = this.applyPlugins(request).flat();
|
|
@@ -85,7 +97,7 @@ class FlowrAnalyzerFilesContext extends abstract_flowr_analyzer_context_1.Abstra
|
|
|
85
97
|
/**
|
|
86
98
|
* Add multiple files to the context. This is just a convenience method that calls {@link addFile} for each file.
|
|
87
99
|
*/
|
|
88
|
-
addFiles(
|
|
100
|
+
addFiles(files) {
|
|
89
101
|
for (const file of files) {
|
|
90
102
|
this.addFile(file);
|
|
91
103
|
}
|
|
@@ -95,29 +107,88 @@ class FlowrAnalyzerFilesContext extends abstract_flowr_analyzer_context_1.Abstra
|
|
|
95
107
|
* This method also applies any registered {@link FlowrAnalyzerFilePlugin}s to the file before adding it to the context.
|
|
96
108
|
*/
|
|
97
109
|
addFile(file, role) {
|
|
98
|
-
const
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
110
|
+
const f = this.fileLoadPlugins(wrapFile(file, role));
|
|
111
|
+
if (f.path() === flowr_file_1.FlowrFile.INLINE_PATH) {
|
|
112
|
+
this.inlineFiles.push(f);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
const exist = this.files.get(f.path());
|
|
116
|
+
(0, assert_1.guard)(exist === undefined || exist === f, `File ${f.path()} already added to the context.`);
|
|
117
|
+
this.files.set(f.path(), f);
|
|
118
|
+
}
|
|
119
|
+
if (f.role) {
|
|
120
|
+
this.byRole[f.role].push(f);
|
|
121
|
+
}
|
|
122
|
+
return f;
|
|
123
|
+
}
|
|
124
|
+
hasFile(path) {
|
|
125
|
+
return this.files.has(path)
|
|
126
|
+
|| (this.ctx.config.project.resolveUnknownPathsOnDisk && fs_1.default.existsSync(path));
|
|
127
|
+
}
|
|
128
|
+
exists(p, ignoreCase) {
|
|
129
|
+
try {
|
|
130
|
+
if (!ignoreCase) {
|
|
131
|
+
return this.hasFile(p) ? p : undefined;
|
|
132
|
+
}
|
|
133
|
+
// walk the directory and find the first match
|
|
134
|
+
const dir = path_1.default.dirname(p);
|
|
135
|
+
const file = path_1.default.basename(p);
|
|
136
|
+
// try to find in local known files first
|
|
137
|
+
const localFound = Array.from(this.files.keys()).find(f => {
|
|
138
|
+
return path_1.default.dirname(f) === dir && path_1.default.basename(f).toLowerCase() === file.toLowerCase();
|
|
139
|
+
});
|
|
140
|
+
if (localFound) {
|
|
141
|
+
return localFound;
|
|
142
|
+
}
|
|
143
|
+
if (this.ctx.config.project.resolveUnknownPathsOnDisk) {
|
|
144
|
+
const files = fs_1.default.readdirSync(dir);
|
|
145
|
+
const found = files.find(f => f.toLowerCase() === file.toLowerCase());
|
|
146
|
+
return found ? path_1.default.join(dir, found) : undefined;
|
|
147
|
+
}
|
|
148
|
+
return undefined;
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return undefined;
|
|
105
152
|
}
|
|
106
153
|
}
|
|
107
|
-
fileLoadPlugins(f
|
|
154
|
+
fileLoadPlugins(f) {
|
|
108
155
|
let fFinal = f;
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
156
|
+
for (const loader of this.fileLoaders) {
|
|
157
|
+
if (loader.applies(f.path())) {
|
|
158
|
+
fileLog.debug(`Applying file loader ${loader.name} to file ${f.path()}`);
|
|
159
|
+
fFinal = loader.processor(this.ctx, f);
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return fFinal;
|
|
164
|
+
}
|
|
165
|
+
resolveRequest(r) {
|
|
166
|
+
if (r.request === 'text') {
|
|
167
|
+
return { r };
|
|
168
|
+
}
|
|
169
|
+
const file = this.files.get(r.content);
|
|
170
|
+
if (file === undefined && this.ctx.config.project.resolveUnknownPathsOnDisk) {
|
|
171
|
+
fileLog.debug(`File ${r.content} not found in context, trying to load from disk.`);
|
|
172
|
+
if (fs_1.default.existsSync(r.content)) {
|
|
173
|
+
const loadedFile = this.addFile(new flowr_file_1.FlowrTextFile(r.content));
|
|
174
|
+
return {
|
|
175
|
+
r: {
|
|
176
|
+
request: 'text',
|
|
177
|
+
content: loadedFile.content().toString(),
|
|
178
|
+
},
|
|
179
|
+
path: loadedFile.path()
|
|
180
|
+
};
|
|
118
181
|
}
|
|
119
182
|
}
|
|
120
|
-
|
|
183
|
+
(0, assert_1.guard)(file !== undefined && file !== null, `File ${r.content} not found in context.`);
|
|
184
|
+
const content = file.content();
|
|
185
|
+
return {
|
|
186
|
+
r: {
|
|
187
|
+
request: 'text',
|
|
188
|
+
content: typeof content === 'string' ? content : '',
|
|
189
|
+
},
|
|
190
|
+
path: file.path()
|
|
191
|
+
};
|
|
121
192
|
}
|
|
122
193
|
/**
|
|
123
194
|
* Get all requests that have been added to this context.
|
|
@@ -127,7 +198,7 @@ class FlowrAnalyzerFilesContext extends abstract_flowr_analyzer_context_1.Abstra
|
|
|
127
198
|
return this.loadingOrder.getLoadingOrder();
|
|
128
199
|
}
|
|
129
200
|
getFilesByRole(role) {
|
|
130
|
-
return this.
|
|
201
|
+
return this.byRole[role];
|
|
131
202
|
}
|
|
132
203
|
}
|
|
133
204
|
exports.FlowrAnalyzerFilesContext = FlowrAnalyzerFilesContext;
|