@eagleoutice/flowr 2.6.0 → 2.6.2
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 +142 -45
- package/abstract-interpretation/data-frame/absint-info.d.ts +1 -1
- package/abstract-interpretation/data-frame/absint-visitor.d.ts +3 -4
- package/abstract-interpretation/data-frame/absint-visitor.js +16 -11
- package/abstract-interpretation/data-frame/dataframe-domain.d.ts +18 -12
- package/abstract-interpretation/data-frame/dataframe-domain.js +25 -13
- package/abstract-interpretation/data-frame/mappers/access-mapper.d.ts +0 -1
- package/abstract-interpretation/data-frame/mappers/access-mapper.js +0 -1
- package/abstract-interpretation/data-frame/mappers/arguments.d.ts +1 -10
- package/abstract-interpretation/data-frame/mappers/arguments.js +0 -7
- package/abstract-interpretation/data-frame/mappers/assignment-mapper.d.ts +0 -1
- package/abstract-interpretation/data-frame/mappers/assignment-mapper.js +0 -1
- package/abstract-interpretation/data-frame/mappers/function-mapper.d.ts +4 -5
- package/abstract-interpretation/data-frame/mappers/function-mapper.js +3 -4
- package/abstract-interpretation/data-frame/mappers/replacement-mapper.d.ts +0 -1
- package/abstract-interpretation/data-frame/mappers/replacement-mapper.js +0 -1
- package/abstract-interpretation/data-frame/resolve-args.d.ts +1 -1
- package/abstract-interpretation/data-frame/semantics.d.ts +3 -4
- package/abstract-interpretation/data-frame/semantics.js +171 -162
- package/abstract-interpretation/data-frame/shape-inference.d.ts +1 -4
- package/abstract-interpretation/data-frame/shape-inference.js +7 -9
- package/abstract-interpretation/domains/abstract-domain.d.ts +59 -18
- package/abstract-interpretation/domains/abstract-domain.js +74 -1
- package/abstract-interpretation/domains/bounded-set-domain.d.ts +37 -24
- package/abstract-interpretation/domains/bounded-set-domain.js +70 -47
- package/abstract-interpretation/domains/interval-domain.d.ts +33 -25
- package/abstract-interpretation/domains/interval-domain.js +109 -50
- package/abstract-interpretation/domains/lattice.d.ts +19 -11
- package/abstract-interpretation/domains/mapped-abstract-domain.d.ts +34 -0
- package/abstract-interpretation/domains/mapped-abstract-domain.js +189 -0
- package/abstract-interpretation/domains/positive-interval-domain.d.ts +16 -12
- package/abstract-interpretation/domains/positive-interval-domain.js +20 -11
- package/abstract-interpretation/domains/product-domain.d.ts +18 -23
- package/abstract-interpretation/domains/product-domain.js +11 -19
- package/abstract-interpretation/domains/satisfiable-domain.d.ts +29 -0
- package/abstract-interpretation/domains/satisfiable-domain.js +24 -0
- package/abstract-interpretation/domains/set-upper-bound-domain.d.ts +54 -0
- package/abstract-interpretation/domains/set-upper-bound-domain.js +197 -0
- package/abstract-interpretation/domains/singleton-domain.d.ts +24 -19
- package/abstract-interpretation/domains/singleton-domain.js +52 -37
- package/abstract-interpretation/domains/state-abstract-domain.d.ts +8 -24
- package/abstract-interpretation/domains/state-abstract-domain.js +2 -167
- package/abstract-interpretation/normalized-ast-fold.d.ts +1 -7
- package/abstract-interpretation/normalized-ast-fold.js +0 -5
- package/benchmark/slicer.d.ts +3 -7
- package/benchmark/slicer.js +14 -19
- package/benchmark/stats/print.d.ts +6 -0
- package/benchmark/stats/print.js +6 -0
- package/benchmark/stats/size-of.d.ts +0 -1
- package/benchmark/stats/size-of.js +0 -1
- package/benchmark/stats/stats.d.ts +2 -2
- package/benchmark/stopwatch.d.ts +11 -13
- package/benchmark/stopwatch.js +11 -13
- package/benchmark/summarizer/first-phase/input.d.ts +6 -0
- package/benchmark/summarizer/first-phase/input.js +6 -0
- package/benchmark/summarizer/first-phase/process.d.ts +13 -1
- package/benchmark/summarizer/first-phase/process.js +12 -0
- package/benchmark/summarizer/second-phase/graph.d.ts +3 -0
- package/benchmark/summarizer/second-phase/graph.js +3 -0
- package/benchmark/summarizer/second-phase/process.d.ts +12 -0
- package/benchmark/summarizer/second-phase/process.js +12 -0
- package/benchmark/summarizer/summarizer.d.ts +1 -2
- package/cli/benchmark-app.js +0 -2
- package/cli/common/features.d.ts +7 -1
- package/cli/common/features.js +6 -0
- package/cli/common/script.d.ts +3 -1
- package/cli/common/script.js +3 -1
- package/cli/common/scripts-info.d.ts +3 -1
- package/cli/common/scripts-info.js +3 -0
- package/cli/flowr-main-options.d.ts +3 -0
- package/cli/flowr-main-options.js +3 -0
- package/cli/flowr.js +8 -4
- package/cli/repl/commands/repl-cfg.js +4 -4
- package/cli/repl/commands/repl-commands.d.ts +13 -0
- package/cli/repl/commands/repl-commands.js +15 -4
- package/cli/repl/commands/repl-dataflow.js +4 -4
- package/cli/repl/commands/repl-execute.d.ts +5 -1
- package/cli/repl/commands/repl-execute.js +12 -8
- package/cli/repl/commands/repl-main.d.ts +17 -14
- package/cli/repl/commands/repl-normalize.js +2 -2
- package/cli/repl/commands/repl-parse.js +4 -3
- package/cli/repl/commands/repl-query.js +18 -7
- package/cli/repl/commands/repl-quit.js +1 -1
- package/cli/repl/commands/repl-version.d.ts +1 -16
- package/cli/repl/commands/repl-version.js +2 -19
- package/cli/repl/core.d.ts +32 -14
- package/cli/repl/core.js +38 -35
- package/cli/repl/execute.d.ts +0 -2
- package/cli/repl/execute.js +0 -2
- package/cli/repl/parser/slice-query-parser.d.ts +14 -0
- package/cli/repl/parser/slice-query-parser.js +34 -0
- package/cli/repl/print-version.d.ts +6 -0
- package/cli/repl/print-version.js +8 -2
- package/cli/repl/server/compact.d.ts +8 -0
- package/cli/repl/server/compact.js +8 -0
- package/cli/repl/server/connection.d.ts +4 -3
- package/cli/repl/server/connection.js +9 -33
- package/cli/repl/server/messages/all-messages.d.ts +1 -3
- package/cli/repl/server/messages/all-messages.js +0 -1
- package/cli/repl/server/messages/message-analysis.d.ts +0 -2
- package/cli/repl/server/messages/message-hello.d.ts +1 -1
- package/cli/repl/server/messages/message-query.d.ts +1 -1
- package/cli/repl/server/messages/message-repl.d.ts +0 -1
- package/cli/repl/server/send.d.ts +6 -0
- package/cli/repl/server/send.js +6 -0
- package/cli/repl/server/server.d.ts +1 -1
- package/cli/repl/server/server.js +2 -2
- package/cli/repl/server/validate.d.ts +10 -1
- package/cli/repl/server/validate.js +9 -0
- package/cli/run-script.d.ts +1 -2
- package/cli/run-script.js +0 -1
- package/cli/script-core/statistics-core.d.ts +3 -0
- package/cli/script-core/statistics-core.js +3 -0
- package/cli/script-core/statistics-helper-core.d.ts +4 -1
- package/cli/script-core/statistics-helper-core.js +3 -0
- package/cli/script-core/summarizer-core.d.ts +3 -0
- package/cli/script-core/summarizer-core.js +3 -0
- package/cli/summarizer-app.d.ts +2 -3
- package/cli/summarizer-app.js +2 -3
- package/config.d.ts +17 -3
- package/config.js +15 -0
- package/control-flow/basic-cfg-guided-visitor.d.ts +1 -2
- package/control-flow/basic-cfg-guided-visitor.js +0 -1
- package/control-flow/cfg-to-basic-blocks.d.ts +1 -1
- package/control-flow/control-flow-graph.d.ts +20 -12
- package/control-flow/control-flow-graph.js +16 -4
- package/control-flow/dfg-cfg-guided-visitor.d.ts +2 -3
- package/control-flow/diff-cfg.d.ts +3 -5
- package/control-flow/diff-cfg.js +0 -1
- package/control-flow/extract-cfg.d.ts +3 -6
- package/control-flow/extract-cfg.js +0 -3
- package/control-flow/happens-before.d.ts +1 -1
- package/control-flow/semantic-cfg-guided-visitor.d.ts +2 -31
- package/control-flow/semantic-cfg-guided-visitor.js +0 -28
- package/control-flow/simple-visitor.d.ts +1 -3
- package/control-flow/simple-visitor.js +0 -2
- package/control-flow/syntax-cfg-guided-visitor.d.ts +1 -2
- package/control-flow/useless-loop.d.ts +0 -3
- package/control-flow/useless-loop.js +2 -5
- package/core/pipeline-executor.d.ts +8 -16
- package/core/pipeline-executor.js +9 -18
- package/core/print/dataflow-printer.d.ts +19 -0
- package/core/print/dataflow-printer.js +19 -0
- package/core/print/normalize-printer.d.ts +21 -1
- package/core/print/normalize-printer.js +20 -0
- package/core/print/parse-printer.d.ts +6 -1
- package/core/print/parse-printer.js +5 -0
- package/core/print/print.d.ts +0 -1
- package/core/print/print.js +0 -1
- package/core/print/slice-diff-ansi.d.ts +3 -0
- package/core/print/slice-diff-ansi.js +3 -0
- package/core/steps/all/core/00-parse.d.ts +1 -1
- package/core/steps/all/core/01-parse-tree-sitter.d.ts +1 -11
- package/core/steps/all/core/10-normalize.d.ts +3 -0
- package/core/steps/all/core/10-normalize.js +3 -0
- package/core/steps/all/core/11-normalize-tree-sitter.d.ts +4 -3
- package/core/steps/all/core/20-dataflow.d.ts +3 -1
- package/core/steps/pipeline/create-pipeline.d.ts +1 -1
- package/core/steps/pipeline/default-pipelines.d.ts +29 -13
- package/core/steps/pipeline/default-pipelines.js +0 -4
- package/core/steps/pipeline/pipeline.d.ts +1 -8
- package/core/steps/pipeline/pipeline.js +1 -3
- package/core/steps/pipeline-step.d.ts +0 -1
- package/core/steps/pipeline-step.js +0 -1
- package/dataflow/cluster.d.ts +3 -0
- package/dataflow/cluster.js +3 -0
- package/dataflow/environments/append.d.ts +1 -1
- package/dataflow/environments/built-in-config.d.ts +1 -5
- package/dataflow/environments/built-in-config.js +0 -1
- package/dataflow/environments/built-in.d.ts +10 -5
- package/dataflow/environments/built-in.js +6 -1
- package/dataflow/environments/clone.d.ts +1 -1
- package/dataflow/environments/default-builtin-config.d.ts +3 -0
- package/dataflow/environments/default-builtin-config.js +12 -1
- package/dataflow/environments/diff.d.ts +11 -2
- package/dataflow/environments/diff.js +9 -0
- package/dataflow/environments/environment.d.ts +3 -3
- package/dataflow/environments/environment.js +8 -6
- package/dataflow/environments/identifier.d.ts +0 -4
- package/dataflow/environments/identifier.js +0 -1
- package/dataflow/environments/overwrite.d.ts +4 -1
- package/dataflow/environments/overwrite.js +3 -0
- package/dataflow/environments/resolve-by-name.d.ts +4 -4
- package/dataflow/environments/resolve-by-name.js +3 -2
- package/dataflow/environments/scoping.d.ts +4 -1
- package/dataflow/environments/scoping.js +3 -0
- package/dataflow/eval/resolve/alias-tracking.d.ts +4 -10
- package/dataflow/eval/resolve/alias-tracking.js +13 -14
- package/dataflow/eval/resolve/resolve-argument.d.ts +1 -1
- package/dataflow/eval/resolve/resolve.d.ts +1 -7
- package/dataflow/eval/resolve/resolve.js +3 -5
- package/dataflow/eval/values/general.d.ts +1 -3
- package/dataflow/eval/values/general.js +0 -1
- package/dataflow/eval/values/intervals/interval-constants.d.ts +7 -1
- package/dataflow/eval/values/intervals/interval-constants.js +6 -0
- package/dataflow/eval/values/logical/logical-constants.d.ts +4 -1
- package/dataflow/eval/values/logical/logical-constants.js +3 -0
- package/dataflow/eval/values/r-value.d.ts +16 -1
- package/dataflow/eval/values/r-value.js +14 -0
- package/dataflow/eval/values/scalar/scalar-consatnts.d.ts +7 -1
- package/dataflow/eval/values/scalar/scalar-consatnts.js +6 -0
- package/dataflow/eval/values/sets/set-constants.d.ts +7 -2
- package/dataflow/eval/values/sets/set-constants.js +6 -0
- package/dataflow/eval/values/string/string-constants.d.ts +10 -1
- package/dataflow/eval/values/string/string-constants.js +9 -0
- package/dataflow/eval/values/vectors/vector-constants.d.ts +1 -1
- package/dataflow/extractor.d.ts +5 -2
- package/dataflow/extractor.js +7 -5
- package/dataflow/fn/higher-order-function.d.ts +9 -0
- package/dataflow/fn/higher-order-function.js +75 -0
- package/dataflow/graph/dataflowgraph-builder.d.ts +20 -38
- package/dataflow/graph/dataflowgraph-builder.js +6 -23
- package/dataflow/graph/diff-dataflow-graph.d.ts +16 -6
- package/dataflow/graph/diff-dataflow-graph.js +12 -1
- package/dataflow/graph/edge.d.ts +9 -0
- package/dataflow/graph/edge.js +9 -0
- package/dataflow/graph/graph.d.ts +6 -19
- package/dataflow/graph/graph.js +4 -15
- package/dataflow/graph/invert-dfg.d.ts +3 -0
- package/dataflow/graph/invert-dfg.js +3 -0
- package/dataflow/graph/quads.d.ts +1 -1
- package/dataflow/graph/unknown-replacement.d.ts +6 -0
- package/dataflow/graph/unknown-replacement.js +6 -0
- package/dataflow/graph/unknown-side-effect.d.ts +8 -0
- package/dataflow/graph/unknown-side-effect.js +8 -0
- package/dataflow/graph/vertex.d.ts +9 -9
- package/dataflow/graph/vertex.js +9 -1
- package/dataflow/info.d.ts +9 -10
- package/dataflow/info.js +6 -1
- package/dataflow/internal/linker.d.ts +25 -9
- package/dataflow/internal/linker.js +23 -7
- package/dataflow/internal/process/functions/call/argument/make-argument.d.ts +6 -0
- package/dataflow/internal/process/functions/call/argument/make-argument.js +6 -0
- package/dataflow/internal/process/functions/call/argument/unpack-argument.d.ts +1 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-access.d.ts +4 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-access.js +3 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-apply.d.ts +4 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-apply.js +3 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-assignment.d.ts +2 -2
- package/dataflow/internal/process/functions/call/built-in/built-in-eval.d.ts +6 -3
- package/dataflow/internal/process/functions/call/built-in/built-in-eval.js +3 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.d.ts +4 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.js +3 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.d.ts +5 -2
- package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.js +3 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.d.ts +10 -4
- package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.js +6 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-get.d.ts +3 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-get.js +3 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.d.ts +5 -2
- package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.js +4 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-library.d.ts +3 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-library.js +3 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-list.d.ts +1 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-pipe.d.ts +3 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-pipe.js +3 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-quote.d.ts +3 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-quote.js +3 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.d.ts +5 -2
- package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.js +3 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-replacement.d.ts +6 -3
- package/dataflow/internal/process/functions/call/built-in/built-in-replacement.js +3 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-rm.d.ts +4 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-rm.js +3 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-source.d.ts +23 -6
- package/dataflow/internal/process/functions/call/built-in/built-in-source.js +20 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-special-bin-op.d.ts +3 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-special-bin-op.js +3 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-vector.d.ts +1 -1
- package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.d.ts +5 -2
- package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.js +3 -0
- package/dataflow/internal/process/functions/call/common.d.ts +11 -5
- package/dataflow/internal/process/functions/call/common.js +6 -0
- package/dataflow/internal/process/functions/call/default-call-handling.d.ts +3 -0
- package/dataflow/internal/process/functions/call/default-call-handling.js +3 -0
- package/dataflow/internal/process/functions/call/known-call-handling.d.ts +12 -5
- package/dataflow/internal/process/functions/call/known-call-handling.js +7 -0
- package/dataflow/internal/process/functions/call/named-call-handling.d.ts +7 -1
- package/dataflow/internal/process/functions/call/named-call-handling.js +6 -0
- package/dataflow/internal/process/functions/call/unnamed-call-handling.d.ts +4 -1
- package/dataflow/internal/process/functions/call/unnamed-call-handling.js +3 -0
- package/dataflow/internal/process/functions/process-argument.d.ts +8 -2
- package/dataflow/internal/process/functions/process-argument.js +6 -0
- package/dataflow/internal/process/functions/process-parameter.d.ts +5 -2
- package/dataflow/internal/process/functions/process-parameter.js +3 -0
- package/dataflow/internal/process/process-symbol.d.ts +3 -0
- package/dataflow/internal/process/process-symbol.js +3 -0
- package/dataflow/internal/process/process-uninteresting-leaf.d.ts +3 -0
- package/dataflow/internal/process/process-uninteresting-leaf.js +3 -0
- package/dataflow/internal/process/process-value.d.ts +3 -0
- package/dataflow/internal/process/process-value.js +3 -0
- package/dataflow/origin/dfg-get-origin.d.ts +0 -2
- package/dataflow/origin/dfg-get-symbol-refs.d.ts +5 -7
- package/dataflow/origin/dfg-get-symbol-refs.js +6 -8
- package/dataflow/processor.d.ts +0 -1
- package/dataflow/processor.js +0 -1
- package/documentation/data/dfg/doc-data-dfg-util.d.ts +6 -0
- package/documentation/data/dfg/doc-data-dfg-util.js +6 -0
- package/documentation/data/faq/faqs.d.ts +5 -0
- package/documentation/data/faq/faqs.js +78 -0
- package/documentation/data/faq/wiki-faq-store.d.ts +18 -0
- package/documentation/data/faq/wiki-faq-store.js +75 -0
- package/documentation/data/server/doc-data-server-messages.d.ts +3 -0
- package/documentation/data/server/doc-data-server-messages.js +4 -63
- package/documentation/doc-util/doc-auto-gen.d.ts +6 -0
- package/documentation/doc-util/doc-auto-gen.js +6 -0
- package/documentation/doc-util/doc-benchmarks.d.ts +12 -0
- package/documentation/doc-util/doc-benchmarks.js +12 -0
- package/documentation/doc-util/doc-cfg.d.ts +7 -1
- package/documentation/doc-util/doc-cfg.js +9 -0
- package/documentation/doc-util/doc-cli-option.d.ts +9 -0
- package/documentation/doc-util/doc-cli-option.js +9 -0
- package/documentation/doc-util/doc-code.d.ts +24 -0
- package/documentation/doc-util/doc-code.js +24 -0
- package/documentation/doc-util/doc-dfg.d.ts +7 -1
- package/documentation/doc-util/doc-dfg.js +9 -0
- package/documentation/doc-util/doc-env.d.ts +3 -0
- package/documentation/doc-util/doc-env.js +3 -0
- package/documentation/doc-util/doc-escape.d.ts +0 -1
- package/documentation/doc-util/doc-escape.js +0 -1
- package/documentation/doc-util/doc-files.d.ts +11 -0
- package/documentation/doc-util/doc-files.js +15 -4
- package/documentation/doc-util/doc-general.d.ts +6 -0
- package/documentation/doc-util/doc-general.js +6 -0
- package/documentation/doc-util/doc-normalized-ast.d.ts +7 -1
- package/documentation/doc-util/doc-normalized-ast.js +6 -0
- package/documentation/doc-util/doc-query.d.ts +15 -0
- package/documentation/doc-util/doc-query.js +17 -2
- package/documentation/doc-util/doc-repl.d.ts +6 -0
- package/documentation/doc-util/doc-repl.js +11 -2
- package/documentation/doc-util/doc-search.d.ts +15 -0
- package/documentation/doc-util/doc-search.js +17 -2
- package/documentation/doc-util/doc-server-message.d.ts +13 -1
- package/documentation/doc-util/doc-server-message.js +13 -1
- package/documentation/doc-util/doc-structure.d.ts +9 -0
- package/documentation/doc-util/doc-structure.js +10 -1
- package/documentation/doc-util/doc-types.d.ts +42 -0
- package/documentation/doc-util/doc-types.js +42 -0
- package/documentation/print-analyzer-wiki.js +4 -0
- package/documentation/print-core-wiki.d.ts +3 -0
- package/documentation/print-core-wiki.js +5 -2
- package/documentation/print-dataflow-graph-wiki.js +7 -7
- package/documentation/print-faq-wiki.js +3 -75
- package/documentation/print-interface-wiki.js +1 -1
- package/documentation/print-onboarding-wiki.js +1 -1
- package/documentation/print-query-wiki.js +24 -34
- package/documentation/print-readme.js +106 -1
- package/engines.d.ts +1 -1
- package/linter/linter-executor.d.ts +6 -3
- package/linter/linter-executor.js +3 -0
- package/linter/linter-format.d.ts +8 -0
- package/linter/linter-format.js +8 -0
- package/linter/rules/absolute-path.d.ts +3 -4
- package/linter/rules/dataframe-access-validation.d.ts +3 -4
- package/linter/rules/dataframe-access-validation.js +9 -11
- package/linter/rules/dead-code.d.ts +1 -1
- package/linter/rules/deprecated-functions.d.ts +1 -1
- package/linter/rules/file-path-validity.d.ts +1 -2
- package/linter/rules/function-finder-util.d.ts +1 -2
- package/linter/rules/naming-convention.d.ts +13 -2
- package/linter/rules/naming-convention.js +13 -1
- package/linter/rules/network-functions.d.ts +1 -1
- package/linter/rules/seeded-randomness.d.ts +1 -2
- package/linter/rules/unused-definition.d.ts +2 -3
- package/linter/rules/useless-loop.d.ts +1 -2
- package/package.json +2 -2
- package/project/cache/flowr-analyzer-cache.d.ts +8 -14
- package/project/cache/flowr-analyzer-cache.js +21 -19
- package/project/cfg-kind.d.ts +17 -0
- package/project/cfg-kind.js +22 -0
- package/project/context/abstract-flowr-analyzer-context.d.ts +4 -0
- package/project/context/flowr-analyzer-context.d.ts +9 -6
- package/project/context/flowr-analyzer-context.js +11 -0
- package/project/context/flowr-analyzer-dependencies-context.d.ts +1 -1
- package/project/context/flowr-analyzer-dependencies-context.js +4 -0
- package/project/context/flowr-analyzer-files-context.d.ts +3 -4
- package/project/context/flowr-analyzer-files-context.js +4 -0
- package/project/context/flowr-analyzer-loading-order-context.d.ts +1 -0
- package/project/context/flowr-analyzer-loading-order-context.js +6 -0
- package/project/context/flowr-file.d.ts +0 -1
- package/project/flowr-analyzer-builder.d.ts +1 -3
- package/project/flowr-analyzer-builder.js +5 -6
- package/project/flowr-analyzer.d.ts +42 -32
- package/project/flowr-analyzer.js +14 -8
- package/project/plugins/file-plugins/flowr-analyzer-description-file-plugin.d.ts +1 -1
- package/project/plugins/file-plugins/flowr-description-file.d.ts +1 -3
- package/project/plugins/file-plugins/flowr-description-file.js +0 -1
- package/project/plugins/project-discovery/flowr-analyzer-project-discovery-plugin.d.ts +1 -1
- package/queries/base-query-format.d.ts +2 -2
- package/queries/catalog/call-context-query/call-context-query-executor.d.ts +3 -0
- package/queries/catalog/call-context-query/call-context-query-executor.js +5 -1
- package/queries/catalog/call-context-query/call-context-query-format.d.ts +3 -3
- package/queries/catalog/call-context-query/identify-link-to-last-call-relation.d.ts +11 -2
- package/queries/catalog/call-context-query/identify-link-to-last-call-relation.js +9 -0
- package/queries/catalog/cluster-query/cluster-query-executor.d.ts +3 -0
- package/queries/catalog/cluster-query/cluster-query-executor.js +3 -0
- package/queries/catalog/cluster-query/cluster-query-format.d.ts +1 -1
- package/queries/catalog/config-query/config-query-executor.d.ts +3 -0
- package/queries/catalog/config-query/config-query-executor.js +3 -0
- package/queries/catalog/config-query/config-query-format.d.ts +6 -3
- package/queries/catalog/config-query/config-query-format.js +13 -16
- package/queries/catalog/control-flow-query/control-flow-query-executor.d.ts +3 -0
- package/queries/catalog/control-flow-query/control-flow-query-executor.js +5 -1
- package/queries/catalog/control-flow-query/control-flow-query-format.d.ts +3 -3
- package/queries/catalog/dataflow-lens-query/dataflow-lens-query-executor.d.ts +3 -0
- package/queries/catalog/dataflow-lens-query/dataflow-lens-query-executor.js +3 -0
- package/queries/catalog/dataflow-lens-query/dataflow-lens-query-format.d.ts +1 -1
- package/queries/catalog/dataflow-query/dataflow-query-executor.d.ts +3 -0
- package/queries/catalog/dataflow-query/dataflow-query-executor.js +3 -0
- package/queries/catalog/dataflow-query/dataflow-query-format.d.ts +1 -1
- package/queries/catalog/dependencies-query/dependencies-query-executor.d.ts +4 -1
- package/queries/catalog/dependencies-query/dependencies-query-executor.js +7 -4
- package/queries/catalog/dependencies-query/dependencies-query-format.d.ts +4 -1
- package/queries/catalog/dependencies-query/dependencies-query-format.js +4 -1
- package/queries/catalog/df-shape-query/df-shape-query-executor.d.ts +4 -1
- package/queries/catalog/df-shape-query/df-shape-query-executor.js +8 -4
- package/queries/catalog/df-shape-query/df-shape-query-format.d.ts +10 -3
- package/queries/catalog/df-shape-query/df-shape-query-format.js +24 -5
- package/queries/catalog/happens-before-query/happens-before-query-executor.d.ts +3 -0
- package/queries/catalog/happens-before-query/happens-before-query-executor.js +3 -0
- package/queries/catalog/happens-before-query/happens-before-query-format.d.ts +1 -1
- package/queries/catalog/id-map-query/id-map-query-executor.d.ts +3 -0
- package/queries/catalog/id-map-query/id-map-query-executor.js +3 -0
- 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 +6 -0
- package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-executor.js +48 -0
- package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-format.d.ts +22 -0
- package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-format.js +32 -0
- package/queries/catalog/linter-query/linter-query-executor.d.ts +4 -0
- package/queries/catalog/linter-query/linter-query-executor.js +4 -0
- package/queries/catalog/linter-query/linter-query-format.d.ts +12 -3
- package/queries/catalog/linter-query/linter-query-format.js +67 -0
- package/queries/catalog/location-map-query/location-map-query-executor.d.ts +4 -0
- package/queries/catalog/location-map-query/location-map-query-executor.js +5 -1
- package/queries/catalog/location-map-query/location-map-query-format.d.ts +7 -1
- package/queries/catalog/location-map-query/location-map-query-format.js +12 -0
- package/queries/catalog/normalized-ast-query/normalized-ast-query-executor.d.ts +3 -0
- package/queries/catalog/normalized-ast-query/normalized-ast-query-executor.js +3 -0
- package/queries/catalog/normalized-ast-query/normalized-ast-query-format.d.ts +1 -1
- package/queries/catalog/origin-query/origin-query-executor.d.ts +7 -1
- package/queries/catalog/origin-query/origin-query-executor.js +6 -0
- package/queries/catalog/origin-query/origin-query-format.d.ts +7 -1
- package/queries/catalog/origin-query/origin-query-format.js +17 -1
- package/queries/catalog/project-query/project-query-executor.d.ts +3 -0
- package/queries/catalog/project-query/project-query-executor.js +3 -0
- package/queries/catalog/project-query/project-query-format.d.ts +1 -1
- package/queries/catalog/resolve-value-query/resolve-value-query-executor.d.ts +6 -0
- package/queries/catalog/resolve-value-query/resolve-value-query-executor.js +6 -0
- package/queries/catalog/resolve-value-query/resolve-value-query-format.d.ts +7 -1
- package/queries/catalog/resolve-value-query/resolve-value-query-format.js +19 -1
- package/queries/catalog/search-query/search-query-executor.d.ts +3 -0
- package/queries/catalog/search-query/search-query-executor.js +3 -0
- package/queries/catalog/search-query/search-query-format.d.ts +1 -1
- package/queries/catalog/static-slice-query/static-slice-query-executor.d.ts +9 -0
- package/queries/catalog/static-slice-query/static-slice-query-executor.js +9 -0
- package/queries/catalog/static-slice-query/static-slice-query-format.d.ts +7 -1
- package/queries/catalog/static-slice-query/static-slice-query-format.js +17 -0
- package/queries/query-print.d.ts +20 -4
- package/queries/query-print.js +18 -2
- package/queries/query.d.ts +91 -53
- package/queries/query.js +37 -23
- package/queries/virtual-query/virtual-queries.d.ts +1 -2
- package/r-bridge/data/get.d.ts +6 -0
- package/r-bridge/data/get.js +6 -0
- package/r-bridge/lang-4.x/ast/model/collect.d.ts +0 -1
- package/r-bridge/lang-4.x/ast/model/collect.js +0 -1
- package/r-bridge/lang-4.x/ast/model/model.d.ts +8 -11
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.d.ts +0 -2
- package/r-bridge/lang-4.x/ast/model/nodes/r-number.d.ts +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-number.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-string.d.ts +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-string.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-symbol.d.ts +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-symbol.js +3 -0
- package/r-bridge/lang-4.x/ast/model/operators.d.ts +0 -1
- package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +6 -7
- package/r-bridge/lang-4.x/ast/model/processing/decorate.js +6 -6
- package/r-bridge/lang-4.x/ast/model/processing/fold.d.ts +1 -1
- package/r-bridge/lang-4.x/ast/model/processing/node-id.d.ts +0 -1
- package/r-bridge/lang-4.x/ast/model/processing/node-id.js +0 -1
- package/r-bridge/lang-4.x/ast/model/processing/role.d.ts +0 -1
- package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.d.ts +1 -2
- package/r-bridge/lang-4.x/ast/model/processing/visitor.d.ts +0 -1
- package/r-bridge/lang-4.x/ast/model/processing/visitor.js +0 -1
- package/r-bridge/lang-4.x/ast/model/type.d.ts +4 -5
- package/r-bridge/lang-4.x/ast/model/type.js +4 -5
- package/r-bridge/lang-4.x/ast/model/versions.d.ts +0 -1
- package/r-bridge/lang-4.x/ast/model/versions.js +0 -1
- package/r-bridge/lang-4.x/ast/parser/json/parser.d.ts +4 -5
- package/r-bridge/lang-4.x/ast/parser/json/parser.js +0 -1
- package/r-bridge/lang-4.x/ast/parser/main/internal/control/normalize-if-then.d.ts +1 -1
- package/r-bridge/lang-4.x/ast/parser/main/internal/expression/normalize-expression.d.ts +0 -1
- package/r-bridge/lang-4.x/ast/parser/main/internal/expression/normalize-expression.js +0 -1
- package/r-bridge/lang-4.x/ast/parser/main/internal/functions/normalize-argument.d.ts +0 -2
- package/r-bridge/lang-4.x/ast/parser/main/internal/functions/normalize-argument.js +0 -2
- package/r-bridge/lang-4.x/ast/parser/main/internal/functions/normalize-call.d.ts +1 -3
- package/r-bridge/lang-4.x/ast/parser/main/internal/functions/normalize-call.js +0 -2
- package/r-bridge/lang-4.x/ast/parser/main/internal/functions/normalize-definition.d.ts +0 -2
- package/r-bridge/lang-4.x/ast/parser/main/internal/functions/normalize-definition.js +0 -2
- package/r-bridge/lang-4.x/ast/parser/main/internal/functions/normalize-parameter.d.ts +0 -2
- package/r-bridge/lang-4.x/ast/parser/main/internal/functions/normalize-parameter.js +0 -2
- package/r-bridge/lang-4.x/ast/parser/main/internal/loops/normalize-break.d.ts +3 -0
- package/r-bridge/lang-4.x/ast/parser/main/internal/loops/normalize-break.js +3 -0
- package/r-bridge/lang-4.x/ast/parser/main/internal/loops/normalize-for.d.ts +4 -1
- package/r-bridge/lang-4.x/ast/parser/main/internal/loops/normalize-for.js +3 -0
- package/r-bridge/lang-4.x/ast/parser/main/internal/loops/normalize-next.d.ts +3 -0
- package/r-bridge/lang-4.x/ast/parser/main/internal/loops/normalize-next.js +3 -0
- package/r-bridge/lang-4.x/ast/parser/main/internal/loops/normalize-repeat.d.ts +0 -2
- package/r-bridge/lang-4.x/ast/parser/main/internal/loops/normalize-repeat.js +0 -2
- package/r-bridge/lang-4.x/ast/parser/main/internal/loops/normalize-while.d.ts +4 -1
- package/r-bridge/lang-4.x/ast/parser/main/internal/loops/normalize-while.js +3 -0
- package/r-bridge/lang-4.x/ast/parser/main/internal/normalize-access.d.ts +0 -2
- package/r-bridge/lang-4.x/ast/parser/main/internal/normalize-access.js +0 -2
- package/r-bridge/lang-4.x/ast/parser/main/internal/operators/normalize-binary.d.ts +1 -1
- package/r-bridge/lang-4.x/ast/parser/main/internal/operators/normalize-unary.d.ts +0 -2
- package/r-bridge/lang-4.x/ast/parser/main/internal/operators/normalize-unary.js +0 -2
- package/r-bridge/lang-4.x/ast/parser/main/internal/other/normalize-comment.d.ts +0 -1
- package/r-bridge/lang-4.x/ast/parser/main/internal/other/normalize-comment.js +0 -1
- package/r-bridge/lang-4.x/ast/parser/main/internal/other/normalize-line-directive.d.ts +0 -1
- package/r-bridge/lang-4.x/ast/parser/main/internal/other/normalize-line-directive.js +0 -1
- package/r-bridge/lang-4.x/ast/parser/main/internal/structure/normalize-delimiter.d.ts +3 -0
- package/r-bridge/lang-4.x/ast/parser/main/internal/structure/normalize-delimiter.js +3 -0
- package/r-bridge/lang-4.x/ast/parser/main/internal/structure/normalize-expressions.d.ts +9 -0
- package/r-bridge/lang-4.x/ast/parser/main/internal/structure/normalize-expressions.js +9 -0
- package/r-bridge/lang-4.x/ast/parser/main/internal/structure/normalize-single-node.d.ts +1 -3
- package/r-bridge/lang-4.x/ast/parser/main/internal/structure/normalize-single-node.js +0 -2
- package/r-bridge/lang-4.x/ast/parser/main/internal/values/normalize-number.d.ts +1 -2
- package/r-bridge/lang-4.x/ast/parser/main/internal/values/normalize-number.js +0 -1
- package/r-bridge/lang-4.x/ast/parser/main/internal/values/normalize-string.d.ts +0 -1
- package/r-bridge/lang-4.x/ast/parser/main/internal/values/normalize-string.js +0 -1
- package/r-bridge/lang-4.x/ast/parser/main/internal/values/normalize-symbol.d.ts +0 -2
- package/r-bridge/lang-4.x/ast/parser/main/internal/values/normalize-symbol.js +0 -2
- package/r-bridge/lang-4.x/ast/parser/main/normalize-meta.d.ts +14 -5
- package/r-bridge/lang-4.x/ast/parser/main/normalize-meta.js +13 -6
- package/r-bridge/lang-4.x/convert-values.d.ts +12 -1
- package/r-bridge/lang-4.x/convert-values.js +12 -1
- package/r-bridge/lang-4.x/tree-sitter/tree-sitter-executor.d.ts +7 -2
- package/r-bridge/lang-4.x/tree-sitter/tree-sitter-executor.js +17 -0
- package/r-bridge/lang-4.x/tree-sitter/tree-sitter-normalize.d.ts +13 -1
- package/r-bridge/lang-4.x/tree-sitter/tree-sitter-normalize.js +48 -19
- package/r-bridge/parser.d.ts +30 -2
- package/r-bridge/retriever.d.ts +16 -1
- package/r-bridge/retriever.js +15 -0
- package/r-bridge/shell-executor.d.ts +3 -3
- package/r-bridge/shell-executor.js +6 -1
- package/r-bridge/shell.d.ts +24 -23
- package/r-bridge/shell.js +37 -31
- package/reconstruct/auto-select/auto-select-defaults.d.ts +0 -1
- package/reconstruct/auto-select/magic-comments.d.ts +1 -2
- package/reconstruct/auto-select/magic-comments.js +1 -2
- package/reconstruct/reconstruct.d.ts +1 -3
- package/reconstruct/reconstruct.js +0 -2
- package/search/flowr-search-builder.d.ts +12 -5
- package/search/flowr-search-builder.js +7 -2
- package/search/flowr-search-executor.d.ts +3 -3
- package/search/flowr-search-filters.d.ts +14 -1
- package/search/flowr-search-filters.js +13 -0
- package/search/flowr-search-printer.d.ts +6 -0
- package/search/flowr-search-printer.js +6 -0
- package/search/flowr-search-traverse.d.ts +1 -1
- package/search/flowr-search.d.ts +3 -3
- package/search/search-executor/search-enrichers.d.ts +9 -6
- package/search/search-executor/search-enrichers.js +5 -1
- package/search/search-executor/search-generators.d.ts +19 -10
- package/search/search-executor/search-generators.js +49 -2
- package/search/search-executor/search-mappers.d.ts +8 -5
- package/search/search-executor/search-mappers.js +3 -0
- package/search/search-executor/search-transformer.d.ts +19 -16
- package/search/search-executor/search-transformer.js +3 -0
- package/slicing/criterion/collect-all.d.ts +10 -10
- package/slicing/criterion/parse.d.ts +4 -2
- package/slicing/criterion/parse.js +4 -2
- package/slicing/static/fingerprint.d.ts +9 -1
- package/slicing/static/fingerprint.js +8 -0
- package/slicing/static/slice-call.d.ts +2 -2
- package/slicing/static/static-slicer.d.ts +8 -4
- package/slicing/static/static-slicer.js +5 -1
- package/slicing/static/visiting-queue.d.ts +1 -1
- package/statistics/features/common-syntax-probability.d.ts +10 -1
- package/statistics/features/common-syntax-probability.js +9 -0
- package/statistics/features/feature.d.ts +0 -4
- package/statistics/features/feature.js +0 -1
- package/statistics/features/post-processing.d.ts +6 -0
- package/statistics/features/post-processing.js +6 -0
- package/statistics/features/supported/assignments/post-process.d.ts +3 -0
- package/statistics/features/supported/assignments/post-process.js +3 -0
- package/statistics/features/supported/comments/post-process.d.ts +3 -0
- package/statistics/features/supported/comments/post-process.js +3 -0
- package/statistics/features/supported/control-flow/post-process.d.ts +3 -0
- package/statistics/features/supported/control-flow/post-process.js +3 -0
- package/statistics/features/supported/data-access/data-access.d.ts +1 -1
- package/statistics/features/supported/data-access/post-process.d.ts +3 -0
- package/statistics/features/supported/data-access/post-process.js +3 -0
- package/statistics/features/supported/defined-functions/defined-functions.d.ts +1 -1
- package/statistics/features/supported/expression-list/post-process.d.ts +3 -0
- package/statistics/features/supported/expression-list/post-process.js +3 -0
- package/statistics/features/supported/loops/post-process.d.ts +3 -0
- package/statistics/features/supported/loops/post-process.js +3 -0
- package/statistics/features/supported/used-functions/used-functions.d.ts +1 -1
- package/statistics/features/supported/used-packages/post-process.d.ts +3 -0
- package/statistics/features/supported/used-packages/post-process.js +3 -0
- package/statistics/features/supported/values/post-process.d.ts +3 -0
- package/statistics/features/supported/values/post-process.js +3 -0
- package/statistics/features/supported/variables/post-process.d.ts +7 -1
- package/statistics/features/supported/variables/post-process.js +6 -0
- package/statistics/meta-statistics.d.ts +8 -9
- package/statistics/output/file-provider.d.ts +5 -6
- package/statistics/output/file-provider.js +5 -6
- package/statistics/output/print-stats.d.ts +13 -1
- package/statistics/output/print-stats.js +12 -0
- package/statistics/output/statistics-file.d.ts +1 -2
- package/statistics/output/statistics-file.js +0 -1
- package/statistics/statistics.d.ts +3 -4
- package/statistics/statistics.js +1 -2
- package/statistics/summarizer/auto-detect.d.ts +3 -0
- package/statistics/summarizer/auto-detect.js +3 -0
- package/statistics/summarizer/post-process/clusterer.d.ts +3 -4
- package/statistics/summarizer/post-process/clusterer.js +0 -2
- package/statistics/summarizer/post-process/file-based-count.d.ts +0 -1
- package/statistics/summarizer/post-process/file-based-count.js +0 -1
- package/statistics/summarizer/post-process/histogram.d.ts +0 -2
- package/statistics/summarizer/post-process/histogram.js +0 -2
- package/statistics/summarizer/post-process/post-process-output.d.ts +2 -4
- package/statistics/summarizer/post-process/post-process-output.js +0 -3
- package/statistics/summarizer/second-phase/process.d.ts +5 -3
- package/statistics/summarizer/second-phase/process.js +3 -1
- package/statistics/summarizer/summarizer.d.ts +1 -2
- package/util/assert.d.ts +52 -2
- package/util/assert.js +52 -2
- package/util/collections/arrays.d.ts +10 -5
- package/util/collections/arrays.js +10 -5
- package/util/collections/defaultmap.d.ts +11 -11
- package/util/collections/defaultmap.js +11 -11
- package/util/containers.d.ts +2 -7
- package/util/containers.js +0 -5
- package/util/diff-graph.d.ts +0 -1
- package/util/diff-graph.js +0 -1
- package/util/diff.d.ts +3 -1
- package/util/diff.js +3 -1
- package/util/files.d.ts +11 -11
- package/util/files.js +10 -10
- package/util/formats/adapter.d.ts +9 -0
- package/util/formats/adapter.js +9 -0
- package/util/formats/adapters/rmd-adapter.d.ts +10 -1
- package/util/formats/adapters/rmd-adapter.js +10 -1
- package/util/html-hover-over.d.ts +5 -0
- package/util/html-hover-over.js +5 -0
- package/util/json.d.ts +13 -0
- package/util/json.js +13 -0
- package/util/log.d.ts +2 -2
- package/util/log.js +2 -2
- package/util/mermaid/ast.d.ts +3 -0
- package/util/mermaid/ast.js +3 -0
- package/util/mermaid/cfg.d.ts +1 -1
- package/util/mermaid/dfg.d.ts +12 -4
- package/util/mermaid/dfg.js +9 -1
- package/util/mermaid/mermaid.d.ts +6 -1
- package/util/mermaid/mermaid.js +6 -1
- package/util/numbers.d.ts +7 -0
- package/util/numbers.js +7 -0
- package/util/objects.d.ts +0 -2
- package/util/os.d.ts +3 -0
- package/util/os.js +3 -0
- package/util/parallel.d.ts +4 -4
- package/util/parallel.js +4 -4
- package/util/prefix.d.ts +0 -1
- package/util/prefix.js +0 -1
- package/util/quads.d.ts +14 -17
- package/util/quads.js +3 -5
- package/util/r-value.d.ts +11 -2
- package/util/r-value.js +23 -0
- package/util/random.d.ts +3 -0
- package/util/random.js +3 -0
- package/util/range.d.ts +9 -3
- package/util/range.js +15 -2
- package/util/schema.d.ts +14 -1
- package/util/schema.js +15 -2
- package/util/simple-df/dfg-view.d.ts +4 -1
- package/util/simple-df/dfg-view.js +4 -1
- package/util/summarizer.d.ts +9 -1
- package/util/summarizer.js +9 -0
- package/util/text/ansi.d.ts +3 -0
- package/util/text/ansi.js +3 -0
- package/util/text/args.d.ts +2 -4
- package/util/text/args.js +7 -5
- package/util/text/text.d.ts +4 -0
- package/util/text/text.js +4 -0
- package/util/text/time.d.ts +0 -1
- package/util/text/time.js +0 -1
- package/util/version.d.ts +26 -0
- package/util/version.js +37 -1
- package/abstract-interpretation/data-frame/domain.d.ts +0 -107
- package/abstract-interpretation/data-frame/domain.js +0 -315
- package/abstract-interpretation/domains/set-bounded-set-domain.d.ts +0 -43
- package/abstract-interpretation/domains/set-bounded-set-domain.js +0 -164
- package/cli/repl/commands/repl-lineage.d.ts +0 -15
- package/cli/repl/commands/repl-lineage.js +0 -67
- package/cli/repl/server/messages/message-lineage.d.ts +0 -17
- package/cli/repl/server/messages/message-lineage.js +0 -25
- package/queries/catalog/lineage-query/lineage-query-executor.d.ts +0 -3
- package/queries/catalog/lineage-query/lineage-query-executor.js +0 -22
- package/queries/catalog/lineage-query/lineage-query-format.d.ts +0 -22
- package/queries/catalog/lineage-query/lineage-query-format.js +0 -31
|
@@ -30,6 +30,9 @@ const doc_code_1 = require("./doc-code");
|
|
|
30
30
|
const doc_structure_1 = require("./doc-structure");
|
|
31
31
|
const html_hover_over_1 = require("../../util/html-hover-over");
|
|
32
32
|
const doc_general_1 = require("./doc-general");
|
|
33
|
+
/**
|
|
34
|
+
*
|
|
35
|
+
*/
|
|
33
36
|
function getTypeScriptSourceFiles(fileNames) {
|
|
34
37
|
try {
|
|
35
38
|
const program = typescript_1.default.createProgram(fileNames, {
|
|
@@ -50,6 +53,9 @@ function getTypeScriptSourceFiles(fileNames) {
|
|
|
50
53
|
return { files: [], program: undefined };
|
|
51
54
|
}
|
|
52
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
*
|
|
58
|
+
*/
|
|
53
59
|
function dropGenericsFromTypeName(type) {
|
|
54
60
|
let previous;
|
|
55
61
|
do {
|
|
@@ -58,6 +64,9 @@ function dropGenericsFromTypeName(type) {
|
|
|
58
64
|
} while (type !== previous);
|
|
59
65
|
return type;
|
|
60
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
*
|
|
69
|
+
*/
|
|
61
70
|
function removeCommentSymbolsFromTypeScriptComment(comment) {
|
|
62
71
|
return comment
|
|
63
72
|
// remove '/** \n * \n */...
|
|
@@ -66,6 +75,9 @@ function removeCommentSymbolsFromTypeScriptComment(comment) {
|
|
|
66
75
|
.replace(/\{@[a-zA-Z]+ ([^}]+\|)?(?<name>[^}]+)}/gm, '<code>$<name></code>')
|
|
67
76
|
.trim();
|
|
68
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
*
|
|
80
|
+
*/
|
|
69
81
|
function getTextualCommentsFromTypeScript(node) {
|
|
70
82
|
const comments = typescript_1.default.getJSDocCommentsAndTags(node);
|
|
71
83
|
const out = [];
|
|
@@ -81,15 +93,24 @@ function getTextualCommentsFromTypeScript(node) {
|
|
|
81
93
|
}
|
|
82
94
|
return out;
|
|
83
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
*
|
|
98
|
+
*/
|
|
84
99
|
function getStartLineOfTypeScriptNode(node, sourceFile) {
|
|
85
100
|
const lineStart = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line;
|
|
86
101
|
return lineStart + 1;
|
|
87
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
*
|
|
105
|
+
*/
|
|
88
106
|
function getType(node, typeChecker) {
|
|
89
107
|
const tryDirect = typeChecker.getTypeAtLocation(node);
|
|
90
108
|
return tryDirect ? typeChecker.typeToString(tryDirect) : 'unknown';
|
|
91
109
|
}
|
|
92
110
|
const defaultSkip = ['Pick', 'Partial', 'Required', 'Readonly', 'Omit', 'DeepPartial', 'DeepReadonly', 'DeepWritable', 'StrictOmit'];
|
|
111
|
+
/**
|
|
112
|
+
*
|
|
113
|
+
*/
|
|
93
114
|
function followTypeReference(type, sourceFile) {
|
|
94
115
|
const node = type.typeName;
|
|
95
116
|
if (typescript_1.default.isQualifiedName(node)) {
|
|
@@ -250,9 +271,15 @@ function collectHierarchyInformation(sourceFiles, options) {
|
|
|
250
271
|
});
|
|
251
272
|
return hierarchyList;
|
|
252
273
|
}
|
|
274
|
+
/**
|
|
275
|
+
*
|
|
276
|
+
*/
|
|
253
277
|
function getTypePathForTypeScript({ filePath }) {
|
|
254
278
|
return filePath.replace(/^.*\/src\//, 'src/').replace(/^.*\/test\//, 'test/');
|
|
255
279
|
}
|
|
280
|
+
/**
|
|
281
|
+
*
|
|
282
|
+
*/
|
|
256
283
|
function getTypePathLink(elem, prefix = doc_files_1.RemoteFlowrFilePathBaseRef) {
|
|
257
284
|
const fromSource = getTypePathForTypeScript(elem);
|
|
258
285
|
return `${prefix}/${fromSource}#L${elem.lineNumber}`;
|
|
@@ -347,6 +374,9 @@ function getTypesFromFolder(options) {
|
|
|
347
374
|
}
|
|
348
375
|
return getTypesFromFileAsMermaid(files, options);
|
|
349
376
|
}
|
|
377
|
+
/**
|
|
378
|
+
*
|
|
379
|
+
*/
|
|
350
380
|
function implSnippet(node, program, showName = true, nesting = 0, open = false) {
|
|
351
381
|
(0, assert_1.guard)(node !== undefined, 'Node must be defined => invalid change of type name?');
|
|
352
382
|
const indent = ' '.repeat(nesting * 2);
|
|
@@ -362,6 +392,9 @@ function implSnippet(node, program, showName = true, nesting = 0, open = false)
|
|
|
362
392
|
return ` ${indent}${showName ? init : ''} ${text.replaceAll('\t', ' ').split(/\n/g).join(`\n${indent} `)}`;
|
|
363
393
|
}
|
|
364
394
|
exports.mermaidHide = ['Leaf', 'Location', 'Namespace', 'Base', 'WithChildren', 'Partial', 'RAccessBase'];
|
|
395
|
+
/**
|
|
396
|
+
*
|
|
397
|
+
*/
|
|
365
398
|
function printHierarchy({ program, info, root, collapseFromNesting = 1, initialNesting = 0, maxDepth = 20, openTop }) {
|
|
366
399
|
if (initialNesting > maxDepth) {
|
|
367
400
|
return '';
|
|
@@ -387,6 +420,9 @@ function printHierarchy({ program, info, root, collapseFromNesting = 1, initialN
|
|
|
387
420
|
return thisLine + (out ? '\n' + out : '');
|
|
388
421
|
}
|
|
389
422
|
}
|
|
423
|
+
/**
|
|
424
|
+
*
|
|
425
|
+
*/
|
|
390
426
|
function printCodeOfElement({ program, info, dropLinesEnd = 0, dropLinesStart = 0, doNotAutoGobble, hideDefinedAt }, name) {
|
|
391
427
|
const node = info.find(e => e.name === name);
|
|
392
428
|
if (!node) {
|
|
@@ -473,6 +509,9 @@ function shortLink(name, hierarchy, codeStyle = true, realNameWrapper = 'b') {
|
|
|
473
509
|
return `<a href="${getTypePathLink(node)}">${codeStyle ? '<code>' : ''}${(node.comments?.length ?? 0) > 0 ?
|
|
474
510
|
(0, html_hover_over_1.textWithTooltip)(pkg ? `${pkg}::<${realNameWrapper}>${mainName}</${realNameWrapper}>` : mainName, comments.length > 400 ? comments.slice(0, 400) + '...' : comments) : node.name}${codeStyle ? '</code>' : ''}</a>`;
|
|
475
511
|
}
|
|
512
|
+
/**
|
|
513
|
+
*
|
|
514
|
+
*/
|
|
476
515
|
function shortLinkFile(name, hierarchy) {
|
|
477
516
|
const res = retrieveNode(name, hierarchy);
|
|
478
517
|
if (!res) {
|
|
@@ -482,6 +521,9 @@ function shortLinkFile(name, hierarchy) {
|
|
|
482
521
|
const [, , node] = res;
|
|
483
522
|
return `<a href="${getTypePathLink(node)}">${getTypePathForTypeScript(node)}</a>`;
|
|
484
523
|
}
|
|
524
|
+
/**
|
|
525
|
+
*
|
|
526
|
+
*/
|
|
485
527
|
function getDocumentationForType(name, hierarchy, prefix = '', filter) {
|
|
486
528
|
const res = retrieveNode(name, hierarchy, filter?.fuzzy, filter?.type);
|
|
487
529
|
if (!res) {
|
|
@@ -74,6 +74,10 @@ ${(0, doc_types_1.printCodeOfElement)({ program: types.program, info: types.info
|
|
|
74
74
|
`
|
|
75
75
|
})}
|
|
76
76
|
|
|
77
|
+
In general, we work on providing a set of example repositories that demonstrate how to use the analyzer in different scenarios:
|
|
78
|
+
|
|
79
|
+
* [${doc_files_1.FlowrGithubGroupName}/sample-analyzer-project-query](${doc_files_1.FlowrGithubBaseRef}/sample-analyzer-project-query) for an example project that runs queries on an R project
|
|
80
|
+
|
|
77
81
|
**TODO**: mention [Context](#Context_Information)
|
|
78
82
|
|
|
79
83
|
${(0, doc_structure_1.section)('Builder Configuration', 2)}
|
|
@@ -69,6 +69,9 @@ async function sliceQueryExample(analyzer) {
|
|
|
69
69
|
}]);
|
|
70
70
|
return result;
|
|
71
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
*
|
|
74
|
+
*/
|
|
72
75
|
function inspectContextExample(analyzer) {
|
|
73
76
|
const ctx = analyzer.inspectContext();
|
|
74
77
|
console.log('dplyr version', ctx.deps.getDependency('dplyr'));
|
|
@@ -247,7 +250,7 @@ ${(0, doc_structure_1.block)({
|
|
|
247
250
|
content: `
|
|
248
251
|
All of these commands accept file paths as well, so you can write longer R code within a file, and then pass
|
|
249
252
|
the file path prefixed with \`${retriever_1.fileProtocol}\` (e.g., \`${retriever_1.fileProtocol}test/testfiles/example.R\`) to the commands.`
|
|
250
|
-
})}
|
|
253
|
+
})}
|
|
251
254
|
|
|
252
255
|
Especially when you are just starting with flowR, we recommend using the REPL to explore the output of the different steps.
|
|
253
256
|
|
|
@@ -353,7 +356,7 @@ All ids conform to the ${(0, doc_types_1.shortLink)('NodeId', info)} type.
|
|
|
353
356
|
|
|
354
357
|
The core of the dataflow graph generation works as a "stateful [fold](https://en.wikipedia.org/wiki/Fold_(higher-order_function))",
|
|
355
358
|
which uses the tree-like structure of the AST to combine the dataflow information of the children, while tracking the currently active variables and control flow
|
|
356
|
-
information as a “backpack” (state).
|
|
359
|
+
information as a “backpack” (state).
|
|
357
360
|
We use the ${(0, doc_types_1.shortLink)(extractor_1.produceDataFlowGraph.name, info)} function as an entry point to the dataflow generation (the actual fold entry is in ${(0, doc_types_1.shortLink)(processor_1.processDataflowFor.name, info)}).
|
|
358
361
|
The function is mainly backed by its ${(0, doc_types_1.shortLink)('processors', info)} object which maps each type in the normalized AST to an appropriate handler ("fold-function").
|
|
359
362
|
|
|
@@ -196,8 +196,6 @@ These origins may hold the name of any processor that is part of the ${(0, doc_t
|
|
|
196
196
|
The entry \`function\` signals that flowR used a processor for a user-defined function defined within the source code, \`unnamed\` signals that the function as an anonymous function definition.
|
|
197
197
|
However, in general, flowR may use any fitting handler as an origin. For example, within a access definition, flowR will correspondingly redefine the meaning of \`:=\` to that of the \`table:assign\`.
|
|
198
198
|
|
|
199
|
-
|
|
200
|
-
|
|
201
199
|
${(0, doc_structure_1.details)('Example: Simple Function Call (unresolved)', await (async () => {
|
|
202
200
|
const code = 'foo(x,3,y=3,)';
|
|
203
201
|
const [text, info] = await (0, doc_dfg_1.printDfGraphForCode)(shell, code, { mark: new Set([8]), exposeResult: true });
|
|
@@ -323,7 +321,7 @@ ${await (async () => {
|
|
|
323
321
|
const name = interestingVertex.name;
|
|
324
322
|
(0, assert_1.guard)(name !== undefined, () => 'Could not find name for interesting assignment vertex');
|
|
325
323
|
return `
|
|
326
|
-
${text}
|
|
324
|
+
${text}
|
|
327
325
|
|
|
328
326
|
Interesting program, right? Running this with \`u <- TRUE\` will cause the last line to evaluate to \`6\` because we redefined the assignment
|
|
329
327
|
operator to mean multiplication, while with \`u <- FALSE\` causes \`x\` to be assigned to \`3\`.
|
|
@@ -714,8 +712,8 @@ Yet, you may choose to follow these references for other queries. For now, _flow
|
|
|
714
712
|
Besides the obvious quotation there are other cases in which _flowR_ may choose to create a ${linkEdgeName(edge_1.EdgeType.NonStandardEvaluation)} edge, there are
|
|
715
713
|
some that may appear to be counter-intuitive. For example, a for-loop body, as in the following example.
|
|
716
714
|
|
|
717
|
-
${(0, doc_structure_1.details)('Example: For-Loop Body', await (0, doc_dfg_1.printDfGraphForCode)(shell, 'for(i in v) b', { mark: new Set([2, '4->2']) }))}
|
|
718
|
-
${(0, doc_structure_1.details)('Example: While-Loop Body', await (0, doc_dfg_1.printDfGraphForCode)(shell, 'while(TRUE) b', { mark: new Set([1, '3->1']) }))}
|
|
715
|
+
${(0, doc_structure_1.details)('Example: For-Loop Body', await (0, doc_dfg_1.printDfGraphForCode)(shell, 'for(i in v) b', { mark: new Set([2, '4->2']) }))}
|
|
716
|
+
${(0, doc_structure_1.details)('Example: While-Loop Body', await (0, doc_dfg_1.printDfGraphForCode)(shell, 'while(TRUE) b', { mark: new Set([1, '3->1']) }))}
|
|
719
717
|
|
|
720
718
|
`
|
|
721
719
|
})}
|
|
@@ -789,6 +787,8 @@ wiki page if you are unsure.
|
|
|
789
787
|
> When using _flowR_ as a library, you may use the functions in ${(0, doc_files_1.getFilePathMd)('../util/mermaid/dfg.ts')}.
|
|
790
788
|
>
|
|
791
789
|
> If you receive a dataflow graph in its serialized form (e.g., by talking to a [_flowR_ server](${doc_files_1.FlowrWikiBaseRef}/Interface)), you can use ${(0, doc_types_1.shortLink)(`${graph_1.DataflowGraph.name}::${graph_1.DataflowGraph.fromJson.name}`, vertexType.info, true, 'i')} to retrieve the graph from the JSON representation.
|
|
790
|
+
>
|
|
791
|
+
> Also, check out the [${doc_files_1.FlowrGithubGroupName}/sample-analyzer-df-diff](${doc_files_1.FlowrGithubBaseRef}/sample-analyzer-df-diff) repository for a complete example project creating and comparing dataflow graphs.
|
|
792
792
|
|
|
793
793
|
${await (0, doc_dfg_1.printDfGraphForCode)(shell, 'x <- 3\ny <- x + 1\ny')}
|
|
794
794
|
|
|
@@ -921,8 +921,8 @@ ${(0, doc_types_1.printHierarchy)({ program: vertexType.program, info: vertexTyp
|
|
|
921
921
|
Let's start by looking at the properties of the dataflow information object: ${Object.keys(result).map(k => `\`${k}\``).join(', ')}.
|
|
922
922
|
|
|
923
923
|
${(() => {
|
|
924
|
-
/* this includes the meta field for timing */
|
|
925
|
-
(0, assert_1.guard)(Object.keys(result).length ===
|
|
924
|
+
/* this includes the meta field for timing and the quick CFG in order to enable re-use and improve performance */
|
|
925
|
+
(0, assert_1.guard)(Object.keys(result).length === 9, () => 'Update Dataflow Documentation!');
|
|
926
926
|
return '';
|
|
927
927
|
})()}
|
|
928
928
|
|
|
@@ -2,87 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const log_1 = require("../../test/functionality/_helper/log");
|
|
4
4
|
const doc_auto_gen_1 = require("./doc-util/doc-auto-gen");
|
|
5
|
-
const
|
|
6
|
-
const doc_code_1 = require("./doc-util/doc-code");
|
|
5
|
+
const faqs_1 = require("./data/faq/faqs");
|
|
7
6
|
function print() {
|
|
7
|
+
const faqs = (0, faqs_1.registerFaqs)();
|
|
8
8
|
return `${(0, doc_auto_gen_1.autoGenHeader)({ filename: module.filename, purpose: 'frequently asked questions' })}
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
### 🧑💻 *flowR* Development
|
|
13
|
-
|
|
14
|
-
${qAndA('What are test labels and how do they work?', `
|
|
15
|
-
Tests are labeled based on the *flowR* capabilities that they test for. The list of supported capabilities can be found on the [Capabilities](${doc_files_1.FlowrWikiBaseRef}/Capabilities) wiki page. For more extensive information on test labels, see the [test labels wiki section](${doc_files_1.FlowrWikiBaseRef}/Linting-and-Testing#test-labels).
|
|
16
|
-
`)}
|
|
17
|
-
|
|
18
|
-
${qAndA('How to get a REPL with debug-info/hot-reload?', `
|
|
19
|
-
To enter the development repl, execute \`npm run main-dev\` in contrast to \`npm run flowr\` this will use an unminified build (keeping debug info)
|
|
20
|
-
and will also watch the source files for changes and automatically recompile them. Please note, that this may have negative performance implications.
|
|
21
|
-
`)}
|
|
22
|
-
|
|
23
|
-
${qAndA('How do I generate mermaid diagrams?', `
|
|
24
|
-
There are several ways to generate mermaid diagrams based on the input data that you want to use.
|
|
25
|
-
- From the AST (abstract syntax tree): ${(0, doc_files_1.getFilePathMd)('../util/mermaid/ast.ts')}
|
|
26
|
-
- From the CFG (control flow graph): ${(0, doc_files_1.getFilePathMd)('../util/mermaid/cfg.ts')}
|
|
27
|
-
- From the DFG (dataflow graph): ${(0, doc_files_1.getFilePathMd)('../util/mermaid/dfg.ts')}
|
|
28
|
-
`)}
|
|
29
|
-
|
|
30
|
-
${qAndA('How do I create new wiki pages?', `
|
|
31
|
-
To create an automatically generated wiki page, you can follow these steps:
|
|
32
|
-
- Create a new file in \`src/documentation\` with a name like \`print-my-page-wiki.ts\`.
|
|
33
|
-
- Add a new wiki generation script to the ${(0, doc_files_1.getFilePathMd)('../../package.json')}. You can copy one of the existing ones of the form \`"wiki:my-page": "ts-node src/documentation/print-my-page-wiki.ts"\`.
|
|
34
|
-
- Add the wiki generation script to the \`broken-links-and-wiki.yml\` GitHub workflow file to enable automatic generation through the CI. You can copy one of the existing ones of the form \`update_page wiki/"My page" wiki:my-page\`.
|
|
35
|
-
|
|
36
|
-
You can test your page by piping the wiki generation script to a file. For example, you can run the following command:
|
|
37
|
-
${(0, doc_code_1.codeBlock)('shell', 'npm run --silent wiki:my-page > __my-page.md')}
|
|
38
|
-
|
|
39
|
-
Remember not to commit this file, as it's only meant for testing.
|
|
40
|
-
`)}
|
|
41
|
-
|
|
42
|
-
${qAndA('Why can\'t I pass arguments when running flowR with npm?', `
|
|
43
|
-
With \`npm\` you have to pass arguments in a specific way. The \`--\` operator is used to separate the \`npm\` arguments from the script arguments. For example, if you want to run \`flowR\` with the \`--help\` argument, you can use the following command:
|
|
44
|
-
${(0, doc_code_1.codeBlock)('shell', 'npm run flowR -- --help')}
|
|
45
|
-
`)}
|
|
46
|
-
|
|
47
|
-
${qAndA('How to do logging in flowR?', `
|
|
48
|
-
Check out the [Logging Section in the Linting and Testing wiki page](${doc_files_1.FlowrWikiBaseRef}/Linting-and-Testing#logging) for more information on how to do logging in *flowR*.
|
|
49
|
-
`)}
|
|
50
|
-
|
|
51
|
-
## 🇷 R FAQ
|
|
52
|
-
|
|
53
|
-
### 📦 R Packages
|
|
54
|
-
|
|
55
|
-
${qAndA('What is the R prelude and R base package?', `
|
|
56
|
-
The base package contains lots of base functions like \`source\` for example.
|
|
57
|
-
The R prelude includes the base package along with several other packages.
|
|
58
|
-
Packages that were loaded by the prelude can be called without prefixing the function call with the package name and the \`::\` operator.
|
|
59
|
-
|
|
60
|
-
The packages loaded by the R prelude can be seen in the \`attached base packages\` sections in the output of \`sessionInfo()\`.
|
|
61
|
-
`)}
|
|
62
|
-
|
|
63
|
-
${qAndA('How to get documentation for a function or package?', `
|
|
64
|
-
There are a couple of ways to get documentation for a function or package.
|
|
65
|
-
|
|
66
|
-
🖥️ Firstly, if you have already installed the package the function originated from you can simply run \`?<package name>::<function name>\` in an R session to print the
|
|
67
|
-
relevant documentation. If you don't know the origin of the package, you can use
|
|
68
|
-
\`??<function name>\` in an R shell to fuzzy find all documentations containing
|
|
69
|
-
\`<function name>\` or something similar.
|
|
70
|
-
|
|
71
|
-
🌐 Secondly, if you don't have or don't want to install the package you can simply google the fully qualified name of the function. Good sources include \`rdrr.io\`
|
|
72
|
-
or \`rdocumentation.org\`. Additionally, the package documentation PDF can also
|
|
73
|
-
be downloaded directly from \`cran\`.
|
|
74
|
-
`)}
|
|
10
|
+
${faqs.toMarkdown()}
|
|
75
11
|
|
|
76
12
|
`.trim();
|
|
77
13
|
}
|
|
78
|
-
function qAndA(question, answer) {
|
|
79
|
-
return `<details>
|
|
80
|
-
<summary><strong>${question}</strong></summary>
|
|
81
|
-
|
|
82
|
-
${answer.trim()}
|
|
83
|
-
|
|
84
|
-
</details>`;
|
|
85
|
-
}
|
|
86
14
|
if (require.main === module) {
|
|
87
15
|
(0, log_1.setMinLevelOfAllLogs)(6 /* LogLevel.Fatal */);
|
|
88
16
|
console.log(print());
|
|
@@ -154,7 +154,7 @@ ${await (0, doc_repl_1.documentReplSession)(shell, [{
|
|
|
154
154
|
|
|
155
155
|
<details>
|
|
156
156
|
|
|
157
|
-
<summary>File Content</summary>
|
|
157
|
+
<summary>File Content</summary>
|
|
158
158
|
|
|
159
159
|
${(0, doc_code_1.codeBlock)('r', (0, doc_files_1.getFileContentFromRoot)('test/testfiles/example.R'))}
|
|
160
160
|
|
|
@@ -5,7 +5,7 @@ const doc_files_1 = require("./doc-util/doc-files");
|
|
|
5
5
|
const doc_code_1 = require("./doc-util/doc-code");
|
|
6
6
|
const doc_auto_gen_1 = require("./doc-util/doc-auto-gen");
|
|
7
7
|
function print() {
|
|
8
|
-
return `${(0, doc_auto_gen_1.autoGenHeader)({ filename: module.filename, purpose: 'developer onboarding process' })}
|
|
8
|
+
return `${(0, doc_auto_gen_1.autoGenHeader)({ filename: module.filename, purpose: 'developer onboarding process' })}
|
|
9
9
|
|
|
10
10
|
To get started developing on *flowR*, we recommend carefully reading the following pages:
|
|
11
11
|
- 💻 [Setting up the *flowR* development environment](${doc_files_1.FlowrWikiBaseRef}/Setup#%EF%B8%8F-building-from-scratch).\
|
|
@@ -22,7 +22,6 @@ const id_map_query_executor_1 = require("../queries/catalog/id-map-query/id-map-
|
|
|
22
22
|
const normalized_ast_query_executor_1 = require("../queries/catalog/normalized-ast-query/normalized-ast-query-executor");
|
|
23
23
|
const cluster_query_executor_1 = require("../queries/catalog/cluster-query/cluster-query-executor");
|
|
24
24
|
const static_slice_query_executor_1 = require("../queries/catalog/static-slice-query/static-slice-query-executor");
|
|
25
|
-
const lineage_query_executor_1 = require("../queries/catalog/lineage-query/lineage-query-executor");
|
|
26
25
|
const dependencies_query_executor_1 = require("../queries/catalog/dependencies-query/dependencies-query-executor");
|
|
27
26
|
const doc_cli_option_1 = require("./doc-util/doc-cli-option");
|
|
28
27
|
const doc_issue_1 = require("./doc-util/doc-issue");
|
|
@@ -39,6 +38,7 @@ const doc_cfg_1 = require("./doc-util/doc-cfg");
|
|
|
39
38
|
const df_shape_query_executor_1 = require("../queries/catalog/df-shape-query/df-shape-query-executor");
|
|
40
39
|
const _00_slice_1 = require("../core/steps/all/static-slicing/00-slice");
|
|
41
40
|
const doc_repl_1 = require("./doc-util/doc-repl");
|
|
41
|
+
const inspect_higher_order_query_executor_1 = require("../queries/catalog/inspect-higher-order-query/inspect-higher-order-query-executor");
|
|
42
42
|
(0, doc_query_1.registerQueryDocumentation)('call-context', {
|
|
43
43
|
name: 'Call-Context Query',
|
|
44
44
|
type: 'active',
|
|
@@ -165,37 +165,6 @@ ${await (0, doc_query_1.showQuery)(shell, exampleCode, [{
|
|
|
165
165
|
`;
|
|
166
166
|
}
|
|
167
167
|
});
|
|
168
|
-
(0, doc_query_1.registerQueryDocumentation)('lineage', {
|
|
169
|
-
name: 'Lineage Query',
|
|
170
|
-
type: 'active',
|
|
171
|
-
shortDescription: 'Returns lineage of a criteria.',
|
|
172
|
-
functionName: lineage_query_executor_1.executeLineageQuery.name,
|
|
173
|
-
functionFile: '../queries/catalog/lineage-query/lineage-query-executor.ts',
|
|
174
|
-
buildExplanation: async (shell) => {
|
|
175
|
-
const exampleCode = 'x <- 1\nx';
|
|
176
|
-
return `
|
|
177
|
-
This query calculates the _lineage_ of a given slicing criterion. The lineage traces back all parts that the
|
|
178
|
-
respective variables stems from given the reads, definitions, and returns in the dataflow graph.
|
|
179
|
-
|
|
180
|
-
To understand this, let's start with a simple example query, to get the lineage of the second use of \`x\` in the following code:
|
|
181
|
-
${(0, doc_code_1.codeBlock)('r', exampleCode)}
|
|
182
|
-
|
|
183
|
-
For this, we use the criterion \`2@x\` (which is the first use of \`x\` in the second line).
|
|
184
|
-
|
|
185
|
-
${await (0, doc_query_1.showQuery)(shell, exampleCode, [{
|
|
186
|
-
type: 'lineage',
|
|
187
|
-
criterion: '2@x'
|
|
188
|
-
}], { showCode: false })}
|
|
189
|
-
|
|
190
|
-
In this simple scenario, the _lineage_ is equivalent to the slice (and in-fact the complete code).
|
|
191
|
-
In general the lineage is smaller and makes no guarantees on executability.
|
|
192
|
-
It is just a quick and neither complete nor sound way to get information on where the variable originates from.
|
|
193
|
-
|
|
194
|
-
This query replaces the old [\`request-lineage\`](${doc_files_1.FlowrWikiBaseRef}/Interface#message-request-lineage) message.
|
|
195
|
-
|
|
196
|
-
`;
|
|
197
|
-
}
|
|
198
|
-
});
|
|
199
168
|
(0, doc_query_1.registerQueryDocumentation)('dataflow-cluster', {
|
|
200
169
|
name: 'Dataflow Cluster Query',
|
|
201
170
|
type: 'active',
|
|
@@ -243,6 +212,25 @@ ${await (0, doc_query_1.showQuery)(shell, exampleCode, [{
|
|
|
243
212
|
`;
|
|
244
213
|
}
|
|
245
214
|
});
|
|
215
|
+
(0, doc_query_1.registerQueryDocumentation)('inspect-higher-order', {
|
|
216
|
+
name: 'Inspect Higher-Order Functions Query',
|
|
217
|
+
type: 'active',
|
|
218
|
+
shortDescription: 'Determine whether functions are higher-order functions',
|
|
219
|
+
functionName: inspect_higher_order_query_executor_1.executeHigherOrderQuery.name,
|
|
220
|
+
functionFile: '../queries/catalog/inspect-higher-order-query/inspect-higher-order-query-executor.ts',
|
|
221
|
+
buildExplanation: async (shell) => {
|
|
222
|
+
const exampleCode = 'f <- function() function(x) x; f()';
|
|
223
|
+
return `
|
|
224
|
+
With this query you can identify which functions in the code are higher-order functions, i.e., either take a function as an argument or return a function.
|
|
225
|
+
Please note, that functions that are just identities (e.g., \`function(x) x\`) are not considered higher-order if they do not take a function as an argument.
|
|
226
|
+
|
|
227
|
+
Using the example code \`${exampleCode}\` the following query returns the information for all identified function definitions whether they are higher-order functions:
|
|
228
|
+
${await (0, doc_query_1.showQuery)(shell, exampleCode, [{
|
|
229
|
+
type: 'inspect-higher-order',
|
|
230
|
+
}], { showCode: true })}
|
|
231
|
+
`;
|
|
232
|
+
}
|
|
233
|
+
});
|
|
246
234
|
(0, doc_query_1.registerQueryDocumentation)('origin', {
|
|
247
235
|
name: 'Origin Query',
|
|
248
236
|
type: 'active',
|
|
@@ -623,7 +611,7 @@ ${await (0, doc_query_1.showQuery)(shell, exampleCode, [{
|
|
|
623
611
|
type: 'location-map'
|
|
624
612
|
}], { showCode: false, collapseQuery: true })}
|
|
625
613
|
|
|
626
|
-
All locations are given as a ${(0, doc_types_1.shortLink)('SourceRange', types.info)} paired with the file id in the format \`[file-id, [start-line, start-column, end-line, end-column]]\`.
|
|
614
|
+
All locations are given as a ${(0, doc_types_1.shortLink)('SourceRange', types.info)} paired with the file id in the format \`[file-id, [start-line, start-column, end-line, end-column]]\`.
|
|
627
615
|
|
|
628
616
|
`;
|
|
629
617
|
}
|
|
@@ -640,7 +628,9 @@ ${(0, doc_structure_1.block)({
|
|
|
640
628
|
content: `
|
|
641
629
|
There are many ways to query a dataflow graph created by flowR.
|
|
642
630
|
For example, you can use the [\`request-query\`](${doc_files_1.FlowrWikiBaseRef}/Interface#message-request-query) message
|
|
643
|
-
with a running flowR server, or the ${(0, doc_cli_option_1.getReplCommand)('query')} command in the flowR [REPL](${doc_files_1.FlowrWikiBaseRef}/Interface#repl).
|
|
631
|
+
with a running flowR server, or the ${(0, doc_cli_option_1.getReplCommand)('query')} command in the flowR [REPL](${doc_files_1.FlowrWikiBaseRef}/Interface#repl).
|
|
632
|
+
|
|
633
|
+
Also, check out the [${doc_files_1.FlowrGithubGroupName}/sample-analyzer-project-query](${doc_files_1.FlowrGithubBaseRef}/sample-analyzer-project-query) repository for a complete example project using the query API.
|
|
644
634
|
`.trim()
|
|
645
635
|
})}
|
|
646
636
|
|
|
@@ -15,6 +15,104 @@ const doc_auto_gen_1 = require("./doc-util/doc-auto-gen");
|
|
|
15
15
|
const doc_general_1 = require("./doc-util/doc-general");
|
|
16
16
|
const doc_dfg_1 = require("./doc-util/doc-dfg");
|
|
17
17
|
const doc_query_1 = require("./doc-util/doc-query");
|
|
18
|
+
const doc_issue_1 = require("./doc-util/doc-issue");
|
|
19
|
+
const strings_1 = require("../util/text/strings");
|
|
20
|
+
const PublicationsMain = [
|
|
21
|
+
{
|
|
22
|
+
header: 'Statically Analyzing the Dataflow of R Programs (OOPSLA \'25)',
|
|
23
|
+
description: 'Please cite this paper if you are using flowR in your research.',
|
|
24
|
+
doi: 'https://doi.org/10.1145/3763087',
|
|
25
|
+
bibtex: `@article{10.1145/3763087,
|
|
26
|
+
author = {Sihler, Florian and Tichy, Matthias},
|
|
27
|
+
title = {Statically Analyzing the Dataflow of R Programs},
|
|
28
|
+
year = {2025},
|
|
29
|
+
issue_date = {October 2025},
|
|
30
|
+
publisher = {Association for Computing Machinery},
|
|
31
|
+
address = {New York, NY, USA},
|
|
32
|
+
volume = {9},
|
|
33
|
+
number = {OOPSLA2},
|
|
34
|
+
url = {https://doi.org/10.1145/3763087},
|
|
35
|
+
doi = {10.1145/3763087},
|
|
36
|
+
abstract = {The R programming language is primarily designed for statistical computing and mostly used by researchers without a background in computer science. R provides a wide range of dynamic features and peculiarities that are difficult to analyze statically like dynamic scoping and lazy evaluation with dynamic side effects. At the same time, the R ecosystem lacks sophisticated analysis tools that support researchers in understanding and improving their code. In this paper, we present a novel static dataflow analysis framework for the R programming language that is capable of handling the dynamic nature of R programs and produces the dataflow graph of given R programs. This graph can be essential in a range of analyses, including program slicing, which we implement as a proof of concept. The core analysis works as a stateful fold over a normalized version of the abstract syntax tree of the R program, which tracks (re-)definitions, values, function calls, side effects, external files, and a dynamic control flow to produce one dataflow graph per program. We evaluate the correctness of our analysis using output equivalence testing on a manually curated dataset of 779 sensible slicing points from executable real-world R scripts. Additionally, we use a set of systematic test cases based on the capabilities of the R language and the implementation of the R interpreter and measure the runtimes well as the memory consumption on a set of 4,230 real-world R scripts and 20,815 packages available on R’s package manager CRAN. Furthermore, we evaluate the recall of our program slicer, its accuracy using shrinking, and its improvement over the state of the art. We correctly analyze almost all programs in our equivalence test suite, preserving the identical output for 99.7\\% of the manually curated slicing points. On average, we require 576ms to analyze the dataflow and around 213kB to store the graph of a research script. This shows that our analysis is capable of analyzing real-world sources quickly and correctly. Our slicer achieves an average reduction of 84.8\\% of tokens indicating its potential to improve program comprehension.},
|
|
37
|
+
journal = {Proc. ACM Program. Lang.},
|
|
38
|
+
month = oct,
|
|
39
|
+
articleno = {309},
|
|
40
|
+
numpages = {29},
|
|
41
|
+
keywords = {Dataflow Analysis, R Programming Language, Static Analysis}
|
|
42
|
+
}`
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
header: 'flowR: A Static Program Slicer for R (ASE \'24, Tool)',
|
|
46
|
+
description: `This refers to the tool-demonstration of the <a href="${doc_files_1.FlowrVsCode}">VS Code Extension</a>.`,
|
|
47
|
+
doi: 'https://doi.org/10.1145/3691620.3695359',
|
|
48
|
+
bibtex: `@inproceedings{DBLP:conf/kbse/SihlerT24,
|
|
49
|
+
author = {Florian Sihler and
|
|
50
|
+
Matthias Tichy},
|
|
51
|
+
editor = {Vladimir Filkov and
|
|
52
|
+
Baishakhi Ray and
|
|
53
|
+
Minghui Zhou},
|
|
54
|
+
title = {flowR: {A} Static Program Slicer for {R}},
|
|
55
|
+
booktitle = {Proceedings of the 39th {IEEE/ACM} International Conference on Automated
|
|
56
|
+
Software Engineering, {ASE} 2024, Sacramento, CA, USA, October 27
|
|
57
|
+
- November 1, 2024},
|
|
58
|
+
pages = {2390--2393},
|
|
59
|
+
publisher = {{ACM}},
|
|
60
|
+
year = {2024},
|
|
61
|
+
url = {https://doi.org/10.1145/3691620.3695359},
|
|
62
|
+
doi = {10.1145/3691620.3695359},
|
|
63
|
+
timestamp = {Mon, 03 Mar 2025 21:16:51 +0100},
|
|
64
|
+
biburl = {https://dblp.org/rec/conf/kbse/SihlerT24.bib},
|
|
65
|
+
bibsource = {dblp computer science bibliography, https://dblp.org}
|
|
66
|
+
}`
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
header: 'On the Anatomy of Real-World R Code for Static Analysis (MSR \'24)',
|
|
70
|
+
description: 'This paper lays the foundation for flowR by analyzing the characteristics of real-world R code.',
|
|
71
|
+
doi: 'https://doi.org/10.1145/3643991.3644911',
|
|
72
|
+
bibtex: `
|
|
73
|
+
|
|
74
|
+
@inproceedings{DBLP:conf/msr/SihlerPSTDD24,
|
|
75
|
+
author = {Florian Sihler and
|
|
76
|
+
Lukas Pietzschmann and
|
|
77
|
+
Raphael Straub and
|
|
78
|
+
Matthias Tichy and
|
|
79
|
+
Andor Diera and
|
|
80
|
+
Abdelhalim Hafedh Dahou},
|
|
81
|
+
editor = {Diomidis Spinellis and
|
|
82
|
+
Alberto Bacchelli and
|
|
83
|
+
Eleni Constantinou},
|
|
84
|
+
title = {On the Anatomy of Real-World {R} Code for Static Analysis},
|
|
85
|
+
booktitle = {21st {IEEE/ACM} International Conference on Mining Software Repositories,
|
|
86
|
+
{MSR} 2024, Lisbon, Portugal, April 15-16, 2024},
|
|
87
|
+
pages = {619--630},
|
|
88
|
+
publisher = {{ACM}},
|
|
89
|
+
year = {2024},
|
|
90
|
+
url = {https://doi.org/10.1145/3643991.3644911},
|
|
91
|
+
doi = {10.1145/3643991.3644911},
|
|
92
|
+
timestamp = {Sun, 19 Jan 2025 13:31:27 +0100},
|
|
93
|
+
biburl = {https://dblp.org/rec/conf/msr/SihlerPSTDD24.bib},
|
|
94
|
+
bibsource = {dblp computer science bibliography, https://dblp.org}
|
|
95
|
+
}`
|
|
96
|
+
}
|
|
97
|
+
];
|
|
98
|
+
const OtherWorksUsingFlowr = [
|
|
99
|
+
{ name: 'Computational Reproducibility of R Code Supplements on OSF', doi: 'https://doi.org/10.36190/2025.49' },
|
|
100
|
+
{ name: 'Multi-View Structural Graph Summaries', doi: 'https://doi.org/10.1109/WI-IAT62293.2024.00037' }
|
|
101
|
+
];
|
|
102
|
+
function printPublications() {
|
|
103
|
+
return PublicationsMain.map(pub => {
|
|
104
|
+
return `
|
|
105
|
+
* [${pub.header}](${pub.doi})
|
|
106
|
+
${pub.description}
|
|
107
|
+
<details><summary>BibTeX</summary>
|
|
108
|
+
|
|
109
|
+
${(0, doc_general_1.prefixLines)((0, doc_code_1.codeBlock)('bibtex', pub.bibtex), ' ')}
|
|
110
|
+
|
|
111
|
+
</details>
|
|
112
|
+
`.trim();
|
|
113
|
+
}).join('\n\n') + '\n\n Works using flowR include:\n' +
|
|
114
|
+
(0, strings_1.joinWithLast)(OtherWorksUsingFlowr.map(pub => `[${pub.name}](${pub.doi})`)) + '.\n';
|
|
115
|
+
}
|
|
18
116
|
async function getText(shell) {
|
|
19
117
|
const dateOptions = { year: 'numeric', month: 'short', day: 'numeric' };
|
|
20
118
|
return `
|
|
@@ -155,6 +253,13 @@ If you want to use the same commands:
|
|
|
155
253
|
For more details on how to use _flowR_ please refer to the [wiki pages](${doc_files_1.FlowrGithubBaseRef}/flowr/wiki),
|
|
156
254
|
as well as the deployed [code documentation](https://flowr-analysis.github.io/flowr/doc/).
|
|
157
255
|
|
|
256
|
+
## 📃 Publications on flowR
|
|
257
|
+
|
|
258
|
+
If you are interested in the theoretical background of _flowR_,
|
|
259
|
+
please check out the following publications (if you find that a paper is missing here, please open [a new issue](${doc_issue_1.NewIssueUrl})):
|
|
260
|
+
|
|
261
|
+
${printPublications()}
|
|
262
|
+
|
|
158
263
|
## 🚀 Contributing
|
|
159
264
|
|
|
160
265
|
We welcome every contribution! Please check out the [developer onboarding](${doc_files_1.FlowrWikiBaseRef}/Onboarding) section in the wiki for all the information you will need.
|
|
@@ -167,7 +272,7 @@ We welcome every contribution! Please check out the [developer onboarding](${doc
|
|
|
167
272
|
|
|
168
273
|
----
|
|
169
274
|
|
|
170
|
-
*flowr* is actively developed by [Florian Sihler](https://eagleoutice.github.io/portfolio/) under the
|
|
275
|
+
*flowr* is actively developed by [Florian Sihler](https://eagleoutice.github.io/portfolio/) and (since October 1st 2025) [Oliver Gerstl](https://www.linkedin.com/in/oliver-gerstl) under the
|
|
171
276
|
[GPLv3 License](LICENSE).\\
|
|
172
277
|
It is partially supported by the German Research Foundation (DFG) under the grant [504226141](https://gepris.dfg.de/gepris/projekt/504226141) ("CodeInspector").
|
|
173
278
|
|
package/engines.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type FlowrConfigOptions, type KnownEngines } from './config';
|
|
2
2
|
/**
|
|
3
3
|
* Retrieve all requested engine instance.
|
|
4
4
|
* Please make sure that if this includes the R engine, that you properly shut it down again!
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type LintingRuleConfig, type LintingRuleNames } from './linter-rules';
|
|
2
2
|
import type { LintingResults } from './linter-format';
|
|
3
3
|
import type { DeepPartial } from 'ts-essentials';
|
|
4
|
-
import type {
|
|
5
|
-
|
|
4
|
+
import type { ReadonlyFlowrAnalysisProvider } from '../project/flowr-analyzer';
|
|
5
|
+
/**
|
|
6
|
+
* Executes a specific linting rule on the given analysis provider input.
|
|
7
|
+
*/
|
|
8
|
+
export declare function executeLintingRule<Name extends LintingRuleNames>(ruleName: Name, input: ReadonlyFlowrAnalysisProvider, lintingRuleConfig?: DeepPartial<LintingRuleConfig<Name>>): Promise<LintingResults<Name>>;
|
|
@@ -4,6 +4,9 @@ exports.executeLintingRule = executeLintingRule;
|
|
|
4
4
|
const linter_rules_1 = require("./linter-rules");
|
|
5
5
|
const flowr_search_executor_1 = require("../search/flowr-search-executor");
|
|
6
6
|
const objects_1 = require("../util/objects");
|
|
7
|
+
/**
|
|
8
|
+
* Executes a specific linting rule on the given analysis provider input.
|
|
9
|
+
*/
|
|
7
10
|
async function executeLintingRule(ruleName, input, lintingRuleConfig) {
|
|
8
11
|
try {
|
|
9
12
|
const rule = linter_rules_1.LintingRules[ruleName];
|
|
@@ -117,7 +117,15 @@ export interface LintingResultsSuccess<Name extends LintingRuleNames> {
|
|
|
117
117
|
readonly processTimeMs: number;
|
|
118
118
|
};
|
|
119
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Checks whether the given linting results represent an error.
|
|
122
|
+
* @see {@link isLintingResultsSuccess}
|
|
123
|
+
*/
|
|
120
124
|
export declare function isLintingResultsError<Name extends LintingRuleNames>(o: LintingResults<Name>): o is LintingResultsError;
|
|
125
|
+
/**
|
|
126
|
+
* Checks whether the given linting results represent a successful linting result.
|
|
127
|
+
* @see {@link isLintingResultsError}
|
|
128
|
+
*/
|
|
121
129
|
export declare function isLintingResultsSuccess<Name extends LintingRuleNames>(o: LintingResults<Name>): o is LintingResultsSuccess<Name>;
|
|
122
130
|
export type LintingResults<Name extends LintingRuleNames> = LintingResultsSuccess<Name> | LintingResultsError;
|
|
123
131
|
export declare enum LintingResultCertainty {
|
package/linter/linter-format.js
CHANGED
|
@@ -3,9 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.LintingPrettyPrintContext = exports.LintingRuleCertainty = exports.LintingResultCertainty = void 0;
|
|
4
4
|
exports.isLintingResultsError = isLintingResultsError;
|
|
5
5
|
exports.isLintingResultsSuccess = isLintingResultsSuccess;
|
|
6
|
+
/**
|
|
7
|
+
* Checks whether the given linting results represent an error.
|
|
8
|
+
* @see {@link isLintingResultsSuccess}
|
|
9
|
+
*/
|
|
6
10
|
function isLintingResultsError(o) {
|
|
7
11
|
return 'error' in o;
|
|
8
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* Checks whether the given linting results represent a successful linting result.
|
|
15
|
+
* @see {@link isLintingResultsError}
|
|
16
|
+
*/
|
|
9
17
|
function isLintingResultsSuccess(o) {
|
|
10
18
|
return 'results' in o;
|
|
11
19
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import {
|
|
3
|
-
import type
|
|
4
|
-
import type { SourceRange } from '../../util/range';
|
|
1
|
+
import { type LintingResult, LintingRuleCertainty } from '../linter-format';
|
|
2
|
+
import { type MergeableRecord } from '../../util/objects';
|
|
3
|
+
import { type SourceRange } from '../../util/range';
|
|
5
4
|
import { LintingRuleTag } from '../linter-tags';
|
|
6
5
|
import type { FunctionInfo } from '../../queries/catalog/dependencies-query/function-info/function-info';
|
|
7
6
|
import type { FlowrConfigOptions } from '../../config';
|