@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
package/queries/query.js
CHANGED
|
@@ -10,6 +10,7 @@ exports.SupportedQueriesSchema = SupportedQueriesSchema;
|
|
|
10
10
|
exports.VirtualQuerySchema = VirtualQuerySchema;
|
|
11
11
|
exports.AnyQuerySchema = AnyQuerySchema;
|
|
12
12
|
exports.QueriesSchema = QueriesSchema;
|
|
13
|
+
exports.genericWrapReplFailIfNoRequest = genericWrapReplFailIfNoRequest;
|
|
13
14
|
const call_context_query_format_1 = require("./catalog/call-context-query/call-context-query-format");
|
|
14
15
|
const assert_1 = require("../util/assert");
|
|
15
16
|
const virtual_queries_1 = require("./virtual-query/virtual-queries");
|
|
@@ -19,6 +20,7 @@ const normalized_ast_query_format_1 = require("./catalog/normalized-ast-query/no
|
|
|
19
20
|
const static_slice_query_format_1 = require("./catalog/static-slice-query/static-slice-query-format");
|
|
20
21
|
const cluster_query_format_1 = require("./catalog/cluster-query/cluster-query-format");
|
|
21
22
|
const dependencies_query_format_1 = require("./catalog/dependencies-query/dependencies-query-format");
|
|
23
|
+
const ansi_1 = require("../util/text/ansi");
|
|
22
24
|
const joi_1 = __importDefault(require("joi"));
|
|
23
25
|
const location_map_query_format_1 = require("./catalog/location-map-query/location-map-query-format");
|
|
24
26
|
const config_query_format_1 = require("./catalog/config-query/config-query-format");
|
|
@@ -105,7 +107,7 @@ async function executeQueries(data, queries) {
|
|
|
105
107
|
results.push([type, result]);
|
|
106
108
|
}
|
|
107
109
|
catch (e) {
|
|
108
|
-
log_1.log.
|
|
110
|
+
log_1.log.warn(e);
|
|
109
111
|
results.push([type, undefined]);
|
|
110
112
|
}
|
|
111
113
|
}
|
|
@@ -145,4 +147,22 @@ function AnyQuerySchema() {
|
|
|
145
147
|
function QueriesSchema() {
|
|
146
148
|
return joi_1.default.array().items(AnyQuerySchema()).description('Queries to run on the file analysis information (in the form of an array)');
|
|
147
149
|
}
|
|
150
|
+
/**
|
|
151
|
+
* Wraps a function that executes a REPL query and, if it fails, checks whether there were any requests to analyze.
|
|
152
|
+
*/
|
|
153
|
+
async function genericWrapReplFailIfNoRequest(fn, output, analyzer) {
|
|
154
|
+
try {
|
|
155
|
+
return await fn();
|
|
156
|
+
}
|
|
157
|
+
catch (e) {
|
|
158
|
+
if (analyzer.inspectContext().files.loadingOrder.getUnorderedRequests().length === 0) {
|
|
159
|
+
output.stderr(output.formatter.format('No requests to analyze were found.', { color: 1 /* Colors.Red */, style: 1 /* FontStyles.Bold */, effect: ansi_1.ColorEffect.Foreground })
|
|
160
|
+
+ '\nIf you consider this an error, please report a bug: '
|
|
161
|
+
+ (0, assert_1.getGuardIssueUrl)('analyzer found no requests to analyze'));
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
throw e;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
148
168
|
//# sourceMappingURL=query.js.map
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { RNode } from './model';
|
|
2
2
|
import type { NodeId } from './processing/node-id';
|
|
3
3
|
import type { ParentInformation } from './processing/decorate';
|
|
4
|
+
import type { RProject } from './nodes/r-project';
|
|
4
5
|
/**
|
|
5
6
|
* Collects all node ids within a tree given by a respective root node
|
|
6
7
|
* @param nodes - The root id nodes to start collecting from
|
|
7
8
|
* @param stop - A function that determines whether to stop collecting at a given node, does not stop by default
|
|
8
9
|
*/
|
|
9
|
-
export declare function collectAllIds<OtherInfo>(nodes: RNode<OtherInfo & ParentInformation> | (RNode<OtherInfo & ParentInformation> | null | undefined)[] | undefined, stop?: (node: RNode<OtherInfo & ParentInformation>) => boolean): Set<NodeId>;
|
|
10
|
+
export declare function collectAllIds<OtherInfo>(nodes: RProject<OtherInfo & ParentInformation> | RNode<OtherInfo & ParentInformation> | (RNode<OtherInfo & ParentInformation> | null | undefined)[] | undefined, stop?: (node: RNode<OtherInfo & ParentInformation>) => boolean): Set<NodeId>;
|
|
@@ -2,12 +2,16 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.collectAllIds = collectAllIds;
|
|
4
4
|
const visitor_1 = require("./processing/visitor");
|
|
5
|
+
const type_1 = require("./type");
|
|
5
6
|
/**
|
|
6
7
|
* Collects all node ids within a tree given by a respective root node
|
|
7
8
|
* @param nodes - The root id nodes to start collecting from
|
|
8
9
|
* @param stop - A function that determines whether to stop collecting at a given node, does not stop by default
|
|
9
10
|
*/
|
|
10
11
|
function collectAllIds(nodes, stop = () => false) {
|
|
12
|
+
if (nodes && 'type' in nodes && nodes.type === type_1.RType.Project) {
|
|
13
|
+
nodes = nodes.files.map(f => f.root);
|
|
14
|
+
}
|
|
11
15
|
const ids = new Set();
|
|
12
16
|
(0, visitor_1.visitAst)(nodes, (node) => {
|
|
13
17
|
if (stop(node)) {
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { NoInfo } from '../model';
|
|
2
|
+
import { RType } from '../type';
|
|
3
|
+
import type { RExpressionList } from './r-expression-list';
|
|
4
|
+
import type { NodeId } from '../processing/node-id';
|
|
5
|
+
/**
|
|
6
|
+
* Holds a single R file starting with an expression list.
|
|
7
|
+
*/
|
|
8
|
+
export interface RProjectFile<Info = NoInfo> {
|
|
9
|
+
readonly filePath?: string;
|
|
10
|
+
readonly root: RExpressionList<Info>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Holds a collection of files (started with the expression list)
|
|
14
|
+
* @see {@link RExpressionList} - for the root of each file
|
|
15
|
+
* @see {@link mergeProjects} - to merge multiple projects into a single one
|
|
16
|
+
* @see {@link RProjectFile} - for each file in the project
|
|
17
|
+
*/
|
|
18
|
+
export interface RProject<Info = NoInfo> {
|
|
19
|
+
readonly type: RType.Project;
|
|
20
|
+
readonly files: RProjectFile<Info>[];
|
|
21
|
+
readonly info?: {
|
|
22
|
+
id: NodeId;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Merge multiple projects into a single one by concatenating their files.
|
|
27
|
+
* This will remove the `info` property of the resulting project.
|
|
28
|
+
*/
|
|
29
|
+
export declare function mergeProjects<Info = NoInfo>(projects: RProject<Info>[]): RProject<Info>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mergeProjects = mergeProjects;
|
|
4
|
+
const type_1 = require("../type");
|
|
5
|
+
/**
|
|
6
|
+
* Merge multiple projects into a single one by concatenating their files.
|
|
7
|
+
* This will remove the `info` property of the resulting project.
|
|
8
|
+
*/
|
|
9
|
+
function mergeProjects(projects) {
|
|
10
|
+
return {
|
|
11
|
+
type: type_1.RType.Project,
|
|
12
|
+
files: projects.flatMap(p => p.files)
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=r-project.js.map
|
|
@@ -14,12 +14,13 @@ import type { MergeableRecord } from '../../../../../util/objects';
|
|
|
14
14
|
import { RoleInParent } from './role';
|
|
15
15
|
import type { NodeId } from './node-id';
|
|
16
16
|
import type { RDelimiter } from '../nodes/info/r-delimiter';
|
|
17
|
+
import type { RProject } from '../nodes/r-project';
|
|
17
18
|
/**
|
|
18
19
|
* A function that given an RNode returns a (guaranteed) unique id for it
|
|
19
20
|
* @param data - the node to generate an id for
|
|
20
21
|
* @returns a unique id for the given node
|
|
21
22
|
*/
|
|
22
|
-
export type IdGenerator<OtherInfo> = (data: RNode<OtherInfo>) => NodeId;
|
|
23
|
+
export type IdGenerator<OtherInfo> = (data: RProject<OtherInfo> | RNode<OtherInfo>) => NodeId;
|
|
23
24
|
/**
|
|
24
25
|
* The simplest id generator which just increments a number on each call.
|
|
25
26
|
*/
|
|
@@ -71,7 +72,7 @@ export type AstIdMap<OtherInfo = NoInfo> = BiMap<NodeId, RNodeWithParent<OtherIn
|
|
|
71
72
|
* Contains the normalized AST as a doubly linked tree
|
|
72
73
|
* and a map from ids to nodes so that parent links can be chased easily.
|
|
73
74
|
*/
|
|
74
|
-
export interface NormalizedAst<OtherInfo = ParentInformation, Node =
|
|
75
|
+
export interface NormalizedAst<OtherInfo = ParentInformation, Node = RProject<OtherInfo & ParentInformation>> {
|
|
75
76
|
/** Bidirectional mapping of ids to the corresponding nodes and the other way */
|
|
76
77
|
idMap: AstIdMap<OtherInfo>;
|
|
77
78
|
/** The root of the AST with parent information */
|
|
@@ -82,15 +83,12 @@ export interface NormalizedAst<OtherInfo = ParentInformation, Node = RNode<Other
|
|
|
82
83
|
export interface NormalizedAstDecorationConfiguration<OtherInfo> {
|
|
83
84
|
/** The id generator: must generate a unique id für each passed node */
|
|
84
85
|
getId?: IdGenerator<OtherInfo>;
|
|
85
|
-
/** the path to the file this AST was extracted from will be added to the nodes */
|
|
86
|
-
file?: string;
|
|
87
86
|
}
|
|
88
87
|
/**
|
|
89
88
|
* Covert the given AST into a doubly linked tree while assigning ids (so it stays serializable).
|
|
90
|
-
* @param
|
|
89
|
+
* @param project - The AST to decorate
|
|
91
90
|
* @param getId - The id generator: must generate a unique id für each passed node
|
|
92
|
-
* @param file - the path to the file this AST was extracted from will be added to the nodes
|
|
93
91
|
* @typeParam OtherInfo - The original decoration of the ast nodes (probably is nothing as the id decoration is most likely the first step to be performed after extraction)
|
|
94
92
|
* @returns A decorated AST based on the input and the id provider.
|
|
95
93
|
*/
|
|
96
|
-
export declare function decorateAst<OtherInfo = NoInfo>(
|
|
94
|
+
export declare function decorateAst<OtherInfo = NoInfo>(project: RProject<OtherInfo>, { getId }: NormalizedAstDecorationConfiguration<OtherInfo>): NormalizedAst<OtherInfo & ParentInformation>;
|
|
@@ -58,7 +58,7 @@ function nodeToLocationId(data) {
|
|
|
58
58
|
*/
|
|
59
59
|
function deterministicLocationIdGenerator(start = 0) {
|
|
60
60
|
let id = start;
|
|
61
|
-
return (data) => data.location !== undefined ? nodeToLocationId(data) : `${id++}`;
|
|
61
|
+
return (data) => 'location' in data && data.location !== undefined ? nodeToLocationId(data) : `${id++}`;
|
|
62
62
|
}
|
|
63
63
|
const defaultParentContext = {
|
|
64
64
|
role: "root" /* RoleInParent.Root */,
|
|
@@ -69,21 +69,19 @@ const nestForElement = new Set([
|
|
|
69
69
|
]);
|
|
70
70
|
/**
|
|
71
71
|
* Covert the given AST into a doubly linked tree while assigning ids (so it stays serializable).
|
|
72
|
-
* @param
|
|
72
|
+
* @param project - The AST to decorate
|
|
73
73
|
* @param getId - The id generator: must generate a unique id für each passed node
|
|
74
|
-
* @param file - the path to the file this AST was extracted from will be added to the nodes
|
|
75
74
|
* @typeParam OtherInfo - The original decoration of the ast nodes (probably is nothing as the id decoration is most likely the first step to be performed after extraction)
|
|
76
75
|
* @returns A decorated AST based on the input and the id provider.
|
|
77
76
|
*/
|
|
78
|
-
function decorateAst(
|
|
77
|
+
function decorateAst(project, { getId = deterministicCountingIdGenerator(0) }) {
|
|
79
78
|
const idMap = new bimap_1.BiMap();
|
|
80
|
-
const info = { idMap, getId, file };
|
|
79
|
+
const info = { idMap, getId, file: undefined };
|
|
81
80
|
/* Please note, that all fold processors do not re-create copies in higher-folding steps so that the idMap stays intact. */
|
|
82
81
|
const foldLeaf = createFoldForLeaf(info);
|
|
83
82
|
const foldBinaryOp = createFoldForBinaryOp(info);
|
|
84
83
|
const unaryOp = createFoldForUnaryOp(info);
|
|
85
|
-
|
|
86
|
-
const decoratedAst = (0, stateful_fold_1.foldAstStateful)(ast, 0, {
|
|
84
|
+
const folds = {
|
|
87
85
|
down: (n, nesting) => {
|
|
88
86
|
if (nestForElement.has(n.type)) {
|
|
89
87
|
return nesting + 1;
|
|
@@ -119,11 +117,26 @@ function decorateAst(ast, { getId = deterministicCountingIdGenerator(0), file })
|
|
|
119
117
|
foldArgument: createFoldForFunctionArgument(info),
|
|
120
118
|
foldParameter: createFoldForFunctionParameter(info)
|
|
121
119
|
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
|
|
120
|
+
};
|
|
121
|
+
// we return the project by mapping over the files
|
|
122
|
+
const decoratedProject = {
|
|
123
|
+
...project,
|
|
124
|
+
files: project.files.map(file => {
|
|
125
|
+
info.file = file.filePath;
|
|
126
|
+
const decoratedAst = (0, stateful_fold_1.foldAstStateful)(file.root, 0, folds);
|
|
127
|
+
decoratedAst.info.role = "root" /* RoleInParent.Root */;
|
|
128
|
+
decoratedAst.info.index = 0;
|
|
129
|
+
return {
|
|
130
|
+
root: decoratedAst,
|
|
131
|
+
filePath: file.filePath
|
|
132
|
+
};
|
|
133
|
+
}),
|
|
134
|
+
info: {
|
|
135
|
+
id: getId(project)
|
|
136
|
+
}
|
|
137
|
+
};
|
|
125
138
|
return {
|
|
126
|
-
ast:
|
|
139
|
+
ast: decoratedProject,
|
|
127
140
|
idMap
|
|
128
141
|
};
|
|
129
142
|
}
|
|
@@ -204,6 +204,8 @@ var RType;
|
|
|
204
204
|
/** {@link RSymbol} */
|
|
205
205
|
RType["Symbol"] = "RSymbol";
|
|
206
206
|
/* ------ special types ------ */
|
|
207
|
+
/** {@link RProject} */
|
|
208
|
+
RType["Project"] = "RProject";
|
|
207
209
|
/**
|
|
208
210
|
* {@link RDelimiter}.
|
|
209
211
|
* Is not part of the normalized AST but can be found in
|
|
@@ -61,7 +61,7 @@ function convertPreparedParsedData(roots) {
|
|
|
61
61
|
};
|
|
62
62
|
}
|
|
63
63
|
// Locate start, end of a source file (order children in advance).
|
|
64
|
-
const rootEntries =
|
|
64
|
+
const rootEntries = roots.slice().sort(orderOf);
|
|
65
65
|
const start = rootEntries[0];
|
|
66
66
|
const end = rootEntries[rootEntries.length - 1];
|
|
67
67
|
// Construct CsvEntry for the root, handling empty input.
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
import { type IdGenerator, type NormalizedAst } from '../../model/processing/decorate';
|
|
2
|
-
import type { NoInfo
|
|
3
|
-
import type { ParseStepOutput } from '../../../../parser';
|
|
2
|
+
import type { NoInfo } from '../../model/model';
|
|
3
|
+
import type { ParseStepOutput, ParseStepOutputSingleFile } from '../../../../parser';
|
|
4
4
|
import { type FlowrConfigOptions } from '../../../../../config';
|
|
5
5
|
import type { Tree } from 'web-tree-sitter';
|
|
6
|
+
import type { RProject } from '../../model/nodes/r-project';
|
|
6
7
|
export declare const parseLog: import("tslog").Logger<import("tslog").ILogObj>;
|
|
7
8
|
/**
|
|
8
9
|
* Take the output as produced by the parse step and normalize the AST from the R parser.
|
|
9
|
-
* @see {@link normalizeButNotDecorated} for a version that does not decorate the AST
|
|
10
|
-
* @see {@link normalizeTreeSitter} for a version that normalizes the AST from the TreeSitter parser
|
|
10
|
+
* @see {@link normalizeButNotDecorated} - for a version that does not decorate the AST
|
|
11
|
+
* @see {@link normalizeTreeSitter} - for a version that normalizes the AST from the TreeSitter parser
|
|
11
12
|
*/
|
|
12
|
-
export declare function normalize(parsed: ParseStepOutput<string>, getId?: IdGenerator<NoInfo
|
|
13
|
+
export declare function normalize(parsed: ParseStepOutput<string>, getId?: IdGenerator<NoInfo>): NormalizedAst;
|
|
13
14
|
/**
|
|
14
15
|
* Take the output as produced by the parse step and normalize the AST from the R parser.
|
|
15
|
-
* For additional decoration with
|
|
16
|
+
* For additional decoration with {@link decorateAst} use {@link normalize}.
|
|
16
17
|
*/
|
|
17
|
-
export declare function normalizeButNotDecorated({ parsed }:
|
|
18
|
+
export declare function normalizeButNotDecorated({ parsed, filePath }: ParseStepOutputSingleFile<string>): RProject;
|
|
18
19
|
/**
|
|
19
20
|
* Tree-Sitter pendant to {@link normalize}.
|
|
20
21
|
*/
|
|
21
|
-
export declare function normalizeTreeSitter(
|
|
22
|
+
export declare function normalizeTreeSitter(parsed: ParseStepOutput<Tree>, getId: IdGenerator<NoInfo> | undefined, config: FlowrConfigOptions): NormalizedAst;
|
|
@@ -10,31 +10,32 @@ const decorate_1 = require("../../model/processing/decorate");
|
|
|
10
10
|
const normalize_root_1 = require("../main/internal/structure/normalize-root");
|
|
11
11
|
const tree_sitter_normalize_1 = require("../../../tree-sitter/tree-sitter-normalize");
|
|
12
12
|
const config_1 = require("../../../../../config");
|
|
13
|
+
const r_project_1 = require("../../model/nodes/r-project");
|
|
13
14
|
exports.parseLog = log_1.log.getSubLogger({ name: 'ast-parser' });
|
|
14
15
|
/**
|
|
15
16
|
* Take the output as produced by the parse step and normalize the AST from the R parser.
|
|
16
|
-
* @see {@link normalizeButNotDecorated} for a version that does not decorate the AST
|
|
17
|
-
* @see {@link normalizeTreeSitter} for a version that normalizes the AST from the TreeSitter parser
|
|
17
|
+
* @see {@link normalizeButNotDecorated} - for a version that does not decorate the AST
|
|
18
|
+
* @see {@link normalizeTreeSitter} - for a version that normalizes the AST from the TreeSitter parser
|
|
18
19
|
*/
|
|
19
|
-
function normalize(parsed, getId = (0, decorate_1.deterministicCountingIdGenerator)(0)
|
|
20
|
-
return (0, decorate_1.decorateAst)(
|
|
20
|
+
function normalize(parsed, getId = (0, decorate_1.deterministicCountingIdGenerator)(0)) {
|
|
21
|
+
return (0, decorate_1.decorateAst)((0, r_project_1.mergeProjects)(parsed.files.map(normalizeButNotDecorated)), { getId });
|
|
21
22
|
}
|
|
22
23
|
/**
|
|
23
24
|
* Take the output as produced by the parse step and normalize the AST from the R parser.
|
|
24
|
-
* For additional decoration with
|
|
25
|
+
* For additional decoration with {@link decorateAst} use {@link normalize}.
|
|
25
26
|
*/
|
|
26
|
-
function normalizeButNotDecorated({ parsed }) {
|
|
27
|
+
function normalizeButNotDecorated({ parsed, filePath }) {
|
|
27
28
|
const data = { currentRange: undefined, currentLexeme: undefined };
|
|
28
29
|
const object = (0, format_1.convertPreparedParsedData)((0, format_1.prepareParsedData)(parsed));
|
|
29
|
-
return (0, normalize_root_1.normalizeRootObjToAst)(data, object);
|
|
30
|
+
return (0, normalize_root_1.normalizeRootObjToAst)(data, object, filePath);
|
|
30
31
|
}
|
|
31
32
|
/**
|
|
32
33
|
* Tree-Sitter pendant to {@link normalize}.
|
|
33
34
|
*/
|
|
34
|
-
function normalizeTreeSitter(
|
|
35
|
+
function normalizeTreeSitter(parsed, getId = (0, decorate_1.deterministicCountingIdGenerator)(0), config) {
|
|
35
36
|
const lax = (0, config_1.getEngineConfig)(config, 'tree-sitter')?.lax;
|
|
36
|
-
const result = (0, decorate_1.decorateAst)((0, tree_sitter_normalize_1.normalizeTreeSitterTreeToAst)(parsed, lax), { getId
|
|
37
|
-
result.hasError = parsed.rootNode.hasError;
|
|
37
|
+
const result = (0, decorate_1.decorateAst)((0, tree_sitter_normalize_1.normalizeTreeSitterTreeToAst)(parsed.files, lax), { getId });
|
|
38
|
+
result.hasError = parsed.files.some(p => p.parsed.rootNode.hasError);
|
|
38
39
|
return result;
|
|
39
40
|
}
|
|
40
41
|
//# sourceMappingURL=parser.js.map
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { NormalizerData } from '../../normalizer-data';
|
|
2
|
-
import type { RExpressionList } from '../../../../model/nodes/r-expression-list';
|
|
3
2
|
import type { JsonEntry } from '../../../json/format';
|
|
3
|
+
import type { RProject } from '../../../../model/nodes/r-project';
|
|
4
4
|
/**
|
|
5
|
-
* Takes the parse
|
|
5
|
+
* Takes the parse data as object and produces an undecorated, normalized AST.
|
|
6
|
+
* @see {@link normalize} - for a version that also decorates the AST
|
|
6
7
|
*/
|
|
7
|
-
export declare function normalizeRootObjToAst(data: NormalizerData, obj: JsonEntry):
|
|
8
|
+
export declare function normalizeRootObjToAst(data: NormalizerData, obj: JsonEntry, filePath?: string): RProject;
|
|
@@ -7,9 +7,10 @@ const log_1 = require("../../../../../../../util/log");
|
|
|
7
7
|
const arrays_1 = require("../../../../../../../util/collections/arrays");
|
|
8
8
|
const type_1 = require("../../../../model/type");
|
|
9
9
|
/**
|
|
10
|
-
* Takes the parse
|
|
10
|
+
* Takes the parse data as object and produces an undecorated, normalized AST.
|
|
11
|
+
* @see {@link normalize} - for a version that also decorates the AST
|
|
11
12
|
*/
|
|
12
|
-
function normalizeRootObjToAst(data, obj) {
|
|
13
|
+
function normalizeRootObjToAst(data, obj, filePath) {
|
|
13
14
|
const exprContent = obj.token;
|
|
14
15
|
(0, normalize_meta_1.assureTokenType)(exprContent, type_1.RawRType.ExpressionList);
|
|
15
16
|
let parsedChildren = [];
|
|
@@ -22,15 +23,23 @@ function normalizeRootObjToAst(data, obj) {
|
|
|
22
23
|
}
|
|
23
24
|
const [delimiters, nodes] = (0, arrays_1.partition)(parsedChildren, x => x.type === type_1.RType.Delimiter || x.type === type_1.RType.Comment);
|
|
24
25
|
return {
|
|
25
|
-
type: type_1.RType.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
26
|
+
type: type_1.RType.Project,
|
|
27
|
+
files: [
|
|
28
|
+
{
|
|
29
|
+
filePath,
|
|
30
|
+
root: {
|
|
31
|
+
type: type_1.RType.ExpressionList,
|
|
32
|
+
children: nodes,
|
|
33
|
+
grouping: undefined,
|
|
34
|
+
lexeme: undefined,
|
|
35
|
+
info: {
|
|
36
|
+
fullRange: data.currentRange,
|
|
37
|
+
additionalTokens: delimiters,
|
|
38
|
+
fullLexeme: data.currentLexeme
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
]
|
|
34
43
|
};
|
|
35
44
|
}
|
|
36
45
|
//# sourceMappingURL=normalize-root.js.map
|
|
@@ -3,7 +3,7 @@ import type { Query, QueryCapture } from 'web-tree-sitter';
|
|
|
3
3
|
import type { RParseRequest } from '../../retriever';
|
|
4
4
|
import type { SyncParser, TreeSitterInformation } from '../../parser';
|
|
5
5
|
import type { TreeSitterEngineConfig } from '../../../config';
|
|
6
|
-
import type {
|
|
6
|
+
import type { ReadonlyFlowrAnalysisProvider } from '../../../project/flowr-analyzer';
|
|
7
7
|
export declare const DEFAULT_TREE_SITTER_R_WASM_PATH = "./node_modules/@eagleoutice/tree-sitter-r/tree-sitter-r.wasm";
|
|
8
8
|
export declare const DEFAULT_TREE_SITTER_WASM_PATH = "./node_modules/web-tree-sitter/tree-sitter.wasm";
|
|
9
9
|
/**
|
|
@@ -22,10 +22,10 @@ export declare class TreeSitterExecutor implements SyncParser<Parser.Tree> {
|
|
|
22
22
|
static initTreeSitter(config?: TreeSitterEngineConfig, overrideWasmPath?: string, overrideTreeSitterWasmPath?: string): Promise<void>;
|
|
23
23
|
constructor();
|
|
24
24
|
rVersion(): Promise<string | 'unknown' | 'none'>;
|
|
25
|
-
information(analyzer:
|
|
25
|
+
information(analyzer: ReadonlyFlowrAnalysisProvider): TreeSitterInformation;
|
|
26
26
|
treeSitterVersion(): number;
|
|
27
27
|
parse(request: RParseRequest): Parser.Tree;
|
|
28
28
|
createQuery(source: string): Query;
|
|
29
|
-
query(source: Query | string, tree: Parser.Tree): QueryCapture[];
|
|
29
|
+
query(source: Query | string, ...tree: Parser.Tree[]): QueryCapture[];
|
|
30
30
|
close(): void;
|
|
31
31
|
}
|
|
@@ -53,7 +53,7 @@ class TreeSitterExecutor {
|
|
|
53
53
|
name: 'tree-sitter',
|
|
54
54
|
grammarVersion: this.treeSitterVersion(),
|
|
55
55
|
treeSitterQuery: async (source, force) => {
|
|
56
|
-
return this.query(source, (await analyzer.parse(force)).parsed);
|
|
56
|
+
return this.query(source, ...(await analyzer.parse(force)).files.map(p => p.parsed));
|
|
57
57
|
}
|
|
58
58
|
};
|
|
59
59
|
}
|
|
@@ -73,10 +73,11 @@ class TreeSitterExecutor {
|
|
|
73
73
|
createQuery(source) {
|
|
74
74
|
return this.parser.getLanguage().query(source);
|
|
75
75
|
}
|
|
76
|
-
query(source, tree) {
|
|
76
|
+
query(source, ...tree) {
|
|
77
77
|
const query = typeof source === 'string' ? this.createQuery(source) : source;
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
return tree
|
|
79
|
+
.flatMap(t => query.matches(t.rootNode))
|
|
80
|
+
.flatMap(m => m.captures);
|
|
80
81
|
}
|
|
81
82
|
close() {
|
|
82
83
|
this.parser.delete();
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { RExpressionList } from '../ast/model/nodes/r-expression-list';
|
|
2
1
|
import type { Tree } from 'web-tree-sitter';
|
|
2
|
+
import type { RProject } from '../ast/model/nodes/r-project';
|
|
3
|
+
import type { ParseStepOutputSingleFile } from '../../parser';
|
|
3
4
|
export interface TreeSitterInfo {
|
|
4
5
|
treeSitterId: number;
|
|
5
6
|
}
|
|
@@ -7,7 +8,7 @@ export interface TreeSitterInfo {
|
|
|
7
8
|
* @param tree - The tree to normalize
|
|
8
9
|
* @param lax - Whether to use lax parsing (i.e., ignore errors) or strict parsing (i.e., fail on errors)
|
|
9
10
|
*/
|
|
10
|
-
export declare function normalizeTreeSitterTreeToAst(tree: Tree, lax?: boolean):
|
|
11
|
+
export declare function normalizeTreeSitterTreeToAst(tree: ParseStepOutputSingleFile<Tree>[], lax?: boolean): RProject<TreeSitterInfo>;
|
|
11
12
|
/**
|
|
12
13
|
* Globally switch to lax parsing mode for tree-sitter normalization
|
|
13
14
|
* @see {@link makeTreeSitterStrict}
|
|
@@ -24,11 +24,20 @@ function normalizeTreeSitterTreeToAst(tree, lax) {
|
|
|
24
24
|
else {
|
|
25
25
|
makeTreeSitterStrict();
|
|
26
26
|
}
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
const files = tree.map(t => {
|
|
28
|
+
const root = convertTreeNode(t.parsed.rootNode);
|
|
29
|
+
if (root.type !== type_1.RType.ExpressionList) {
|
|
30
|
+
throw new normalizer_data_1.ParseError(`expected root to resolve to an expression list, got a ${root.type}`);
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
filePath: t.filePath,
|
|
34
|
+
root: root
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
return {
|
|
38
|
+
type: type_1.RType.Project,
|
|
39
|
+
files
|
|
40
|
+
};
|
|
32
41
|
}
|
|
33
42
|
function nonErrorChildrenStrict(node) {
|
|
34
43
|
return node.hasError ? [] : node.children;
|
package/r-bridge/parser.d.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { RParseRequestFromText } from './retriever';
|
|
2
2
|
import type { OutputCollectorConfiguration, RShell } from './shell';
|
|
3
3
|
import type { RShellExecutor } from './shell-executor';
|
|
4
4
|
import type { TreeSitterExecutor } from './lang-4.x/tree-sitter/tree-sitter-executor';
|
|
5
5
|
import type { Query, QueryCapture } from 'web-tree-sitter';
|
|
6
6
|
import type { FlowrAnalysisProvider } from '../project/flowr-analyzer';
|
|
7
|
+
import type { FlowrAnalyzerContext } from '../project/context/flowr-analyzer-context';
|
|
7
8
|
interface ParserContent<T> {
|
|
8
9
|
readonly name: string;
|
|
9
10
|
information(analyzer: FlowrAnalysisProvider): BaseParserInformation;
|
|
10
|
-
parse(request:
|
|
11
|
+
parse(request: RParseRequestFromText): T;
|
|
11
12
|
close(): void;
|
|
12
13
|
}
|
|
13
14
|
export interface BaseParserInformation {
|
|
@@ -49,22 +50,31 @@ export type KnownParserName = KnownParser['name'];
|
|
|
49
50
|
export interface ParseRequiredInput<T> {
|
|
50
51
|
/** This is the {@link RShell}, {@link RShellExecutor} or {@link TreeSitterExecutor} connection to be used to obtain the original parses AST of the R code */
|
|
51
52
|
readonly parser: Parser<T>;
|
|
52
|
-
/**
|
|
53
|
-
|
|
53
|
+
/**
|
|
54
|
+
* The context from which to derive the requests from,
|
|
55
|
+
* please either relay on the {@link FlowrAnalyzer}
|
|
56
|
+
* or construct one with {@link contextFromInput}
|
|
57
|
+
*/
|
|
58
|
+
readonly context: FlowrAnalyzerContext;
|
|
54
59
|
}
|
|
55
|
-
export interface
|
|
60
|
+
export interface ParseStepOutputSingleFile<T> {
|
|
56
61
|
/** The parsed AST of the R code as given by the R parse side */
|
|
57
62
|
readonly parsed: T;
|
|
63
|
+
readonly filePath: string | undefined;
|
|
58
64
|
/** Additional meta information about the parse */
|
|
59
65
|
readonly '.parse-meta'?: {
|
|
60
66
|
/** The number of tokens in the AST */
|
|
61
67
|
readonly tokenCount: number;
|
|
62
68
|
};
|
|
63
69
|
}
|
|
70
|
+
export interface ParseStepOutput<T> {
|
|
71
|
+
readonly files: ParseStepOutputSingleFile<T>[];
|
|
72
|
+
}
|
|
64
73
|
/**
|
|
65
74
|
* Takes an input program and parses it using the given parser.
|
|
66
75
|
* @param _results - just a proxy for the pipeline, signifies that this function does not need prior knowledge of the pipeline
|
|
67
76
|
* @param input - the input to the parse step
|
|
77
|
+
* @returns The parsed AST per request in the loading order obtained from the {@link FlowrAnalyzerFilesContext|files context} of the given {@link FlowrAnalyzerContext}.
|
|
68
78
|
*/
|
|
69
79
|
export declare function parseRequests<T extends KnownParserType>(_results: unknown, input: Partial<ParseRequiredInput<T>>): Promise<ParseStepOutput<T>>;
|
|
70
80
|
export {};
|
package/r-bridge/parser.js
CHANGED
|
@@ -12,26 +12,40 @@ function countChildren(node) {
|
|
|
12
12
|
* Takes an input program and parses it using the given parser.
|
|
13
13
|
* @param _results - just a proxy for the pipeline, signifies that this function does not need prior knowledge of the pipeline
|
|
14
14
|
* @param input - the input to the parse step
|
|
15
|
+
* @returns The parsed AST per request in the loading order obtained from the {@link FlowrAnalyzerFilesContext|files context} of the given {@link FlowrAnalyzerContext}.
|
|
15
16
|
*/
|
|
16
17
|
async function parseRequests(_results, input) {
|
|
18
|
+
const loadingOrder = input.context.files.loadingOrder.getLoadingOrder();
|
|
17
19
|
/* in the future, we want to expose all cases */
|
|
18
|
-
const
|
|
20
|
+
const translatedRequests = loadingOrder.map(r => input.context.files.resolveRequest(r));
|
|
19
21
|
if (input.parser?.async) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
/* sadly we cannot Promise.all with the Rshell as it has to process commands in order and is not thread safe */
|
|
23
|
+
const files = [];
|
|
24
|
+
for (const req of translatedRequests) {
|
|
25
|
+
const parsed = await (input.parser).parse(req.r);
|
|
26
|
+
files.push({
|
|
27
|
+
parsed,
|
|
28
|
+
filePath: req.path,
|
|
29
|
+
'.parse-meta': typeof parsed === 'object' && 'rootNode' in parsed ? {
|
|
30
|
+
tokenCount: countChildren(parsed.rootNode),
|
|
31
|
+
} : undefined
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
return { files };
|
|
27
35
|
}
|
|
28
36
|
else {
|
|
29
|
-
const
|
|
37
|
+
const p = input.parser;
|
|
30
38
|
return {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
39
|
+
files: translatedRequests.map(r => {
|
|
40
|
+
const parsed = p.parse(r.r);
|
|
41
|
+
return {
|
|
42
|
+
parsed,
|
|
43
|
+
filePath: r.path,
|
|
44
|
+
'.parse-meta': typeof parsed === 'object' && 'rootNode' in parsed ? {
|
|
45
|
+
tokenCount: countChildren(parsed.rootNode),
|
|
46
|
+
} : undefined
|
|
47
|
+
};
|
|
48
|
+
})
|
|
35
49
|
};
|
|
36
50
|
}
|
|
37
51
|
}
|