Skip to content

[Query] Config

github-actions[bot] edited this page Sep 3, 2026 · 1 revision

Generated from 'wiki-query.ts' on 2026-08-27, 20:04:16 UTC (v2.15.8), please do not edit directly.

Config Query [overview]

Returns the current configuration of flowR.
This query is requested with the type config.
Run in the REPL: :query @config [<path> | <glob>] | @config +<path>=<value> | @config +reset

This query provides access to the current configuration of the flowR instance. See the Interface wiki page for more information on what the configuration represents. Additionally, you can use this query to update the configuration of flowR on-the-fly (please do not rely on this mechanism it is mostly of interest for demonstrations).

[ { "type": "config",   "update": { "ignoreSourceCalls": true } } ]
Show Results

Results (prettified and summarized):

Query: config (0 ms)
   ╰ Updated configuration:
       - ignoreSourceCalls=true
   ╰ Specialized for project kind unknown (overrides linter.disabledRules)
All queries together required ≈30 ms (1ms accuracy, total 32 ms)

Show Detailed Results as Json

The analysis required 32.3 ms (including parsing and normalization and the query) within the generation environment.

In general, the JSON contains the Ids of the nodes in question as they are present in the normalized AST or the dataflow graph of flowR. Please consult the Interface wiki page for more information on how to get those.

As the code is pretty long, we inhibit pretty printing and syntax highlighting (JSON, hiding built-in):

{"config":{".meta":{"timing":0},"config":{"logLevel":"fatal","ignoreSourceCalls":true,"ignoreLoadCalls":false,"semantics":{"environment":{"overwriteBuiltIns":{"loadDefaults":true,"definitions":[]}}},"defaultPlugins":["file:description","versions:description","versions:sigdb","versions:library","versions:namespace","versions:renv","versions:rv","versions:uvr","versions:packrat","versions:session-info","loading-order:description","loading-order:implicit-sources","loading-order:rprofile","loading-order:included-files","meta:description","meta:rproject","meta:uvr","file-roles:vignette","file-roles:test","file-roles:inst","file:rmd","file:qmd","file:rnw","file:ipynb","file:namespace","file:news","file:rd-macros","file:rd","file:rd-index","file:rd-topics","file:rd-meta","file:datalist","file:sysdata","file:rda","file:license","file:virtualenv","file:rproject","file:uvr","file:rprofile"],"repl":{"quickStats":false,"dfProcessorHeat":false,"hints":true,"plugins":["flowr:default"],"autoUseFileProtocol":true,"queryStats":true,"showPlugins":false},"project":{"resolveUnknownPathsOnDisk":true,"failOnInaccessiblePath":false,"assumeImplicitEcho":true},"linter":{"disabledRules":["software-has-license","software-has-tests"]},"specializeConfig":{"package":{"project":{"assumeImplicitEcho":false},"solver":{"resolveSource":{"assumeFilesExist":true}}},"project":{"solver":{"resolveSource":{"assumeFilesExist":true}}},"shiny-app":{"project":{"implicitSources":["global.R","R/*.R","ui.R","server.R","app.R"]},"solver":{"resolveSource":{"assumeFilesExist":true}}},"script":{"inherit":"unknown"},"notebook":{"inherit":"unknown"},"unknown":{"linter":{"disabledRules":["software-has-license","software-has-tests"]}}},"engines":[],"defaultEngine":"tree-sitter","solver":{"variables":"alias","evalStrings":true,"trackEnvironments":true,"sigdb":{"enabled":true,"loadProjectDependencies":true,"eagerlyLoad":false,"eagerlyLoadExports":false,"blobCacheBudgetMb":16,"assumedRVersion":"auto","linkBaseR":false,"linkDescriptionDependencies":false,"linkBaseRCalls":false,"linkPackageCalls":false,"warmInBackground":false,"additionalPaths":[],"autoSync":false,"versionSelection":"newest","versionOverrides":{},"installedLibrary":{"enabled":false,"paths":[],"useEnvironment":true,"useProjectLibrary":true,"maxDepth":3,"packages":[]}},"versionManagement":{"linkedVersionGroups":[]},"resolveSource":{"dropPaths":"no","ignoreCapitalization":true,"inferWorkingDirectory":"active-script","searchPath":[],"repeatedSourceLimit":2,"assumeFilesExist":false},"transitiveSideEffectRounds":32,"instrument":{},"slicer":{"threshold":50,"autoExtend":false}},"abstractInterpretation":{"wideningThreshold":4,"followCalls":true,"dataFrame":{"maxColNames":50,"readLoadedData":{"readExternalFiles":true,"maxReadLines":1000000}}},"incremental":{"alwaysIncremental":false,"parsing":{"activated":false,"heuristics":{"activated":true,"mtime":true,"linesFrom":500,"bytesFrom":50000,"alwaysWithEdits":false,"minFiles":1}}},"gas":{"thresholds":{"memory":{"problematic":0.7,"critical":0.9},"timeMs":{"problematic":100000,"critical":120000}},"features":{}}},"specialization":{"kind":"unknown","overwrite":{"linter":{"disabledRules":["software-has-license","software-has-tests"]}}}},".meta":{"timing":30}}

Please note that, in the REPL, a special syntax starting with + (which should be autocompleted) can be used to update the configuration on the fly:

$ docker run -it --rm eagleoutice/flowr # or npm run flowr 
flowR repl v2.15.8, R v4.6.1 (r-shell engine)
R> :query @config +solver.slicer.threshold=10000
Output
Query: config (0 ms)
   ╰ Updated configuration:
       - solver.slicer.threshold=10000
   ╰ Specialized for project kind unknown (overrides linter.disabledRules)
All queries together required ≈1 ms (1ms accuracy, total 1 ms)

Set the slicing threshold to 10,000.

In the REPL you can also read a single option by its .-separated path, or several at once with a glob—* covers one path segment, ** any number. This only reads: setting a value still names exactly one key.

$ docker run -it --rm eagleoutice/flowr # or npm run flowr 
flowR repl v2.15.8, R v4.6.1 (r-shell engine)
R> :query @config **.enabled
Output
Query: config (0 ms)
   ╰ Config:
       - solver.sigdb.enabled (boolean): true
           Resolve library()/use() exports from a signature database (default true); when false no database is consulted.
       - solver.sigdb.installedLibrary.enabled (boolean): false
           Recover packages no signature database knows from their installed copy (default false).
   ╰ Specialized for project kind unknown (overrides linter.disabledRules)
All queries together required ≈0 ms (1ms accuracy, total 2 ms)

Read every enabled option, wherever it sits in the configuration.

R> :query @config solver.*
Output
Query: config (0 ms)
   ╰ Config:
       - solver.assumeAttachedPackages (array): undefined
           Packages to treat as attached without a `library()` call, so what the built-in configuration states about them applies to the analyzed code.
       - solver.evalStrings (boolean): true
           Should we include eval(parse(text="...")) calls in the dataflow graph?
       - solver.instrument (object)
           - dataflowExtractors: undefined (any)
       - solver.resolveSource (object)
           If lax source calls are active, flowR searches for sourced files much more freely, based on the configurations you give it. This option is only in effect if `ignoreSourceCalls` is set to false.
           - dropPaths:             "no" (string)
           - ignoreCapitalization:  true (boolean)
           - inferWorkingDirectory: "active-script" (string)
           - searchPath:            [] (array)
           - repeatedSourceLimit:   2 (number)
           - assumeFilesExist:      false (boolean)
       - solver.sigdb (object)
           Resolving library exports from a signature database.
           - enabled:                     true (boolean)
           - loadProjectDependencies:     true (boolean)
           - eagerlyLoad:                 false (boolean)
           - eagerlyLoadExports:          false (boolean)
           - blobCacheBudgetMb:           16 (number)
           - assumedRVersion:             "auto" (string)
           - linkBaseR:                   false (boolean)
           - linkDescriptionDependencies: false (boolean)
           - linkBaseRCalls:              false (boolean)
           - linkPackageCalls:            false (boolean)
           - warmInBackground:            false (boolean)
           - additionalPaths:             [] (array)
           - autoSync:                    false (boolean)
           - versionSelection:            "newest" (string)
           - versionOverrides:            {} (object)
           ... and 1 more, inspect them with solver.sigdb.<key>
       - solver.slicer (object)
           The configuration for the slicer.
           - threshold:  50 (number)
           - autoExtend: false (boolean)
       - solver.trackEnvironments (boolean): true
           Track user-created environments (new.env, assign/get/local with envir=, dollar-assign, attach). When false, all envir-style calls fall through conservatively.
       - solver.transitiveSideEffectRounds (number): 32
           How many rounds the transitive side-effect fixpoint may run before it is cut off (default 32); the propagation stops on its own as soon as a round adds nothing.
       - solver.variables (string): "alias"
           How to resolve variables and their values.
       - solver.versionManagement (object)
           Policies for reasoning about dependency versions.
           - linkedVersionGroups: [] (array)
   ╰ Specialized for project kind unknown (overrides linter.disabledRules)
All queries together required ≈0 ms (1ms accuracy, total 10 ms)

Read the direct children of solver (use solver.** for the whole subtree).

One of the most useful options to change on-the-fly are probably those under repl. For example, setting repl.quickStats enables quick statistics after each REPL command. Likewise, repl.dfProcessorHeat enables the dataflow processor heatmap after each REPL command.

Implementation Details

Responsible for the execution of the Config Query query is executeConfigQuery in ./src/queries/catalog/config-query/config-query-format.ts.

Clone this wiki locally