@eagleoutice/flowr 2.6.1 → 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 +131 -30
- package/abstract-interpretation/data-frame/absint-info.d.ts +1 -1
- package/abstract-interpretation/data-frame/absint-visitor.d.ts +2 -3
- package/abstract-interpretation/data-frame/absint-visitor.js +15 -10
- 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/repl/commands/repl-commands.d.ts +13 -0
- package/cli/repl/commands/repl-commands.js +13 -2
- package/cli/repl/commands/repl-execute.d.ts +4 -0
- package/cli/repl/commands/repl-execute.js +6 -2
- package/cli/repl/commands/repl-main.d.ts +15 -9
- package/cli/repl/commands/repl-parse.js +2 -2
- package/cli/repl/commands/repl-query.js +16 -5
- package/cli/repl/core.d.ts +24 -6
- package/cli/repl/core.js +28 -19
- 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 +6 -0
- 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 +3 -31
- 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-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/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/pipeline/create-pipeline.d.ts +1 -1
- package/core/steps/pipeline/default-pipelines.d.ts +47 -47
- 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 +4 -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 +11 -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 +0 -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 +12 -0
- package/dataflow/eval/values/r-value.js +12 -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 +1 -1
- 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 +6 -0
- 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 +5 -5
- 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 +4 -34
- package/documentation/print-readme.js +105 -0
- 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 +2 -9
- package/project/cache/flowr-analyzer-cache.js +0 -6
- package/project/context/flowr-analyzer-context.d.ts +3 -6
- package/project/context/flowr-analyzer-dependencies-context.d.ts +0 -1
- package/project/context/flowr-analyzer-files-context.d.ts +2 -4
- 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 +34 -25
- package/project/flowr-analyzer.js +10 -11
- 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 +3 -0
- 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 +5 -2
- 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 +3 -0
- 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 +3 -0
- package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-executor.js +3 -0
- package/queries/catalog/inspect-higher-order-query/inspect-higher-order-query-format.d.ts +2 -2
- 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 +85 -55
- package/queries/query.js +35 -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 +28 -7
- 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 +3 -0
- 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 +10 -1
- package/util/r-value.js +21 -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 +12 -3
- package/util/version.js +12 -3
- 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 -66
- 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
|
@@ -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.
|
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';
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ParentInformation } from '../../r-bridge/lang-4.x/ast/model/processing/decorate';
|
|
2
2
|
import type { FlowrSearchElements } from '../../search/flowr-search';
|
|
3
3
|
import { type MergeableRecord } from '../../util/objects';
|
|
4
4
|
import { type SourceRange } from '../../util/range';
|
|
5
|
-
import type
|
|
6
|
-
import { LintingRuleCertainty } from '../linter-format';
|
|
5
|
+
import { type LintingResult, LintingRuleCertainty } from '../linter-format';
|
|
7
6
|
import { LintingRuleTag } from '../linter-tags';
|
|
8
7
|
export interface DataFrameAccessValidationResult extends LintingResult {
|
|
9
8
|
/** The type of the data frame access ("column" or "row") */
|
|
@@ -32,7 +31,7 @@ export interface DataFrameAccessValidationMetadata extends MergeableRecord {
|
|
|
32
31
|
export declare const DATA_FRAME_ACCESS_VALIDATION: {
|
|
33
32
|
readonly createSearch: () => import("../../search/flowr-search-builder").FlowrSearchBuilder<"all", ["with"], ParentInformation, Promise<FlowrSearchElements<ParentInformation, import("../../search/flowr-search").FlowrSearchElement<ParentInformation>[]>>>;
|
|
34
33
|
readonly processSearchResult: (elements: FlowrSearchElements<ParentInformation, import("../../search/flowr-search").FlowrSearchElement<ParentInformation>[]>, config: DataFrameAccessValidationConfig, data: {
|
|
35
|
-
normalize: NormalizedAst;
|
|
34
|
+
normalize: import("../../r-bridge/lang-4.x/ast/model/processing/decorate").NormalizedAst;
|
|
36
35
|
dataflow: import("../../dataflow/info").DataflowInformation;
|
|
37
36
|
cfg: import("../../control-flow/control-flow-graph").ControlFlowInformation;
|
|
38
37
|
config: import("../../config").FlowrConfigOptions;
|
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DATA_FRAME_ACCESS_VALIDATION = void 0;
|
|
4
4
|
const absint_info_1 = require("../../abstract-interpretation/data-frame/absint-info");
|
|
5
|
-
const domain_1 = require("../../abstract-interpretation/data-frame/domain");
|
|
6
5
|
const shape_inference_1 = require("../../abstract-interpretation/data-frame/shape-inference");
|
|
6
|
+
const satisfiable_domain_1 = require("../../abstract-interpretation/domains/satisfiable-domain");
|
|
7
7
|
const config_1 = require("../../config");
|
|
8
8
|
const extract_cfg_1 = require("../../control-flow/extract-cfg");
|
|
9
9
|
const type_1 = require("../../r-bridge/lang-4.x/ast/model/type");
|
|
10
10
|
const flowr_search_builder_1 = require("../../search/flowr-search-builder");
|
|
11
11
|
const search_enrichers_1 = require("../../search/search-executor/search-enrichers");
|
|
12
|
+
const logic_1 = require("../../util/logic");
|
|
12
13
|
const dfg_1 = require("../../util/mermaid/dfg");
|
|
13
14
|
const range_1 = require("../../util/range");
|
|
14
15
|
const linter_format_1 = require("../linter-format");
|
|
@@ -24,7 +25,7 @@ exports.DATA_FRAME_ACCESS_VALIDATION = {
|
|
|
24
25
|
});
|
|
25
26
|
const cfg = (0, extract_cfg_1.extractCfg)(data.normalize, flowrConfig, data.dataflow.graph);
|
|
26
27
|
(0, shape_inference_1.inferDataFrameShapes)(cfg, data.dataflow.graph, data.normalize, flowrConfig);
|
|
27
|
-
const accessOperations = getAccessOperations(elements
|
|
28
|
+
const accessOperations = getAccessOperations(elements);
|
|
28
29
|
const accesses = [];
|
|
29
30
|
for (const [nodeId, operations] of accessOperations) {
|
|
30
31
|
const access = { nodeId };
|
|
@@ -84,12 +85,9 @@ exports.DATA_FRAME_ACCESS_VALIDATION = {
|
|
|
84
85
|
defaultConfig: { readLoadedData: false }
|
|
85
86
|
}
|
|
86
87
|
};
|
|
87
|
-
function getAccessOperations(elements
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
return normalize.idMap.get(id);
|
|
91
|
-
}).filter(n => n !== undefined);
|
|
92
|
-
return new Map(nodes
|
|
88
|
+
function getAccessOperations(elements) {
|
|
89
|
+
return new Map(elements.getElements()
|
|
90
|
+
.map(element => element.node)
|
|
93
91
|
.filter(absint_info_1.hasDataFrameExpressionInfo)
|
|
94
92
|
.map(node => [node.info.id, node.info.dataFrame.operations
|
|
95
93
|
.filter(({ operation }) => operation === 'accessCols' || operation === 'accessRows')
|
|
@@ -101,15 +99,15 @@ function findInvalidDataFrameAccesses({ operandShape, accessedCols, accessedRows
|
|
|
101
99
|
const invalidAccesses = [];
|
|
102
100
|
if (operandShape !== undefined) {
|
|
103
101
|
for (const row of accessedRows ?? []) {
|
|
104
|
-
if (
|
|
102
|
+
if (operandShape.rows.satisfies(row, satisfiable_domain_1.NumericalComparator.LessOrEqual) === logic_1.Ternary.Never) {
|
|
105
103
|
invalidAccesses.push({ type: 'row', accessed: row });
|
|
106
104
|
}
|
|
107
105
|
}
|
|
108
106
|
for (const col of accessedCols ?? []) {
|
|
109
|
-
if (typeof col === 'string' &&
|
|
107
|
+
if (typeof col === 'string' && operandShape.colnames.satisfies([col], satisfiable_domain_1.SetComparator.SubsetOrEqual) === logic_1.Ternary.Never) {
|
|
110
108
|
invalidAccesses.push({ type: 'column', accessed: col });
|
|
111
109
|
}
|
|
112
|
-
else if (typeof col === 'number' &&
|
|
110
|
+
else if (typeof col === 'number' && operandShape.cols.satisfies(col, satisfiable_domain_1.NumericalComparator.LessOrEqual) === logic_1.Ternary.Never) {
|
|
113
111
|
invalidAccesses.push({ type: 'column', accessed: col });
|
|
114
112
|
}
|
|
115
113
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { LintingResultCertainty, type LintingResult, LintingRuleCertainty } from '../linter-format';
|
|
2
|
-
import type
|
|
2
|
+
import { type SourceRange } from '../../util/range';
|
|
3
3
|
import type { MergeableRecord } from '../../util/objects';
|
|
4
4
|
import { LintingRuleTag } from '../linter-tags';
|
|
5
5
|
import { type CfgSimplificationPassName } from '../../control-flow/cfg-simplification';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { LintingRuleCertainty } from '../linter-format';
|
|
2
2
|
import { LintingRuleTag } from '../linter-tags';
|
|
3
|
-
import type
|
|
3
|
+
import { type FunctionsMetadata, type FunctionsResult, type FunctionsToDetectConfig } from './function-finder-util';
|
|
4
4
|
export declare const DEPRECATED_FUNCTIONS: {
|
|
5
5
|
readonly createSearch: (config: FunctionsToDetectConfig) => import("../../search/flowr-search-builder").FlowrSearchBuilder<"all", ["with", "filter"], import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation, Promise<import("../../search/flowr-search").FlowrSearchElements<import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation, [] | import("../../search/flowr-search").FlowrSearchElement<import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation>[]>>>;
|
|
6
6
|
readonly processSearchResult: <T extends import("../../search/flowr-search").FlowrSearchElement<import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation>[]>(elements: import("../../search/flowr-search").FlowrSearchElements<import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation, T>, _config: FunctionsToDetectConfig, _data: {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { LintingRuleCertainty } from '../linter-format';
|
|
1
|
+
import { type LintingResult, LintingRuleCertainty } from '../linter-format';
|
|
3
2
|
import type { MergeableRecord } from '../../util/objects';
|
|
4
3
|
import type { SourceRange } from '../../util/range';
|
|
5
4
|
import type { FunctionInfo } from '../../queries/catalog/dependencies-query/function-info/function-info';
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { SourceRange } from '../../util/range';
|
|
2
2
|
import type { Identifier } from '../../dataflow/environments/identifier';
|
|
3
|
-
import type
|
|
4
|
-
import { LintingResultCertainty } from '../linter-format';
|
|
3
|
+
import { type LintingResult, LintingResultCertainty } from '../linter-format';
|
|
5
4
|
import type { FlowrSearchElement, FlowrSearchElements } from '../../search/flowr-search';
|
|
6
5
|
import type { NormalizedAst, ParentInformation } from '../../r-bridge/lang-4.x/ast/model/processing/decorate';
|
|
7
6
|
import type { MergeableRecord } from '../../util/objects';
|
|
@@ -2,8 +2,7 @@ import type { DataflowGraph } from '../../dataflow/graph/graph';
|
|
|
2
2
|
import type { NodeId } from '../../r-bridge/lang-4.x/ast/model/processing/node-id';
|
|
3
3
|
import type { MergeableRecord } from '../../util/objects';
|
|
4
4
|
import type { SourceRange } from '../../util/range';
|
|
5
|
-
import type
|
|
6
|
-
import { LintingResultCertainty, LintingRuleCertainty } from '../linter-format';
|
|
5
|
+
import { type LintingResult, type LintQuickFixReplacement, LintingResultCertainty, LintingRuleCertainty } from '../linter-format';
|
|
7
6
|
import { LintingRuleTag } from '../linter-tags';
|
|
8
7
|
export declare enum CasingConvention {
|
|
9
8
|
CamelCase = "camelCase",
|
|
@@ -34,11 +33,23 @@ export interface NamingConventionMetadata extends MergeableRecord {
|
|
|
34
33
|
/** number of symbols breaking the casing convetion */
|
|
35
34
|
numBreak: number;
|
|
36
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Attempts to detect the casing convention used in the given identifier.
|
|
38
|
+
*/
|
|
37
39
|
export declare function detectCasing(identifier: string): CasingConvention;
|
|
40
|
+
/**
|
|
41
|
+
* Determines the most used casing convention in the given list of symbols.
|
|
42
|
+
*/
|
|
38
43
|
export declare function getMostUsedCasing(symbols: {
|
|
39
44
|
detectedCasing: CasingConvention;
|
|
40
45
|
}[]): CasingConvention;
|
|
46
|
+
/**
|
|
47
|
+
* Attempts to fix the casing of the given identifier to match the provided convention.
|
|
48
|
+
*/
|
|
41
49
|
export declare function fixCasing(identifier: string, convention: CasingConvention): string | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* Creates quick fixes for renaming all references to the given node to match the provided replacement.
|
|
52
|
+
*/
|
|
42
53
|
export declare function createNamingConventionQuickFixes(graph: DataflowGraph, nodeId: NodeId, replacement: string, conv: CasingConvention): LintQuickFixReplacement[] | undefined;
|
|
43
54
|
export declare const NAMING_CONVENTION: {
|
|
44
55
|
readonly createSearch: (_config: NamingConventionConfig) => import("../../search/flowr-search-builder").FlowrSearchBuilder<"all", ["filter"], import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation, Promise<import("../../search/flowr-search").FlowrSearchElements<import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation, [] | import("../../search/flowr-search").FlowrSearchElement<import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation>[]>>>;
|
|
@@ -25,6 +25,9 @@ var CasingConvention;
|
|
|
25
25
|
function containsAlpha(s) {
|
|
26
26
|
return /[A-Za-z]/.test(s);
|
|
27
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Attempts to detect the casing convention used in the given identifier.
|
|
30
|
+
*/
|
|
28
31
|
function detectCasing(identifier) {
|
|
29
32
|
if (identifier.trim() === '' || !containsAlpha(identifier)) {
|
|
30
33
|
return CasingConvention.Unknown;
|
|
@@ -68,6 +71,9 @@ function detectCasing(identifier) {
|
|
|
68
71
|
}
|
|
69
72
|
return CasingConvention.Unknown;
|
|
70
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Determines the most used casing convention in the given list of symbols.
|
|
76
|
+
*/
|
|
71
77
|
function getMostUsedCasing(symbols) {
|
|
72
78
|
if (symbols.length === 0) {
|
|
73
79
|
return CasingConvention.Unknown;
|
|
@@ -77,9 +83,12 @@ function getMostUsedCasing(symbols) {
|
|
|
77
83
|
const o = map.get(symbol.detectedCasing) ?? 0;
|
|
78
84
|
map.set(symbol.detectedCasing, o + 1);
|
|
79
85
|
}
|
|
80
|
-
// Return element with most occurances
|
|
86
|
+
// Return element with most occurances
|
|
81
87
|
return [...map].reduce((p, c) => p[1] > c[1] ? p : c)[0];
|
|
82
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Attempts to fix the casing of the given identifier to match the provided convention.
|
|
91
|
+
*/
|
|
83
92
|
function fixCasing(identifier, convention) {
|
|
84
93
|
if (!containsAlpha(identifier)) {
|
|
85
94
|
return undefined;
|
|
@@ -110,6 +119,9 @@ function fixCasing(identifier, convention) {
|
|
|
110
119
|
(0, assert_1.assertUnreachable)(convention);
|
|
111
120
|
}
|
|
112
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Creates quick fixes for renaming all references to the given node to match the provided replacement.
|
|
124
|
+
*/
|
|
113
125
|
function createNamingConventionQuickFixes(graph, nodeId, replacement, conv) {
|
|
114
126
|
const refs = (0, dfg_get_symbol_refs_1.getAllRefsToSymbol)(graph, nodeId);
|
|
115
127
|
const idMap = graph.idMap;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { LintingRuleCertainty } from '../linter-format';
|
|
2
|
-
import type
|
|
2
|
+
import { type FunctionsMetadata, type FunctionsResult } from './function-finder-util';
|
|
3
3
|
import { LintingRuleTag } from '../linter-tags';
|
|
4
4
|
import type { MergeableRecord } from '../../util/objects';
|
|
5
5
|
export interface NetworkFunctionsConfig extends MergeableRecord {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { LintingResultCertainty, LintingRuleCertainty } from '../linter-format';
|
|
1
|
+
import { type LintingResult, LintingResultCertainty, LintingRuleCertainty } from '../linter-format';
|
|
3
2
|
import type { SourceRange } from '../../util/range';
|
|
4
3
|
import type { MergeableRecord } from '../../util/objects';
|
|
5
4
|
import type { Identifier } from '../../dataflow/environments/identifier';
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { LintingRuleCertainty } from '../linter-format';
|
|
1
|
+
import { type LintingResult, LintingRuleCertainty } from '../linter-format';
|
|
3
2
|
import type { MergeableRecord } from '../../util/objects';
|
|
4
|
-
import type
|
|
3
|
+
import { type SourceRange } from '../../util/range';
|
|
5
4
|
import { LintingRuleTag } from '../linter-tags';
|
|
6
5
|
import type { NormalizedAst, ParentInformation } from '../../r-bridge/lang-4.x/ast/model/processing/decorate';
|
|
7
6
|
export interface UnusedDefinitionResult extends LintingResult {
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { BuiltInMappingName } from '../../dataflow/environments/built-in';
|
|
2
2
|
import type { MergeableRecord } from '../../util/objects';
|
|
3
3
|
import type { SourceRange } from '../../util/range';
|
|
4
|
-
import type
|
|
5
|
-
import { LintingResultCertainty, LintingRuleCertainty } from '../linter-format';
|
|
4
|
+
import { type LintingResult, LintingResultCertainty, LintingRuleCertainty } from '../linter-format';
|
|
6
5
|
import { LintingRuleTag } from '../linter-tags';
|
|
7
6
|
export interface UselessLoopResult extends LintingResult {
|
|
8
7
|
name: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eagleoutice/flowr",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.2",
|
|
4
4
|
"description": "Static Dataflow Analyzer and Program Slicer for the R Programming Language",
|
|
5
5
|
"types": "dist/src/index.d.ts",
|
|
6
6
|
"repository": {
|
|
@@ -178,7 +178,7 @@
|
|
|
178
178
|
"devDependencies": {
|
|
179
179
|
"@commitlint/cli": "^19.7.1",
|
|
180
180
|
"@commitlint/config-angular": "^19.7.1",
|
|
181
|
-
"@eagleoutice/eslint-config-flowr": "^1.0.
|
|
181
|
+
"@eagleoutice/eslint-config-flowr": "^1.0.27",
|
|
182
182
|
"@eslint/eslintrc": "^3.3.1",
|
|
183
183
|
"@eslint/js": "^9.34.0",
|
|
184
184
|
"@j-ulrich/release-it-regex-bumper": "^5.3.0",
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { KnownParser } from '../../r-bridge/parser';
|
|
2
|
-
import type
|
|
3
|
-
import {
|
|
4
|
-
import type { DEFAULT_DATAFLOW_PIPELINE, TREE_SITTER_DATAFLOW_PIPELINE } from '../../core/steps/pipeline/default-pipelines';
|
|
2
|
+
import { type CacheInvalidationEvent, FlowrCache } from './flowr-cache';
|
|
3
|
+
import { type DEFAULT_DATAFLOW_PIPELINE, type TREE_SITTER_DATAFLOW_PIPELINE } from '../../core/steps/pipeline/default-pipelines';
|
|
5
4
|
import type { FlowrConfigOptions } from '../../config';
|
|
6
5
|
import type { RParseRequests } from '../../r-bridge/retriever';
|
|
7
6
|
import type { IdGenerator } from '../../r-bridge/lang-4.x/ast/model/processing/decorate';
|
|
@@ -37,14 +36,12 @@ export declare class FlowrAnalyzerCache<Parser extends KnownParser> extends Flow
|
|
|
37
36
|
/**
|
|
38
37
|
* Get the parse output for the request, parsing if necessary.
|
|
39
38
|
* @param force - Do not use the cache, instead force a new parse.
|
|
40
|
-
*
|
|
41
39
|
* @see {@link FlowrAnalyzerCache#peekParse} - to get the parse output if already available without triggering a new parse.
|
|
42
40
|
*/
|
|
43
41
|
parse(force?: boolean): Promise<NonNullable<AnalyzerCacheType<Parser>['parse']>>;
|
|
44
42
|
/**
|
|
45
43
|
* Get the parse output for the request if already available, otherwise return `undefined`.
|
|
46
44
|
* This will not trigger a new parse.
|
|
47
|
-
*
|
|
48
45
|
* @see {@link FlowrAnalyzerCache#parse} - to get the parse output, parsing if necessary.
|
|
49
46
|
*/
|
|
50
47
|
peekParse(): NonNullable<AnalyzerCacheType<Parser>['parse']> | undefined;
|
|
@@ -57,21 +54,18 @@ export declare class FlowrAnalyzerCache<Parser extends KnownParser> extends Flow
|
|
|
57
54
|
/**
|
|
58
55
|
* Get the normalized abstract syntax tree for the request if already available, otherwise return `undefined`.
|
|
59
56
|
* This will not trigger a new normalization.
|
|
60
|
-
*
|
|
61
57
|
* @see {@link FlowrAnalyzerCache#normalize} - to get the normalized AST, normalizing if necessary.
|
|
62
58
|
*/
|
|
63
59
|
peekNormalize(): NonNullable<AnalyzerCacheType<Parser>['normalize']> | undefined;
|
|
64
60
|
/**
|
|
65
61
|
* Get the dataflow graph for the request, computing if necessary.
|
|
66
62
|
* @param force - Do not use the cache, instead force new analyses.
|
|
67
|
-
*
|
|
68
63
|
* @see {@link FlowrAnalyzerCache#peekDataflow} - to get the dataflow graph if already available without triggering a new computation.
|
|
69
64
|
*/
|
|
70
65
|
dataflow(force?: boolean): Promise<NonNullable<AnalyzerCacheType<Parser>['dataflow']>>;
|
|
71
66
|
/**
|
|
72
67
|
* Get the dataflow graph for the request if already available, otherwise return `undefined`.
|
|
73
68
|
* This will not trigger a new computation.
|
|
74
|
-
*
|
|
75
69
|
* @see {@link FlowrAnalyzerCache#dataflow} - to get the dataflow graph, computing if necessary.
|
|
76
70
|
*/
|
|
77
71
|
peekDataflow(): NonNullable<AnalyzerCacheType<Parser>['dataflow']> | undefined;
|
|
@@ -86,7 +80,6 @@ export declare class FlowrAnalyzerCache<Parser extends KnownParser> extends Flow
|
|
|
86
80
|
* Get the control flow graph (CFG) for the request if already available, otherwise return `undefined`.
|
|
87
81
|
* @param kind - The kind of CFG that is requested.
|
|
88
82
|
* @param simplifications - Simplification passes to be applied to the CFG.
|
|
89
|
-
*
|
|
90
83
|
* @see {@link FlowrAnalyzerCache#controlflow} - to get the control flow graph, computing if necessary.
|
|
91
84
|
*/
|
|
92
85
|
peekControlflow(kind: CfgKind, simplifications: readonly CfgSimplificationPassName[] | undefined): ControlFlowInformation | undefined;
|
|
@@ -65,7 +65,6 @@ class FlowrAnalyzerCache extends flowr_cache_1.FlowrCache {
|
|
|
65
65
|
/**
|
|
66
66
|
* Get the parse output for the request, parsing if necessary.
|
|
67
67
|
* @param force - Do not use the cache, instead force a new parse.
|
|
68
|
-
*
|
|
69
68
|
* @see {@link FlowrAnalyzerCache#peekParse} - to get the parse output if already available without triggering a new parse.
|
|
70
69
|
*/
|
|
71
70
|
async parse(force) {
|
|
@@ -75,7 +74,6 @@ class FlowrAnalyzerCache extends flowr_cache_1.FlowrCache {
|
|
|
75
74
|
/**
|
|
76
75
|
* Get the parse output for the request if already available, otherwise return `undefined`.
|
|
77
76
|
* This will not trigger a new parse.
|
|
78
|
-
*
|
|
79
77
|
* @see {@link FlowrAnalyzerCache#parse} - to get the parse output, parsing if necessary.
|
|
80
78
|
*/
|
|
81
79
|
peekParse() {
|
|
@@ -93,7 +91,6 @@ class FlowrAnalyzerCache extends flowr_cache_1.FlowrCache {
|
|
|
93
91
|
/**
|
|
94
92
|
* Get the normalized abstract syntax tree for the request if already available, otherwise return `undefined`.
|
|
95
93
|
* This will not trigger a new normalization.
|
|
96
|
-
*
|
|
97
94
|
* @see {@link FlowrAnalyzerCache#normalize} - to get the normalized AST, normalizing if necessary.
|
|
98
95
|
*/
|
|
99
96
|
peekNormalize() {
|
|
@@ -102,7 +99,6 @@ class FlowrAnalyzerCache extends flowr_cache_1.FlowrCache {
|
|
|
102
99
|
/**
|
|
103
100
|
* Get the dataflow graph for the request, computing if necessary.
|
|
104
101
|
* @param force - Do not use the cache, instead force new analyses.
|
|
105
|
-
*
|
|
106
102
|
* @see {@link FlowrAnalyzerCache#peekDataflow} - to get the dataflow graph if already available without triggering a new computation.
|
|
107
103
|
*/
|
|
108
104
|
async dataflow(force) {
|
|
@@ -112,7 +108,6 @@ class FlowrAnalyzerCache extends flowr_cache_1.FlowrCache {
|
|
|
112
108
|
/**
|
|
113
109
|
* Get the dataflow graph for the request if already available, otherwise return `undefined`.
|
|
114
110
|
* This will not trigger a new computation.
|
|
115
|
-
*
|
|
116
111
|
* @see {@link FlowrAnalyzerCache#dataflow} - to get the dataflow graph, computing if necessary.
|
|
117
112
|
*/
|
|
118
113
|
peekDataflow() {
|
|
@@ -153,7 +148,6 @@ class FlowrAnalyzerCache extends flowr_cache_1.FlowrCache {
|
|
|
153
148
|
* Get the control flow graph (CFG) for the request if already available, otherwise return `undefined`.
|
|
154
149
|
* @param kind - The kind of CFG that is requested.
|
|
155
150
|
* @param simplifications - Simplification passes to be applied to the CFG.
|
|
156
|
-
*
|
|
157
151
|
* @see {@link FlowrAnalyzerCache#controlflow} - to get the control flow graph, computing if necessary.
|
|
158
152
|
*/
|
|
159
153
|
peekControlflow(kind, simplifications) {
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import {
|
|
3
|
-
import type
|
|
4
|
-
import { FlowrAnalyzerDependenciesContext } from './flowr-analyzer-dependencies-context';
|
|
5
|
-
import type { FlowrAnalyzerPlugin } from '../plugins/flowr-analyzer-plugin';
|
|
6
|
-
import { PluginType } from '../plugins/flowr-analyzer-plugin';
|
|
1
|
+
import { type RAnalysisRequest, type ReadOnlyFlowrAnalyzerFilesContext, FlowrAnalyzerFilesContext } from './flowr-analyzer-files-context';
|
|
2
|
+
import { type ReadOnlyFlowrAnalyzerDependenciesContext, FlowrAnalyzerDependenciesContext } from './flowr-analyzer-dependencies-context';
|
|
3
|
+
import { type FlowrAnalyzerPlugin, PluginType } from '../plugins/flowr-analyzer-plugin';
|
|
7
4
|
/**
|
|
8
5
|
* This is a read-only interface to the {@link FlowrAnalyzerContext}.
|
|
9
6
|
* It prevents you from modifying the context, but allows you to inspect it (which is probably what you want when using the {@link FlowrAnalyzer}).
|
|
@@ -16,7 +16,6 @@ export interface ReadOnlyFlowrAnalyzerDependenciesContext {
|
|
|
16
16
|
* Get the dependency with the given name, if it exists.
|
|
17
17
|
*
|
|
18
18
|
* If the static dependencies have not yet been loaded, this may trigger a resolution step.
|
|
19
|
-
*
|
|
20
19
|
* @param name - The name of the dependency to get.
|
|
21
20
|
* @returns The dependency with the given name, or undefined if it does not exist.
|
|
22
21
|
*/
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { AbstractFlowrAnalyzerContext } from './abstract-flowr-analyzer-context';
|
|
2
|
-
import type
|
|
2
|
+
import { type RParseRequest, type RParseRequestFromFile } from '../../r-bridge/retriever';
|
|
3
3
|
import type { FlowrAnalyzerLoadingOrderContext, ReadOnlyFlowrAnalyzerLoadingOrderContext } from './flowr-analyzer-loading-order-context';
|
|
4
4
|
import { FlowrAnalyzerProjectDiscoveryPlugin } from '../plugins/project-discovery/flowr-analyzer-project-discovery-plugin';
|
|
5
5
|
import { FlowrAnalyzerFilePlugin } from '../plugins/file-plugins/flowr-analyzer-file-plugin';
|
|
6
|
-
import type
|
|
7
|
-
import { SpecialFileRole } from './flowr-file';
|
|
6
|
+
import { type FlowrFile, type FlowrFileProvider, SpecialFileRole } from './flowr-file';
|
|
8
7
|
import type { FlowrDescriptionFile } from '../plugins/file-plugins/flowr-description-file';
|
|
9
8
|
/**
|
|
10
9
|
* This is a request to process a folder as a project, which will be expanded by the registered {@link FlowrAnalyzerProjectDiscoveryPlugin}s.
|
|
@@ -39,7 +38,6 @@ export interface ReadOnlyFlowrAnalyzerFilesContext {
|
|
|
39
38
|
readonly loadingOrder: ReadOnlyFlowrAnalyzerLoadingOrderContext;
|
|
40
39
|
/**
|
|
41
40
|
* Get all requests that have been added to this context.
|
|
42
|
-
*
|
|
43
41
|
* @example If you want to obtain all description files, use
|
|
44
42
|
* ```ts
|
|
45
43
|
* getFilesByRole(SpecialFileRole.Description)
|
|
@@ -28,7 +28,6 @@ export declare enum SpecialFileRole {
|
|
|
28
28
|
*
|
|
29
29
|
* See {@link FlowrFile} for a basic single-cache implementation and {@link FlowrTextFile} for a text-file specific implementation.
|
|
30
30
|
* If you want to pass in inline text files, see {@link FlowrInlineTextFile}.
|
|
31
|
-
*
|
|
32
31
|
* @typeParam Content - The type of the content returned by the `content()` method.
|
|
33
32
|
*/
|
|
34
33
|
export interface FlowrFileProvider<Content = unknown> {
|